При разработке отчетов на схеме компоновки данных (СКД) в системе «1С:Предприятие» разработчики часто сталкиваются с неприятной проблемой: в отчете выводятся детальные записи, но строки итогов по группировкам или общие итоги по всему отчету остаются пустыми. При этом на вкладке «Ресурсы» все формулы прописаны верно, а в настройках структуры поля добавлены в выбранные.
В этой статье мы подробно разберем, почему возникает такая ситуация, как на нее влияют пользовательские макеты оформления и как шаг за шагом восстановить расчет и отображение итогов.
Когда мы разрабатываем стандартный отчет, СКД автоматически генерирует табличный документ, самостоятельно рассчитывая ширину колонок, шрифты и выводя итоги по всем доступным ресурсам. Но как только мы создаем хотя бы один собственный Макет (например, для шапки группировки или детальных записей) на вкладке «Макеты», стандартный механизм автоматического вывода отключается для связанных областей.
Если мы вручную описали макет для группировки, платформа ожидает, что мы так же вручную опишем и макет для вывода итогов этой группировки. Если этого не сделать, ячейки на пересечении ресурсов и группировок просто останутся пустыми. Чтобы решить эту проблему, необходимо правильно связать макеты ресурсов с именованными группировками.
Разберем по шагам, как заставить СКД выводить итоги в кастомных макетах.
Шаг 1. Задание имени для группировки в настройках структуры
Для того чтобы СКД поняла, к какой именно группировке относится наш будущий макет итогов, этой группировке нужно задать уникальное программное имя. По умолчанию группировки в структуре имени не имеют.
ХозяйственнаяОперация).ГруппировкаПриход.Шаг 2. Создание макета ресурсов
Теперь необходимо связать наш ресурс (показатель, сумму) с созданной именованной группировкой.
СтоимостьПриход).ГруппировкаПриход).Шаг 3. Оформление области макета в таблице
После создания макета ресурсов нам нужно указать область ячеек на листе макета, которая будет отвечать за вывод итогов.
СуммаИтог.СуммаИтог с выражением СКД. В качестве выражения напишем формулу агрегата, например: Сумма(СтоимостьПриход).Если промежуточные итоги по группировкам появились, но в самом низу отчета строка «Итого» все равно пустая, это означает, что для общих итогов также не настроен макет. При использовании кастомных макетов группировок общие итоги требуют отдельного описания.
Для исправления этой ситуации выполним аналогичные действия:
Вторая по частоте причина, почему СКД отказывается рассчитывать итоги, кроется в исходных данных запроса. Если в отчете используется объединение нескольких наборов данных (например, остатки, приход и расход) или левое соединение таблиц, числовые поля могут содержать значение NULL.
В языке выражений СКД, как и в SQL, любая математическая операция со значением NULL возвращает в результате NULL (например, 100 + NULL = NULL). Если хотя бы в одной детальной записи ресурса окажется NULL, вся группировка не сможет рассчитать сумму.
Чтобы исключить влияние пустых значений, выполним следующие действия:
1. На уровне запроса во всех объединяемых наборах данных обернем числовые поля в функцию ЕСТЬNULL. Посмотрим на пример:
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ЕСТЬNULL(ПродажиОбороты.СуммаОборот, 0) КАК СтоимостьПриход
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
2. На вкладке «Ресурсы» схемы компоновки данных подстрахуем расчет агрегатной функции, принудительно преобразуя пустые значения к нулю. Напишем следующее выражение для ресурса:
Сумма(ЕстьNull(СтоимостьПриход, 0))
Если вы выполнили настройки, но итоги все равно не выводятся, проверьте следующие параметры:
Применяя эти правила совместной работы макетов и механизмов агрегации СКД, вы всегда сможете добиться корректного и визуально понятного вывода итогов в любых, даже самых сложных и кастомных отчетах.