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