Контроль минимальных розничных цен (МРЦ) — это критически важная задача для любого розничного магазина, торгующего алкоголем. Нарушение этих норм ведет к огромным штрафам и риску аннулирования лицензии. В этой статье мы подробно разберем, как реализовать механизм проверки МРЦ в 1С:Розница 2.2 и других конфигурациях на платформе 1С, проанализируем программные формулы и обсудим наиболее эффективную архитектуру хранения данных.
Алгоритм расчета минимальной цены не является линейным. Он зависит от трех ключевых параметров:
Рассмотрим ситуацию, когда необходимо программно вычислить МРЦ прямо в момент подбора товара в чек или при установке цен номенклатуры.
В сообществе программистов 1С часто встречаются компактные решения в виде одной строки кода. Несмотря на то, что такой подход иногда называют «сложным для чтения», он позволяет быстро внедрить проверку без изменения структуры метаданных. Проанализируем пример функции, которая на вход принимает код К, емкость Е и градус Г.
Пример реализации алгоритма (с учетом логики расчета, актуальной для структуры распределения по кодам):
// К - код вида АП, Е - емкость (л), Г - градус
МРЦ = Окр(?(Найти("200,212,236,280", К) > 0,
Мин(?(Г > 28, БазоваяЦена + Коэффициент * Окр(Г + 0.5, 0, 0), 0), МаксЦенаДляКатегории),
?(Найти("232,237,239,242,251,252", К) > 0, ЦенаБренди,
?(Найти("229,230,231,233,234,235", К) > 0, ЦенаКоньяк, 0))) * Е, 2, 1);
Важное примечание: При использовании подобных формул необходимо учитывать специфическое правило ФСРАР для водки: если объем тары составляет от 0,375 л до 0,5 л, минимальная цена для такой бутылки устанавливается как за полные 0,5 л. В коде это реализуется через дополнительное условие проверки диапазона емкости.
Рассмотрим более профессиональный и гибкий метод, предложенный опытными разработчиками. Вместо того чтобы «зашивать» постоянно меняющиеся цены в программный код, мы создадим Регистр сведений. Это позволит бухгалтеру или менеджеру самостоятельно обновлять цены при выходе новых приказов Минфина без участия программиста.
Проанализируем структуру такого регистра (например, назовем его МинимальныеЦеныАлкоголя):
ВидАлкогольнойПродукции (СправочникСсылка.ВидыАлкогольнойПродукции)КрепостьОт (Число 5, 2)КрепостьДо (Число 5, 2)ЦенаЗаЕдиницуОбъема (Число 15, 2)При таком подходе проверка в модуле проведения чека или в обработке проверки цен будет сводиться к простому запросу к регистру. Выясним причину, по которой это лучше: при изменении законодательства (например, поднятии МРЦ на водку до 299 рублей) вам достаточно будет создать новую запись в регистре с новой датой (периодом), и система автоматически начнет применять актуальные цены.
Чтобы ваша настройка в 1С:Розница была корректной, приведем актуальные базовые значения, на которые стоит ориентироваться при заполнении констант или регистров (согласно последним приказам Минфина):
Разберем подробнее расчет для ликеро-водочных изделий крепостью выше 28% (коды 211, 212, 236, 280). Для них МРЦ устанавливается по шкале за каждый градус крепости. Например, для напитка 35 градусов цена будет ниже, чем для 40 градусов, но расчет всегда должен опираться на актуальную сетку Минфина.
Посмотрим на пример функции, которая проверяет, не нарушает ли установленная цена ЦенаПродажи минимально допустимый порог:
Функция ЦенаНижеДопустимой(Товар, ЦенаПродажи, Объем, Крепость) Экспорт
КодАП = Товар.ВидАлкогольнойПродукции.Код;
// Получаем базовую МРЦ из регистра или константы
МинимальнаяБазоваяЦена = ПолучитьМРЦИзНастроек(КодАП, Крепость);
// Реализуем правило "0.375 - 0.5" для водки (код 200)
Если КодАП = "200" И Объем >= 0.375 И Объем < 0.5 Тогда
РасчетнаяМРЦ = МинимальнаяБазоваяЦена; // Цена как за 0.5л
Иначе
РасчетнаяМРЦ = (МинимальнаяБазоваяЦена / 0.5) * Объем;
КонецЕсли;
Возврат ЦенаПродажи < РасчетнаяМРЦ;
КонецФункции
Важный момент: Округление при расчете МРЦ должно производиться до копеек. ФСРАР крайне строго относится к расхождениям даже в несколько копеек в меньшую сторону.
Современные версии 1С:Розница поддерживают автоматическую проверку МРЦ на уровне кассового модуля. Однако, если вы используете кастомные доработки или старые релизы (например, сильно модифицированную 2.2), рекомендуется внедрить проверку в процедуру ПередЗаписью документа ЧекККМ или в обработку расширения, отвечающую за сканирование акцизных марок. Это позволит заблокировать добавление товара в корзину еще до момента оплаты, если цена была установлена неверно или применилась скидка, опустившая цену ниже МРЦ.
Помните, что скидки (в том числе по картам лояльности) не могут уменьшать цену алкоголя ниже установленного государством минимума. Проанализируйте свои алгоритмы расчета скидок в 1С, чтобы они игнорировали позиции с алкоголем, если итоговая цена достигает порога МРЦ.