При работе с системой компоновки данных (СКД) часто возникает задача формирования отчетов по взаиморасчетам. Когда в данных присутствуют суммы в различных валютах, стандартная настройка СКД пытается сложить их в общий итог, что приводит к бессмысленным результатам. Давайте разберем, как грамотно настроить отчет, чтобы избежать таких ошибок и сделать данные читаемыми.
Если логика отчета не предполагает наличие общего итога по всем валютам сразу, самым простым и логичным решением будет полное отключение этого элемента. Рассмотрим, как это сделать:
Если же вам необходимо сохранить итоги по группировкам, но убрать итоговую строку в самом низу отчета, вы можете детально настроить ресурсы в СКД. В списке ресурсов для каждого поля выберите, по каким группировкам рассчитывать итог, просто исключив общий итог из списка рассчитываемых данных.
Чтобы итоговая строка оставалась, но не содержала «мухокотлетную» сумму, воспользуемся мощным инструментом Выражение для ресурса. Вместо простой суммы Сумма(СуммаОстатка) мы можем задать логическое условие. Рассмотрим пример, когда при наличии нескольких валют мы просто выводим ноль или пустую строку:
ВЫБОР
КОГДА Количество(Различные Валюта) > 1
ТОГДА 0
ИНАЧЕ Сумма(СуммаОстатка)
КОНЕЦ
Этот метод позволяет сохранить корректность отчета: система проанализирует количество уникальных валют в выборке и, если их больше одной, не будет выполнять бессмысленное сложение.
Наиболее продвинутым и элегантным способом считается вывод итогов в виде аккуратной строки, где суммы сгруппированы по валютам (например: «300 USD; 500 RUB»). Для этого воспользуемся функцией ВычислитьВыражениеСГруппировкойТаблицаЗначений. Это позволяет динамически сформировать текстовое представление итога прямо в ячейке СКД.
Рассмотрим реализацию такого подхода на примере:
СоединитьСтроки(
ВычислитьВыражениеСГруппировкойТаблицаЗначений(
"Формат(isnull(Сумма(СуммаВВалюте), 0), ""ЧДЦ=2"") + "" "" + Валюта",
"Валюта",
,
"isnull(Сумма(СуммаВВалюте), 0) <> 0"
)
)
Разберем, что происходит в этой формуле:
ВычислитьВыражениеСГруппировкойТаблицаЗначений разбивает данные по валютам внутри итоговой ячейки.Формат.СоединитьСтроки объединяет полученные фрагменты в единую строку через разделитель.Иногда требуется вывести не просто валюты, а сложные статистические данные, например, «Получено: 10, Ожидается: 20 из 30». Это можно реализовать с помощью метода ВычислитьВыражениеСГруппировкойМассив. Данный подход позволяет считать количество записей по определенному условию, например, по булевым флагам, и выводить их в одну строку.
"Получено: " +
Строка(Сумма(ВычислитьВыражениеСГруппировкойМассив("1",,"Флаг = ИСТИНА"))) +
"; Ожидается: " +
Строка(Сумма(ВычислитьВыражениеСГруппировкойМассив("1",,"Флаг = Ложь")))
При выборе метода учитывайте объем данных в вашем отчете:
ВычислитьВыражение... могут замедлять формирование отчета, так как они выполняют расчеты для каждой итоговой ячейки отдельно.Используя эти методы, вы сможете превратить отчет из простого списка с неверными цифрами в полноценный аналитический инструмент, который будет понятен любому пользователю.