Что делать, если при оплате чека деньги с карты списались, а чек ККМ не пробился в 1С?

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

Разберем одну из самых неприятных и стрессовых ситуаций в розничной торговле: покупатель приложил карту к терминалу, банк одобрил транзакцию и списал денежные средства, но в этот момент произошел сбой ККТ (замятие ленты, обрыв связи, системная ошибка). В результате в программе 1С:Комплексная автоматизация или 1С:Управление торговлей чек завис в статусе отложенного или непробитого, а повторно проводить оплату по карте нельзя, так как это приведет к двойному списанию средств у клиента.

Выясним причины такого поведения системы и рассмотрим подробные сценарии выхода из этой ситуации как для обычного кассира, так и для системного администратора или программиста 1С.

Шаг 1. Первичный контроль и проверка безопасности

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

  1. Проверим банковский терминал. Убедимся, что транзакция действительно успешно завершена банком-эквайером. Распечатаем краткий отчет («сверка итогов» или «последняя операция») непосредственно с терминала эквайринга. Если там значится статус «Одобрено» или «Успешно» и распечатался банковский слип-чек, значит, со стороны банка оплата полностью закрыта.
  2. Проверим личный кабинет ОФД. Иногда происходит локальный сбой печатающего механизма кассы на финальной стадии, но при этом ККТ успевает фискализировать операцию и отправить ее оператору фискальных данных. Зайдем в личный кабинет ОФД и проверим, нет ли там уже зарегистрированного чека на эту сумму и время. Если чек в ОФД присутствует, дублировать его в программе нельзя — это приведет к завышению выручки в налоговой отчетности. В таком случае достаточно просто отправить клиенту электронную копию чека из ОФД или распечатать его копию на обычном принтере.

Решение 1. Временное отключение интеграции терминала (Официальный метод)

Если в ОФД чека нет, но деньги с карты ушли, нам нужно заставить ККТ пробить чек в 1С без повторного обращения к банковскому терминалу. Для этого воспользуемся обходным путем, рекомендованным методистами фирмы «1С».

Рассмотрим пошагово, как временно перевести терминал в ручной режим:

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

Решение 2. Обход через режим смешанной оплаты в РМК

Если сбой произошел непосредственно в интерфейсе РМК современных версий конфигураций 1С:Комплексная автоматизация 2 или 1С:Управление торговлей 11, мы можем обойти проблему с помощью встроенного механизма распределения оплат.

Проанализируем этот вариант:

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

Решение 3. Что делать, если чек «не сегодняшней» смены (Требования 54-ФЗ)

Ситуация усложняется, если сбой произошел вчера или еще раньше, а кассовая смена уже закрыта. Согласно правилам применения ККТ (закон 54-ФЗ), мы не имеем права просто так пробивать обычные чеки за прошлые даты текущим днем. Это грозит штрафами за неприменение ККТ в момент расчета.

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

  1. Нам необходимо оформить Чек коррекции. В зависимости от настроек вашей системы, для этого создается специальный документ (например, Приходный кассовый ордер или Эквайринговая операция с типом «Коррекция прихода»).
  2. В качестве типа коррекции выберем «Самостоятельно» (если ошибка обнаружена нами до того, как ее зафиксировала налоговая инспекция).
  3. В чеке коррекции обязательно укажем признак расчета Приход, а способ оплаты выберем как Безналичными (электронными).
  4. В поле описания или основания укажем дату и время фактического списания денежных средств со счета покупателя (на основании слип-чека или выписки банка) и номер объяснительной записки.

Решение 4. Технические лайфхаки для администратора через базу данных

Иногда штатные механизмы 1С полностью блокируют редактирование или пробитие чека из-за некорректных внутренних статусов документа. В этом случае программисту или системному администратору приходится корректировать данные непосредственно в информационной базе.

Выясним причину блокировок. При попытке пробития чека 1С генерирует уникальный идентификатор и временный номер чека. Если произошел сбой, этот номер зависает в реквизитах документа, и система считает, что транзакция фискализации уже запущена или завершена с ошибкой, блокируя кнопку повторной отправки.

Применим следующий алгоритм очистки реквизитов с помощью встроенной обработки «Групповое изменение реквизитов»:

  1. Запустим обработку Групповое изменение реквизитов под учетной записью с административными правами.
  2. Выберем объект исследования — документ Чек ККМ и установим отбор по нашему проблемному документу.
  3. Найдем реквизит НомерФискальногоЧека (или НомерЧекаККМ) и сбросим его значение в 0 (или очистим поле).
  4. Найдем реквизит СтатусДокумента и временно переведем его в состояние Проведен (минуя интерфейс кассира).
  5. Проверим табличную часть оплат. Параметры ДанныеПереданыВБанк должны быть активны, а код авторизации (RRN) должен быть заполнен в соответствии с банковским слипом.
  6. После записи изменений откроем форму самого документа Чек ККМ напрямую через интерфейс программы (не через РМК). Теперь кнопка Пробить чек станет активной. Нажмем её для отправки команды непосредственно на фискальный регистратор.

Если программные методы внутри 1С не помогают, мы можем выполнить фискализацию напрямую через утилиту тест-драйвера ККТ (например, драйвер АТОЛ или Штрих-М). Для этого в утилите драйвера вручную заполняются все позиции чека, указывается тип оплаты «Электронными» и пробивается физический чек. После этого в самой базе 1С документ проводится вручную (устанавливается признак «Пробит») без обращения к оборудованию, чтобы сбалансировать складские остатки и выручку.

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


// Пример проверки статуса эквайринговой транзакции при возникновении сбоя ККТ
Функция ПроверитьСтатусТранзакцииВБанке(ИдентификаторТранзакции, Терминал) Экспорт
    
    РезультатПроверки = Новый Структура("Успешно, Ошибка", Ложь, "");
    
    // Подключение к компоненте эквайринга
    Попытка
        ДрайверЭквайринга = ПолучитьПодключенноеОборудование(Терминал);
        Если ДрайверЭквайринга <> Неопределено Тогда
            ОтветБанка = ДрайверЭквайринга.ВыполнитьОперацию("ПроверитьСтатус", ИдентификаторТранзакции);
            Если ОтветБанка.КодОшибки = 0 Тогда
                РезультатПроверки.Успешно = Истина;
            Иначе
                РезультатПроверки.Ошибка = ОтветБанка.ОписаниеОшибки;
            КонецЕсли;
        КонецЕсли;
    Исключение
        РезультатПроверки.Ошибка = ОписаниеОшибки();
    КонецПопытки;
    
    Возврат РезультатПроверки;
    
КонецФункции

Использование подобных проверок позволяет минимизировать риск расхождения данных между банком-эквайером и вашей учетной системой 1С, обеспечивая стабильную работу кассового узла даже в условиях нестабильной связи.

← На главную