Как рассчитать итоги по вычисляемым полям в СКД при использовании собственного макета

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

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

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

Анализ механизма расчета итогов в СКД

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

  1. Выполнение запроса и получение сырых данных.
  2. Расчет вычисляемых полей на уровне записей.
  3. Группировка данных согласно настройкам отчета.
  4. Расчет ресурсов (агрегатных функций типа Сумма, Количество) по рассчитанным ранее полям.

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

Причина 1: Некорректная настройка "Рассчитывать по"

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

Решение:

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

Причина 2: Ошибки при сложении полей и значения NULL

Выясним причину, по которой расчет может выдавать пустоту даже при верных настройках группировок. Это происходит из-за особенностей работы с NULL. В языке выражений СКД (как и в SQL) операция Число + NULL всегда возвращает NULL. Если в одной из строк вашего отчета поле "БюджетникиПервый" заполнено, а "БюджетникиВторой" пустое, их сумма в вычисляемом поле станет пустой.

Как правильно написать выражение ресурса:

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

Сумма(ЕСТЬNULL(БюджетникиПервый, 0)) + Сумма(ЕСТЬNULL(БюджетникиВторой, 0))

Рассмотрим, почему это работает лучше:

  1. Функция ЕСТЬNULL заменяет отсутствие данных нулем, что позволяет арифметическим операциям корректно отрабатывать.
  2. Мы суммируем каждое поле по отдельности, а затем складываем результаты. Это гарантирует правильный расчет итога по колонке, даже если в детальных записях данные распределены неравномерно.

Причина 3: Связь параметров в предопределенном макете

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

Проанализируем шаги по проверке макета:

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

Продвинутый метод: Использование функции ВычислитьВыражение

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

Посмотрим на пример выражения для ресурса, который гарантированно выведет сумму по всей колонке, игнорируя иерархию текущей строки:

ВычислитьВыражение("Сумма(ИтогоБюджет)", "ОбщийИтог")

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

Резюме и рекомендации

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

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

← На главную