Почему в «1С:Розница 2.2» скидка по рублевому купону применяется не полностью?

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

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

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

---

Причина 1. Пропорциональное распределение скидки и «сгорание» остатка

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

Проанализируем конкретный пример математики распределения:

  1. Допустим, в чеке присутствуют две позиции: бутылка водки стоимостью 250 рублей и сопутствующий товар (например, сок) стоимостью 191 рубль. Общая сумма чека составляет 441 рубль.
  2. Покупатель предъявляет купоны номиналом 200 рублей.
  3. Программа пытается распределить эту скидку пропорционально стоимости товаров:
    • Доля скидки для водки: 200 * (250 / 441) = 113.38 рублей.
    • Доля скидки для сопутствующего товара: 200 * (191 / 441) = 86.62 рублей.

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

Предположим, что для данной водки МРЦ составляет 205 рублей. Это означает, что максимально допустимая скидка конкретно на эту бутылку составляет всего 250 - 205 = 45 рублей.

Когда система проводит окончательный расчет распределенной скидки:

  1. На сопутствующий товар успешно применяется его расчетная доля скидки — 86.62 рублей.
  2. На водку система пытается применить расчетную долю в размере 113.38 рублей, но сталкивается с ограничением МРЦ. Программа принудительно уменьшает скидку на водку до максимально возможных 45 рублей.
  3. Критически важная деталь алгоритма 1С: образовавшийся «излишек» распределенной скидки (113.38 - 45 = 68.38 рублей) не переносится на сопутствующий товар. Он просто аннулируется («сгорает»).
  4. В итоге покупатель получает общую скидку: 45 + 86.62 = 131.62 рубль (в зависимости от соотношения цен товаров в чеке эта итоговая цифра может составить и 150 рублей, как в рассматриваемом случае).

---

Причина 2. Ограничения в группе совместного применения скидок

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

Рассмотрим подробнее настройки групп совместного применения:

---

Причина 3. Ограничения в карточках номенклатуры и правах кассира

Дополнительно ограничить размер скидки могут следующие настройки системы:

---

Как решить проблему и настроить полное списание купонов?

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

Вариант 1. Исключение алкоголя из действия скидки по купону (Рекомендуемый)

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

Разберем по шагам, как это сделать:

  1. Перейдем в раздел Маркетинг — Скидки (наценки).
  2. Откроем карточку нашей скидки по купону.
  3. На вкладке Условия предоставления или в самой карточке скидки найдем сегмент номенклатуры, на который распространяется действие скидки.
  4. Создадим сегмент номенклатуры «Товары без алкоголя» (исключив из него алкогольную продукцию) и укажем его в правилах действия скидки.
  5. Также можно воспользоваться вкладкой Уточнения по номенклатуре непосредственно внутри карточки скидки и установить для ценовой группы «Алкоголь» нулевой процент или запрет на применение данной скидки.

Вариант 2. Проверка и корректировка ограничений совместного применения

Выясним, нет ли скрытых лимитов в дереве скидок:

  1. Откроем справочник Скидки (наценки).
  2. Посмотрим на иерархическую структуру (дерево) скидок. Каждая папка в этом дереве представляет собой группу совместного применения.
  3. Откроем свойства каждой группы совместного применения, в которую входит наша скидка по купону.
  4. Проверим значение в поле Максимальный размер скидки (%). Если там установлен лимит, который мешает применению скидки, скорректируем его или очистим поле для снятия ограничений.

Вариант 3. Доработка алгоритма распределения (для программистов 1С)

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

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


// Фрагмент кода для перераспределения остатков скидки, урезанных по МРЦ
Процедура ПерераспределитьОстаткиСкидокПослеКонтроляМРЦ(ТаблицаТоваров, ОбщаяСуммаСкидки) Экспорт
    
    ПерераспределеннаяСумма = 0;
    СуммаКРаспределению = ОбщаяСуммаСкидки;
    
    // Шаг 1. Первичное распределение и расчет ограничений по каждой строке
    Для Каждого СтрокаТЧ Из ТаблицаТоваров Цикл
        МаксСкидкаПоСтроке = СтрокаТЧ.Сумма - (СтрокаТЧ.Количество * СтрокаТЧ.Номенклатура.МинимальнаяРозничнаяЦена);
        СтрокаТЧ.МаксимальнаяСкидка = МаксСкидкаПоСтроке;
    КонецЦикла;
    
    // Шаг 2. Распределение остатков на позиции без жестких ограничений
    // Программист может написать цикл, который берет нераспределенный из-за МРЦ остаток
    // и добавляет его к скидке на другие доступные товары в чеке (например, безалкогольные)
    
КонецПроцедуры

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

← На главную