Как настроить применение скидки по SMS-коду в 1С:Розница 2.2?

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

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

Ограничения типового функционала в редакции 2.2

Проанализируем возможности типовой конфигурации. В редакции 1С:Розница 2.2 штатный функционал работы с произвольными промокодами и SMS-верификацией существенно ограничен:

  1. Отсутствие отдельного механизма промокодов: Полноценный механизм с условием применения «За промокод», генератором кодовых последовательностей и отдельным полем ввода в интерфейсе кассира появился только в линейке «Розница 3.0» / «1С:УНФ».
  2. Отсутствие штатной SMS-верификации в базовом РМК 2.2: Механизм отправки и валидации SMS-кодов для подтверждения операций с бонусными баллами и дисконтными картами был добавлен разработчиками позже — начиная с релиза 2.3.11 в рамках интерфейса «Новое РМК».
  3. Ограничения купонов: Встроенный механизм однократных скидок и купонов в 2.2 рассчитан преимущественно на считывание напечатанного штрихкода сканером (например, из чека предыдущей покупки), а не на произвольный диалог валидации номера телефона и короткого SMS-кода.

Выясним причину архитектурных сложностей: кассиру в режиме РМК требуется понятный интерфейс для вызова диалогового окна, проверки введенного значения и активации скидки. Ниже подробно рассмотрим варианты решения — как с доработкой конфигурации, так и с применением типовых механизмов.

Вариант 1. Доработка формы РМК через механизм расширений

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

Посмотрим на общую логику процесса:

  1. Добавление интерфейсных элементов: В форму рабочего места кассира (РМК) через расширение добавляем команду и кнопку (например, «Ввести промокод» или «Подтвердить по SMS»).
  2. Окно ввода данных: По нажатию кнопки открывается модальное диалоговое окно, куда кассир вводит номер телефона покупателя.
  3. Генерация и отправка SMS: Обработчик формирует временный код (например, 4–6 цифр) со сроком жизни (TTL) в несколько минут и отправляет его клиенту через SMS-шлюз.
  4. Проверка кода: Кассир вводит код, названный клиентом. При совпадении система фиксирует успешную проверку.
  5. Применение скидки: Для хранения информации об использованных кодах можно использовать типовой регистр сведений СостояниеОднократныхСкидокИКупонов либо создать собственный регистр сведений в расширении. После успешной валидации в документе чека активируется право на автоматическую скидку, и выполняется пересчет скидок.

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


&НаКлиенте
Процедура ОбработатьВводКодаSMS(Команда)
    ПараметрыФормы = Новый Структура("НомерТелефона", Объект.НомерТелефона);
    ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВводаКодаSMS", ЭтотОбъект);
    ОткрытьФорму("Обработка.ВводКодаSMS.Форма.ФормаВвода", ПараметрыФормы, ЭтотОбъект,,,, ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаКлиенте
Процедура ПослеВводаКодаSMS(Результат, ДополнительныеПараметры) Экспорт
    Если Результат = Неопределено Или Не Результат.Успешно Тогда
        Возврат;
    КонецЕсли;

    // Вызываем пересчет автоматических скидок чека с учетом подтвержденной акции
    РассчитатьСкидкиСУчетомSMSКода(Результат.ИдентификаторКода);
КонецПроцедуры

Вариант 2. Использование механизма дисконтных карт

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

  1. Создаем отдельный вид дисконтных карт, например «Акция по SMS».
  2. Настраиваем автоматическую скидку, указав условием предоставления наличие карты данного вида.
  3. Внешний сервис или скрипт при отправке клиенту SMS с кодом создает или активирует карту, где в качестве номера карты (или штрихкода) выступает отправленный цифровой код.
  4. Кассир в РМК нажимает стандартную кнопку поиска/выбора дисконтной карты и вводит названный покупателем код как номер карты. Система находит карту и автоматически применяет скидку к чеку.

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

Вариант 3. Использование регистра купонов и ручного ввода штрихкода

Разберем по шагам альтернативный метод на базе типовых скидок с купонами:

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

Важные технические риски и нюансы внедрения

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

  1. Работа в распределенных базах (РИБ): Если магазины работают в узлах распределенной информационной базы, обмен данными происходит с интервалом. Если генерировать и гасить коды локально, покупатель теоретически может использовать один и тот же SMS-код в нескольких магазинах сети до завершения цикла обмена. Для предотвращения злоупотреблений проверку и списание кода рекомендуется выполнять через онлайн-обращение (HTTP-сервис) к центральной базе или к единому сервису лояльности.
  2. Сбои операторов связи: Необходимо разработать регламент для кассира на случай задержки SMS (например, повторный запрос кода не ранее чем через 60 секунд или привлечение старшего кассира/администратора).
← На главную