Как рассчитать итог в СКД для вычисляемого поля с функцией ВычислитьВыражение?

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

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

Разберем причины такого поведения платформы 1С:Предприятие и рассмотрим по шагам несколько надежных способов получения корректных итоговых сумм.

Почему не рассчитывается итог для вычисляемого поля

Выясним причину проблемы. Функция ВычислитьВыражение вычисляется в контексте конкретной детальной записи или группировки. В строке общего итога контекст детальных записей теряется. По этой причине стандартная агрегатная функция Сумма(ПолеВычисляемое) не может обойти промежуточные значения строк и возвращает пустое значение или NULL.

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

Способ 1. Агрегация через массив группировок

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

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


Сумма(ВычислитьВыражениеСГруппировкойМассив("ПолеВычисляемое", "ИмяГруппировкиНижнегоУровня"))

Разберем по шагам, как работает данная конструкция:

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

Способ 2. Разделение формул для строк и итогов на вкладке «Ресурсы»

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

  1. Оставим колонку Выражение на вкладке Вычисляемые поля пустой, перенеся логику в ресурсы.
  2. Перейдем на вкладку Ресурсы и добавим поле первой строкой. В колонке Выражение укажем формулу детального расчета, а в колонке Рассчитывать по... выберем детальные записи или конкретную группировку.
  3. Добавим это же поле второй строкой в таблицу ресурсов. В колонке Выражение укажем формулу суммирования, а колонку Рассчитывать по... оставим пустой (или выберем общий итог).

Способ 3. Обработка неопределенных значений и защита от NULL

Если в вычисляемом поле используется смещение (например, обращение к предыдущей строке), первая строка вернет NULL. Чтобы это значение не ломало расчет итогов, обернем выражение в функцию ЕстьNULL.

Посмотрим на пример корректной конструкции вычисляемого поля:


ЕстьNULL(ВычислитьВыражение("Поле1", , "ОбщийИтог", "Предыдущая", "Предыдущая"), 0)

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

Способ 4. Проверка настроек вывода полей

Иногда отсутствие итога связано с настройками структуры отчета. Проконтролируем следующие параметры:

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