Как раскрасить строки отчета СКД в зависимости от отбора по подразделению?

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

Часто в отчетах, созданных на базе Системы Компоновки Данных (СКД), возникает необходимость визуально выделить строки, соответствующие определенным критериям. Например, выделить цветом строки, относящиеся к разным подразделениям. Разберем, как реализовать эту задачу наиболее эффективными способами.

Способ 1: Использование Условного оформления в настройках СКД

Это самый простой и рекомендуемый способ, не требующий написания программного кода. Суть метода заключается в создании правил оформления, которые СКД применит автоматически при выводе отчета.

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

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

Способ 2: Программная настройка оформления в модуле отчета

Если количество цветов и подразделений динамическое (например, задается в карточке справочника), программный метод будет предпочтительнее. Мы можем вмешаться в процесс формирования отчета в процедуре ПриКомпоновкеРезультата. Для упрощения программной работы с объектной моделью СКД можно использовать модуль-обёртку для конструирования СКД.

Важно помнить: не стоит пересоздавать весь макет компоновки, если это не требуется. Лучше управлять настройками компоновщика до начала вывода.

Рассмотрим алгоритм действий:


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

Важные рекомендации по оптимизации

При программном подходе часто возникают ошибки производительности, если пытаться искать данные (например, Справочники.НайтиПоКоду) внутри цикла или при каждой итерации вывода. Чтобы отчет не зависал:

Анализируя задачу, мы приходим к выводу, что использование Условного оформления в схеме компоновки данных — самый надежный путь. Если данных слишком много, используйте программное добавление элементов в УсловноеОформление компоновщика настроек до момента инициализации процессора вывода.

← На главную