СКД — что сделать, чтобы появились итоги в отчете?

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

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

Настройка ресурсов — фундамент итогов

Первое, с чего мы должны начать анализ, — это проверка закладки Ресурсы в схеме компоновки данных. В СКД поле считается итоговым только в том случае, если оно явно определено как ресурс. Если вы просто добавили поле в выбранные поля отчета, оно будет выводиться только в детальных записях.

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


Сумма(СуммаПриход)
Сумма(СуммаРасход)

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

Проблема кэширования и пользовательских настроек

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

Существует два основных способа решения этой проблемы:

  1. Сброс к стандартным настройкам: В режиме «1С:Предприятие» откройте настройки отчета и выберите команду «Установить стандартные настройки». Это заставит систему перечитать структуру из схемы компоновки данных (XML) и применить актуальный состав полей и ресурсов.
  2. Переименование отчета: Если сброс настроек по каким-то причинам не помогает или отчет используется как внешний, можно временно изменить имя и синоним отчета в конфигураторе. Система воспримет его как новый объект и создаст для него чистую запись в хранилище настроек. Как показывает практика, это «радикальное» средство часто помогает, когда 1С ведет себя неочевидным образом.

Использование сложных формул в ресурсах

Иногда разработчики пытаются использовать сложные конструкции для расчета итогов. Разберем пример из обсуждения, где предлагалось использовать функцию ВычислитьВыражениеСГруппировкойМассив:

Сумма(ВычислитьВыражениеСГруппировкойМассив("Сумма(СуммаКонечныйОстаток)"))

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

Настройка расположения итогов в «Других настройках»

Если ресурсы настроены, но колонки с итогами просто отсутствуют в таблице, нам следует проверить вкладку Другие настройки. В СКД существует несколько параметров, управляющих видимостью итогов:

Роли полей и работа с остатками

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

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

Иерархия и выбранные поля группировок

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

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

Обработка пустых значений (NULL)

Напоследок затронем вопрос чистоты данных. В некоторых случаях агрегатные функции могут некорректно отрабатывать, если из запроса приходят значения NULL. Хотя СКД в большинстве случаев игнорирует NULL при суммировании, хорошим тоном считается использование функции ЕСТЬNULL непосредственно в тексте запроса:


ВЫБРАТЬ
    ЕСТЬNULL(Продажи.СуммаОборот, 0) КАК СуммаПродаж,
    ...

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

← На главную