Почему 1С:Розница 2.3 вылетает при пробитии чека по эквайрингу и как найти потерянные платежи

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

Ситуация, когда программа 1С:Розница 2.3 аварийно завершает работу (ошибка 1cv8c.exe) в момент оплаты банковской картой, является критической для розничной точки. Покупатель видит списание средств, банковский терминал выдает слип-чек, но кассовый чек не печатается, а сама программа просто закрывается. При перезапуске кажется, что данных о продаже нет. В этой статье мы подробно разберем причины такого поведения системы, выясним, куда исчезают документы, и как стабилизировать работу связки 1С, эквайринга Сбербанка и касс Штрих-М.

Разберем логику работы документа Чек ККМ

Для начала проанализируем, как технически происходит процесс продажи в 1С. Важно понимать, что программа не «забывает» о чеке, она просто не успевает завершить транзакцию. Рассмотрим стандартный жизненный цикл документа ЧекККМ при оплате картой:

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

Вылет программы происходит на этапе между пунктом 5 и 6. Программа уже получила подтверждение от банка, но из-за критической ошибки в памяти (Access Violation) процесс 1cv8c.exe прерывается. Поскольку транзакция проведения документа не завершена, в журнале регистраций мы не видим записи о проведении, а в списке пробитых чеков документ отсутствует.

Выясним, где искать «пропавшие» чеки

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

Перейдем в раздел Продажи — Чеки ККМ (не путать с формой РМК). По умолчанию там могут стоять фильтры по текущей смене или только по пробитым чекам. Нам необходимо:

Если чек найден, его можно попытаться пробить повторно. Однако, чтобы избежать двойного списания, перед этим следует убедиться, что в настройках драйвера 1С не стоит команда на повторную инициализацию оплаты при пробитии. Обычно, если данные об оплате уже заполнены в табличной части, 1С просто посылает команду на ККТ.

Проанализируем причины нестабильности платформы 8.3.18

Одной из главных причин «падения» программы является версия платформы. Рассмотрим подробнее релизы 8.3.18.1483, 8.3.18.1520 и соседние. В данных версиях была замечена некорректная работа с динамической памятью при вызове внешних COM-компонент. Поскольку многие драйверы эквайринга (особенно старые версии sbrf.dll) работают именно через COM-интерфейс, возникает конфликт потоков.

Рекомендуется выполнить следующие действия:

  1. Обновить платформу до стабильной ветки 8.3.20.хххх или выше. Версии 8.3.18 признаны проблемными в части работы с торговым оборудованием.
  2. Если обновление платформы невозможно, необходимо проверить версию конфигурации 1С:Розница. В последних релизах 2.3 разработчики внедрили патчи, обходящие некоторые ошибки платформы при работе с асинхронными вызовами.

Настройка драйвера Сбербанка и переход на Native API

Часто вылеты связаны с тем, что в системе зарегистрирована старая компонента через regsvr32 sbrfcom.dll. Рассмотрим, как современная 1С должна взаимодействовать с терминалом:

В последних релизах Розницы 2.3 реализована поддержка драйвера «Сбербанк: Эквайринговые терминалы 2.х» (Native API). Этот драйвер работает внутри процесса 1С гораздо стабильнее. Проанализируем процесс перехода:

Настройка электропитания USB-портов

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

Выполним следующие настройки в ОС Windows:

  1. Зайдем в Диспетчер устройств.
  2. Найдем раздел Контроллеры USB.
  3. Для каждого «Корневого USB-концентратора» откроем Свойства и на вкладке Управление электропитанием снимем галочку «Разрешить отключение этого устройства для экономии энергии».
  4. В параметрах схемы электропитания Windows запретим «Временное отключение USB-порта».

Использование Технологического журнала для глубокой диагностики

Если вышеописанные методы не помогают, рассмотрим, как выяснить точную причину вылета с помощью Технологического журнала (ТЖ). Это позволит нам увидеть, какой именно модуль вызывает Access Violation.

Создадим в папке с установленной платформой (обычно C:\Program Files\1cv8\conf) файл logcfg.xml со следующим содержанием:


<config xmlns="http://v8.1c.ru/7.4/config/logcfg">
  <dump location="C:\dumps" create="true" type="0"/>
  <log location="C:\logs" history="24">
    <event>
      <eq property="Name" value="EXCP"/>
    </event>
    <event>
      <eq property="Name" value="PROC"/>
    </event>
  </log>
</config>

После очередного вылета в папке C:\logs мы сможем найти файл, где будет зафиксировано событие EXCP. Если в описании ошибки фигурирует библиотека pilot-nt.dll или SberBankES_v2.dll, значит проблема локализована в банковском ПО. Если же ошибка указывает на backbas.dll или core83.dll, то это однозначный повод для обновления платформы.

Краткий итог действий по исправлению

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

  1. Проверьте наличие непроведенных чеков в списке «Чеки ККМ», чтобы восстановить продажи.
  2. Обновите платформу 1С до версии 8.3.20 или выше (это решает 90% проблем с вылетами 1cv8c.exe).
  3. Обновите драйвер эквайринга в 1С до актуальной версии с поддержкой Native API.
  4. Отключите энергосбережение USB в настройках Windows.
  5. Добавьте 1cv8c.exe в исключения DEP (Data Execution Prevention), чтобы операционная система не блокировала выполнение кода во внешних библиотеках.

Применяя эти шаги системно, мы сможем добиться стабильной работы РМК и исключить потерю данных при работе с безналичной оплатой.

← На главную