Как правильно рассчитать рентабельность продаж в отчете по валовой прибыли и настроить СКД без ошибок

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

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

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

Методологическая разница: Рентабельность продаж vs Наценка

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

Рассмотрим подробнее каждый из этих показателей:

  1. Рентабельность продаж (по валовой прибыли / ROS — Return on Sales):

    Этот показатель отражает долю прибыли в каждом заработанном рубле выручки. Иными словами, сколько копеек чистой прибыли приносит нам один рубль продаж.

    Математическая формула выглядит следующим образом:

    Рентабельность = (Выручка - Себестоимость) / Выручка * 100%

    Важная особенность: рентабельность продаж физически не может превышать 100% (она стремится к 100%, если себестоимость приближается к нулю, например, при продаже услуг).

  2. Эффективность продаж (Наценка):

    Этот показатель отражает процент прибыли относительно затрат на закупку или производство товара. Иными словами, какую надбавку мы сделали к первоначальной стоимости товара.

    Математическая формула наценки:

    Наценка = (Выручка - Себестоимость) / Себестоимость * 100%

    В отличие от рентабельности, наценка может быть сколь угодно большой — 200%, 500% или даже 1000% (например, при продаже высокомаржинальных товаров или услуг с минимальной себестоимостью).

В Сообщении 3 автор темы пытался применить формулу 100 * (СуммаПродаж - ЗакупочнаяЦена*КоличествоТоваров)/(ЗакупочнаяЦена*КоличествоТоваров), что эквивалентно формуле 100 * (а - б) / б. Это формула наценки. Разумеется, бизнес-пользователи справедливо указали ему на то, что для расчета рентабельности эта формула не подходит. Правильный вариант формулы рентабельности продаж представлен в Сообщении 6: 100 * (СуммаПродаж - Себестоимость) / СуммаПродаж.

Критическая ошибка агрегирования данных в ресурсах СКД

Теперь обратим внимание на техническую сторону реализации. В Сообщениях 7 и 9 автор упоминает, что для получения себестоимости в ресурсах СКД он использует выражение: МАКСИМУМ(ЗакупочнаяЦена) * СУММА(КоличествоТоваров). Это грубейшая математическая ошибка при работе с группировками данных в отчетах.

Выясним причину, почему такой подход в корне неверен, на конкретном примере.

Допустим, за выбранный период в рамках одной группы товаров (или по одному контрагенту) были совершены две продажи:

Проанализируем ситуацию и рассчитаем реальную совокупную себестоимость этих продаж:

Реальная себестоимость = (1 * 100) + (10 * 10) = 100 + 100 = 200 руб.

А теперь посмотрим, как рассчитает себестоимость СКД по формуле автора на уровне группировки («Итого»):

  1. Функция МАКСИМУМ(ЗакупочнаяЦена) выберет максимальную цену среди строк детальных записей. В нашем случае это 100 руб.
  2. Функция СУММА(КоличествоТоваров) сложит все количества: 1 + 10 = 11 шт.
  3. СКД перемножит эти агрегированные значения: 100 * 11 = 1100 руб.

В результате некорректной формулы в ресурсах себестоимость продаж оказалась завышена более чем в 5 раз (1100 руб. вместо реальных 200 руб.). Естественно, при расчете рентабельности по такой «себестоимости» отчет покажет глубокий минус, что приведет пользователей в замешательство.

Золотое правило разработки в СКД: Любые вычисления, связанные с перемножением цены на количество (будь то сумма продажи, себестоимость или скидка), должны производиться на уровне строк в самом запросе. На уровне ресурсов СКД должно происходить исключительно суммирование уже готовых произведений!

Правильная реализация в СКД шаг за шагом

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

Шаг 1. Написание запроса

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


ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    Продажи.Количество КАК Количество,
    Продажи.СуммаВыручки КАК СуммаПродаж,
    Продажи.Количество * Продажи.ЗакупочнаяЦена КАК Себестоимость
ИЗ
    РегистрНакопления.Продажи КАК Продажи

Обратите внимание: поле Себестоимость рассчитывается как произведение для каждой детальной строки в БД.

Шаг 2. Настройка вычисляемых полей

Поскольку рентабельность — это относительный показатель (процент), его нельзя просто суммировать в ресурсах СКД. Если в одной строке рентабельность 10%, а во второй — 20%, общая рентабельность по группе не равна 30%. Она должна рассчитываться заново для каждого итога на основе агрегированных сумм.

Для этого перейдем на вкладку «Вычисляемые поля» и добавим новое поле:

Шаг 3. Настройка ресурсов СКД

Переходим на вкладку «Ресурсы». Для базовых полей указываем стандартное суммирование:

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

Пропишем в колонке «Выражение» для ресурса Рентабельность следующее условие:


ВЫБОР 
    КОГДА СУММА(СуммаПродаж) <> 0 
        ТОГДА 100 * (СУММА(СуммаПродаж) - СУММА(Себестоимость)) / СУММА(СуммаПродаж) 
    ИНАЧЕ 0 
КОНЕЦ

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


ВЫБОР 
    КОГДА СУММА(Себестоимость) <> 0 
        ТОГДА 100 * (СУММА(СуммаПродаж) - СУММА(Себестоимость)) / СУММА(Себестоимость) 
    ИНАЧЕ 0 
КОНЕЦ

Почему себестоимость и рентабельность могут искажаться в типовых конфигурациях

Иногда даже при абсолютно верных формулах в СКД отчет «Валовая прибыль» может показывать странные результаты (например, рентабельность 100% для товаров, у которых явно должна быть себестоимость, или отрицательную рентабельность). Рассмотрим основные причины такого поведения систем автоматизации на базе «1С:Предприятие»:

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

← На главную