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