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