Как применить условное оформление к итогам в СКД 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с Системой компоновки данных (СКД) часто ставит перед разработчиком интересные задачи, одна из которых — условное оформление итогов. Часто бывает так, что мы успешно раскрашиваем детальные записи отчета, но когда дело доходит до итоговых строк по группировкам или общих итогов, оформление просто «пропадает». Разберем подробно, почему так происходит и как заставить СКД корректно раскрашивать итоговые показатели.

Проанализируем причину: почему итоги не окрашиваются?

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

Шаг 1. Настройка области использования оформления

Рассмотрим самую распространенную ошибку. В настройках условного оформления на вкладке «Общие» есть параметр «Область использования». По умолчанию система может применять оформление только к детальным записям. Чтобы итоги «подхватили» нужный цвет, выполним следующие действия:

  1. Перейдем на вкладку «Настройки» в схеме компоновки данных.
  2. Выберем элемент условного оформления.
  3. Найдем поле «Область использования».
  4. Обязательно установим флажки напротив пунктов: «В группировке» (для промежуточных итогов) и «В общих итогах» (для финального результата).

Без этих флажков, какое бы правильное условие мы ни написали, итоговые строки останутся стандартного цвета.

Шаг 2. Явное указание типов данных в наборе «Объект»

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

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

Шаг 3. Использование пользовательских полей для сложных условий

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

  1. На вкладке «Настройки» перейдем в «Пользовательские поля».
  2. Создадим новое Поле-выражение (при программной генерации отчетов в этом поможет СКДБилдер).
  3. В выражении детальных записей пропишем нашу логику.
  4. Важный момент: на вкладке «Выражение итогов» продублируем или адаптируем логику.

Пример выражения для пользовательского поля:


Выбор 
    Когда Сумма < 0 Тогда "Отрицательно"
    Иначе "Положительно" 
Конец

Затем в условном оформлении мы проверяем значение этого пользовательского поля. Это позволяет гибко управлять цветом итогов, даже если они рассчитываются по сложным формулам.

Шаг 4. Оформление через системные поля (Уровень и Тип записи)

Рассмотрим ситуацию, когда нам нужно выделить итоги только определенного уровня (например, только итоги по Складам, а итоги по Номенклатуре оставить без изменений). Для этого в условии оформления мы можем использовать системные поля.

Добавим в условие поле СистемныеПоля.Уровень. Например, условие СистемныеПоля.Уровень В иерархии 2 позволит применить цвет фона только к определенному срезу данных. Также полезно поле СистемныеПоля.ТипЗаписи, которое позволяет отделить ИтогПоИерархии от обычного Итог.

Шаг 5. Работа с пустыми значениями (NULL) в итогах

Выясним еще одну причину сбоев: наличие NULL. В итоговых строках внешних наборов данных часто возникают пустые значения, если по какой-то ветке группировки нет данных. Условие Поле < 0 не сработает для NULL.

Чтобы избежать этого, в выражении ресурса или в вычисляемом поле используем функцию ЕстьNull() (для быстрой отладки данных подойдет консоль запросов УФ):


Сумма(ЕстьNull(СуммаОстаток, 0))

Это обеспечит наличие числового значения в каждой итоговой строке, и наше условное оформление отработает стабильно.

Подведем итог

Мы рассмотрели комплексный подход к оформлению итогов. Главное правило — всегда проверять Область использования и следить за тем, чтобы Тип значения был явно определен. Если стандартные средства не помогают, использование Пользовательских полей с заданным выражением итогов является самым надежным способом добиться нужного визуального результата в сложных отчетах СКД.

← На главную