Как настроить разовые скидки по промокодам с ограничением количества товара в 1С:Розница?

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

Постановка задачи

В процессе работы с маркетинговыми акциями в 1С:Розница часто возникают ситуации, когда требуется реализовать гибкие условия применения скидок. Основная сложность заключается в двух требованиях: во-первых, исключить из действия акции определенные группы или позиции номенклатуры, а во-вторых, ограничить количество товара, участвующего в акции, внутри одного чека (например, если покупатель берет 5 единиц товара, скидка применяется только к 3 из них, а 2 продаются по полной стоимости).

Реализация исключений номенклатуры

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

Ограничение количества товара по акции

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

Решение через доработку типа скидки (Внешняя обработка)

Разберем подход, при котором мы создаем собственную внешнюю обработку для расчета скидки. Когда стандартный интерфейс не позволяет совместить Промокод и программную логику ограничения, мы можем пойти следующим путем:

  1. Создаем Внешнюю обработку типа скидки.
  2. Добавляем в форму настроек этой обработки дополнительную табличную часть для хранения условий.
  3. Реализуем логику, при которой при сохранении настроек скидки наши условия из ТЧ обработки записываются в соответствующую стандартную табличную часть владельца (СкидкаНаценка).
  4. В процедуре расчета скидок перехватываем выполнение, чтобы применить ограничение по количеству именно к строкам чека.

Для корректного распределения скидки на ограниченное количество единиц товара мы можем программно разделять строку товара в Чеке ККМ на две позиции: одну с примененной скидкой для N штук, другую — по полной цене для остатка. Это делается через доработку алгоритма РассчитатьСкидкиНаценки в общем модуле.

Использование расширений конфигурации

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

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

  1. Создаем расширение и добавляем в него общий модуль, отвечающий за расчет скидок.
  2. Переопределяем логику расчета, перехватывая вызов процедуры РассчитатьСкидкиНаценки.
  3. Внутри переопределенного метода проверяем наличие активного промокода.
  4. Если условие выполняется, вычисляем количество товара, превышающее допустимый лимит (например, 3 штуки).
  5. Корректируем Сумму скидки для строки чека, обеспечивая расчет только для установленного лимита.

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


// Пример логики ограничения количества внутри расширения
Процедура РассчитатьСкидкуСОграничением(СтрокаЧека, МаксКоличество)
    Если СтрокаЧека.Количество > МаксКоличество Тогда
        // Применяем скидку только к части товара
        СуммаСоСкидкой = МаксКоличество * СтрокаЧека.Цена * (1 - ПроцентСкидки / 100);
        СуммаБезСкидки = (СтрокаЧека.Количество - МаксКоличество) * СтрокаЧека.Цена;
        СтрокаЧека.СуммаСкидки = СтрокаЧека.Сумма - (СуммаСоСкидкой + СуммаБезСкидки);
    КонецЕсли;
КонецПроцедуры

Почему стоит избегать сложных внешних обработок?

Мы проанализировали ситуацию и рекомендуем отказаться от жестко «зашитых» внешних обработок в пользу расширений по нескольким причинам:

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

← На главную