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