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

Программист IT и автоматизация бизнеса
← На главную

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

Способ 1: Использование булевого параметра для управления группой правил

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

Рассмотрим по шагам, как это реализовать:

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

Проанализируем ситуацию: теперь СКД будет применять оформление только в том случае, если пользователь установил флажок в параметрах. При этом визуально на форме будет всего одна галочка, управляющая всей логикой раскраски.

Способ 2: Программное объединение через идентификаторы пользовательских настроек

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

Разберем алгоритм действий в модуле отчета:

При программном формировании или модификации схемы мы можем назначить нескольким элементам коллекции УсловноеОформление один и тот же строковый идентификатор. Платформа 1С в типовых формах отчетов группирует настройки с одинаковыми идентификаторами.


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

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

Способ 3: Реализация динамического цвета фона через вычисляемые поля

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

Создадим в общем модуле (с флагом «Вызов сервера») функцию:


Функция ПолучитьЦветПоОстатку(Остаток) Экспорт
    Если Остаток < 0 Тогда
        Возврат WebЦвета.Красный;
    ИначеЕсли Остаток < 10 Тогда
        Возврат Новый Цвет(255, 165, 0); // Оранжевый
    Иначе
        Возврат WebЦвета.Белый;
    КонецЕсли;
КонецФункции

В СКД на закладке Вычисляемые поля добавим поле ЦветСтроки, где в выражении укажем: ИмяОбщегоМодуля.ПолучитьЦветПоОстатку(Остаток).

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

  1. Перейдем на закладку Макеты.
  2. Добавим Макет поля для нужной колонки (например, «Номенклатура»).
  3. В области макета выделим ячейку и в свойствах найдем Цвет фона.
  4. Вместо выбора конкретного цвета укажем параметр макета, например ПараметрЦвета.
  5. В таблице параметров макета свяжем ПараметрЦвета с нашим вычисляемым полем ЦветСтроки.

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

Способ 4: Прямая подмена XML для продвинутых случаев

Для тех, кто не боится работать с внутренним представлением схемы, существует вариант подмены источника цвета в XML-описании настроек. По умолчанию СКД хранит цвет как константу. Но если программно изменить тип значения параметра оформления с Значение на Поле, СКД начнет брать цвет из данных самой строки.

Проанализируем структуру в XML:


<dcscor:item>
    <dcscor:parameter>ЦветФона</dcscor:parameter>
    <dcscor:value xsi:type="dcscor:Field">МоеПолеСЦветом</dcscor:value>
</dcscor:item>

Хотя в визуальном конструкторе это сделать невозможно, программная установка через объектную модель ЗначениеПараметраНастроекКомпоновкиДанных позволяет добиться такого результата. Мы указываем, что значением параметра ЦветФона является объект типа ПолеКомпоновкиДанных.

Резюме и рекомендации

Подводя итог, выделим основные правила выбора решения:

Если нужно просто объединить 2-5 правил — используйте булевый параметр и добавьте его в условия каждого правила УО.

Если нужно динамически управлять видимостью настроек из кода — манипулируйте свойством ИдентификаторПользовательскойНастройки.

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

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

← На главную