Почему не считаются суммы по группировкам в СКД: разбираем причины и настраиваем отчет

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

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

Давайте вместе разберем эту проблему по шагам, проанализируем настройки и выясним, где может скрываться ошибка. Мы подготовили подробный гайд, который поможет вам не только решить текущую задачу, но и глубже понять механизмы работы компоновщика итогов.

Разбор первой причины: Настройка «Рассчитывать по...» во вкладке «Ресурсы»

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

Если в этой колонке для поля Сумма вы указали конкретное измерение, например, только Участок, то платформа будет игнорировать все остальные уровни иерархии отчета. Чтобы исправить это, выполним следующие действия:

  1. Перейдем на вкладку «Ресурсы» в схеме компоновки данных.
  2. Найдем наше поле (например, СуммаОборот).
  3. Посмотрим на колонку «Рассчитывать по...». Если там выбраны только определенные поля, добавим туда Номенклатуру или, что чаще всего предпочтительнее, очистим этот список полностью.
  4. Когда список «Рассчитывать по...» пуст, СКД автоматически рассчитывает итог для всех группировок, включая общие итоги.

Вторая причина: Роли полей в наборе данных

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

Обратим внимание на колонку «Роль». Для полей, по которым мы группируем данные (в нашем случае Номенклатура, Участок, Дата), должны быть правильно расставлены флаги. Если у поля стоит роль «Без итогов», то никакие ресурсы по этой группировке считаться не будут. Также важно проверить, не является ли поле частью составного типа, который СКД не может однозначно интерпретировать для расчета.

Если мы используем функции агрегации в самом запросе, убедимся, что типы данных возвращаемых значений — числовые. Попытка суммировать «строку», которая выглядит как число, приведет к пустому результату в итоговых полях.

Третья причина: Влияние промежуточных группировок (Проблема поля «Дата»)

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

  1. Номенклатура
  2. Дата
  3. Участок

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

Рассмотрим пример настройки ресурса с использованием выражений, чтобы принудительно учесть все уровни:

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

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

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

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

Нас интересуют следующие параметры:

Пятая причина: Работа с NULL и типы данных в запросе

Проанализируем текст запроса. Если мы используем ЛЕВОЕ СОЕДИНЕНИЕ (Left Join) и для каких-то записей номенклатуры нет данных на участке, поле суммы может содержать значение NULL. Хотя СКД старается обрабатывать NULL как 0, в сложных выражениях ресурсов это может приводить к ошибкам.

Рекомендуем всегда оборачивать числовые поля в запросе функцией ЕСТЬNULL. Посмотрим на пример кода в запросе:


ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    ЕСТЬNULL(Продажи.СуммаОборот, 0) КАК СуммаОборот,
    Продажи.Участок КАК Участок
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода) КАК Продажи

Такой подход гарантирует, что в систему компоновки придут чистые числовые данные, готовые к агрегации.

Шестая причина: Кэширование настроек пользователем

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

Чтобы убедиться, что мы видим актуальную картину, выполним следующие шаги в режиме «1С:Предприятие»:

  1. Откроем отчет.
  2. Нажмем кнопку «Еще» (или «Все действия»).
  3. Выберем пункт «Установить стандартные настройки».

Только после сброса к заводским установкам схемы компоновки мы сможем увидеть результат правок, внесенных в ресурсы или роли полей.

Седьмая причина: Особенности иерархических группировок

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

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

← На главную