При создании отчетов в системе компоновки данных (СКД) часто возникает задача вывести долю конкретной позиции номенклатуры или затраты в общем объеме (процент от общего итога). Дополнительно на практике требуется скорректировать плановые или фактические показатели выпуска на коэффициент затрат. Разберем по шагам, как правильно настроить такие расчеты в СКД, избежать типичных ошибок при группировках и корректно посчитать средневзвешенные цены.
Начиная с платформы 8.2 и во всех версиях 8.3, в СКД реализован встроенный механизм расчета процентных долей, который не требует написания сложных выражений на языке СКД.
Разберем порядок настройки системных процентов:
СтоимостьЗатрата или КоличествоЗатрата) и развернем его ветку.% стоимости).Если требуется задействовать процент в дальнейших формулах или задать сложный алгоритм распределения, используем функцию языка выражений СКД ВычислитьВыражение(). Рассмотрим особенности работы с этой функцией.
В общем виде функция имеет следующий синтаксис:
ВычислитьВыражение(Выражение, [Группировка], [ТипРасчета], ...)
Проанализируем назначение параметров:
Сумма(СтоимостьЗатрата)."", расчет выполнится в контексте текущей группировки. Чтобы получить значение по всему отчету, необходимо передать строку "ОбщийИтог"."ОбщийИтог" или "Группировка").Посмотрим на пример формулы для вкладки «Вычисляемые поля»:
СтоимостьЗатрата / ВычислитьВыражение("Сумма(СтоимостьЗатрата)", "ОбщийИтог") * 100
Если вычисление процентов переносится на вкладку «Ресурсы», формула примет следующий вид:
Сумма(СтоимостьЗатрата) / ВычислитьВыражение("Сумма(СтоимостьЗатрата)", "ОбщийИтог") * 100
Рассмотрим ситуацию, когда в отчете объединяются данные по выпуску продукции и фактическим затратам, а итоговую стоимость выпуска необходимо скорректировать на отношение общих сумм (затраты к выпуску).
Выясним причину частой ошибки: если задать вычисление корректирующего коэффициента в вычисляемых полях, а затем в ресурсах попытаться умножить ресурс на вычисляемое поле (например, Сумма(СтоимостьВыпуск) * Коэффициент), СКД выдаст ошибку вычисления выражения. Ресурсы должны агрегировать исходные поля наборов данных, либо выражение вычисляемого поля должно быть полностью самодостаточным.
Посмотрим на корректную формулу скорректированной стоимости выпуска для вкладки «Вычисляемые поля»:
СтоимостьВыпуск * (ВЫБОР
КОГДА ВычислитьВыражение("Сумма(СтоимостьВыпуск)", "ОбщийИтог") = 0 ТОГДА 1
ИНАЧЕ ВычислитьВыражение("Сумма(СтоимостьЗатрата)", "ОбщийИтог") / ВычислитьВыражение("Сумма(СтоимостьВыпуск)", "ОбщийИтог")
КОНЕЦ)
На вкладке «Ресурсы» для полученного поля указываем стандартное выражение агрегации:
Сумма(СтоимостьВыпускСкорректированная)
Часто разработчики сталкиваются с тем, что расчетная цена единицы продукции в группировках и общих итогах искажается. Разберем, почему это происходит и как получить корректный результат.
Среднее(Цена), СКД вычислит простое среднее арифметическое цен детальных строк, а не средневзвешенную цену партии.ОБЪЕДИНИТЬ ВСЕ, для строк затрат поля выпуска заполняются нулями. Агрегат Среднее() учтет эти нулевые строки и занизит итоговую цену.Чтобы цена рассчитывалась математически верно на любом уровне группировки (по продукции, подразделению, номенклатурной группе и в общем итоге), вычисляем ее исключительно на вкладке «Ресурсы» как отношение агрегатов суммы к количеству:
ВЫБОР
КОГДА Сумма(КоличествоВыпуск) = 0 ТОГДА 0
ИНАЧЕ Сумма(СтоимостьВыпуск) / Сумма(КоличествоВыпуск)
КОНЕЦ
Для скорректированной цены формула в ресурсах примет следующий вид:
ВЫБОР
КОГДА Сумма(КоличествоВыпуск) = 0 ТОГДА 0
ИНАЧЕ Сумма(СтоимостьВыпускСкорректированная) / Сумма(КоличествоВыпуск)
КОНЕЦ
Такой подход гарантирует строгое соблюдение баланса между количеством, суммой и ценой на всех уровнях иерархии отчета.