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

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

При организации маркетинговых акций в розничной торговле часто возникает задача совместного применения накопительных карт покупателей и рекламных скидочных купонов. Однако при попытке настроить одновременное действие купона и дисконтной карты в конфигурации 1С:Розница 1.0 пользователи сталкиваются с тем, что при сканировании купона ранее рассчитанная скидка по карте клиента сбрасывается и заменяется скидкой по купону (или наоборот).

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

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

Проанализируем структуру документа ЧекККМ и рабочего места кассира (РМК) в конфигурации «1С:Розница 1.0» (построенной на архитектуре обычных форм аналогично «1С:Управление торговлей 10.3»).

В типовом документе ЧекККМ в шапке предусмотрен только один реквизит — ДисконтнаяКарта. Когда кассир считывает штрихкод дисконтной карты, реквизит заполняется, и обработчик выполняет пересчет автоматических скидок. Если после этого сканируется купон, заведенный в системе как отдельная дисконтная карта, происходит следующее:

  1. Система обрабатывает считанный штрихкод и находит вторую карту в справочнике ИнформационныеКарты.
  2. Значение реквизита ДисконтнаяКарта в документе перезаписывается новой картой-купоном.
  3. Запускается процедура пересчета автоматических скидок, которая очищает скидки по предыдущей карте и начисляет процент только по текущей выбранной карте.

Даже если в справочнике СкидкиНаценки создана группа скидок с правилом Сложение, типовой механизм не сможет сложить скидки от двух карт, так как в документе физически сохранена только одна дисконтная карта.

Вариант 1. Настройка купона через номенклатуру (без доработки конфигурации)

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

Разберем пошаговую настройку:

  1. В справочнике Номенклатура создадим служебную позицию (например, «Купон на скидку 10%») с типом Услуга или товаром с нулевой розничной ценой. Назначим этой позиции штрихкод купона.
  2. В справочнике СкидкиНаценки создадим скидку 10%, где в условии предоставления укажем По номенклатуре чека (наличие определенной номенклатуры в чеке). В качестве условия выбираем созданный купон.
  3. Поместим созданную скидку по купону и скидки по дисконтным картам в одну группу справочника СкидкиНаценки, установив для группы вариант совместного применения Сложение.

Посмотрим на порядок работы кассира при такой схеме: кассир считывает дисконтную карту покупателя (заполняется реквизит ДисконтнаяКарта), а затем сканирует штрихкод купона, который добавляется строкой в табличную часть Товары. Программа регистрирует выполнение условия по наличию купона в чеке и успешно суммирует процент по дисконтной карте и процент по купону.

Вариант 2. Использование ручной скидки кассира

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

  1. Дисконтная карта покупателя сканируется в обычном режиме — по ней автоматически рассчитывается накопленный процент.
  2. Скидка по купону (10%) вводится кассиром вручную на весь чек или на выделенные строки с помощью кнопки ручной скидки в РМК.
  3. В настройках прав пользователей проверяем, чтобы у кассиров было установлено право на ввод ручных скидок.

Вариант 3. Доработка конфигурации в коде

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

Разберем основные шаги по изменению объектов программы:

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

Пример логики разделения считывания карт в коде обработки штрихкода:


Если ЭтоКупон(СчитанныйШтрихкод) Тогда
    ДокументОбъект.Купон = НайденнаяКарта;
Иначе
    ДокументОбъект.ДисконтнаяКарта = НайденнаяКарта;
КонецЕсли;

// Вызов общего пересчета скидок чека с учетом обоих реквизитов
РассчитатьСкидкиВЧеке(ДокументОбъект);

Альтернативное решение: переход на актуальные редакции программы

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

  1. Подсистема Промокоды и купоны с контролем уникальности, сроков действия и автоматическим погашением при пробитии чека.
  2. Табличная часть для применения нескольких дисконтных карт одновременно.
  3. Гибкие деревья маркетинговых акций с настраиваемыми условиями совместного действия: максимум, минимум, сложение, умножение и вытеснение.
← На главную