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

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

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

Постановка задачи и выбор инструментария

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

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

Шаг 1: Подготовка данных (служебная колонка)

Прежде чем красить строку, система должна «понять», является ли данная строка группой. Прямое обращение в условии оформления к свойству Объект.Товары.Номенклатура.ЭтоГруппа крайне нежелательно. Обращение через точку к реквизитам ссылочных полей в списках значительно замедляет работу интерфейса, так как требует дополнительных запросов к базе данных при отрисовке каждой строки.

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

  1. Реквизит табличной части (в дереве объектов): Добавляем колонку ЭтоГруппа в метаданные документа. Это позволит сохранять признак в базе данных.
  2. Реквизит формы: Добавляем колонку ЭтоГруппа только в состав реквизитов таблицы на форме. Этот способ предпочтительнее, если вы не хотите «раздувать» базу данных служебными полями, которые нужны только для оформления.

Шаг 2: Программное заполнение признака

Посмотрим на пример кода, который необходимо выполнить при заполнении табличной части. Допустим, у нас есть команда «Заполнить», которая выполняется на сервере:


&НаСервере
Процедура ЗаполнитьТабличнуюЧастьНаСервере()
    Для Каждого ТекСтрокаНоменклатуры Из ВыборкаДанных Цикл
        НоваяСтрока = Объект.Товары.Добавить();
        НоваяСтрока.Номенклатура = ТекСтрокаНоменклатуры.Ссылка;
        
        // Устанавливаем признак группы для условного оформления
        НоваяСтрока.ЭтоГруппа = ТекСтрокаНоменклатуры.ЭтоГруппа;
    КонецЦикла;
КонецПроцедуры

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

Шаг 3: Настройка условного оформления (интерактивно)

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

  1. Откройте форму документа и перейдите на вкладку «Условное оформление».
  2. Нажмите «Добавить» и настройте правило.
  3. В поле «Оформление» выберите «Цвет фона» (например, WebЦвета.БледноКремовый) и, при необходимости, «Шрифт» (сделайте его жирным).
  4. В поле «Условие» добавьте новый элемент: Объект.Товары.ЭтоГруппа Равно Истина.
  5. В поле «Оформляемые поля» выберите те колонки, которые должны окраситься. Если оставить поле пустым, будет окрашена вся строка целиком.

Шаг 4: Программная настройка условного оформления

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


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

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

Дополнительные рекомендации для работы с иерархией

Если ваша табличная часть отображается в виде Дерева значений, визуальное выделение групп становится критически важным. В этом случае мы рекомендуем комбинировать изменение цвета фона с изменением иконки. В свойствах поля Номенклатура на форме можно указать «Путь к данным картинки» и использовать тот же признак ЭтоГруппа для вывода стандартной картинки папки.

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

Таким образом, мы выяснили, что для решения задачи в управляемом интерфейсе необходимо использовать связку «Служебный реквизит + Условное оформление». Это гарантирует правильную работу программы и высокую скорость отклика интерфейса.

← На главную