Ситуация, когда покупатель приложил карту, терминал одобрил транзакцию и выдал слип-чек, а 1С:Розница выдала ошибку и отказалась печатать фискальный чек, является одной из самых стрессовых для кассира. Особенно остро проблема стоит при торговле алкогольной продукцией (АП), когда к цепочке «Терминал — Касса» добавляется проверка в УТМ ЕГАИС. Если марка не прошла проверку, 1С блокирует печать чека, но деньги с карты клиента уже списаны.
В этой статье мы подробно разберем, почему возникает этот программный «клин», как правильно выполнить отмену операции, чтобы не нарушить кассовую дисциплину, и какие механизмы в 1С помогут нам избежать таких ситуаций в будущем.
Для начала проанализируем ситуацию с технической точки зрения. В стандартном алгоритме 1С:Розница при оплате картой происходит следующая последовательность действий:
Проблема заключается в том, что этап №3 (списание денег) уже завершен, а этап №4 (фискализация) не выполнен. В итоге: у клиента списаны деньги, у магазина нет зафиксированной продажи, а товар не списан с остатков. Для корректного отражения продажи в базе в подобных ситуациях можно использовать расширение для проведения чека ККМ без фискализации.
В современных релизах 1С:Розница (начиная с версий 2.3.10) реализован специальный функционал для обработки таких случаев. Система хранит сведения о транзакциях, которые получили подтверждение от банка, но не были закрыты чеком ККТ. Рассмотрим, как воспользоваться этим механизмом.
Перейдем в раздел Продажи, далее выберем пункт Чеки. В верхней части формы или в меню «Еще» найдем команду Эквайринговые операции. Проанализируем список:
Не завершена или Ошибка.Если 1С «зависла» настолько, что не дает зайти в интерфейс незавершенных операций, или терминал работает в полуавтономном режиме, нам придется выполнить отмену транзакции напрямую. Посмотрим на примере эквайринга Сбербанка, как это сделать.
Выясним причину, по которой мы не можем сделать это из интерфейса РМК. Часто бывает достаточно запустить сервисную утилиту драйвера (например, loadparm.exe в папке sc552). Однако в рамках 1С мы можем использовать возможности подключаемого оборудования:
Важный момент: Отмена (Reversal) возможна только до закрытия смены на терминале (сверки итогов). Если смена уже закрыта, придется делать «Возврат», что гораздо сложнее и дольше для клиента.
Проанализируем ситуацию, когда нам все же нужно выдать товар клиенту, раз деньги уже списаны. Если проблема только в «непонимании» между 1С и терминалом, можно временно «разъединить» их:
Внимание! Этот способ подходит только если товар прошел проверку ЕГАИС и проблема была лишь в печати чека. Если же ошибка была именно в акцизной марке, этот метод создаст нарушение учета АП. Чтобы не производить ручное отключение оборудования, можно использовать расширение для аварийного пробития чека при ошибке эквайринга.
Рассмотрим подробнее ошибку Не внесена в поштучный учет. Это означает, что марка является «старой» (третьего формата) и не была привязана к остаткам в Регистре №3. Если мы просто пробьем чек через драйвер ККТ, как советуют некоторые пользователи на форумах, мы получим следующие проблемы:
Правильным алгоритмом действий в данном случае будет только полная отмена транзакции по карте и отказ от продажи конкретной бутылки до момента устранения проблем с ее учетом (проведения процедуры «Привязка штрихкодов к партии»).
Чтобы не попадать в ситуацию «деньги ушли, а чек не вышел», необходимо изменить логику работы программы. По умолчанию 1С сначала запрашивает оплату, а потом проверяет марку. Мы же настроим систему иначе.
В настройках раздела Продажи — Алкогольная продукция (или в настройках РМК) найдем и включим опцию Предварительная проверка марок в УТМ. Разберем, что это даст:
Этот простой шаг экономит нервы кассиру и избавляет от необходимости делать возвраты по безналу.
Для разработчиков, столкнувшихся с необходимостью кастомизации процесса, приведем пример того, как программно инициировать отмену операции в коде 1С, используя объект драйвера. Мы можем использовать методы интеграционной библиотеки:
// Пример логики обращения к драйверу эквайринга для отмены
ОбъектДрайвера = ПодключаемоеОборудованиеРТ.ПолучитьОбъектДрайвера(СсылкаНаТерминал);
ПараметрыОперации = Новый Структура();
ПараметрыОперации.Вставить("Сумма", СуммаКВозврату);
ПараметрыОперации.Вставить("НомерЧека", НомерСлипЧека);
Результат = ОбъектДрайвера.ОтменитьОперацию(ПараметрыОперации);
Если Результат = Истина Тогда
Сообщить("Операция успешно отменена на терминале");
Иначе
ТекстОшибки = "";
ОбъектДрайвера.ПолучитьОшибку(ТекстОшибки);
Предупреждение("Ошибка отмены: " + ТекстОшибки);
КонецЕсли;
Использование подобных процедур в расширениях позволяет добавить кнопку «Экстренная отмена» прямо в форму РМК, если штатные механизмы по какой-то причине недоступны в вашем релизе конфигурации.
Подведем итоги. Если оплата прошла, а чек не напечатан:
Соблюдение этих правил позволит вам сохранить соответствие между данными банка, налоговой и ЕГАИС, а также минимизировать конфликты с покупателями.