При анализе отчета «Валовая прибыль» (например, в типовой конфигурации «1С:Управление торговлей 10.3») пользователи и руководство нередко сталкиваются с ситуацией, которая кажется им ошибкой программы: документ Возврат товаров от покупателя уменьшает прибыль и выручку, но показатель рентабельности по строке возврата отображается со знаком плюс. Разберем математическую и экономическую причину такого поведения, проанализируем типичные ошибки при попытке изменить формулу и рассмотрим корректные способы решения данной задачи.
Выясним причину, почему стандартная формула в отчете выдает положительное число. В управленческом учете рентабельность продаж чаще всего вычисляется по следующей формуле:
Рентабельность = (Выручка - Себестоимость) / Выручка * 100%
Или через торговую наценку:
Рентабельность от себестоимости = Валовая прибыль / Себестоимость * 100%
Рассмотрим, что происходит в базе данных при проведении документов отгрузки и последующего возврата:
2000 - 1000 = +1000. Знаменатель (выручка) равен +2000. Результат: +1000 / +2000 = +50%. Сделка прибыльная, знак положительный.-2000), себестоимость сторнируется со знаком минус (-1000). Подставим данные в формулу: (-2000 - (-1000)) / -2000 = -1000 / -2000 = +0.5 (+50%).С точки зрения математики деление отрицательного числа на отрицательное всегда дает положительный результат. Документ возврата лишь зеркально корректирует финансовую базу с тем же коэффициентом эффективности, с которым товар отгружался. Однако для восприятия руководства знак плюс ассоциируется с получением прибыли, а возврат воспринимается как отрицательное событие, которое «должно уменьшать процент».
Часто программисты пытаются быстро удовлетворить требование руководства, меняя условие в запросе отчета через проверку знака стоимости продажи:
|ИНАЧЕ ВЫБОР
| КОГДА СУММА(Стоимость) > 0
| ТОГДА (СУММА(Стоимость) - СУММА(Себестоимость)) / СУММА(Стоимость)
| КОГДА СУММА(Стоимость) < 0
| ТОГДА -(СУММА(Стоимость) - СУММА(Себестоимость)) / СУММА(Стоимость)
| ИНАЧЕ 0
|КОНЕЦ
Проанализируем скрытую проблему этой конструкции. Данный алгоритм корректно сменит знак на минус только в том случае, если исходная отгрузка была прибыльной. Но если товар изначально отгрузили с убытком (например, распродажа неликвида: продажа за 1000 при себестоимости 1200), то в момент возврата произойдет следующее:
-1000 - (-1200) = +200.-1000 (меньше нуля, срабатывает ветка с минусом).-(+200) / (-1000) = -200 / -1000 = +20%.В результате возврат убыточной позиции отобразится как прибыльная сделка, что приведет к грубому искажению управленческой отчетности.
Если бизнес-требование жестко предписывает, чтобы знак процента рентабельности строго совпадал со знаком валовой прибыли (положительная прибыль дает плюс, убыток или сторно прибыли дают минус), необходимо брать знаменатель по модулю. В языке запросов 1С это реализуется через конструкцию ВЫБОР:
ВЫБОР
КОГДА СУММА(Стоимость) = 0
ТОГДА 0
ИНАЧЕ (СУММА(Стоимость) - СУММА(Себестоимость)) /
ВЫБОР
КОГДА СУММА(Стоимость) > 0
ТОГДА СУММА(Стоимость)
ИНАЧЕ -СУММА(Стоимость)
КОНЕЦ * 100
КОНЕЦ КАК Рентабельность
Посмотрим, как отрабатывает данный расчет во всех возможных сценариях:
+1000 / |+2000| = +50%.-200 / |+1000| = -20%.-1000 / |-2000| = -1000 / 2000 = -50% (руководство видит желаемый минус).+200 / |-1000| = +200 / 1000 = +20% (уменьшение убытка компании математически обоснованно выводится со знаком плюс).Важное замечание для отчетов на Построителе и СКД: не забывайте переопределять формулу не только в выборке детальных записей запроса, но и в секции ИТОГИ или на вкладке «Ресурсы» в СКД. Нельзя применять стандартное суммирование СУММА(Рентабельность) к процентам. В СКД выражение ресурса должно вычисляться от общих итоговых сумм стоимости и себестоимости по группировке.
С точки зрения финансового анализа искусственное искажение знака в относительных показателях нарушает расчет средневзвешенной рентабельности по контрагенту или менеджеру. Поэтому методологически более чистым является интерфейсное разделение:
ВозвратТоваровОтПокупателя, можно настроить форматное отображение: заменять значение колонки рентабельности на прочерк либо выводить текст «Сторно», сохраняя исходную точность итоговых финансовых расчетов.Если в отчете рентабельность возврата принимает аномальные значения (например, ровно -100% или 0%), перед правкой запросов проверьте корректность заполнения учетных регистров:
Возврат товаров от покупателя указан конкретный документ партии или документ реализации. Если партия не указана, себестоимость списания при возврате может зафиксироваться нулевой, из-за чего числитель формулы будет равен полной сумме выручки со знаком минус.