Работа с Системой компоновки данных (СКД) часто преподносит сюрпризы, особенно когда дело касается вывода итоговых значений. Программисты нередко сталкиваются с ситуацией, когда детальные записи в отчете отображаются корректно, а в строке «Общие итоги» выводятся либо неверные цифры (например, среднее арифметическое вместо суммы), либо пустота. Разберем детально, почему это происходит и как настроить отчет так, чтобы итоги всегда сходились.
Одной из самых распространенных причин некорректных итогов является неправильная настройка на закладке «Ресурсы». Рассмотрим ситуацию: у вас есть вычисляемое поле, например, ПФРОборот. Если вы просто добавите его в список ресурсов и оставите стандартные настройки, СКД может попытаться рассчитать итог по своему алгоритму, что часто приводит к получению «средних» значений вместо ожидаемой суммы.
Для решения этой проблемы проанализируем настройки колонки «Выражение». Вместо того чтобы полагаться на автоматику, необходимо явно прописать агрегатную функцию. Например:
Сумма(ПФРОборот)
Важно понимать разницу между суммой полей и суммой выражений. Если ваше поле рассчитывается как Цена * Количество, то в ресурсах правильнее писать Сумма(Цена * Количество). Если же вы напишете Сумма(Цена) * Сумма(Количество), результат будет математически иным (сумма цен всех строк, умноженная на общую сумму количеств), что является грубой логической ошибкой в контексте большинства отчетов.
Рассмотрим случай, когда итоги нужны не везде. В СКД на закладке ресурсов есть колонка «Рассчитывать по...». По умолчанию она пуста, что означает расчет ресурса по всем доступным группировкам и по общим итогам. Однако, если вы начали настраивать этот список вручную, убедитесь, что в нем отмечен пункт <Общие итоги>.
Выясним причину, почему это важно: если вы укажете расчет только по конкретной группировке (например, «Контрагент»), то в итоговой строке в самом низу отчета значение будет пустым, так как уровень «Общих итогов» не входит в список разрешенных для расчета. Проверьте этот флаг в первую очередь, если итоги в группировках есть, а «подвал» отчета пуст.
Иногда стандартной суммы недостаточно. Например, если нам нужно посчитать «сумму средних значений» или «сумму максимумов по документам». В таких случаях обычное Сумма(Поле) выдаст неверный результат. Разберем по шагам использование мощного инструмента СКД — функции ВычислитьВыражениеСГруппировкойМассив.
Представим, что нам нужно рассчитать итог как сумму максимальных скидок по каждому клиенту. В поле выражения ресурса мы напишем:
Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Скидка)", "Контрагент"))
Проанализируем, что здесь происходит: СКД сначала внутри каждой группы «Контрагент» находит максимальное значение скидки, помещает эти значения в массив, а затем итоговая функция Сумма складывает элементы этого массива для вывода в общих итогах. Это золотой стандарт для решения задач со сложной логикой агрегации.
Посмотрим на ситуацию, когда данные в запросе могут отсутствовать. Если в вычисляемом поле участвует несколько реквизитов и хотя бы один из них имеет значение NULL, результат всего выражения может стать пустым. Это напрямую влияет на итоги — они будут занижены или обнулены.
Рекомендуется всегда оборачивать числовые поля в функцию проверки. Рассмотрим пример для выражения ресурса:
Сумма(ЕСТЬNULL(Поле1, 0) + ЕСТЬNULL(Поле2, 0))
Это гарантирует, что отсутствие данных в одной из колонок не «сломает» расчет всей строки и итогов по отчету.
Бывают случаи, когда настройки выполнены идеально, но итоги всё равно не выводятся. Как показывает практика (и сообщения пользователей), определенные версии платформы (например, 8.3.12.1685) содержали внутренние ошибки в механизмах компоновки данных. Если вы столкнулись с тем, что элементарный запрос в простом отчете без группировок не выводит итоги, попробуйте запустить отчет на более свежей версии платформы (8.3.15 и выше).
Если обновление платформы в данный момент невозможно, попробуйте следующие обходные пути:
Напоследок проверим визуальные настройки. Перейдем на закладку «Настройки», выберем отчет в целом и откроем вкладку «Другие настройки». Найдем параметры:
Если здесь установлено значение «Нет», то никакие формулы в ресурсах не заставят программу вывести итоговую строку. Также убедитесь, что в пользовательских настройках (в режиме «1С:Предприятие») флаг вывода итогов не снят случайно самим пользователем.
Совместное применение этих методов — от явного прописывания Сумма() в ресурсах до контроля платформенных багов — позволяет создавать надежные и точные отчеты в СКД.