Отчеты и Аналитика · 10 мин
Как посчитать итоги в СКД 1С
Как настроить итоги в СКД 1С: ресурсы и функции агрегации, итоги по группировкам и общие итоги, выражения СКД, типичные ошибки и проверка результата.
Итоги в системе компоновки данных (СКД) — это агрегированные значения ресурсов: суммы, количества, средние и другие показатели, рассчитанные по группировкам или по всему отчёту. Чтобы получить корректные итоги, недостаточно просто добавить поле в запрос — нужно правильно объявить ресурсы, проверить выражения агрегации и понять, на каком уровне группировки итог выводится.
Большинство проблем с итогами в СКД сводится к трём причинам: поле не добавлено в ресурсы, ресурс рассчитывается не по всем группировкам, либо в выражении ресурса используется функция, несовместимая с типом данных. Ниже разобраны все шаги — от запроса до проверки итоговой строки в готовом отчёте.
Как СКД рассчитывает итоги: базовый принцип
В СКД итог — это значение ресурса, вычисленное для конкретной группировки. Система берёт детальные записи, попадающие в группу, и применяет к полю ресурса функцию агрегации. Например, если ресурс «СуммаПродажи» объявлен с функцией «Сумма», то на уровне группировки «Контрагент» СКД сложит суммы всех строк этого контрагента.
Важно понимать: поле, которое не объявлено ресурсом, в итогах не участвует. Если вы добавили в запрос поле «Сумма», но на закладке «Ресурсы» его нет, то в строках группировок и в общем итоге это поле будет пустым или выдаст ошибку при использовании агрегатных выражений в вычисляемых полях.
Итоги всегда считаются от детальных записей вверх по иерархии группировок: сначала по нижней группировке, затем по вышестоящей, затем общий итог. Это значит, что итог по группе — не сумма итогов подчинённых строк, а самостоятельный расчёт по детальным данным, что исключает накопление ошибок округления.
Настройка ресурсов на закладке «Ресурсы»
Откройте схему компоновки данных в конфигураторе или в консоли СКД и перейдите на закладку «Ресурсы». Здесь для каждого итогового поля указываются три параметра: поле, выражение (функция агрегации) и группировки, по которым ресурс рассчитывается.
Для типового отчёта по продажам достаточно добавить ресурс «СуммаОборот» с выражением Сумма(СуммаОборот) и оставить колонку «Рассчитывать по» пустой — тогда ресурс будет считаться по всем группировкам. Если заполнить эту колонку конкретной группировкой, итог будет выводиться только на её уровне, а на остальных останется пустым.
- 1Откройте схему компоновки данных, закладка «Ресурсы»
- 2Нажмите «Добавить» и выберите числовое поле из доступных
- 3В колонке «Выражение» укажите функцию, например Сумма(СуммаОборот)
- 4Оставьте «Рассчитывать по» пустым для расчёта по всем группировкам
- 5Перейдите в настройки отчёта и убедитесь, что ресурс добавлен в выбранные поля
- 6Сформируйте отчёт и проверьте значения в строках группировок
Если нужного поля нет в списке доступных на закладке «Ресурсы», проверьте запрос набора данных: поле должно присутствовать в выборке и иметь числовой тип. Поля строкового типа СКД не предложит для суммирования — для них доступно только «Количество».
Функции агрегации и выражения ресурсов
СКД поддерживает стандартные агрегатные функции: Сумма, Количество, Минимум, Максимум, Среднее. Функция «Количество» имеет два варианта: Количество(Поле) считает непустые значения, а Количество(Различные Поле) — число уникальных значений, что удобно для подсчёта количества контрагентов или номенклатуры в группе.
Выражение ресурса не обязано быть простым полем. Можно использовать конструкции языка выражений СКД, например:
Сумма(Выбор
Когда ВидОперации = "Возврат"
Тогда -СуммаОборот
Иначе СуммаОборот
Конец)
Такой приём позволяет считать итог с условием без дополнительных вычисляемых полей. Важно, чтобы функция агрегации была самой внешней в выражении: сначала вычисляется внутреннее выражение для каждой детальной записи, затем результат агрегируется.
Итоги по группировкам и общий итог
Итог по группировке появляется автоматически, если в выбранных полях группировки (или родительских настройках) присутствует ресурс. Чтобы увидеть итог по всему отчёту, добавьте в структуру отчёта элемент «Общий итог» — он выведет одну строку с агрегированными значениями всех ресурсов по всем записям выборки.
Если общий итог не нужен, его можно отключить: в настройках отчёта на закладке «Другие настройки» есть параметры «Расположение общих итогов по горизонтали/вертикали» — установите значение «Нет». Аналогично управляется вывод итогов по группировкам через параметры «Расположение итогов» у конкретной группировки.
При работе с иерархическими группировками учтите: итог по родительскому элементу считается по детальным записям всей ветки, включая вложенные элементы. Если в данных встречаются задвоения из-за соединений в запросе, итоги завысятся на каждом уровне — это признак ошибки в запросе, а не в настройках ресурсов.
Как проверить результат
В строке группы стоят суммы по всем ресурсам
Поля ресурсов пустые — ресурс не добавлен или не выбран в полях
Значения сходятся при ручной проверке на калькуляторе
Расхождение — вероятно, дубли строк из-за соединений в запросе
Используется Количество(Различные Ссылка)
Количество(Ссылка) завышает итог, если у документа несколько строк
Итоги по вычисляемым полям и проценты
Частая задача — вывести в итогах не сумму, а производный показатель: среднюю цену, процент выполнения, долю группы в общем итоге. Здесь действует правило: вычисляемое поле считается на каждом уровне группировки заново, и его выражение должно ссылаться на ресурсы, а не на детальные поля.
Например, для средней цены создайте вычисляемое поле «СредняяЦена» с выражением Сумма(СуммаОборот) / Сумма(КоличествоОборот). В итогах СКД подставит агрегированные значения ресурсов, и средняя цена по группе будет корректной — это не то же самое, что среднее от цен детальных строк.
Для расчёта доли в процентах от общего итога используйте функцию ВычислитьВыражение с указанием группировки «ОбщийИтог»:
Сумма(СуммаОборот) /
ВычислитьВыражение("Сумма(СуммаОборот)", , "ОбщийИтог") * 100
Функция позволяет обратиться к значению ресурса на другом уровне группировки. Учитывайте деление на ноль: если общий итог может быть пустым, оберните выражение в «Выбор Когда ... Тогда 0».
Если вычисляемое поле показывает правильные значения в детальных строках, но нули или пусто в итогах — почти всегда причина в том, что выражение ссылается на поле, не объявленное ресурсом. Добавьте это поле в ресурсы, даже если само по себе оно в отчёт не выводится.
Типичные ошибки и их устранение
Самая частая ошибка — пустые итоги при заполненных детальных строках. Причина: поле не добавлено на закладку «Ресурсы» или ресурс не включён в выбранные поля на уровне группировки. Лечится проверкой обеих настроек.
Вторая типичная ситуация — итоги завышены ровно в несколько раз. Это следствие дублирования строк при соединении таблиц в запросе, например при соединении документа с табличной частью без группировки. Проверьте запрос в консоли запросов и добавьте группировку или уберите лишнее соединение.
Третья ошибка — попытка суммировать в запросе и в СКД одновременно. Если запрос уже содержит «СУММА()» с группировкой, а в СКД ресурс снова объявлен как «Сумма», итоги по верхним группировкам будут корректны только если детальные записи не терялись. Рекомендуемый подход — отдавать из запроса максимально детальные данные, а всю агрегацию выполнять средствами СКД.
Проверка итогов и границы самостоятельной настройки
После настройки сформируйте отчёт на небольшом периоде, где можно вручную проверить цифры: возьмите одну группировку с двумя-тремя документами и сравните итог с суммой по документам. Затем проверьте, что общий итог равен сумме итогов групп верхнего уровня.
Если отчёт строится на больших объёмах, полезно временно включить детальные записи и убедиться, что их количество соответствует ожиданиям — это выявляет дубли из запроса. Также проверьте итоги при включённых отборах: отбор в настройках СКД применяется до расчёта итогов, поэтому итог должен соответствовать отфильтрованным данным.
Самостоятельная настройка безопасна, пока вы работаете с внешним отчётом или пользовательским вариантом настроек. Изменение встроенной схемы в конфигураторе требует снятия объекта с поддержки или включения возможности изменения — оцените последствия для будущих обновлений, прежде чем править типовой отчёт.
Что важно запомнить
Итоги в СКД считаются только по ресурсам. Объявите числовое поле ресурсом с нужной функцией агрегации, не заполняйте «Рассчитывать по», если итог нужен на всех уровнях, и используйте группировку «Общий итог» для итоговой строки отчёта. Завышенные итоги почти всегда означают дубли в запросе, а пустые — отсутствие поля в ресурсах или выбранных полях.
Частые вопросы по итогам в СКД
Почему в итогах пусто, хотя детальные строки заполнены?
Проверьте две вещи: добавлено ли поле на закладку «Ресурсы» схемы компоновки и включён ли ресурс в выбранные поля на уровне группировки или всего отчёта. Чаще всего причина именно в отсутствии ресурса — СКД не агрегирует поля автоматически.
Как вывести итог только по общему отчёту, без итогов по группировкам?
У группировок в настройках установите параметр «Расположение итогов» в значение «Нет», а общий итог оставьте включённым. Альтернатива — на закладке «Ресурсы» в колонке «Рассчитывать по» указать только «ОбщийИтог».
Как посчитать количество уникальных документов в итоге?
Используйте ресурс с выражением «Количество(Различные Ссылка)». Обычное «Количество(Ссылка)» посчитает каждую строку выборки, и документ с несколькими строками табличной части будет учтён несколько раз.
Можно ли считать итог по одной группировке иначе, чем по другой?
Да. Создайте два ресурса для одного поля с разными выражениями и в колонке «Рассчитывать по» укажите для каждого свою группировку. Например, для остатков на уровне периода используют одно выражение, а для оборотов — другое.
Почему общий итог не равен сумме итогов по группам?
Обычно причина в дублировании строк из-за соединений в запросе либо в записях, не попавших ни в одну группировку из-за пустых значений поля группировки. Проверьте запрос в консоли и включите вывод детальных записей для диагностики.
Как вывести итог в процентах от общего итога?
Создайте вычисляемое поле, где значение ресурса делится на результат функции «ВычислитьВыражение» с указанием группировки «ОбщийИтог», и умножьте на 100. Добавьте защиту от деления на ноль через конструкцию «Выбор Когда».