Работа с Системой компоновки данных (СКД) — это база для современного разработчика 1С. Однако даже опытные специалисты иногда сталкиваются с ситуацией, когда ресурсы (суммы, количества) упорно отказываются выводиться в нужных разрезах. Представим ситуацию: у нас есть отчет, где настроены группировки по Номенклатуре и Участку. В ресурсах поле Сумма определено, но в результате мы видим итоги только по Участку, а в строках с Номенклатурой — пустота.
Давайте вместе разберем эту проблему по шагам, проанализируем настройки и выясним, где может скрываться ошибка. Мы подготовили подробный гайд, который поможет вам не только решить текущую задачу, но и глубже понять механизмы работы компоновщика итогов.
Это самая распространенная ситуация. Когда мы добавляем поле в список ресурсов, СКД по умолчанию предполагает, что итоги нужно считать по всем доступным группировкам. Однако в процессе редактирования разработчик может случайно ограничить этот список. Проанализируем колонку «Рассчитывать по».
Если в этой колонке для поля Сумма вы указали конкретное измерение, например, только Участок, то платформа будет игнорировать все остальные уровни иерархии отчета. Чтобы исправить это, выполним следующие действия:
СуммаОборот).Номенклатуру или, что чаще всего предпочтительнее, очистим этот список полностью.Иногда корень проблемы лежит глубже — непосредственно в определении полей набора данных. Если СКД не понимает, что поле является измерением или имеет отношение к иерархии, итоги могут не собираться. Проанализируем вкладку «Наборы данных».
Обратим внимание на колонку «Роль». Для полей, по которым мы группируем данные (в нашем случае Номенклатура, Участок, Дата), должны быть правильно расставлены флаги. Если у поля стоит роль «Без итогов», то никакие ресурсы по этой группировке считаться не будут. Также важно проверить, не является ли поле частью составного типа, который СКД не может однозначно интерпретировать для расчета.
Если мы используем функции агрегации в самом запросе, убедимся, что типы данных возвращаемых значений — числовые. Попытка суммировать «строку», которая выглядит как число, приведет к пустому результату в итоговых полях.
Как было замечено в обсуждении, иногда проблема кроется в структуре самого отчета. Допустим, у нас есть иерархия группировок:
НоменклатураДатаУчастокЕсли для группировки Дата не определен расчет ресурсов или в ресурсах явно указано «не рассчитывать по полю Дата», это может разорвать цепочку суммирования для вышестоящих группировок. СКД строит дерево расчета снизу вверх или сверху вниз в зависимости от настроек, и «пустое» звено в виде даты без итогов иногда блокирует передачу значений на уровень номенклатуры.
Рассмотрим пример настройки ресурса с использованием выражений, чтобы принудительно учесть все уровни:
Сумма(СуммаОборот)
Попробуйте добавить это выражение в ресурсы и в колонке «Рассчитывать по» явно указать все измерения, включая те, по которым суммы изначально не требовались. Это часто помогает «протолкнуть» расчет наверх.
Выясним, не скрыты ли итоги настройками оформления. В СКД есть параметры, которые управляют видимостью итоговых строк и колонок. Перейдем на вкладку «Настройки», выберем нужный вариант отчета и откроем вкладку «Прочие настройки».
Нас интересуют следующие параметры:
Нет, итоги будут рассчитаны внутри системы, но не выведены в таблицу. Установим значение Начало, Конец или Начало и конец.Нет, если вам нужны финальные суммы по всему отчету.Проанализируем текст запроса. Если мы используем ЛЕВОЕ СОЕДИНЕНИЕ (Left Join) и для каких-то записей номенклатуры нет данных на участке, поле суммы может содержать значение NULL. Хотя СКД старается обрабатывать NULL как 0, в сложных выражениях ресурсов это может приводить к ошибкам.
Рекомендуем всегда оборачивать числовые поля в запросе функцией ЕСТЬNULL. Посмотрим на пример кода в запросе:
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
ЕСТЬNULL(Продажи.СуммаОборот, 0) КАК СуммаОборот,
Продажи.Участок КАК Участок
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода) КАК Продажи
Такой подход гарантирует, что в систему компоновки придут чистые числовые данные, готовые к агрегации.
Часто разработчик вносит изменения в конфигураторе, запускает отчет, но ничего не меняется. Причина проста: система сохранила старые настройки пользователя (в кэше или в справочнике «Варианты отчетов»).
Чтобы убедиться, что мы видим актуальную картину, выполним следующие шаги в режиме «1С:Предприятие»:
Только после сброса к заводским установкам схемы компоновки мы сможем увидеть результат правок, внесенных в ресурсы или роли полей.
Если вы используете вид группировки «Иерархия» (например, Номенклатура Иерархия), то расчет итогов для родительских групп (папок) требует, чтобы поле ресурса было доступно для этой иерархии. Если в ресурсах вы указали расчет по полю Номенклатура, а в настройках отчета выбрали Номенклатура Иерархия, проверьте, чтобы итоги подхватывались корректно. Иногда помогает добавление в ресурсы еще одной строки с тем же полем, но с явным указанием иерархического измерения в колонке «Рассчитывать по».
Резюмируем: если у вас не считаются итоги по Номенклатуре, в первую очередь проверьте вкладку «Ресурсы» и убедитесь, что колонка «Рассчитывать по» либо пуста, либо содержит Номенклатуру. Затем проверьте настройки расположения итогов и сбросьте параметры отчета к стандартным. В 90% случаев это решает проблему.