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

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

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

Почему возникает ошибка при расчете процентов в группировках?

Проанализируем природу рассчитываемых величин. Все показатели в отчетах можно разделить на две группы:

  1. Аддитивные показатели — абсолютные величины, которые можно складывать напрямую (выручка, себестоимость, количество, валовая прибыль в рублях). Для них стандартная агрегатная функция Сумма(...) дает математически и экономически верный результат на любом уровне иерархии.
  2. Неаддитивные показатели — относительные величины, коэффициенты и проценты (наценка, рентабельность продаж, процент выполнения плана, средневзвешенная цена). Их категорически нельзя суммировать или усреднять простым арифметическим действием.

Если для поля наценки на вкладке Ресурсы указать выражение Среднее(Наценка), платформа сложит процентные ставки по всем строкам группировки и разделит их на количество строк. При этом полностью игнорируется вес (объем продаж) каждой конкретной позиции. В результате товар с продажей на 100 рублей и наценкой 100% окажет такое же влияние на среднее значение группы, как и товар с продажей на 1 000 000 рублей и наценкой 5%, что приведет к искажению управленческих данных.

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

Настройка правильной формулы ресурса

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

Вместо использования функции Среднее пропишем формулу отношения сумм с обязательной защитой от деления на ноль. Посмотрим на пример рабочего выражения для ресурса Наценка:


ВЫБОР
    КОГДА Сумма(СебестоимостьВЦене) <> 0  
    ТОГДА Сумма(ВаловаяПрибыль) / Сумма(СебестоимостьВЦене) * 100
ИНАЧЕ 
    0
КОНЕЦ

Рассмотрим подробнее логику работы этой конструкции:

  1. Функция Сумма(ВаловаяПрибыль) вычисляет суммарную прибыль по всем записям, входящим в текущую строку, папку иерархии или общий итог.
  2. Функция Сумма(СебестоимостьВЦене) определяет совокупную себестоимость проданных товаров для текущего контекста группировки.
  3. Конструкция ВЫБОР КОГДА ... ТОГДА ... ИНАЧЕ ... КОНЕЦ защищает отчет от критической ошибки деления на ноль, если себестоимость равна нулю (например, при реализации услуг или списании позиций с нулевой стоимостью).

Тонкости настройки иерархических группировок

При работе с иерархией справочников важно обратить внимание на колонку Рассчитывать по... на вкладке Ресурсы. Платформа 1С позволяет задавать индивидуальные формулы для различных уровней отчета:

  1. Если оставить колонку Рассчитывать по... пустой, указанная формула станет универсальной и применится ко всем уровням: детальным записям, строкам иерархии Номенклатура Иерархия, группировкам верхнего уровня и общему итогу отчета.
  2. Если требуется разделить расчет (например, в детальных записях выводить заранее рассчитанное поле запроса, а в итогах вычислять отношение), создают две строки ресурса: одну для конкретного поля группировки, а вторую оставляют без указания группировки для расчета итогов.
  3. Не следует жестко ограничивать расчет только измерением Номенклатура, если в отчете выводится иерархия. Иначе для папок-родителей формула может не примениться, и поле останется пустым либо рассчитается стандартным способом.

Расчет показателей относительно вышестоящих узлов

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

Посмотрим на пример расчета доли валовой прибыли позиции относительно родительской группы справочника:


Сумма(ВаловаяПрибыль) / Вычислить("Сумма(ВаловаяПрибыль)", "РодительВГруппировке") * 100

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

Сумма(ВаловаяПрибыль) / Вычислить("Сумма(ВаловаяПрибыль)", "ОбщийИтог") * 100

Рекомендации по учету возвратов и форматированию

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

Также обратим внимание на округление: крайне не рекомендуется применять функцию Окр(...) прямо в формулах ресурсов СКД. Промежуточное округление неизбежно приведет к накоплению погрешности на вышестоящих узлах дерева. Ограничение знаков после запятой следует настраивать исключительно через свойство Формат в настройках поля компоновки (например, форматной строкой ЧДЦ=2).

← На главную