Как настроить расчет минимальных розничных цен (МРЦ) на алкоголь в 1С?

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

Контроль минимальных розничных цен (МРЦ) — это критически важная задача для любого розничного магазина, торгующего алкоголем. Нарушение этих норм ведет к огромным штрафам и риску аннулирования лицензии. В этой статье мы подробно разберем, как реализовать механизм проверки МРЦ в 1С:Розница 2.2 и других конфигурациях на платформе 1С, проанализируем программные формулы и обсудим наиболее эффективную архитектуру хранения данных.

Постановка задачи и логика ФСРАР

Алгоритм расчета минимальной цены не является линейным. Он зависит от трех ключевых параметров:

  1. Код вида алкогольной продукции (АП): разные категории (водка, коньяк, бренди, игристые вина) имеют разные базовые ставки.
  2. Крепость напитка (Градус): для многих категорий цена рассчитывается пропорционально содержанию спирта.
  3. Емкость тары (Объем): цена за литр пересчитывается на конкретный объем бутылки.

Рассмотрим ситуацию, когда необходимо программно вычислить МРЦ прямо в момент подбора товара в чек или при установке цен номенклатуры.

Вариант 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 л. В коде это реализуется через дополнительное условие проверки диапазона емкости.

Вариант 2: Использование регистра сведений (Рекомендуемый подход)

Рассмотрим более профессиональный и гибкий метод, предложенный опытными разработчиками. Вместо того чтобы «зашивать» постоянно меняющиеся цены в программный код, мы создадим Регистр сведений. Это позволит бухгалтеру или менеджеру самостоятельно обновлять цены при выходе новых приказов Минфина без участия программиста.

Проанализируем структуру такого регистра (например, назовем его МинимальныеЦеныАлкоголя):

  1. Измерения:
    • ВидАлкогольнойПродукции (СправочникСсылка.ВидыАлкогольнойПродукции)
    • КрепостьОт (Число 5, 2)
    • КрепостьДо (Число 5, 2)
  2. Ресурсы:
    • ЦенаЗаЕдиницуОбъема (Число 15, 2)

При таком подходе проверка в модуле проведения чека или в обработке проверки цен будет сводиться к простому запросу к регистру. Выясним причину, по которой это лучше: при изменении законодательства (например, поднятии МРЦ на водку до 299 рублей) вам достаточно будет создать новую запись в регистре с новой датой (периодом), и система автоматически начнет применять актуальные цены.

Актуальные значения МРЦ на 2024–2025 годы

Чтобы ваша настройка в 1С:Розница была корректной, приведем актуальные базовые значения, на которые стоит ориентироваться при заполнении констант или регистров (согласно последним приказам Минфина):

Разберем подробнее расчет для ликеро-водочных изделий крепостью выше 28% (коды 211, 212, 236, 280). Для них МРЦ устанавливается по шкале за каждый градус крепости. Например, для напитка 35 градусов цена будет ниже, чем для 40 градусов, но расчет всегда должен опираться на актуальную сетку Минфина.

Реализация проверки в коде 1С

Посмотрим на пример функции, которая проверяет, не нарушает ли установленная цена ЦенаПродажи минимально допустимый порог:


Функция ЦенаНижеДопустимой(Товар, ЦенаПродажи, Объем, Крепость) Экспорт
    
    КодАП = Товар.ВидАлкогольнойПродукции.Код;
    
    // Получаем базовую МРЦ из регистра или константы
    МинимальнаяБазоваяЦена = ПолучитьМРЦИзНастроек(КодАП, Крепость); 
    
    // Реализуем правило "0.375 - 0.5" для водки (код 200)
    Если КодАП = "200" И Объем >= 0.375 И Объем < 0.5 Тогда
        РасчетнаяМРЦ = МинимальнаяБазоваяЦена; // Цена как за 0.5л
    Иначе
        РасчетнаяМРЦ = (МинимальнаяБазоваяЦена / 0.5) * Объем;
    КонецЕсли;
    
    Возврат ЦенаПродажи < РасчетнаяМРЦ;

КонецФункции

Важный момент: Округление при расчете МРЦ должно производиться до копеек. ФСРАР крайне строго относится к расхождениям даже в несколько копеек в меньшую сторону.

Интеграция с торговым оборудованием

Современные версии 1С:Розница поддерживают автоматическую проверку МРЦ на уровне кассового модуля. Однако, если вы используете кастомные доработки или старые релизы (например, сильно модифицированную 2.2), рекомендуется внедрить проверку в процедуру ПередЗаписью документа ЧекККМ или в обработку расширения, отвечающую за сканирование акцизных марок. Это позволит заблокировать добавление товара в корзину еще до момента оплаты, если цена была установлена неверно или применилась скидка, опустившая цену ниже МРЦ.

Помните, что скидки (в том числе по картам лояльности) не могут уменьшать цену алкоголя ниже установленного государством минимума. Проанализируйте свои алгоритмы расчета скидок в 1С, чтобы они игнорировали позиции с алкоголем, если итоговая цена достигает порога МРЦ.

← На главную