При организации маркетинговых акций в розничной торговле часто возникает задача совместного применения накопительных карт покупателей и рекламных скидочных купонов. Однако при попытке настроить одновременное действие купона и дисконтной карты в конфигурации 1С:Розница 1.0 пользователи сталкиваются с тем, что при сканировании купона ранее рассчитанная скидка по карте клиента сбрасывается и заменяется скидкой по купону (или наоборот).
Разберем причины такого поведения системы, выясним архитектурные ограничения программы и рассмотрим все возможные варианты решения задачи — как без изменения конфигурации, так и с помощью доработки программного кода.
Проанализируем структуру документа ЧекККМ и рабочего места кассира (РМК) в конфигурации «1С:Розница 1.0» (построенной на архитектуре обычных форм аналогично «1С:Управление торговлей 10.3»).
В типовом документе ЧекККМ в шапке предусмотрен только один реквизит — ДисконтнаяКарта. Когда кассир считывает штрихкод дисконтной карты, реквизит заполняется, и обработчик выполняет пересчет автоматических скидок. Если после этого сканируется купон, заведенный в системе как отдельная дисконтная карта, происходит следующее:
ИнформационныеКарты.ДисконтнаяКарта в документе перезаписывается новой картой-купоном.Даже если в справочнике СкидкиНаценки создана группа скидок с правилом Сложение, типовой механизм не сможет сложить скидки от двух карт, так как в документе физически сохранена только одна дисконтная карта.
Если конфигурация находится на поддержке и вносить изменения в программный код нежелательно, применим типовой обходной путь. Реализуем купон не как дисконтную карту, а как специальную номенклатурную позицию.
Разберем пошаговую настройку:
Номенклатура создадим служебную позицию (например, «Купон на скидку 10%») с типом Услуга или товаром с нулевой розничной ценой. Назначим этой позиции штрихкод купона.СкидкиНаценки создадим скидку 10%, где в условии предоставления укажем По номенклатуре чека (наличие определенной номенклатуры в чеке). В качестве условия выбираем созданный купон.СкидкиНаценки, установив для группы вариант совместного применения Сложение.Посмотрим на порядок работы кассира при такой схеме: кассир считывает дисконтную карту покупателя (заполняется реквизит ДисконтнаяКарта), а затем сканирует штрихкод купона, который добавляется строкой в табличную часть Товары. Программа регистрирует выполнение условия по наличию купона в чеке и успешно суммирует процент по дисконтной карте и процент по купону.
Если выпуск купонов носит разовый характер и их номенклатурный учет не требуется, разберем вариант с предоставлением ручной скидки:
Если требуется строгий автоматический учет и раздельное сканирование накопительных карт и промо-купонов, потребуется доработка метаданных конфигурации.
Разберем основные шаги по изменению объектов программы:
ЧекККМ и документ ОтчетОРозничныхПродажах добавим либо отдельный реквизит Купон (ссылка на ИнформационныеКарты), либо табличную часть ДисконтныеКарты для хранения произвольного количества карт.ЧекККМ изменим процедуру внешней обработки событий сканера ОбработкаВнешнегоСобытия или функцию поиска карты. Добавим разделение по префиксам или видам карт: если считана дисконтная карта клиента — заполняем основной реквизит, если считан купон — заполняем реквизит купона.СкидкиНаценкиПереопределяемый или модуле документа ЧекККМ) переопределим процедуру сбора скидок. Добавим сбор скидок как по дисконтной карте клиента, так и по прикрепленному купону с последующим применением формулы сложения.ПогашенныеКупоны и запишем номер купона при проведении чека.Пример логики разделения считывания карт в коде обработки штрихкода:
Если ЭтоКупон(СчитанныйШтрихкод) Тогда
ДокументОбъект.Купон = НайденнаяКарта;
Иначе
ДокументОбъект.ДисконтнаяКарта = НайденнаяКарта;
КонецЕсли;
// Вызов общего пересчета скидок чека с учетом обоих реквизитов
РассчитатьСкидкиВЧеке(ДокументОбъект);
Если бизнес-процессы требуют сложного маркетингового функционала, имеет смысл рассмотреть обновление программного продукта до «1С:Розница» ред. 2.3 или 3.0. В актуальных версиях на платформе «1С:Предприятие 8.3» изначально заложены: