Добрый день. Таблица формируется программно и выводится на форму
ЗначениеВРеквизитФормы(ТЗ,"ДанныеФайла");

Подскажите как выделить цветом строки по условию?

```1c
    Элемент = УсловноеОформление.Элементы.Добавить();

    ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
    ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ТаблицаДанныхФайла");

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

    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый);
```

Красит все
---
Все получилось. Все большое спасибо!
---
Возможно в качестве поля нужно указывать не всю таблицу, а конкретное поле. Самое простое для понимания как создать оформление программно - создать его вручную на форме, а потом в отладчике посмотреть состав.
---
Как развитие предложения (2), можно использовать обработку, которая по дизайну формы генерирует код. Где-то есть такая на ИС.
---
не слышал о такое, но тоже интересно
---
не подскажете, как после создания вручную посмотреть в отладчике?
---
что за обработка такая интересная?
---
https://infostart.ru/public/102078/
---
Создала таблицу на форме вручную, сделала вручную условное оформление, все получилось. Как посмотреть в отладчике код?
---
Где-нить в ПриСозданииНаСервере поставить точку останова. Но код, на самом деле, посмотреть не получится. Можно только увидеть элемент оформления и его св-ва.
---
Можно и код допилить. Элемент - так полагаю, это дин список? Должно быть как-то так:

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

Да, динамический. Может неправильно обращаюсь к левому значению?
---
И левое значение, и правое - заданы неверно. ЛевоеЗначение - объект типа ПолеКомпоновкиДанных. В вашем случае вроде как = Новый ПолеКомпоновкиДанных("Склад"). А ПравоеЗначение - это, собственно, само значение, по которому должно условно оформляться.
---
А оформляемые поля должны идти в конце? Новый ПолеКомпоновкиДанных("ТаблицаДанныхФайла.Склад") может так?
---
А, да:

```1c
    ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ИмяОформляемогоПоля")
```
---
похоже у меня проблема в обращении к таблицы на форме

```1c
    ЭлементУО = УсловноеОформление.Элементы.Добавить();
    ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый);
    ЭлементУсловия = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаДанныхФайла.склад");;
    ЭлементУсловия.ВидСравнения= ВидСравненияКомпоновкиДанных.НеРавно;
    ЭлементУсловия.ПравоеЗначение = "количество";
    ПолеЭлемента = ЭлементУО.Поля.Элементы.Добавить();
    ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ТаблицаДанныхФайла");
```
---
Код из поста (14) - на чем-то выдает ошибку?
---
Замечания:
ЭлементУО = Список.УсловноеОформление.Элементы.Добавить(); // Список - имя вашего реквизита типа ТаблицаЗначений. Если без Список писать, то вы будете обращаться к условному оформлению самой формы
ЭлементУсловия.ПравоеЗначение = "количество"; // Почему "Количество"? Это строковое значение поля такое что ли?
---
Да это значение в поле количество. Если по колонке Склад значение стоит количество то окрасить
На список ругается.
---
Так как ругается-то? Что пишет, на какую строку?
---
Переменная не определена (Список). у меня же нет никаких вручную добавленных элементов, реквизитов. Таблица полностью программно, вот и не могу понять
---
Судя по коду:

```1c
    ЗначениеВРеквизитФормы(ТЗ,"ДанныеФайла");
```

у вас это не Список, а ДанныеФайла. Замените Список на ДанныеФайла.
---
А вы точно полностью программно формируете таблицу? Может вы просто ее заполняете программно, а дизайн (колонки) уже в форме накликан?
---
нет точно форма пустая полностью
---
ЭлементУО = ЭтаФорма.УсловноеОформление.Элементы.Добавить(); но так всю форму красит
---
```1c
    //Добавим Таблицу на форму
    ТаблицаДанныхФайла = Элементы.Добавить("ТаблицаДанныхФайла", Тип("ТаблицаФормы"));
    ТаблицаДанныхФайла.ПутьКДанным = "ДанныеФайла";
    ТаблицаДанныхФайла.Отображение = ОтображениеТаблицы.Список;

    //Добавим колонки
    Для Каждого Колонка Из ТЗ.Колонки Цикл
    НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаДанныхФайла);
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ПутьКДанным = "ДанныеФайла." + Колонка.Имя;
    КонецЦикла;
    //Потом строки...
    .....
    Пока Выборка1.Следующий() Цикл
    Строка = ТЗ.Добавить();
    Строка.Склад = Выборка1.Наименование;
    Строка = ТЗ.Добавить();
    Строка.Склад = "количество";
    Строка = ТЗ.Добавить();
    Строка.Склад = "цена";
    КонецЦикла;

    ЗначениеВРеквизитФормы(ТЗ,"ДанныеФайла");
```
---
ЭлементУО = ДанныеФайла.УсловноеОформление ....
Переменная не определена (ДанныеФайла)
---
Хех. Тогда с самого начала.
У вас данные ТЗ загружаются в реквизит формы типа ТаблицаЗначений?
---
да ДанныеФайла - это таблица на форме. Тз это временная таблица
---
Колонки для этой ТЗ на форме - накликаны в дизайнере?
---
Так выглядет в отладчике ЭтаФорма.ДанныеФайла
---
Судя по картинке - колонки уже накликаны. Зачем тогда программно раскрашивать? В дизайне через условное оформление формы сделать - да и все.
---
```1c
    ТЗ1 = Запрос.Выполнить().Выгрузить();
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Склад");
    Для Каждого СтрМассива Из ТЗ1 Цикл
    НаименованиеКолонки = СтрЗаменить(СтрМассива.Наименование," ",");
    ТЗ.Колонки.Добавить(НаименованиеКолонки);
    КонецЦикла;
```
---
Еще раз повторяю вопрос. Колонки на форме - сразу в дизайнере накликаны?
---
нет
---
Разбираем далее. Пробуем выполнить:

```1c
    УсловноеОформлениеТЗ = ЭтаФорма.ДанныеФайла.УсловноеОформление;
```

Этот код должен выполняться на сервере.
---
Поле объекта недоступно для записи (УсловноеОформление)
на сервере это понятно
---
Откуда запись-то появилась?? Вы мою строку выполнили в точности?
---
Поле объекта не обнаружено
---
К условному формлению доступ только ЭтаФорма.УсловноеОформление
---
Толи как-то коряво таблицу на форму выгрузила, ничего не пойму
---
не могу именно к таблице обратиться, только к форме
---
Да, верно. Сам уже глючу. Для ТЗ нужно через условное оформление формы работать.
---
Для ТЗ?
---
Да, для ТЗ. У вас реквизит на форме ведь имеет тип ТаблицаЗначений.
---
нет, без реквизита - все пусто на форме
---
Еще чуть-чуть - и телепатом стану уже;) Выложите чтоль полный код - как программируете интерфейс, как загружаете данные.
---
))))

```1c
    &НаСервере
    Процедура Команда1НаСервере()
    Группа = Справочники.Склады.НайтиПоНаименованию("КЛ",Истина);
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    | Номенклатура.Наименование КАК Наименование
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.КЛ = &КЛ");
    Запрос.УстановитьПараметр("КЛ", Истина);
    РезультатЗапроса = Запрос.Выполнить();
    ТЗ1 = Запрос.Выполнить().Выгрузить();
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Склад");

    Для Каждого СтрМассива Из ТЗ1 Цикл
    НаименованиеКолонки = СтрЗаменить(СтрМассива.Наименование," ",");
    ТЗ.Колонки.Добавить(НаименованиеКолонки);
    КонецЦикла;

    //Опишем массив реквизитов
    МассивРеквизитов = Новый Массив;
    МассивТипаВыбора = Новый Массив;
    МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));
    ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);

    //Добавим в массив реквизитов таблицу значений
    МассивРеквизитов.Добавить(Новый РеквизитФормы("ТаблицаДанныхФайла", ОписаниеТипаВыбора));

    //Добавим в массив реквизитов колонки таблицы
    ОписаниеЧисла = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 2));
    Для Каждого Колонка Из ТЗ.Колонки Цикл
    Если Колонка.Имя = СокрЛП("Склад") Тогда
    МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ТаблицаДанныхФайла"));
    Иначе
    МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, ОписаниеЧисла, "ТаблицаДанныхФайла"));
    КонецЕсли;
    КонецЦикла;

    //Удаляем если существует таблица
    ЭлементТаблица = Элементы.Найти("ТаблицаДанныхФайла");
    Если ЭлементТаблица <> Неопределено Тогда
    Элементы.Удалить(ЭлементТаблица);
    Иначе
    ИзменитьРеквизиты(МассивРеквизитов);
    КонецЕсли;

    //Добавим Таблицу на форму
    ТаблицаДанныхФайла = Элементы.Добавить("ТаблицаДанныхФайла", Тип("ТаблицаФормы"));
    ТаблицаДанныхФайла.ПутьКДанным = "ТаблицаДанныхФайла";
    ТаблицаДанныхФайла.Отображение = ОтображениеТаблицы.Список;

    //Добавим колонки
    Для Каждого Колонка Из ТЗ.Колонки Цикл
    НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаДанныхФайла);
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ПутьКДанным = "ТаблицаДанныхФайла." + Колонка.Имя;
    КонецЦикла;

    Запрос1 = Новый Запрос(
    "ВЫБРАТЬ
    | Склады.Наименование КАК Наименование
    |ИЗ
    | Справочник.Склады КАК Склады
    |ГДЕ
    | Склады.Родитель=&Группа");
    Запрос1.УстановитьПараметр("Группа", Группа);
    РезультатЗапроса1 = Запрос1.Выполнить();
    Выборка1 = РезультатЗапроса1.Выбрать();
    //МассивКолонок = Запрос1.Выполнить().Выгрузить();
    //Добавляем строки
    Пока Выборка1.Следующий() Цикл
    Строка = ТЗ.Добавить();
    Строка.Склад = Выборка1.Наименование;
    Строка = ТЗ.Добавить();
    Строка.Склад = "количество";
    Строка = ТЗ.Добавить();
    Строка.Склад = "цена";
    КонецЦикла;

    ЗначениеВРеквизитФормы(ТЗ,"ТаблицаДанныхФайла");

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

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    Команда1НаСервере();
    КонецПроцедуры
```
---
Полностью и колонки, и строки сформированы программно. на форме вообще ничего нет только кнопка оформить строку

```1c
    &НаСервере
    Процедура ОформлениеСтрокиНаСервере()

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

    &НаКлиенте
    Процедура ОформлениеСтроки(Команда)
    ОформлениеСтрокиНаСервере();
    КонецПроцедуры
```
---
Может у все у полей и отбора свойство "использование" стоит в ложь ? УсловноеОформление
---
Возможно, неправильно заполняются оформляемые поля.
Делала жирный шрифт по условию в динамически создаваемой таблице формы,
заполняемой из таблицы значений. Через условное оформление формы.
"ТаблицаМаршрутов" - таблица формы, "Макс" - поле, по которому задаем условие.

```1c
    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаМаршрутов.Макс");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = 1;
    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,,Истина));
    //задаем оформляемые колонки (все)
    Для каждого элПоля Из Элементы.ТаблицаМаршрутов.ПодчиненныеЭлементы Цикл
    ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(элПоля.Имя);
    КонецЦикла;
```
---
Мария Говор, а у вас таблица как реквизит есть или все программно?
---
Все получилось. Все большое спасибо!
---
Как в итоге то получилось.У меня есть форма документа. На ней ТЧ - Товары. Форму добавил в расширение. В модуле формы в расширении в процедуре при открытии пытаюсь программно сделать условное оформление. Всю голову уже сломал(((
---
Поделитесь результатом, пожалуйста! Пытаюсь сделать условное оформление строк созданного программно дерева... Не работает у меня. С таблицей простой получается, а с деревом никак. Может, хитрость какая?
---
Возможно Вам надо обратиться не к условному оформлению формы, а к условном оформлению самого реквизита
---
Поделитесь, пожалуйста! Такая же проблема и не могу найти чего не хватает. Не получается ни программно, ни через настройку списка.
---
Обратите внимание: в условии пишется путь к данным (через точку), поля оформления задаются как названия элементов формы:

```1c
    ЭлементОформления = УсловноеОформление.Элементы.Добавить();

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

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

    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
```
---
Работает так. В условии в качестве источника сравниваемых значений элемента отбора передаем полный путь к данным, а в качестве источника для свойства "Поле" поля оформления передаем имя оформляемого элемента:

```1c
    ЭлементОформления = Форма.УсловноеОформление.Элементы.Добавить();
    Условие = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Разница");
    Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
    Условие.ПравоеЗначение = 0;

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