Часто при разработке отчетов в Системе компоновки данных (СКД) мы сталкиваемся с тем, что стандартное поведение ресурсов при расчете процентов оказывается неверным. Если показатель «Процент наценки» или «Рентабельность» просто суммируется по группировкам, результат получается математически бессмысленным. Давайте разберем, почему это происходит и как настроить расчет так, чтобы итоги считались на основе итоговых сумм, а не путем сложения процентов из детальных строк.
По умолчанию, когда мы добавляем поле в ресурсы СКД, система применяет функцию Сумма(). Если в детальных записях у нас есть значения процентов (например, 20%, 30%, 50%), то для группировки более высокого уровня (например, по документу) СКД просто сложит эти числа. В итоге мы получим 100%, что в корне неверно. Процент — это отношение двух величин (например, маржи к себестоимости), и для итоговой строки мы должны сначала получить общую сумму маржи, общую сумму себестоимости, и только потом разделить их друг на друга.
Для корректного расчета нам необходимо переопределить формулу вычисления в настройках ресурсов. Рассмотрим, как это сделать по шагам:
СКД.ПроцентНаценки).Сумма(ПроцентНаценки) введите формулу, основанную на ваших базовых показателях.Правильная формула выглядит как отношение агрегатных функций. Вместо сложения процентов, мы приказываем системе сначала суммировать числитель и знаменатель для текущей группировки, а затем выполнить деление. Пример выражения:
Сумма(Маржа) / Сумма(Себестоимость) * 100
Важное примечание: При такой настройке СКД автоматически пересчитает значение для каждой группировки. В строках детальных записей результат останется прежним, а вот в итогах по документу или по отчету в целом вы получите математически верное средневзвешенное значение.
При работе с делением всегда существует риск получить ошибку, если знаменатель (в нашем случае Себестоимость) окажется равен нулю. Чтобы отчет работал стабильно и не выдавал ошибки, рекомендуем использовать функцию ВЫБОР или стандартную функцию ЕстьNull().
Рассмотрим более надежный вариант формулы:
ВЫБОР
КОГДА Сумма(Себестоимость) = 0 ТОГДА 0
ИНАЧЕ Сумма(Маржа) / Сумма(Себестоимость) * 100
КОНЕЦ
Использование такой конструкции позволит вам избежать проблем с отображением данных в тех случаях, когда себестоимость по какой-то причине не заполнена или отсутствует.
После применения формулы в ресурсах результат может содержать большое количество знаков после запятой, что выглядит неаккуратно. Чтобы привести число к красивому виду (например, до двух знаков), воспользуйтесь настройкой «Оформление» на той же вкладке «Ресурсы»:
ЧДЦ=2; ЧГ=0.Это позволит пользователю видеть понятные проценты, например, 91.75 вместо длинного дробного числа. Таким образом, мы получаем профессионально настроенный отчет, в котором итоговые показатели рассчитываются корректно, а интерфейс остается удобным для восприятия.