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