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