Система компоновки данных (СКД) — это мощный инструмент, но иногда она ведет себя неочевидно, особенно когда речь заходит о вычисляемых полях и ресурсах. Рассмотрим классическую ситуацию: вы создали вычисляемое поле (например, для расчета суммы как произведение цены на количество), добавили его в ресурсы, но в итоговых строках отчета вместо заветных цифр видите пустоту или некорректные данные. Разберем пошагово, почему это происходит и как настроить схему компоновки правильно.
Первым делом проанализируем, где именно прописана формула. В СКД есть две важные закладки: «Вычисляемые поля» и «Ресурсы». Начинающие разработчики часто путают их роли. Рассмотрим типичную ошибку: формула КоличествоОстаток * Цена прописана на закладке вычисляемых полей, и разработчик ожидает, что система автоматически просуммирует результат.
Выясним причину: выражение в «Вычисляемых полях» вычисляется для каждой строки детальных записей. Чтобы эти данные попали в итоги, поле обязательно должно быть добавлено на закладку «Ресурсы». Но здесь кроется важный нюанс: формула в ресурсах не всегда должна дублировать формулу поля. Если вы укажете в ресурсе просто Сумма(Цена * Количество), система отработает корректно. Если же вы напишете Сумма(Цена) * Сумма(Количество), то получите математически неверный результат, так как система сначала сложит все цены, потом все количества и перемножит их суммы. Для освоения базовых принципов работы с полями и итогами можно изучить пример настройки ресурсов СКД в табличном отчете.
Проанализируем ситуацию, которая стала решением в обсуждении на форуме. Даже если ресурс добавлен и формула верна, итоги могут не отображаться из-за настроек группировок. Посмотрим на колонку «Рассчитывать по...» в таблице ресурсов.
Если в этой колонке указано значение ДетальныеЗаписи, то итог будет рассчитываться и выводиться только в самых нижних строках отчета. Общие итоги и промежуточные итоги по папкам или контрагентам останутся пустыми. Чтобы исправить это, выполним следующие действия:
<Все группировки> или явно указана группировка Отчет (которая отвечает за общий итог).Как только мы расширяем область расчета ресурса на группировку «Отчет», система получает команду агрегировать данные не только в строках, но и в итоговых секциях.
Рассмотрим еще одну коварную причину отсутствия итогов — наличие пустых значений (NULL). Если в вашем запросе используется левое соединение и цена или количество для какой-то строки не определены, результатом умножения будет NULL. Суммирование таких значений в ресурсах может привести к тому, что весь итог станет неопределенным.
Для решения этой проблемы рекомендуется использовать функцию ЕстьNull(). Посмотрим на пример правильного выражения в вычисляемом поле:
ЕстьNull(КоличествоОстаток, 0) * ЕстьNull(Цена, 0)
Аналогично проверим настройки типа значения. Если СКД не может однозначно определить, что результат вычисления является числом, она может отказаться применять к нему агрегатные функции, такие как Сумма или Среднее. Убедимся, что в колонке «Тип значения» вычисляемого поля указано Число с необходимой точностью.
Иногда стандартного суммирования недостаточно, и мы прибегаем к функции ВычислитьВыражение(). Рассмотрим, когда она действительно полезна. Если вам нужно рассчитать итог по полю, которое само является сложным агрегатом, или вычислить долю строки в общем итоге, эта функция незаменима. Однако для простых произведений (Цена * Количество) она часто является избыточной и только усложняет отладку.
Типичный синтаксис функции для ресурса выглядит так:
ВычислитьВыражение("Сумма(МоеВычисляемоеПоле)", "ОбщийИтог")
Это выражение принудительно заставляет систему рассчитать сумму по всему набору данных, игнорируя текущий контекст группировки. Но помните: прежде чем использовать сложные функции, убедитесь, что простые механизмы ресурсов настроены верно. При необходимости нестандартной группировки текстовых данных пригодится способ сбора значений колонки из нескольких строк в СКД.
Если итоги все еще не считаются, проанализируем схему по следующему алгоритму:
Сумма(...)).Соблюдение этих правил гарантирует корректный расчет итогов в 99% случаев. СКД — система строгая, и отсутствие галочки в настройках группировки ресурса является самой частой причиной «пропажи» данных в отчетах.