Как получить оформление строки таблицы управляемой формы в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При переходе с обычных форм на управляемые разработчики часто сталкиваются с отсутствием привычного обработчика вывода строки и свойства ОформлениеСтроки. В обычных формах этот механизм позволял легко считывать и изменять визуальные параметры ячеек (цвет, шрифт, доступность) непосредственно в моменте отрисовки. Рассмотрим, как устроена работа с оформлением строк в управляемых формах 1С и какие альтернативные подходы существуют.

Почему в управляемых формах нет прямого аналога ОформлениеСтроки?

Проанализируем особенности архитектуры управляемого интерфейса. В управляемых формах разделение на клиент и сервер меняет подход к отображению данных. Условное оформление работает как набор декларативных правил, которые вычисляются платформой автоматически на стороне клиента.

Платформа не хранит рассчитанные графические параметры в данных формы. Обращение к текущей строке коллекции (объект ДанныеФормыЭлементКоллекции) или к свойству ТекущиеДанные возвращает только реквизиты строки, но не содержит сведений о цвете текста, шрифте или фоне. По этой причине прямого метода вроде ПолучитьОформлениеСтроки() для табличных частей и таблиц значений не предусмотрено.

Способ 1. Использование события ПриПолученииДанныхНаСервере для динамических списков

Если таблица формы связана с динамическим списком, платформа предоставляет специальный инструмент. Разберем по шагам, как получить и переопределить оформление строк:

  1. Перейдем к событиям динамического списка в форме и создадим обработчик ПриПолученииДанныхНаСервере.
  2. В параметр Строки передается коллекция подготовленных к отображению данных типа СтрокиДинамическогоСписка.
  3. Внутри обработчика обратимся к свойству Оформление для каждой строки или конкретной ячейки.

Посмотрим на пример кода в обработчике:


&НаСервере
Процедура СписокПриПолученииДанныхНаСервере(Умение, Строки)
    Для Каждого СтрокаИз Список Из Строки Цикл
        // Доступ к оформлению строки
        ОформлениеСтроки = СтрокаИз.Оформление;
        
        // Пример изменения цвета текста в зависимости от условия в данных
        Если СтрокаИз.Данные.Просрочен Тогда
            ОформлениеСтроки.ЦветТекста = Новый Цвет(255, 0, 0);
        КонецЕсли;
    КонецЦикл;
КонецПроцедуры

Способ 2. Вынос логики оформления в реквизиты данных

Для обычных таблиц формы (табличных частей, деревьев и таблиц значений) прямая проверка оформления не применяется. Если бизнес-логика программы должна зависеть от того, подсвечена ли строка, рекомендуется хранить статус прямо в данных.

  1. Добавим в коллекцию таблицы служебный реквизит (например, СостояниеСтроки или ФлагОформления).
  2. При изменении данных или при загрузке таблицы рассчитаем значение этого реквизита на сервере или клиенте.
  3. Настроим правила в коллекции УсловноеОформление формы, привязав их к значению нового реквизита.
  4. В прикладном коде будем проверять значение самого реквизита строки вместо попытки прочитать параметры оформления.

Способ 3. Программная проверка условий или разбор коллекции УсловноеОформление

Если необходимо узнать, соответствует ли строка определенному визуальному правилу, создадим отдельную функцию на встроенном языке. Выясним два возможных варианта реализации:

Вариант А: Программное дублирование условий. Пишется вспомогательная функция, которая принимает объект ДанныеФормыЭлементКоллекции и проверяет те же условия, которые заданы в условном оформлении формы.

Вариант Б: Программный обход элементов условного оформления. Алгоритм может проанализировать коллекцию УсловноеОформление.Элементы, обойти элементы отбора (тип ЭлементОтбораКомпоновкиДанных) и сопоставить значения полей строки с правыми значениями отбора.

Таким образом, для таблиц значений и табличных частей в управляемых формах оптимальным решением является хранение логики оформления в реквизитах данных или вызов программной функции-помощника.

← На главную