При разработке отчетов на Системе компоновки данных (СКД) часто возникает задача не просто просуммировать значения в колонке, а разделить их по определенному признаку. Классический пример — отчет по бюджету или взаиморасчетам, где в одной колонке отображаются и экономия (положительные числа), и перерасход (отрицательные числа). Обычный «Общий итог» в данном случае покажет лишь разницу (сальдо), однако для анализа руководителю часто требуется видеть сумму всех «плюсов» и сумму всех «минусов» отдельно. Рассмотрим, как реализовать это правильно и красиво.
Проанализируем самый лаконичный метод, который не требует изменения структуры запроса или создания лишних вычисляемых полей. Мы можем настроить логику суммирования непосредственно на закладке «Ресурсы» в схеме компоновки данных. Рассмотрим пошагово, как это сделать:
СуммаОтклонения) в список ресурсов дважды.
Сумма(Выбор Когда СуммаОтклонения > 0 Тогда СуммаОтклонения Иначе 0 Конец)
Сумма(Выбор Когда СуммаОтклонения < 0 Тогда СуммаОтклонения Иначе 0 Конец)
Этот метод хорош тем, что он сохраняет чистоту данных и позволяет гибко управлять выводом итогов без дублирования колонок в основной части таблицы.
Разберем решение, к которому пришел автор темы. Оно заключается в физическом разделении данных на уровне компоновки. Этот метод особенно полезен, если вы хотите визуально отделить блоки «Экономия» и «Перерасход» друг от друга.
Для реализации выполним следующие действия:
ИтогПоложительный и ИтогОтрицательный.ИтогПоложительный укажем: ВЫБОР КОГДА Сумма > 0 ТОГДА Сумма ИНАЧЕ 0 КОНЕЦ.ИтогОтрицательный укажем: ВЫБОР КОГДА Сумма < 0 ТОГДА Сумма ИНАЧЕ 0 КОНЕЦ.Сумма().Такой подход позволяет вывести данные в виде двух последовательных таблиц или блоков внутри одной иерархии, что делает отчет очень наглядным.
Выясним, как добиться максимальной эстетики, если заказчик требует, чтобы в подвале отчета под одной колонкой выводилось сразу несколько цифр (например, «Итого +, Итого -, Сальдо»). Для этого нам понадобится работа с Макетами.
Рассмотрим алгоритм настройки макета оформления итогов:
Во-первых, создадим ресурсы для положительных и отрицательных сумм, как было описано в первом способе. Дадим им понятные имена, например, ВсегоПлюс и ВсегоМинус. Во-вторых, перейдем на закладку «Макеты» и добавим «Макет подвала группировки» или «Макет общего итога».
В области макета мы можем нарисовать ячейку и вписать в неё параметры. Пример текста в ячейке макета может выглядеть так:
Экономия: [ВсегоПлюс] | Перерасход: [ВсегоМинус]
При формировании отчета СКД автоматически подставит рассчитанные значения ресурсов в эти параметры. Это позволяет избежать «раздувания» таблицы по ширине, сохраняя информативность подвала.
Посмотрим на более продвинутый программный метод, который актуален для сложных отчетов с множеством связанных наборов данных, где обычное СУММА(ВЫБОР...) может работать некорректно из-за дублирования записей (Join-эффект).
Мы можем использовать агрегатную функцию ВычислитьВыражениеСГруппировкойМассив в выражении ресурса. Попробуем проанализировать пример такого выражения:
Сумма(Отфильтровать(ВычислитьВыражениеСГруппировкойМассив("Сумма", "Номенклатура"), "Значение > 0"))
Здесь мы сначала собираем все значения в массив по конкретной группировке, затем фильтруем их и только после этого суммируем. Это гарантирует точность расчета даже в самых запутанных структурах данных.
Чтобы отчет не выглядел «дешево» (как выразился автор темы), рекомендуем использовать Условное оформление:
ЧДЦ=2; ЧН=0,00, чтобы все числа имели одинаковую разрядность и аккуратно выравнивались по правому краю.Таким образом, комбинируя возможности выражений ресурсов и макетов оформления, можно превратить простую плоскую таблицу в профессиональный аналитический инструмент с детализированными итогами.