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

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

В каких настройках отчета 1С проводить вычисления главных показателей

Разбираем, в каких настройках отчета 1С выполняются вычисления главных показателей: ресурсы СКД, вычисляемые поля, итоги, группировки и пользовательские выражения.

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

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

Ресурсы СКД — главное место расчёта агрегатных показателей

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

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

В выражении ресурса допустимы не только простые агрегаты, но и формулы: например, Сумма(СуммаОборот) / Количество(РАЗЛИЧНЫЕ Номенклатура) даст среднюю сумму на позицию.

Вычисляемые поля: формулы до агрегации

Вкладка «Вычисляемые поля» предназначена для показателей, которые должны быть рассчитаны для каждой строки данных ещё до группировки. Классический пример — маржа: СуммаПродаж - СуммаСебестоимости. Такое поле появляется в наборе данных наравне с полями запроса и дальше может использоваться как ресурс, участвовать в отборах и сортировках.

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

При создании вычисляемого поля обязательно задавайте тип значения и, для чисел, достаточную разрядность. Поле без явного типа может привести к потере дробной части или к ошибкам сравнения в отборах. Также проверяйте поведение при NULL: операция с NULL даёт NULL, поэтому в формулах используйте конструкцию ЕСТЬNULL(Поле, 0).

Настройки отчёта в режиме «Предприятие»: что может пользователь

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

Пользовательские поля — способ создать собственный показатель без изменения конфигурации. Поле-выбор позволяет задать условия вида «если склад = Основной, то сумма, иначе 0», а поле-выражение — формулу над доступными полями. Для агрегированных выражений предусмотрены отдельные поля: «Выражение детальных записей» и «Выражение итоговых записей», что позволяет корректно считать, например, средневзвешенные показатели.

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

Выражения итогов и функции языка выражений СКД

Для показателей, которые нельзя получить простой агрегацией — доля в итоге, процент прироста, нарастающий итог — используются выражения итогов и встроенные функции языка выражений компоновки. Например, функция ПроцентСредиГруппы или конструкция ВычислитьВыражение("Сумма(Сумма) / Сумма(Сумма)", , , "Первая", "Текущая") позволяют посчитать долю строки в общем итоге.

Функция ВычислитьВыражение (EvaluateExpression) — самый гибкий инструмент: она принимает выражение, указание области применения (группировка, общий итог) и границы обхода записей. С её помощью реализуются нарастающие итоги, ранжирование и показатели, зависящие от соседних строк. Однако такие выражения требовательны к производительности на больших объёмах данных, поэтому их применяют точечно.

Где какой показатель считать

Ресурс с агрегатной функцией

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

Вычисляемое поле

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

Пользовательское поле

Подходит для настройки без изменения конфигурации. Ограничено полями, доступными в наборе данных отчёта.

ВычислитьВыражение в итогах

Подходит для долей, нарастающих итогов, рангов. Требует аккуратности с производительностью.

Запрос и наборы данных: расчёт на уровне источника

Часть показателей выгоднее считать не средствами СКД, а прямо в запросе набора данных. Виртуальные таблицы регистров (Обороты, ОстаткиИОбороты) уже возвращают агрегированные значения, а конструкции СУММА, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ..) и ВЫБОР КОГДА в запросе выполняются на сервере СУБД, что обычно быстрее постобработки в компоновке.

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

Типичные ошибки
01
Вложенные агрегатные функции в ресурсе — СКД отказывается формировать отчёт или выдаёт ошибку выражения
02
Расчёт процента от итога в вычисляемом поле — на момент расчёта итога не существует, результат неверный
03
Ресурс не включён для группировки или общего итога — показатель пуст в итоговых строках
04
Игнорирование NULL в формулах — строки с пустыми значениями выпадают из расчёта
05
Двойная агрегация: сумма посчитана и в запросе, и в ресурсе — итоги завышаются

Проверка корректности вычислений

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

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

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

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

Общий итог показателя
Норма

Совпадает с контрольным отчётом по регистру

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

Расходится — проверять отборы и формулу

Сумма долей по группе
Норма

Равна 100% (с точностью до округления)

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

Больше или меньше — ошибка в выражении итога

Детальные строки
Норма

Каждая строка совпадает с первичным документом

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

Разрывы — проблема в соединении наборов данных

Пустые значения
Норма

NULL обработаны через ЕСТЬNULL

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

Строки пропадают из расчёта

Ограничения и когда нужен разработчик

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

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

Итог

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

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

Частые вопросы

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

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

Можно ли посчитать процент от итога без доработки конфигурации?

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

Чем вычисляемое поле отличается от ресурса?

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

Где считать показатель быстрее: в запросе или в ресурсах?

Если показатель не зависит от структуры группировок, агрегация в запросе обычно быстрее, потому что выполняется на сервере СУБД. Но если пользователь должен менять группировки и видеть пересчитанные итоги, показатель нужно выносить в ресурсы СКД.

Почему формула с агрегатом внутри агрегата выдаёт ошибку?

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

Безопасно ли менять настройки отчёта обычному пользователю?

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