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

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

В розничной торговле часто используются различные маркетинговые акции для привлечения покупателей. Одна из популярных механик — предоставление персональной скидки по одноразовому промокоду или QR-коду. При этом бизнес часто хочет ограничить объем продаваемого по акции товара в одни руки, например: «Скидка 25% по QR-коду на определенный сегмент товаров, но не более чем на 5 штук в чеке».

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

---

Анализ штатных возможностей в «1С:Розница 2.2»

Выясним, какие инструменты предоставляет нам редакция 2.2 для решения этой задачи и где начинаются ограничения платформы.

Для реализации первой части задачи — работы с уникальными одноразовыми QR-кодами — в программе предусмотрен специализированный механизм. Начиная с определенных релизов ветки 2.2, в системе присутствует регистр сведений СостоянияОднократныхСкидокИКупонов. Этот регистр предназначен для хранения информации об одноразовых кодах и их текущем статусе (использован или нет).

В рабочем месте кассира (РМК) предусмотрена штатная кнопка «Промокод». При ее нажатии кассир может считать сканером штрихкод или QR-код. Система выполнит поиск кода в регистре, проверит его актуальность и, если код валиден, применит связанную с ним автоматическую скидку, зафиксировав факт гашения купона в системе.

Однако при попытке настроить вторую часть условия — ограничение «не более 5 штук» — мы сталкиваемся с жестким ограничением типового функционала:

  1. Штатное условие предоставления скидки За разовый объем продаж в «1С:Розница 2.2» работает только по принципу «не менее». То есть мы можем настроить скидку, которая сработает, если покупатель берет 5 и более товаров.
  2. В программе нет штатной настройки («галочки» или числового поля), которая позволяла бы ограничить применение скидки сверху — то есть применить скидку 25% только к первым 5 единицам номенклатуры в чеке, а последующие продать по полной стоимости.

Рассмотрим подробнее два практических пути решения этой проблемы: для редакции 2.2 (через внешнюю обработку) и для редакции 3.0 (полностью штатными средствами).

---

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

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

В системе «1С:Розница» реализована штатная возможность подключения внешних алгоритмов через справочник ДополнительныеОтчетыИОбработки. Мы можем разработать или внедрить готовую внешнюю обработку с типом «Скидки-наценки».

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

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

Ниже представлен пример структуры программного кода для внешней обработки расчета скидки:


Процедура РассчитатьСкидку(ОбъектДокумента, ПараметрыРасчета, ТаблицаСкидок) Экспорт
    
    СегментНоменклатуры = ПолучитьСегментАкционныхТоваров();
    МаксимальноеКоличество = 5;
    ПроцентСкидки = 25;
    
    // Проверяем наличие примененного одноразового купона в чеке
    Если Не КупонУспешноАктивирован(ОбъектДокумента) Тогда
        Возврат;
    КонецЕсли;
    
    КоличествоОбработано = 0;
    
    Для Каждого СтрокаТЧ Из ОбъектДокумента.Товары Цикл
        
        Если ТоварПринадлежитСегменту(СтрокаТЧ.Номенклатура, СегментНоменклатуры) Тогда
            
            ДоступноДляСкидки = Мин(СтрокаТЧ.Количество, МаксимальноеКоличество - КоличествоОбработано);
            
            Если ДоступноДляСкидки > 0 Тогда
                // Рассчитываем сумму скидки на доступное количество
                СуммаСтрокиБезСкидки = ДоступноДляСкидки * СтрокаТЧ.Цена;
                СуммаСкидкиСтроки = СуммаСтрокиБезСкидки * (ПроцентСкидки / 100);
                
                // Записываем результат в таблицу распределения скидок
                НоваяСтрокаСкидки = ТаблицаСкидок.Добавить();
                НоваяСтрокаСкидки.ПолучательСкидки = СтрокаТЧ.КлючСвязи;
                НоваяСтрокаСкидки.Сумма = СуммаСкидкиСтроки;
                
                КоличествоОбработано = КоличествоОбработано + ДоступноДляСкидки;
            КонецЕсли;
            
            Если КоличествоОбработано >= МаксимальноеКоличество Тогда
                Прервать; // Лимит в 5 товаров исчерпан
            КонецЕсли;
            
        КонецЕсли;
        
    КонецЦикла;

КонецПроцедуры

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

---

Решение задачи в «1С:Розница 3.0» штатными средствами

Если у вас есть возможность обновить конфигурацию до актуальной редакции «1С:Розница 3.0» (или использовать «1С:Управление нашей фирмой 3.0»), то данная задача решается полностью в пользовательском режиме без привлечения программистов.

Разработчики фирмы «1С» кардинально переработали и расширили маркетинговый блок в третьей версии программы. Настроим нашу акцию по шагам:

Шаг 1. Создание автоматической скидки и ограничение количества

Перейдем в раздел маркетинга и создадим новую автоматическую скидку со значением 25%. В карточке скидки в поле «Область предоставления» выберем вариант «На строку с условием». Программа откроет дополнительные параметры, где мы сможем указать ограничение: Применять только на 5 ед. товара один раз в строке. Это ключевая настройка, которая решает проблему верхнего лимита количества товара.

Шаг 2. Настройка сегмента номенклатуры

В условиях предоставления скидки добавим отбор по номенклатуре. Укажем созданный ранее сегмент товаров, на которые должна распространяться акция. Теперь скидка будет начисляться только на позиции из этого сегмента и строго в пределах установленного лимита (не более 5 единиц).

Шаг 3. Настройка промокодов и купонов

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

При оформлении продажи в новом РМК кассиру достаточно считать предоставленный покупателем QR-код. Программа мгновенно проверит промокод, применит скидку 25% ровно на 5 единиц товара из сегмента (даже если в чеке их присутствует больше) и погасит использованный купон.

---

Альтернативный вариант: Использование внешних систем лояльности

Если ваше предприятие использует развитую CRM или внешнюю систему лояльности (например, UDS Game, MAXMA.com, Mindbox и др.), логику ограничений и валидацию QR-кодов можно полностью перенести на сторону этого сервиса.

В этом случае интеграция работает по следующей схеме:

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

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

---

Выводы и рекомендации

Подводя итоги нашего анализа, дадим практические рекомендации для внедрения данной механики:

← На главную