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