Работа с Системой компоновки данных (СКД) часто ставит перед разработчиком интересные задачи, одна из которых — условное оформление итогов. Часто бывает так, что мы успешно раскрашиваем детальные записи отчета, но когда дело доходит до итоговых строк по группировкам или общих итогов, оформление просто «пропадает». Разберем подробно, почему так происходит и как заставить СКД корректно раскрашивать итоговые показатели.
Прежде чем переходить к настройкам, давайте выясним причину. В СКД процесс формирования отчета разбит на этапы. Когда система применяет УсловноеОформление, она проверяет условия для каждой строки. Если ваше условие завязано на конкретное поле, система должна четко понимать его тип и значение в контексте итога. Если вы используете Набор данных - Объект (например, передаете таблицу значений из кода), СКД может не знать точный тип ресурса в итогах, воспринимая его как произвольный тип, что блокирует работу логических сравнений вроде «Больше» или «Меньше».
Рассмотрим самую распространенную ошибку. В настройках условного оформления на вкладке «Общие» есть параметр «Область использования». По умолчанию система может применять оформление только к детальным записям. Чтобы итоги «подхватили» нужный цвет, выполним следующие действия:
Без этих флажков, какое бы правильное условие мы ни написали, итоговые строки останутся стандартного цвета.
Если мы используем внешний источник данных, нам необходимо «помочь» системе. Проанализируем ситуацию: когда СКД рассчитывает итог (например, сумму), она должна быть уверена, что результат является числом. Если тип поля в наборе данных не определен, условие оформления может игнорироваться в итоговых строках.
Для решения этой задачи пройдем в закладку «Набор данных». В колонке «Тип значения» для нашего ресурса (например, СуммаОстаток) нажмем на кнопку выбора и жестко ограничим тип, выбрав Число. Также рекомендуется указать допустимую длину и точность. Это гарантирует, что при расчете агрегатных функций СКД будет оперировать понятными ей типами данных.
Иногда стандартного условия оформления недостаточно, особенно если логика окрашивания итога отличается от логики детальной строки. В этом случае мы можем применить Пользовательское поле. Разберем, как это сделать:
Поле-выражение (при программной генерации отчетов в этом поможет СКДБилдер).Пример выражения для пользовательского поля:
Выбор
Когда Сумма < 0 Тогда "Отрицательно"
Иначе "Положительно"
Конец
Затем в условном оформлении мы проверяем значение этого пользовательского поля. Это позволяет гибко управлять цветом итогов, даже если они рассчитываются по сложным формулам.
Рассмотрим ситуацию, когда нам нужно выделить итоги только определенного уровня (например, только итоги по Складам, а итоги по Номенклатуре оставить без изменений). Для этого в условии оформления мы можем использовать системные поля.
Добавим в условие поле СистемныеПоля.Уровень. Например, условие СистемныеПоля.Уровень В иерархии 2 позволит применить цвет фона только к определенному срезу данных. Также полезно поле СистемныеПоля.ТипЗаписи, которое позволяет отделить ИтогПоИерархии от обычного Итог.
Выясним еще одну причину сбоев: наличие NULL. В итоговых строках внешних наборов данных часто возникают пустые значения, если по какой-то ветке группировки нет данных. Условие Поле < 0 не сработает для NULL.
Чтобы избежать этого, в выражении ресурса или в вычисляемом поле используем функцию ЕстьNull() (для быстрой отладки данных подойдет консоль запросов УФ):
Сумма(ЕстьNull(СуммаОстаток, 0))
Это обеспечит наличие числового значения в каждой итоговой строке, и наше условное оформление отработает стабильно.
Мы рассмотрели комплексный подход к оформлению итогов. Главное правило — всегда проверять Область использования и следить за тем, чтобы Тип значения был явно определен. Если стандартные средства не помогают, использование Пользовательских полей с заданным выражением итогов является самым надежным способом добиться нужного визуального результата в сложных отчетах СКД.