Возможность условного оформления нединамических списков мы рассмотрим на примере табличной части документа. Будем выделять те строки документа, в которых количество товара больше 10.
Примечание
Пример можно посмотреть в демонстрационной базе «Оформление списков», форма документа Накладная, команда Условное оформление. Это локальная команда этой формы.
При оформлении нединамических списков есть несколько особенностей.
Во-первых, для динамических списков условное оформление является свойством самого реквизита формы. Чтобы оформить нединамические списки, нужно использовать условное оформление самой формы.
Во-вторых, задать оформление динамического списка можно прямо на клиенте. Условное же оформление формы можно задать только на сервере.
В остальном программная работа с условным оформлением нединамических списков ничем не отличается от рассмотренного выше примера.
Для того чтобы оформить табличную часть накладной, создадим локальную команду формы, в которой вызовем контекстную серверную процедуру (листинг 3.102).
Листинг 3.102. Вызов серверной процедуры для оформления формы
&НаКлиенте
Процедура УсловноеОформление(Команда)
ОформитьНаСервере();
КонецПроцедуры
А в серверной процедуре выполним условное оформление (листинг 3.103).
Листинг 3.103. Условное оформление формы
&НаСервере
Процедура ОформитьНаСервере()
Если УсловноеОформление.Элементы.Количество() > 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Условное оформление уже задано. Команда не выполнена";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
ЭлементУО = УсловноеОформление.Элементы.Добавить();
// Оформление: цвет фона – зеленая лужайка.
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.ЗеленаяЛужайка);
// Условие: количество в табличной части больше 10.
ЭлементУсловия = ЭлементУО.Отбор.Элементы. Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Количество");
ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементУсловия.ПравоеЗначение = 10;
// Оформляемое поле: товар в табличной части.
ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТоварыТовар");
КонецПроцедуры
Из особенностей здесь можно упомянуть об именах полей, которые используются в условии оформления и в коллекции оформляемых полей. В динамических списках не вызывает затруднений указать правильное имя поля. Как правило, имена полей в реквизите (динамическом списке) и в таблице совпадают. Так было в предыдущем примере (рис. 3.114).

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

Рис. 3.115. В условии оформления указывается поле реквизита формы
А в коллекции оформляемых полей нужно указывать имя поля таблицы – ТоварыТовар (листинг 3.105, рис. 3.116).
Листинг 3.105. В коллекции оформляемых полей указывается имя поля таблицы
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТоварыТовар");

Рис. 3.116. В коллекции оформляемых полей указывается имя поля таблицы
Теперь запустим конфигурацию в режиме 1С:Предприятие и откроем накладную № 6. Ее табличная часть не содержит никакого условного оформления (рис. 3.117).

Рис. 3.117. Табличная часть без условного оформления
После того как мы выполним команду Условное оформление, товар Товар 2 будет выделен цветом фона, потому что количество этого товара больше 10 (рис. 3.118).

Рис. 3.118. Оформленная табличная часть
Пользователь не имеет стандартной возможности изменять условное оформление формы, поэтому в данной ситуации он не сможет отключить или удалить условное оформление, добавленное нами.
Напоследок хочется сделать еще одно небольшое замечание. В отличие от динамических списков, в условном оформлении формы обязательно нужно указывать оформляемые поля. Если хочется выделить всю строку табличной части, нужно указать все поля, которые в ней содержатся.