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