Разберем одну из самых неприятных и стрессовых ситуаций в розничной торговле: покупатель приложил карту к терминалу, банк одобрил транзакцию и списал денежные средства, но в этот момент произошел сбой ККТ (замятие ленты, обрыв связи, системная ошибка). В результате в программе 1С:Комплексная автоматизация или 1С:Управление торговлей чек завис в статусе отложенного или непробитого, а повторно проводить оплату по карте нельзя, так как это приведет к двойному списанию средств у клиента.
Выясним причины такого поведения системы и рассмотрим подробные сценарии выхода из этой ситуации как для обычного кассира, так и для системного администратора или программиста 1С.
Прежде чем вносить изменения в настройки программы или базы данных, нам необходимо точно локализовать проблему. Проанализируем текущее состояние оборудования и транзакций:
Если в ОФД чека нет, но деньги с карты ушли, нам нужно заставить ККТ пробить чек в 1С без повторного обращения к банковскому терминалу. Для этого воспользуемся обходным путем, рекомендованным методистами фирмы «1С».
Рассмотрим пошагово, как временно перевести терминал в ручной режим:
Эквайринговые терминалы.Использовать эквайринговый терминал без подключения к системе.Чек ККМ. Перейдем на вкладку оплаты картой и заменим реальный подключенный терминал на наш новый ручной «Терминал без подключения».Пробит.Если сбой произошел непосредственно в интерфейсе РМК современных версий конфигураций 1С:Комплексная автоматизация 2 или 1С:Управление торговлей 11, мы можем обойти проблему с помощью встроенного механизма распределения оплат.
Проанализируем этот вариант:
Смешанная оплата (в некоторых версиях она называется «Сложная оплата»).Пробить чек (или «Готово»). Программа отправит команду фискализации напрямую на ККТ, минуя шаг повторной авторизации безналичного платежа в банке.Ситуация усложняется, если сбой произошел вчера или еще раньше, а кассовая смена уже закрыта. Согласно правилам применения ККТ (закон 54-ФЗ), мы не имеем права просто так пробивать обычные чеки за прошлые даты текущим днем. Это грозит штрафами за неприменение ККТ в момент расчета.
Разберем правильный юридический и технический алгоритм действий:
Приходный кассовый ордер или Эквайринговая операция с типом «Коррекция прихода»).Приход, а способ оплаты выберем как Безналичными (электронными).Иногда штатные механизмы 1С полностью блокируют редактирование или пробитие чека из-за некорректных внутренних статусов документа. В этом случае программисту или системному администратору приходится корректировать данные непосредственно в информационной базе.
Выясним причину блокировок. При попытке пробития чека 1С генерирует уникальный идентификатор и временный номер чека. Если произошел сбой, этот номер зависает в реквизитах документа, и система считает, что транзакция фискализации уже запущена или завершена с ошибкой, блокируя кнопку повторной отправки.
Применим следующий алгоритм очистки реквизитов с помощью встроенной обработки «Групповое изменение реквизитов»:
Групповое изменение реквизитов под учетной записью с административными правами.Чек ККМ и установим отбор по нашему проблемному документу.НомерФискальногоЧека (или НомерЧекаККМ) и сбросим его значение в 0 (или очистим поле).СтатусДокумента и временно переведем его в состояние Проведен (минуя интерфейс кассира).ДанныеПереданыВБанк должны быть активны, а код авторизации (RRN) должен быть заполнен в соответствии с банковским слипом.Чек ККМ напрямую через интерфейс программы (не через РМК). Теперь кнопка Пробить чек станет активной. Нажмем её для отправки команды непосредственно на фискальный регистратор.Если программные методы внутри 1С не помогают, мы можем выполнить фискализацию напрямую через утилиту тест-драйвера ККТ (например, драйвер АТОЛ или Штрих-М). Для этого в утилите драйвера вручную заполняются все позиции чека, указывается тип оплаты «Электронными» и пробивается физический чек. После этого в самой базе 1С документ проводится вручную (устанавливается признак «Пробит») без обращения к оборудованию, чтобы сбалансировать складские остатки и выручку.
Чтобы автоматизировать проверку статусов транзакций в будущем и избежать ручного вмешательства, мы можем настроить в модуле эквайринга обработку исключительных ситуаций. Посмотрим на пример кода, который может быть полезен разработчикам для принудительной проверки статуса транзакции перед отменой операции в 1С:
// Пример проверки статуса эквайринговой транзакции при возникновении сбоя ККТ
Функция ПроверитьСтатусТранзакцииВБанке(ИдентификаторТранзакции, Терминал) Экспорт
РезультатПроверки = Новый Структура("Успешно, Ошибка", Ложь, "");
// Подключение к компоненте эквайринга
Попытка
ДрайверЭквайринга = ПолучитьПодключенноеОборудование(Терминал);
Если ДрайверЭквайринга <> Неопределено Тогда
ОтветБанка = ДрайверЭквайринга.ВыполнитьОперацию("ПроверитьСтатус", ИдентификаторТранзакции);
Если ОтветБанка.КодОшибки = 0 Тогда
РезультатПроверки.Успешно = Истина;
Иначе
РезультатПроверки.Ошибка = ОтветБанка.ОписаниеОшибки;
КонецЕсли;
КонецЕсли;
Исключение
РезультатПроверки.Ошибка = ОписаниеОшибки();
КонецПопытки;
Возврат РезультатПроверки;
КонецФункции
Использование подобных проверок позволяет минимизировать риск расхождения данных между банком-эквайером и вашей учетной системой 1С, обеспечивая стабильную работу кассового узла даже в условиях нестабильной связи.