Как правильно настроить расчет общих итогов в СКД?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с Системой компоновки данных (СКД) часто преподносит сюрпризы, особенно когда дело касается вывода итоговых значений. Программисты нередко сталкиваются с ситуацией, когда детальные записи в отчете отображаются корректно, а в строке «Общие итоги» выводятся либо неверные цифры (например, среднее арифметическое вместо суммы), либо пустота. Разберем детально, почему это происходит и как настроить отчет так, чтобы итоги всегда сходились.

Агрегатные функции в ресурсах: явное указание выражений

Одной из самых распространенных причин некорректных итогов является неправильная настройка на закладке «Ресурсы». Рассмотрим ситуацию: у вас есть вычисляемое поле, например, ПФРОборот. Если вы просто добавите его в список ресурсов и оставите стандартные настройки, СКД может попытаться рассчитать итог по своему алгоритму, что часто приводит к получению «средних» значений вместо ожидаемой суммы.

Для решения этой проблемы проанализируем настройки колонки «Выражение». Вместо того чтобы полагаться на автоматику, необходимо явно прописать агрегатную функцию. Например:

Сумма(ПФРОборот)

Важно понимать разницу между суммой полей и суммой выражений. Если ваше поле рассчитывается как Цена * Количество, то в ресурсах правильнее писать Сумма(Цена * Количество). Если же вы напишете Сумма(Цена) * Сумма(Количество), результат будет математически иным (сумма цен всех строк, умноженная на общую сумму количеств), что является грубой логической ошибкой в контексте большинства отчетов.

Использование колонки «Рассчитывать по...»

Рассмотрим случай, когда итоги нужны не везде. В СКД на закладке ресурсов есть колонка «Рассчитывать по...». По умолчанию она пуста, что означает расчет ресурса по всем доступным группировкам и по общим итогам. Однако, если вы начали настраивать этот список вручную, убедитесь, что в нем отмечен пункт <Общие итоги>.

Выясним причину, почему это важно: если вы укажете расчет только по конкретной группировке (например, «Контрагент»), то в итоговой строке в самом низу отчета значение будет пустым, так как уровень «Общих итогов» не входит в список разрешенных для расчета. Проверьте этот флаг в первую очередь, если итоги в группировках есть, а «подвал» отчета пуст.

Сложные расчеты: функция ВычислитьВыражениеСГруппировкойМассив

Иногда стандартной суммы недостаточно. Например, если нам нужно посчитать «сумму средних значений» или «сумму максимумов по документам». В таких случаях обычное Сумма(Поле) выдаст неверный результат. Разберем по шагам использование мощного инструмента СКД — функции ВычислитьВыражениеСГруппировкойМассив.

Представим, что нам нужно рассчитать итог как сумму максимальных скидок по каждому клиенту. В поле выражения ресурса мы напишем:

Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(Скидка)", "Контрагент"))

Проанализируем, что здесь происходит: СКД сначала внутри каждой группы «Контрагент» находит максимальное значение скидки, помещает эти значения в массив, а затем итоговая функция Сумма складывает элементы этого массива для вывода в общих итогах. Это золотой стандарт для решения задач со сложной логикой агрегации.

Обработка значений NULL

Посмотрим на ситуацию, когда данные в запросе могут отсутствовать. Если в вычисляемом поле участвует несколько реквизитов и хотя бы один из них имеет значение NULL, результат всего выражения может стать пустым. Это напрямую влияет на итоги — они будут занижены или обнулены.

Рекомендуется всегда оборачивать числовые поля в функцию проверки. Рассмотрим пример для выражения ресурса:

Сумма(ЕСТЬNULL(Поле1, 0) + ЕСТЬNULL(Поле2, 0))

Это гарантирует, что отсутствие данных в одной из колонок не «сломает» расчет всей строки и итогов по отчету.

Влияние версии платформы 1С

Бывают случаи, когда настройки выполнены идеально, но итоги всё равно не выводятся. Как показывает практика (и сообщения пользователей), определенные версии платформы (например, 8.3.12.1685) содержали внутренние ошибки в механизмах компоновки данных. Если вы столкнулись с тем, что элементарный запрос в простом отчете без группировок не выводит итоги, попробуйте запустить отчет на более свежей версии платформы (8.3.15 и выше).

Если обновление платформы в данный момент невозможно, попробуйте следующие обходные пути:

  1. В настройках набора данных (закладка «Связи») установите флаг «Обязательное» для связей, если используете несколько наборов.
  2. Перенесите расчет вычисляемого поля непосредственно в текст SQL-запроса, чтобы СКД получала уже готовое число, а не высчитывала его на лету.

Настройки расположения итогов

Напоследок проверим визуальные настройки. Перейдем на закладку «Настройки», выберем отчет в целом и откроем вкладку «Другие настройки». Найдем параметры:

Если здесь установлено значение «Нет», то никакие формулы в ресурсах не заставят программу вывести итоговую строку. Также убедитесь, что в пользовательских настройках (в режиме «1С:Предприятие») флаг вывода итогов не снят случайно самим пользователем.

Совместное применение этих методов — от явного прописывания Сумма() в ресурсах до контроля платформенных багов — позволяет создавать надежные и точные отчеты в СКД.

← На главную