Почему в отчете СКД неправильно рассчитывается итог по ресурсу без определенной группировки и как это исправить?

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

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

Причины искажения итогов в СКД

Разберем механизм работы компоновщика данных. Основные причины расхождения итогов заключаются в следующем:

  1. Оптимизация запроса к источникам данных: Если поле (например, Номенклатура) не включено в структуру выводимых группировок и колонок отчета, СКД исключает его из итогового текста SQL-запроса, отправляемого к СУБД. В результате данные сворачиваются до уровня запрошенных полей еще на стороне базы данных. Если расчет ресурса в регистре или запросе завязан на логику срезов, нелинейных условий или остатков по измерениям, предварительное сворачивание искажает результат.
  2. Особенности вычисления выражений ресурсов: СКД рассчитывает итог ресурса не как арифметическую сумму строк нижнего уровня, а применяет формулу ресурса к уже предварительно просуммированным полям выборки. Если ресурс рассчитывается по формуле разницы, условий или коэффициентов, итог формулы не равен сумме значений формул в детальных строках.
  3. Ненастроенные роли полей: При отсутствии корректного указания ролей измерений компоновщик не всегда может правильно определить зависимость ресурса от конкретных аналитик набора данных.

Способ 1. Установка признака «Обязательное» для поля

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

  1. Откроем схему компоновки данных и перейдем на вкладку Наборы данных.
  2. В таблице полей найдем измерение, отсутствие которого ломает расчет (например, Номенклатура).
  3. Установим флажок в колонке Обязательное (или Автополе в зависимости от версии схемы).

В этом случае платформа 1С всегда включает данное поле в итоговый SQL-запрос и сохраняет нужный уровень детализации записей при обработке на сервере.

Способ 2. Использование функции «ВычислитьВыражениеСГруппировкойМассив»

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

Посмотрим на пример формулы для ресурса:

Сумма(ВычислитьВыражениеСГруппировкойМассив("Сумма(Разница)", "Номенклатура"))

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

Способ 3. Вычисление разницы на уровне ресурсов

Когда ресурс представляет собой разность двух показателей (например, сумм прихода и расхода), частой ошибкой является передача разницы прямо из текста запроса через вычисляемое поле. В таком случае на вкладке Ресурсы следует настраивать расчет ресурса как разность агрегированных сумм:

Сумма(СуммаПлан) - Сумма(СуммаФакт)

Это исключает ошибки агрегации при сворачивании строк на любом уровне иерархии группировок отчета.

Индикаторы и значки в структуре настроек СКД

При настройке структуры отчета на вкладке Настройки рядом с элементами группировок могут появляться специальные пиктограммы. Выясним их назначение:

  1. Значок условного оформления: Появляется на строке группировки или отчета, если для данного элемента настроены правила на вкладке «Условное оформление». Он информирует разработчика о наличии переопределенного форматирования (цвета, шрифта, формата или текста).
  2. Значок сортировки: Отображается, когда в настройках конкретной группировки явно переопределен порядок сортировки полей.

Если такие настройки были заданы случайно, достаточно перейти на соответствующую подчиненную вкладку (например, «Условное оформление» выбранной группировки) и очистить ненужные строки, после чего пиктограмма пропадет.

← На главную