К статье
Практический материал

Отчеты и Аналитика · 10 мин

Как посчитать итоги в СКД 1С

Как настроить итоги в СКД 1С: ресурсы и функции агрегации, итоги по группировкам и общие итоги, выражения СКД, типичные ошибки и проверка результата.

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

Большинство проблем с итогами в СКД сводится к трём причинам: поле не добавлено в ресурсы, ресурс рассчитывается не по всем группировкам, либо в выражении ресурса используется функция, несовместимая с типом данных. Ниже разобраны все шаги — от запроса до проверки итоговой строки в готовом отчёте.

Как СКД рассчитывает итоги: базовый принцип

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

Важно понимать: поле, которое не объявлено ресурсом, в итогах не участвует. Если вы добавили в запрос поле «Сумма», но на закладке «Ресурсы» его нет, то в строках группировок и в общем итоге это поле будет пустым или выдаст ошибку при использовании агрегатных выражений в вычисляемых полях.

Итоги всегда считаются от детальных записей вверх по иерархии группировок: сначала по нижней группировке, затем по вышестоящей, затем общий итог. Это значит, что итог по группе — не сумма итогов подчинённых строк, а самостоятельный расчёт по детальным данным, что исключает накопление ошибок округления.

Настройка ресурсов на закладке «Ресурсы»

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

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

Как добавить ресурс в СКД
  1. 1
    Откройте схему компоновки данных, закладка «Ресурсы»
  2. 2
    Нажмите «Добавить» и выберите числовое поле из доступных
  3. 3
    В колонке «Выражение» укажите функцию, например Сумма(СуммаОборот)
  4. 4
    Оставьте «Рассчитывать по» пустым для расчёта по всем группировкам
  5. 5
    Перейдите в настройки отчёта и убедитесь, что ресурс добавлен в выбранные поля
  6. 6
    Сформируйте отчёт и проверьте значения в строках группировок

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

Функции агрегации и выражения ресурсов

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

Выражение ресурса не обязано быть простым полем. Можно использовать конструкции языка выражений СКД, например:

Сумма(Выбор

Когда ВидОперации = "Возврат"

Тогда -СуммаОборот

Иначе СуммаОборот

Конец)

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

Итоги по группировкам и общий итог

Итог по группировке появляется автоматически, если в выбранных полях группировки (или родительских настройках) присутствует ресурс. Чтобы увидеть итог по всему отчёту, добавьте в структуру отчёта элемент «Общий итог» — он выведет одну строку с агрегированными значениями всех ресурсов по всем записям выборки.

Если общий итог не нужен, его можно отключить: в настройках отчёта на закладке «Другие настройки» есть параметры «Расположение общих итогов по горизонтали/вертикали» — установите значение «Нет». Аналогично управляется вывод итогов по группировкам через параметры «Расположение итогов» у конкретной группировки.

При работе с иерархическими группировками учтите: итог по родительскому элементу считается по детальным записям всей ветки, включая вложенные элементы. Если в данных встречаются задвоения из-за соединений в запросе, итоги завысятся на каждом уровне — это признак ошибки в запросе, а не в настройках ресурсов.

Контрольные точки

Как проверить результат

Итог по группировке заполнен
Норма

В строке группы стоят суммы по всем ресурсам

Тревожный признак

Поля ресурсов пустые — ресурс не добавлен или не выбран в полях

Общий итог равен сумме итогов верхних группировок
Норма

Значения сходятся при ручной проверке на калькуляторе

Тревожный признак

Расхождение — вероятно, дубли строк из-за соединений в запросе

Количество документов в итоге
Норма

Используется Количество(Различные Ссылка)

Тревожный признак

Количество(Ссылка) завышает итог, если у документа несколько строк

Итоги по вычисляемым полям и проценты

Частая задача — вывести в итогах не сумму, а производный показатель: среднюю цену, процент выполнения, долю группы в общем итоге. Здесь действует правило: вычисляемое поле считается на каждом уровне группировки заново, и его выражение должно ссылаться на ресурсы, а не на детальные поля.

Например, для средней цены создайте вычисляемое поле «СредняяЦена» с выражением Сумма(СуммаОборот) / Сумма(КоличествоОборот). В итогах СКД подставит агрегированные значения ресурсов, и средняя цена по группе будет корректной — это не то же самое, что среднее от цен детальных строк.

Для расчёта доли в процентах от общего итога используйте функцию ВычислитьВыражение с указанием группировки «ОбщийИтог»:

Сумма(СуммаОборот) /

ВычислитьВыражение("Сумма(СуммаОборот)", , "ОбщийИтог") * 100

Функция позволяет обратиться к значению ресурса на другом уровне группировки. Учитывайте деление на ноль: если общий итог может быть пустым, оберните выражение в «Выбор Когда ... Тогда 0».

Если вычисляемое поле показывает правильные значения в детальных строках, но нули или пусто в итогах — почти всегда причина в том, что выражение ссылается на поле, не объявленное ресурсом. Добавьте это поле в ресурсы, даже если само по себе оно в отчёт не выводится.
ПЗ
Практическое замечание

Типичные ошибки и их устранение

Самая частая ошибка — пустые итоги при заполненных детальных строках. Причина: поле не добавлено на закладку «Ресурсы» или ресурс не включён в выбранные поля на уровне группировки. Лечится проверкой обеих настроек.

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

Третья ошибка — попытка суммировать в запросе и в СКД одновременно. Если запрос уже содержит «СУММА()» с группировкой, а в СКД ресурс снова объявлен как «Сумма», итоги по верхним группировкам будут корректны только если детальные записи не терялись. Рекомендуемый подход — отдавать из запроса максимально детальные данные, а всю агрегацию выполнять средствами СКД.

Типичные ошибки
01
Поле есть в запросе, но не добавлено в ресурсы — итоги пустые
02
Суммирование в запросе и повторная агрегация в СКД — двойной учёт и завышенные итоги
03
Количество(Ссылка) вместо Количество(Различные Ссылка) — итог завышен на число строк документа
04
Ресурс рассчитывается только по одной группировке — на остальных уровнях пусто
05
Деление на ресурс без проверки нуля — ошибка или пустые значения в итогах

Проверка итогов и границы самостоятельной настройки

После настройки сформируйте отчёт на небольшом периоде, где можно вручную проверить цифры: возьмите одну группировку с двумя-тремя документами и сравните итог с суммой по документам. Затем проверьте, что общий итог равен сумме итогов групп верхнего уровня.

Если отчёт строится на больших объёмах, полезно временно включить детальные записи и убедиться, что их количество соответствует ожиданиям — это выявляет дубли из запроса. Также проверьте итоги при включённых отборах: отбор в настройках СКД применяется до расчёта итогов, поэтому итог должен соответствовать отфильтрованным данным.

Самостоятельная настройка безопасна, пока вы работаете с внешним отчётом или пользовательским вариантом настроек. Изменение встроенной схемы в конфигураторе требует снятия объекта с поддержки или включения возможности изменения — оцените последствия для будущих обновлений, прежде чем править типовой отчёт.

Итог

Что важно запомнить

Итоги в СКД считаются только по ресурсам. Объявите числовое поле ресурсом с нужной функцией агрегации, не заполняйте «Рассчитывать по», если итог нужен на всех уровнях, и используйте группировку «Общий итог» для итоговой строки отчёта. Завышенные итоги почти всегда означают дубли в запросе, а пустые — отсутствие поля в ресурсах или выбранных полях.

Частые вопросы по итогам в СКД

Почему в итогах пусто, хотя детальные строки заполнены?

Проверьте две вещи: добавлено ли поле на закладку «Ресурсы» схемы компоновки и включён ли ресурс в выбранные поля на уровне группировки или всего отчёта. Чаще всего причина именно в отсутствии ресурса — СКД не агрегирует поля автоматически.

Как вывести итог только по общему отчёту, без итогов по группировкам?

У группировок в настройках установите параметр «Расположение итогов» в значение «Нет», а общий итог оставьте включённым. Альтернатива — на закладке «Ресурсы» в колонке «Рассчитывать по» указать только «ОбщийИтог».

Как посчитать количество уникальных документов в итоге?

Используйте ресурс с выражением «Количество(Различные Ссылка)». Обычное «Количество(Ссылка)» посчитает каждую строку выборки, и документ с несколькими строками табличной части будет учтён несколько раз.

Можно ли считать итог по одной группировке иначе, чем по другой?

Да. Создайте два ресурса для одного поля с разными выражениями и в колонке «Рассчитывать по» укажите для каждого свою группировку. Например, для остатков на уровне периода используют одно выражение, а для оборотов — другое.

Почему общий итог не равен сумме итогов по группам?

Обычно причина в дублировании строк из-за соединений в запросе либо в записях, не попавших ни в одну группировку из-за пустых значений поля группировки. Проверьте запрос в консоли и включите вывод детальных записей для диагностики.

Как вывести итог в процентах от общего итога?

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