Как в СКД рассчитать процент по строке к общему итогу и скорректировать показатели?

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

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

Способ 1. Использование системных полей процентов в СКД

Начиная с платформы 8.2 и во всех версиях 8.3, в СКД реализован встроенный механизм расчета процентных долей, который не требует написания сложных выражений на языке СКД.

Разберем порядок настройки системных процентов:

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

Способ 2. Расчет процента через функцию ВычислитьВыражение

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

В общем виде функция имеет следующий синтаксис:

ВычислитьВыражение(Выражение, [Группировка], [ТипРасчета], ...)

Проанализируем назначение параметров:

  1. Выражение — агрегатная функция по ресурсу, например Сумма(СтоимостьЗатрата).
  2. Группировка — строковое имя группировки, в контексте которой выполняется вычисление. Если передать пустую строку "", расчет выполнится в контексте текущей группировки. Чтобы получить значение по всему отчету, необходимо передать строку "ОбщийИтог".
  3. ТипРасчета — определяет область вычисления (например, "ОбщийИтог" или "Группировка").

Посмотрим на пример формулы для вкладки «Вычисляемые поля»:


СтоимостьЗатрата / ВычислитьВыражение("Сумма(СтоимостьЗатрата)", "ОбщийИтог") * 100

Если вычисление процентов переносится на вкладку «Ресурсы», формула примет следующий вид:


Сумма(СтоимостьЗатрата) / ВычислитьВыражение("Сумма(СтоимостьЗатрата)", "ОбщийИтог") * 100

Расчет корректирующего коэффициента и пересчет стоимости

Рассмотрим ситуацию, когда в отчете объединяются данные по выпуску продукции и фактическим затратам, а итоговую стоимость выпуска необходимо скорректировать на отношение общих сумм (затраты к выпуску).

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

Посмотрим на корректную формулу скорректированной стоимости выпуска для вкладки «Вычисляемые поля»:


СтоимостьВыпуск * (ВЫБОР
    КОГДА ВычислитьВыражение("Сумма(СтоимостьВыпуск)", "ОбщийИтог") = 0 ТОГДА 1
    ИНАЧЕ ВычислитьВыражение("Сумма(СтоимостьЗатрата)", "ОбщийИтог") / ВычислитьВыражение("Сумма(СтоимостьВыпуск)", "ОбщийИтог")
КОНЕЦ)

На вкладке «Ресурсы» для полученного поля указываем стандартное выражение агрегации:

Сумма(СтоимостьВыпускСкорректированная)

Как правильно рассчитывать средневзвешенную цену в группировках

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

  1. Построчный расчет в вычисляемых полях: Формулы на вкладке «Вычисляемые поля» рассчитываются для каждой отдельной строки до агрегации. Если разделить стоимость на количество в вычисляемом поле, а в ресурсах применить функцию Среднее(Цена), СКД вычислит простое среднее арифметическое цен детальных строк, а не средневзвешенную цену партии.
  2. Нулевые строки при объединении запросов: Если данные выпуска и затрат объединяются через ОБЪЕДИНИТЬ ВСЕ, для строк затрат поля выпуска заполняются нулями. Агрегат Среднее() учтет эти нулевые строки и занизит итоговую цену.

Чтобы цена рассчитывалась математически верно на любом уровне группировки (по продукции, подразделению, номенклатурной группе и в общем итоге), вычисляем ее исключительно на вкладке «Ресурсы» как отношение агрегатов суммы к количеству:


ВЫБОР
    КОГДА Сумма(КоличествоВыпуск) = 0 ТОГДА 0
    ИНАЧЕ Сумма(СтоимостьВыпуск) / Сумма(КоличествоВыпуск)
КОНЕЦ

Для скорректированной цены формула в ресурсах примет следующий вид:


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

Такой подход гарантирует строгое соблюдение баланса между количеством, суммой и ценой на всех уровнях иерархии отчета.

← На главную