Условное оформление строк табличной части программно

Вариант для управляемых форм. На форме объекта есть табличное поле «Товары». Нам нужно подсветить в нем новинки — то есть номенклатуру, созданную в последнюю неделю. Дата создания в виде доп. реквизита хранится в карточке номенклатуры.

Для решения задачи будем использовать 2 вспомогательных таблицы:

  • «УВ_Новинки» — сюда будем записывать подходящую номенклатуру.
  • «УВ_СписокПодсвеченных» — товары, для которых условное оформление уже установлено.
&НаСервере
Процедура УВ_ПодсветитьНовинки()
	
	// Обновим список новинок
	Если Объект.Товары.Количество() = УВ_Новинки.Количество() Тогда
		Возврат;
	КонецЕсли;
	
	Для Каждого ТекСтр Из Объект.Товары Цикл
		
		Если УВ_Новинки.НайтиПоЗначению(ТекСтр.Номенклатура) <> НеОпределено Тогда
			Продолжить;
		КонецЕсли;
		
		ДатаСоздания = ТекСтр.Номенклатура.УВ_ДатаСоздания;
		Если ЗначениеЗаполнено(ДатаСоздания) И ДатаСоздания > УВ_НеделяНазад Тогда
			УВ_Новинки.Добавить(ТекСтр.Номенклатура);	
		КонецЕсли;
		
	КонецЦикла;
	
	// Обновим список подсвеченных
	Для Каждого Оформление Из УсловноеОформление.Элементы Цикл
		
		ЭлементОтбора = Оформление.Отбор.Элементы[0];
		
		Если ТипЗнч(ЭлементОтбора) <> Тип("ЭлементОтбораКомпоновкиДанных") Тогда
			Продолжить;
		КонецЕсли;
				
		Если ТипЗнч(ЭлементОтбора.ПравоеЗначение) <> Тип("СправочникСсылка.Номенклатура") Тогда
			Продолжить;
		КонецЕсли;
		
		Если УВ_СписокПодсвеченных.НайтиПоЗначению(ЭлементОтбора.ПравоеЗначение) <> НеОпределено Тогда
			Продолжить;
		КонецЕсли;
		
		Если Оформление.Представление = "УВ_Новинки" Тогда
			УВ_СписокПодсвеченных.Добавить(ЭлементОтбора.ПравоеЗначение);
		КонецЕсли;
		
	КонецЦикла;

	// Обновим условное оформление
	Для Каждого Новинка Из УВ_Новинки Цикл
		
		Если УВ_СписокПодсвеченных.НайтиПоЗначению(Новинка.Значение) <> НеОпределено Тогда
			Продолжить;
		КонецЕсли;

	    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
	    ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
	    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары");
	    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура");
	    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	    ЭлементОтбора.ПравоеЗначение = Новинка.Значение;
	    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Розовый);
		ЭлементУсловногоОформления.Представление = "УВ_Новинки";
		
		УВ_СписокПодсвеченных.Добавить(Новинка.Значение);
		
	КонецЦикла;
	
КонецПроцедуры