Как в отчете СКД вывести значение ресурса только при выполнении условия?

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

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

Способ 1. Использование условного выражения в расчете ресурса

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

Разберем по шагам, как это реализовать:

  1. Откроем схему компоновки данных нашего отчета в конфигураторе.
  2. Перейдем на вкладку "Ресурсы". Здесь определяются все вычисляемые поля (агрегаты), которые будут использоваться в отчете.
  3. Найдем нужный нам ресурс (например, СуммаПродаж) или создадим новый.
  4. В колонке "Выражение" для этого ресурса мы изменим стандартную агрегатную функцию на условную конструкцию Выбор Когда ... Конец.

Проанализируем синтаксис этой конструкции. Она работает по принципу "Если ... То ... Иначе".

Предположим, в нашем наборе данных есть булево поле Согласован, и нам нужно суммировать значения из поля СуммаДокумента только если Согласован = Истина. Выражение для ресурса будет выглядеть так:


Выбор
    Когда Согласован // Условие: проверяем, истинно ли поле "Согласован"
    Тогда СуммаДокумента // Если условие выполнено, берем значение из этого поля
    Иначе 0 // В противном случае, считаем значение равным нулю
Конец

Важно обернуть всю эту конструкцию в агрегатную функцию, так как это ресурс. Правильное выражение для поля "Выражение" ресурса будет таким:


Сумма(
    Выбор
        Когда Согласован
        Тогда СуммаДокумента
        Иначе 0
    Конец
)

Что здесь происходит?

Для каждой строки набора данных система сначала выполняет внутреннюю конструкцию Выбор...Конец. Если документ согласован, она получает значение СуммаДокумента. Если нет — получает 0. И только после этого внешняя функция Сумма() складывает полученные результаты. Таким образом, в итоговую сумму попадают только значения из согласованных документов.

Важный нюанс: Вместо 0 можно использовать NULL. Разница в том, как будет отображаться результат в ячейке отчета:

Способ 2. Использование условного оформления

Этот метод применяется, когда нам не нужно изменять сам расчет данных, а требуется лишь скрыть или по-особому отобразить уже вычисленное значение. Например, общие итоги по колонке должны считаться по всем документам, но в строках с несогласованными документами сумма должна быть невидимой. Для смежной задачи полного скрытия нерелевантных столбцов отчета можно использовать решение для скрытия столбцов СКД при отсутствии данных.

Условное оформление — это инструмент для визуальной настройки отчета. Оно работает на последнем этапе, когда все данные уже рассчитаны и сгруппированы.

Посмотрим на пошаговую настройку:

  1. Откроем схему компоновки данных и перейдем на вкладку "Настройки".
  2. В дереве настроек выберем отчет в целом или конкретную группировку, для которой нужно применить правило.
  3. Перейдем на вложенную вкладку "Условное оформление" и нажмем "Добавить".
  4. В открывшемся окне нам нужно настроить три ключевых раздела: "Оформление", "Условие" и "Оформляемые поля".

Настройка правила оформления:

После применения таких настроек СКД будет работать следующим образом: сначала она рассчитает ресурс СуммаПродаж для всех строк без исключения. Затем, при формировании макета отчета, она пробежится по правилам условного оформления. Для строк, где Согласован = Ложь, она найдет наше правило и для колонки СуммаПродаж заменит выведенное число на пустую строку, делая его невидимым для пользователя.

Сравнение подходов и рекомендации

Хотя оба способа приводят к похожему визуальному результату, они fundamentally различны по своей сути.

Используйте выражение в ресурсе (Способ 1), если:

Используйте условное оформление (Способ 2), если:

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

← На главную