Как задать подсветку строк таблицы значений с помощью условного оформления?

Подробности:

У внешней обработки имеется табличная часть "ТестоваяТЧ" с реквизитами: "Название товара" и "Срок годности".

На управляемую форму вынесена эта таблица, т.е. у таблицы на форме путь к данным: Объект.ТестоваяТЧ

Что я сделал:
В обработчике формы ПриСозданииНаСервере
разместил следующий код:

УсловноеОформление.Элементы.Очистить(); // на всякий случай, чтобы очистить любой другой будущий отбор

```1c
    ИмяПоля = "ТестоваяТЧСрокГодности"; // отбор будет происходить по этому полю. У меня есть подозрение, что я некорректно как раз задаю путь к данным поля

    НовыйЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); // добавляем новый элемент в коллекцию элементов условного оформления
    ОтборКД = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); // добавляем новый отбор
    ОтборКД.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);
    ОтборКД.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ОтборКД.ПравоеЗначение = ТекущаяДата();
    ОтборКД.Использование = Истина;

    НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Розовый);
    НовыйЭлементУсловногоОформления.Использование = Истина;
```

В результате подсветка не работает.
В чем может быть дело?
---
Спасибо за советы.

Итоговый код из (5) с учетом комментария (9)

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    ЭлементОформленияГолубой = УсловноеОформление.Элементы.Добавить();
    ЭлементОформленияГолубой.Использование = Истина;
    ЭлементОформленияГолубой.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Голубой);

    ЭлементУсловияГолубой = ЭлементОформленияГолубой.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловияГолубой.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТестоваяТЧ.СрокГодности");
    ЭлементУсловияГолубой.ПравоеЗначение = ТекущаяДата();
    ЭлементУсловияГолубой.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ЭлементУсловияГолубой.Использование = Истина;

    ОформляемоеПоле = ЭлементОформленияГолубой.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТестоваяТЧ");

    КонецПроцедуры
```

Итоговая обработка во вложении
---
зачем код, если УО можно настроить прямо в форме парой кликов.
где-то ошибка в коде или НовыйЭлементУсловногоОформления никак не связан с УО формы - просто переменная в памяти.

Срок годности точно тип "дата", может там нормализованное число хранят и вы пытаетесь сравнить число С датой, на что УО плюет с высокой горы.
---
(3) да, можно попробовать сделать это на форме.

Но случай такой: дата с которой будут сравнивать срок годности может меняться динамически.

Нужно подсвечивать товар, до истечения срока годности которого осталось, например 4 месяца или полторы недели и.т.д. думаю суть ясна.

В коде это решается строкой:

```1c
    ЭлементУсловияГолубой.ПравоеЗначение = ДобавитьМесяц(НачалоДня(ТекущаяДата()), 4);
```

Как такого же результата добиться через интерфейс я не знаю.
---
вывести на форму реквизит с типом "Дата" и при его изменении изменять правое значение в уже установленном условном оформлении.
---
Добавить реквизит на форму. В коде присваивать ему нужное значение. В УО выбрать этот реквизит в правом значении отбора.
---
А зачем делать условное оформление программно? Попробуйте сделайте тоже самое в интерфейсе
---
ИмяПоля для левого значения задано неверно - должен быть путь до реквзита.
Раз он (реквизит) принадлежит объекту, то и путь должен быть "Объект.ТестоваяТЧ.СрокГодности".
Остальное, вроде, правильно.

А вот если нужно будет оформлять отдельную ячейку, а не всю строку, то нужно будет делать так:

```1c
    ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
    ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТестоваяТЧСрокГодности"); // имя элемента на форме
    ПолеОформления.Использование = Истина;
```
---
Вот рабочий код для вас

```1c
    МассивИменКолонокДляПодсветки = Новый Массив;
    Для каждого Стр из Элементы.ТестоваяТЧ.ПодчиненныеЭлементы Цикл
    МассивИменКолонокДляПодсветки.Добавить(Стр.Имя);
    КонецЦикла;

    ЭлементОформленияГолубой = УсловноеОформление.Элементы.Добавить();
    ЭлементОформленияГолубой.Использование = Истина;
    ЭлементОформленияГолубой.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Голубой);

    ЭлементУсловияГолубой = ЭлементОформленияГолубой.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловияГолубой.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТестоваяТЧ.СрокГодности");
    ЭлементУсловияГолубой.ПравоеЗначение = ТекущаяДата();
    ЭлементУсловияГолубой.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ЭлементУсловияГолубой.Использование = Истина;

    Для каждого ТекЭлемент из МассивИменКолонокДляПодсветки Цикл
    ОформляемоеПоле = ЭлементОформленияГолубой.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ТекЭлемент);
    КонецЦикла;
```
---
Если убрать указание всех полей, то применится ко всей строке же? Или я путаю?
---
Если просто вот так написать

```1c
    ЭлементОформленияГолубой = УсловноеОформление.Элементы.Добавить();
    ЭлементОформленияГолубой.Использование = Истина;
    ЭлементОформленияГолубой.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Голубой);

    ЭлементУсловияГолубой = ЭлементОформленияГолубой.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловияГолубой.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТестоваяТЧ.СрокГодности");
    ЭлементУсловияГолубой.ПравоеЗначение = ТекущаяДата();
    ЭлементУсловияГолубой.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ЭлементУсловияГолубой.Использование = Истина;
```

то не раскрасится вообще ничего.
---
да, точно, запамятовал, обычно использую для конкретных ячеек.
---
(8) Для динамических списков, если не указывать оформляемое поле, то раскрашивается вся строка. Для таблиц формы вместо перечисления всех колонок можно указать имя самой таблицы. И тогда также будет раскрашена вся строка.
---
Спасибо, буду знать)
---
Спасибо за советы.

Итоговый код из (5) с учетом комментария (9)

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    ЭлементОформленияГолубой = УсловноеОформление.Элементы.Добавить();
    ЭлементОформленияГолубой.Использование = Истина;
    ЭлементОформленияГолубой.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Голубой);

    ЭлементУсловияГолубой = ЭлементОформленияГолубой.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловияГолубой.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТестоваяТЧ.СрокГодности");
    ЭлементУсловияГолубой.ПравоеЗначение = ТекущаяДата();
    ЭлементУсловияГолубой.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ЭлементУсловияГолубой.Использование = Истина;

    ОформляемоеПоле = ЭлементОформленияГолубой.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТестоваяТЧ");

    КонецПроцедуры
```

Итоговая обработка во вложении
---
Добрый день. Скажите, пожалуйста, а данный код условному оформлению отрабатывает только в процедуре ПриСозданииНаСервере?
*Применила его в заполнение табличной части данными с учетом отбора, увы условное оформление не отработало, попробовала в процедуре ПриИзмененииНаСервере, тоже не отработало.
---
Кстати, а вот это условие когда-нибудь выполнится?

ОтборКД.ПравоеЗначение = ТекущаяДата();

Если СрокГодности с точностью до минуты? А если только дата без времени то как она сравнивается с датой которая со временем?
---
там вид сравнения с левым значением больше или равно
---
Пятница, проглядел, каюсь.
---
Добавлю условие: если условие выполняется то закрыть доступ к строке. Только просмотр сделать