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