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

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

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

Понимание причины ошибки

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

Решение проблемы через настройки ресурсов

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

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

Разберем конкретный пример расчета разницы часов. Допустим, у нас есть показатели: ЧасовПоФакту, НормаПоПроизвКаленд, Больничный, Отпуск и ПрочиеОтсутствия. Нам нужно получить итог разницы факт/норма, при этом если норма с учетом исключений отрицательна, результат должен быть равен нулю.

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


ВЫБОР 
    КОГДА Сумма(НормаПоПроизвКаленд) - Сумма(Больничный) - Сумма(Отпуск) - Сумма(ПрочиеОтсутствия) < 0 
    ТОГДА 0 
    ИНАЧЕ Сумма(ЧасовПоФакту) - (Сумма(НормаПоПроизвКаленд) - Сумма(Больничный) - Сумма(Отпуск) - Сумма(ПрочиеОтсутствия)) 
КОНЕЦ

Почему это работает

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

Важные рекомендации по настройке

При работе с Ресурсами обратите внимание на следующие нюансы:

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

← На главную