При разработке отчетов на базе Системы компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда стандартные возможности вывода данных не удовлетворяют требованиям заказчика. В таких случаях мы прибегаем к созданию предопределенных макетов. Однако использование собственных макетов накладывает определенные ограничения и требует более тонкой настройки ресурсов. Одной из самых распространенных проблем является "пустая клетка" в итоговых строках или в колонках с вычисляемыми полями.
В этой статье мы подробно разберем, почему итоги по вычисляемым полям могут не отображаться, как правильно настроить агрегатные функции в ресурсах и как избежать типичных ошибок при работе с макетами компоновки данных.
Для начала проанализируем, как СКД обрабатывает данные. Процесс происходит в несколько этапов:
Сумма, Количество) по рассчитанным ранее полям.Если на любом из этих этапов возникает ошибка в логике или данных, результат в итоговой ячейке будет отсутствовать. Рассмотрим основные причины возникновения пустых итогов.
В настройках ресурсов СКД есть колонка "Рассчитывать по...". Проанализируем типичную ошибку: пользователь отмечает галочками конкретные группировки (например, "БюджетникиПервый"), но забывает про общий итог. Если в этом списке указаны только конкретные поля группировок, то во всех остальных местах (включая детальные записи и строку Общие итоги) поле будет оставаться пустым.
Решение:
Для того чтобы итог рассчитывался везде, мы рекомендуем один из двух вариантов:
<Общий итог>, если вам нужно ограничить расчет только определенными уровнями, но сохранить итоговую строку внизу отчета.Выясним причину, по которой расчет может выдавать пустоту даже при верных настройках группировок. Это происходит из-за особенностей работы с NULL. В языке выражений СКД (как и в SQL) операция Число + NULL всегда возвращает NULL. Если в одной из строк вашего отчета поле "БюджетникиПервый" заполнено, а "БюджетникиВторой" пустое, их сумма в вычисляемом поле станет пустой.
Как правильно написать выражение ресурса:
Вместо того чтобы просто суммировать вычисляемое поле, разберем более надежный способ написания формулы на вкладке "Ресурсы":
Сумма(ЕСТЬNULL(БюджетникиПервый, 0)) + Сумма(ЕСТЬNULL(БюджетникиВторой, 0))
Рассмотрим, почему это работает лучше:
ЕСТЬNULL заменяет отсутствие данных нулем, что позволяет арифметическим операциям корректно отрабатывать.Когда мы используем вкладку "Макеты", СКД перестает автоматически выводить данные в ячейки. Вы должны явно указать системе, какой ресурс соответствует конкретному параметру макета.
Проанализируем шаги по проверке макета:
ИтогоБюджет).Иногда требуется сложная логика, когда итог по одной колонке должен зависеть от фильтров или контекста другой. В таких случаях мы используем функцию ВычислитьВыражение. Она позволяет получить доступ к данным любого уровня компоновки.
Посмотрим на пример выражения для ресурса, который гарантированно выведет сумму по всей колонке, игнорируя иерархию текущей строки:
ВычислитьВыражение("Сумма(ИтогоБюджет)", "ОбщийИтог")
Здесь второй параметр "ОбщийИтог" указывает системе, что расчет должен производиться в контексте всего отчета. Это крайне полезно, когда вы строите сложные финансовые сетки в макетах.
Подводя итог, проанализируем последовательность действий для исправления пустых ячеек в итогах:
ЕСТЬNULL в формулах вычисляемых полей и ресурсов, чтобы избежать обнуления всей суммы из-за одного пустого значения.Соблюдение этих правил позволит вам создавать гибкие и точные отчеты любой сложности, используя все преимущества системы компоновки данных 1С.