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

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

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

Понимаем проблему иерархии в ресурсах

Когда вы создаете вычисляемое поле с условием, например, Выбор Когда (Поле1 - Поле2) >= 0 Тогда (Поле1 - Поле2) Иначе 0 Конец, СКД пытается применить эту формулу и к детальным записям, и к итогам. Если в ресурсах просто указано Сумма(ВычисляемоеПоле), то для каждой строки группировки СКД будет суммировать уже вычисленные результаты. Это приводит к математически неверным итогам, так как суммирование «результата условия» отличается от «условия по сумме».

Решение: правильное использование выражений в ресурсах

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

Рассмотрим пример настройки для расчета профицита:

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


Выбор 
    Когда Сумма(СПКолво) - Сумма(ЕСТЬNULL(ПоступлениеКолво, 0)) >= 0 
    Тогда Сумма(СПКолво) - Сумма(ЕСТЬNULL(ПоступлениеКолво, 0)) 
    Иначе 0 
Конец

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

Настройка расчетов для разных группировок

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

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

Управление отборами в группировках

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

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

  1. Перейдите в настройки группировки, где применен отбор.
  2. Убедитесь, что отбор корректно фильтрует только детальные записи.
  3. Если отбор визуально мешает пользователю или создает пустые строки, откройте свойства группировки и попробуйте отключить отображение отбора.
  4. В некоторых случаях оптимальным решением является использование Условного оформления вместо жесткого отбора. Установите оформление для строк, где значение равно нулю, и настройте видимость (через параметры оформления), что позволит скрыть строки визуально, сохранив их для расчета итоговых сумм.

Важные советы по работе с данными

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

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

← На главную