В торговой практике часто возникает ситуация, когда итоговая цена продажи включает в себя переменные затраты, которые сами рассчитываются как процент от этой итоговой цены. Это может быть страховка товара, банковская комиссия, агентское вознаграждение или бонусы маркетплейсов. На первый взгляд задача кажется цикличной (эффект «Ахиллеса и черепахи»), так как изменение цены меняет сумму расхода, что в свою очередь требует изменения цены. Разберем подробно, как правильно рассчитывать такие величины без бесконечных итераций и какие инструменты для этого есть в 1С.
Основная сложность, с которой столкнулся автор темы, заключается в подмене понятий наценки (markup) и маржи (margin). Проанализируем ситуацию:
Выясним причину этой ошибки. Когда мы говорим «процент от продажи», мы имеем дело с долей в конечном результате. Чтобы получить корректную сумму, нам нужно использовать метод Gross-up (доведение до целого).
Рассмотрим ситуацию через линейное уравнение, как это было предложено в решении. Пусть X — это итоговая цена продажи, которую нам нужно найти.
Составим уравнение на основе условий задачи:
Цена продажи = Закупочная цена + (Цена продажи * Процент страховки)
Подставим значения из примера:
X = 1 000 000 + 0,15 * X
Теперь перенесем все слагаемые с X в одну сторону:
X - 0,15 * X = 1 000 000
0,85 * X = 1 000 000
Отсюда находим X:
X = 1 000 000 / 0,85
X ≈ 1 176 470,59 руб.
Проверим расчет: если цена продажи составляет 1 176 470,59 руб., то 15% от этой суммы — это 176 470,59 руб. Вычитаем страховку из цены: 1 176 470,59 - 176 470,59 = 1 000 000 руб. Условие выполнено идеально, мы вышли «в ноль», сохранив себестоимость товара.
В типовых конфигурациях (1С:Управление торговлей 11, 1С:ERP, 1С:Комплексная автоматизация) подобные расчеты автоматизируются через справочник Виды цен. Проанализируем, как настроить формулу для автоматического расчета.
При создании нового вида цены выберем способ задания цены «Произвольный запрос к данным ИБ» или «Произвольная формула». Рассмотрим пример написания формулы, если в системе уже есть цена закупки.
// Пример формулы для расчета цены с учетом 15% страховки от оборота
[ЦенаЗакупки] / 0.85
Если нам нужно добавить к этой цене еще и желаемую прибыль (например, 20% маржинальности), формула усложнится. Важно понимать, что проценты в знаменателе вычитаются из единицы совместно, а не накладываются друг на друга последовательно.
// Формула: Закупка / (1 - %Страховки - %Прибыли)
[ЦенаЗакупки] / (1 - 0.15 - 0.20)
// Что эквивалентно
[ЦенаЗакупки] / 0.65
Проанализируем ситуацию, когда в расчет вмешивается налог на добавленную стоимость. Если ваша компания работает на общей системе налогообложения (ОСНО), возникает важный нюанс: на какую сумму страховая компания начисляет свои 15%?
Для решения варианта Б в 1С придется использовать более сложный коэффициент. Если S — цена с НДС, то формула будет выглядеть так:
// Расчет итоговой цены с НДС, где 15% страховки берется от итогового чека
[ЦенаЗакупкиБезНДС] * 1.20 / (1 - 0.15)
Посмотрим на пример с «зацикливанием» (Circular Dependencies). Если параметров много (логистика, страховка, комиссия банка, процент менеджера), и каждый зависит от итоговой цены, расчет вручную становится невозможным. В 1С это решается выведением единого коэффициента маржинальности.
Почему автор темы вспомнил эту парадоксальную загадку? Потому что при попытке решить задачу простым прибавлением процентов мы попадаем в бесконечный цикл:
1. Добавили 150 000 к миллиону (15% от 1 млн).
2. Увидели, что не хватает 22 500 (15% от 150 000).
3. Добавили 15% от этих 22 500 (3 375).
4. Добавили 15% от 3 375... и так далее.
Математически, сумма этой бесконечно убывающей геометрической прогрессии как раз и стремится к результату деления на 0.85. Использование формулы 1 / (1 - P) мгновенно дает результат, который методом последовательного прибавления пришлось бы искать очень долго.
Бухгалтеру и финансовому аналитику: всегда уточняйте базу для расчета процентов в договорах. Фраза «15% от цены реализации» всегда требует использования деления (маржа), а не умножения (наценка).
Программисту 1С: при настройке ценообразования для менеджеров по продажам полезно выводить в интерфейс два поля: «Процент наценки» и «Процент маржи», чтобы исключить ошибки в планировании прибыли. В коде обработок по расчету цен используйте только проверенные математические модели Gross-up, чтобы избежать расхождений в копейках при больших оборотах.
Рассмотрим, как это реализовать программно в модуле объекта при расчете динамических цен:
Функция РассчитатьЦенуСУчетомКомиссии(Себестоимость, ПроцентКомиссии) Экспорт
Если ПроцентКомиссии >= 100 Тогда
ВызватьИсключение "Процент комиссии не может быть больше или равен 100";
КонецЕсли;
// Применяем формулу Gross-up
Коэффициент = (100 - ПроцентКомиссии) / 100;
ЦенаПродажи = Себестоимость / Коэффициент;
Возврат ЦенаПродажи;
КонецФункции
Таким образом, понимание разницы между наценкой и маржой позволяет строить прозрачные и прибыльные модели ценообразования в любой конфигурации 1С.