Как программно изменить цвет строки или ячейки в таблицах и деревьях значений в 1С

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

При разработке интерфейсов на платформе «1С:Предприятие 8» перед программистом часто возникает задача визуального выделения данных. Ярким примером является необходимость раскрасить строку или отдельную ячейку таблицы при наступлении определенного события — например, при установке флага (булевого значения) в строке. Это позволяет пользователю мгновенно ориентироваться в больших объемах информации.

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

Понимание механизма: Динамический список против Таблицы значений

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

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

Это различие критически важно помнить, так как попытка обратиться к условному оформлению таблицы значений напрямую как к ее свойству вызовет ошибку времени выполнения.

Особенность раскраски всей строки целиком

Еще один важный нюанс заключается в том, как именно система определяет, какие колонки формы нужно раскрасить:

Пошаговый разбор реализации на примере Дерева значений

Рассмотрим практическую ситуацию. У нас есть внешняя обработка, на форме которой размещен реквизит ДеревоДанных (тип ДеревоЗначений). В дереве присутствуют колонки: Номенклатура, Количество и Выбран (тип Булево). Наша задача — сделать так, чтобы при установке флажка в колонке Выбран вся строка дерева окрашивалась в приятный светло-зеленый цвет.

Настройку условного оформления мы будем выполнять на стороне сервера, например, в обработчике события формы ПриСозданииНаСервере или сразу после процедуры заполнения дерева данными.

Проанализируем готовый шаблон программного кода:


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

КонецПроцедуры

Как раскрасить только одну конкретную ячейку?

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

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


// Для раскраски только одной конкретной ячейки колонки "Выбран"
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоДанныхВыбран");
ОформляемоеПоле.Использование = Истина;

Важные рекомендации и стандарты разработки (1С:ИТС)

Для создания качественного и производительного кода крайне важно придерживаться стандартов разработки, рекомендуемых фирмой «1С»:

  1. Оптимальное место для инициализации кода: Программную настройку структуры условного оформления следует выполнять строго один раз при инициализации формы — в процедуре ПриСозданииНаСервере. Не допускается динамическое добавление новых элементов оформления при интерактивных действиях пользователя в строках (например, в событии ПриАктивизацииСтроки). Это приведет к неконтролируемому разрастанию коллекции правил условного оформления, перерасходу оперативной памяти сервера и существенному замедлению отрисовки интерфейса у клиента.
  2. Преимущества программного подхода над интерактивным: На первый взгляд может показаться, что настроить условное оформление интерактивно в свойствах формы быстрее и проще. Однако программный метод имеет неоспоримые преимущества:
    • Удобство обновления конфигурации: При обновлении, объединении или переносе доработок программный код переносить и контролировать гораздо легче, в то время как интерактивно настроенные свойства формы могут случайно затереться или сброситься.
    • Контроль ошибок: Любые опечатки в программном коде (например, неверное имя колонки или реквизита) могут быть легко обнаружены автоматическими средствами проверки кода (АПК) или механизмом синтаксического контроля конфигуратора. Найти же аналогичную ошибку в интерактивных настройках формы гораздо сложнее.

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

← На главную