Почему не считаются итоги по вычисляемому полю в СКД и как это исправить?

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

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

Различие между выражением поля и выражением ресурса

Первым делом проанализируем, где именно прописана формула. В СКД есть две важные закладки: «Вычисляемые поля» и «Ресурсы». Начинающие разработчики часто путают их роли. Рассмотрим типичную ошибку: формула КоличествоОстаток * Цена прописана на закладке вычисляемых полей, и разработчик ожидает, что система автоматически просуммирует результат.

Выясним причину: выражение в «Вычисляемых полях» вычисляется для каждой строки детальных записей. Чтобы эти данные попали в итоги, поле обязательно должно быть добавлено на закладку «Ресурсы». Но здесь кроется важный нюанс: формула в ресурсах не всегда должна дублировать формулу поля. Если вы укажете в ресурсе просто Сумма(Цена * Количество), система отработает корректно. Если же вы напишете Сумма(Цена) * Сумма(Количество), то получите математически неверный результат, так как система сначала сложит все цены, потом все количества и перемножит их суммы. Для освоения базовых принципов работы с полями и итогами можно изучить пример настройки ресурсов СКД в табличном отчете.

Настройка «Рассчитывать по...» в ресурсах

Проанализируем ситуацию, которая стала решением в обсуждении на форуме. Даже если ресурс добавлен и формула верна, итоги могут не отображаться из-за настроек группировок. Посмотрим на колонку «Рассчитывать по...» в таблице ресурсов.

Если в этой колонке указано значение ДетальныеЗаписи, то итог будет рассчитываться и выводиться только в самых нижних строках отчета. Общие итоги и промежуточные итоги по папкам или контрагентам останутся пустыми. Чтобы исправить это, выполним следующие действия:

  1. Перейдем на закладку «Ресурсы».
  2. Найдем наше вычисляемое поле.
  3. В колонке «Рассчитывать по...» нажмем на кнопку выбора.
  4. Убедимся, что выбрано значение <Все группировки> или явно указана группировка Отчет (которая отвечает за общий итог).

Как только мы расширяем область расчета ресурса на группировку «Отчет», система получает команду агрегировать данные не только в строках, но и в итоговых секциях.

Проблема значений NULL и типов данных

Рассмотрим еще одну коварную причину отсутствия итогов — наличие пустых значений (NULL). Если в вашем запросе используется левое соединение и цена или количество для какой-то строки не определены, результатом умножения будет NULL. Суммирование таких значений в ресурсах может привести к тому, что весь итог станет неопределенным.

Для решения этой проблемы рекомендуется использовать функцию ЕстьNull(). Посмотрим на пример правильного выражения в вычисляемом поле:

ЕстьNull(КоличествоОстаток, 0) * ЕстьNull(Цена, 0)

Аналогично проверим настройки типа значения. Если СКД не может однозначно определить, что результат вычисления является числом, она может отказаться применять к нему агрегатные функции, такие как Сумма или Среднее. Убедимся, что в колонке «Тип значения» вычисляемого поля указано Число с необходимой точностью.

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

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

Типичный синтаксис функции для ресурса выглядит так:

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

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

Порядок действий при диагностике

Если итоги все еще не считаются, проанализируем схему по следующему алгоритму:

  1. Проверим наличие поля на закладке «Ресурсы».
  2. Убедимся, что формула в ресурсе использует агрегатную функцию (например, Сумма(...)).
  3. Проверим колонку «Рассчитывать по...» — там должно быть либо пусто (что эквивалентно расчету по всем полям), либо выбраны нужные группировки, включая «Отчет».
  4. Перейдем на закладку «Настройки» и убедимся, что наше поле выбрано в списке «Выбранные поля» для всего отчета, а не только для одной из вложенных группировок.
  5. Проанализируем роли полей на закладке «Наборы данных». Поля «Количество» и «Цена» не должны иметь ограничений на использование в итогах.

Соблюдение этих правил гарантирует корректный расчет итогов в 99% случаев. СКД — система строгая, и отсутствие галочки в настройках группировки ресурса является самой частой причиной «пропажи» данных в отчетах.

← На главную