Проблема некорректной работы эквайринга Сбербанка в среде «1С:Предприятие» часто возникает после автоматического или принудительного обновления программного обеспечения терминала (UPOS). Ситуация выглядит следующим образом: клиент прикладывает карту, терминал успешно списывает средства, «1С» сигнализирует об успехе, но в следующую секунду выдает системное сообщение «Оплата не была произведена: Ошибка 0». В результате чек на ККМ не печатается, а через несколько минут банк инициирует автоматическую отмену операции (сторно), и деньги возвращаются покупателю.
В данной статье мы разберем причины этого сбоя, проанализируем взаимодействие учетной системы с банковскими библиотеками и разработаем пошаговый алгоритм решения проблемы.
Проанализируем техническую сторону вопроса. Код «0» в протоколах Сбербанка (в частности, в файле логов p.log) сам по себе означает «Успешно». Однако в контексте «1С» эта ошибка сигнализирует о том, что программа получила от терминала корректный ответ, но не смогла его правильно интерпретировать из-за несоответствия форматов данных.
Основная причина кроется в обновлении ПО Сбербанка до версий 29.хх и выше. В этих версиях программный интерфейс библиотеки SBRFCOM.dll претерпел изменения: ключевой метод DoPosAction теперь требует передачи 7 входных параметров, в то время как старые конфигурации (такие как УТ 11.3) или старые драйверы в «1С» продолжают обращаться к нему, передавая только 3 параметра. Возникает программный конфликт, из-за которого «1С» считает операцию незавершенной и дает команду на отмену чека.
Первым делом нам необходимо убедиться, что в системе используются актуальные версии библиотек, соответствующие прошивке терминала. Для этого рассмотрим процесс замены файлов в рабочей папке эквайринга (обычно это C:\sc552 или C:\sberbank).
SBRFCOM.dll, SBRF.dll и pilot_nt.dll на новые версии.loadparm.ini. Важно убедиться, что параметры подключения (номер порта и скорость) в нем актуальны.Важный нюанс: часто старые копии библиотек «застревают» в папке bin самой платформы «1С» или в папках временных файлов пользователя. Проанализируем систему на наличие дубликатов и удалим их, чтобы исключить ситуацию, когда «1С» подхватывает старую компоненту вместо новой.
Просто скопировать файлы недостаточно — библиотеку необходимо зарегистрировать в операционной системе. Разберем особенности регистрации для разных разрядностей систем. Если мы используем 32-битную версию платформы «1С» (что является стандартом для большинства внедрений УТ 11.3) на 64-битной Windows, регистрацию нужно проводить через специальный интерпретатор.
Запустим командную строку от имени администратора и выполним следующие команды:
cd C:\Windows\SysWOW64
regsvr32.exe /u "C:\sc552\sbrfcom.dll"
regsvr32.exe "C:\sc552\sbrfcom.dll"
Рассмотрим подробнее эти команды: флаг /u сначала корректно разрегистрирует старую версию компоненты в реестре, а вторая команда запишет пути к новому файлу. Если вы получите сообщение об успешном выполнении DllRegisterServer, значит, система готова к работе с новым интерфейсом.
Теперь перейдем в интерфейс «1С:Управление торговлей». Проанализируем настройки справочника ПодключаемоеОборудование. В некоторых релизах драйверов Сбербанка для «1С» реализована поддержка обоих протоколов (на 3 и на 7 параметров).
Сбербанк: Эквайринговые терминалы (7 параметров)).Иногда выясним, что причина кроется в блокировке обратной связи от терминала к программе. После успешного списания денег библиотека SBRF.dll должна передать файл ответа в «1С». Если у пользователя недостаточно прав на запись в папку с UPOS или если антивирус блокирует активность зарегистрированной DLL, «1С» получит пустой ответ, что и вызовет Ошибка 0.
Выполним следующие действия:
C:\sc552 в исключения антивируса и защитника Windows.Если вышеописанные действия не помогли, проанализируем файл p.log, который создается в папке с библиотеками. Откроем его текстовым редактором и найдем последние строки после неудачной операции.
Если в логе мы видим Result: 000, но оплата в «1С» отменилась, это подтверждает теорию о несовпадении количества параметров. Если же в логе присутствуют другие коды (например, 4134 или 99), проблема может быть в аппаратной части или настройках loadparm.ini, таких как WaitTimeout. Попробуем увеличить значение тайм-аута, если связь с банком нестабильна:
[Parameters]
WaitTimeout=120
Это даст системе больше времени на обработку ответа от сервера банка, прежде чем SBRFCOM вернет управление в «1С».
Подведем итоги. В 90% случаев «Ошибка 0» лечится одновременным обновлением файлов UPOS и перерегистрацией библиотеки sbrfcom.dll. Помните, что важно не просто заменить файлы, а обеспечить соответствие между версией ПО на самом пин-паде (которое обновляет банк) и версией драйвера, установленной на компьютере кассира.
Привлечение специалиста банка может быть полезным, однако, как показывает практика, сотрудники банка часто проверяют работу терминала своей автономной утилитой, которая работает корректно, и делают вывод о проблеме на стороне «1С». В этом случае системному администратору необходимо самостоятельно проконтролировать актуальность библиотек, через которые 1С:Предприятие взаимодействует с оборудованием.