Как программно изменить цвет фона строки в Таблице Значений на управляемой форме?

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

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

Почему Условное Оформление лучше ручного обхода строк

Многие начинающие разработчики пытаются решить задачу «в лоб»: заполнить таблицу на сервере, а затем в цикле на клиенте устанавливать свойства оформления для каждой ячейки. Проанализируем, почему этот путь тупиковый. Во-первых, элементы управляемой формы не предоставляют прямого доступа к свойствам оформления конкретной ячейки через коллекцию строк. Во-вторых, ручное управление цветом требует постоянного отслеживания изменений данных. Для качественной визуализации данных на формах подойдёт конструктор интерфейсов и ключевых показателей для 1С.

Наиболее правильным и производительным способом является использование механизма Условного Оформления формы. Выясним его основные преимущества: для автоматизации визуального выделения строк есть инструмент раскраски строк в списках 1С.

  1. Скорость работы: Оформление применяется платформой на уровне представления, что значительно быстрее любых циклов.
  2. Автоматизация: Как только значение в колонке, участвующей в условии, меняется, цвет строки обновляется мгновенно.
  3. Централизация: Все правила оформления хранятся в одном месте и применяются ко всей таблице сразу.

Программное создание Таблицы Значений и её реквизитов

Разберем ситуацию, когда таблица создается полностью динамически. Для начала нам необходимо объявить структуру таблицы в реквизитах формы. Рассмотрим процедуру, которая добавляет саму таблицу и необходимые колонки, включая служебную колонку Изменена, по которой мы будем красить строку.


Процедура ХарактеристикиДобавитьРеквизиты(Форма, ИмяТаблицы)
    МассивРеквизитов = Новый Массив;
    
    // Создаем основной реквизит типа ТаблицаЗначений
    Реквизит = Новый РеквизитФормы(ИмяТаблицы, Новый ОписаниеТипов("ТаблицаЗначений"), , , Истина);
    МассивРеквизитов.Добавить(Реквизит);
    Форма.ИзменитьРеквизиты(МассивРеквизитов);
    
    // Добавляем колонки таблицы
    МассивРеквизитов.Очистить();
    
    // Пример колонок: Характеристика, Значение, Дата и служебный флаг Изменена
    МассивРеквизитов.Добавить(Новый РеквизитФормы("Характеристика", Новый ОписаниеТипов("СправочникСсылка.Характеристики"), ИмяТаблицы));
    МассивРеквизитов.Добавить(Новый РеквизитФормы("Значение", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
    МассивРеквизитов.Добавить(Новый РеквизитФормы("Дата", Новый ОписаниеТипов("Дата"), ИмяТаблицы));
    МассивРеквизитов.Добавить(Новый РеквизитФормы("Изменена", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
    
    Форма.ИзменитьРеквизиты(МассивРеквизитов);
КонецПроцедуры

После того как структура данных создана, нам необходимо отобразить её на форме, создав соответствующие элементы управления. Посмотрим на пример создания элемента типа ТаблицаФормы.


Процедура СоздатьЭлементыТаблицы(Форма, ЭлементРодитель, ИмяТаблицы)
    // Добавляем саму таблицу на форму
    ЭлементТаблица = Форма.Элементы.Добавить(ИмяТаблицы + "_Элемент", Тип("ТаблицаФормы"), ЭлементРодитель);
    ЭлементТаблица.ПутьКДанным = ИмяТаблицы;
    
    // Добавляем колонку "Характеристика"
    Элемент = Форма.Элементы.Добавить(ИмяТаблицы + "Характеристика", Тип("ПолеФормы"), ЭлементТаблица);
    Элемент.Вид = ВидПоляФормы.ПолеВвода;
    Элемент.ПутьКДанным = ИмяТаблицы + ".Характеристика";
    
    // Добавляем колонку "Значение"
    Элемент = Форма.Элементы.Добавить(ИмяТаблицы + "Значение", Тип("ПолеФормы"), ЭлементТаблица);
    Элемент.Вид = ВидПоляФормы.ПолеВвода;
    Элемент.ПутьКДанным = ИмяТаблицы + ".Значение";
КонецПроцедуры

Настройка программного Условного Оформления

Теперь перейдем к самому важному этапу — программному заданию правил оформления. Проанализируем структуру этого процесса. Нам нужно создать новый элемент в коллекции УсловноеОформление формы и настроить три ключевых параметра:

  1. Отбор: При каких условиях оформление должно сработать (например, когда поле Изменена равно Истина).
  2. Оформление: Что именно мы меняем (цвет фона, цвет текста, шрифт и т.д.).
  3. Поля: На какие именно колонки таблицы распространяется это оформление.

Рассмотрим готовую процедуру для реализации этой логики:


Процедура ДобавитьУсловноеОформление(Форма, ИмяТаблицы)
    // Добавляем новый элемент оформления
    ЭлементУО = Форма.УсловноеОформление.Элементы.Добавить();
    
    // 1. Настраиваем условие (Отбор)
    // Мы хотим красить строку, если в колонке "Изменена" значение Истина
    ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяТаблицы + ".Изменена");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = Истина;
    ЭлементОтбора.Использование = Истина;
    
    // 2. Настраиваем визуальные свойства (Оформление)
    // Установим красный цвет текста
    ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
    // Или установим цвет фона
    ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 240, 240));
    
    // 3. Указываем поля, которые будут окрашены
    // Если список полей пуст, будет окрашена вся строка целиком.
    // Если нужно окрасить конкретные колонки, добавляем их:
    ПолеОформления = ЭлементУО.Поля.Элементы.Добавить();
    ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ИмяТаблицы + "Характеристика");
    ПолеОформления.Использование = Истина;
    
    ПолеОформления = ЭлементУО.Поля.Элементы.Добавить();
    ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ИмяТаблицы + "Значение");
    ПолеОформления.Использование = Истина;
КонецПроцедуры

Тонкости использования скрытых колонок

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

Мы можем добавить колонку в ТаблицаЗначений (реквизит формы), заполнить её данными на сервере, но не создавать для неё элемент управления (поле формы). Механизм условного оформления работает с данными реквизита, поэтому он успешно «увидит» скрытую колонку и применит оформление к видимым полям на основе её значений. Это позволяет держать интерфейс чистым, сохраняя при этом сложную логику визуализации — для управления элементами форм без кода поможет инструмент настройки отображения данных 1С.

Важные замечания по производительности

При работе с условным оформлением следует придерживаться нескольких правил, чтобы форма работала плавно:

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

Таким образом, мы убедились, что программное управление цветом строк в Таблице Значений — это мощный и гибкий инструмент. Использование УсловногоОформления вместо ручного обхода строк позволяет создавать отзывчивые и профессиональные интерфейсы, которые автоматически реагируют на любые изменения данных. Для расширения функционала форм есть инструмент для повышения качества данных и удобства 1С.

← На главную