В процессе автоматизации розничной торговли часто возникает ситуация, когда интеграция банковского терминала и программы 1С дает сбой на финальном этапе. Одной из самых распространенных и неприятных проблем является ошибка 4309. Пользователь видит следующую картину: покупатель прикладывает карту, вводит ПИН-код, терминал одобряет операцию, но в 1С:Предприятие внезапно вылетает ошибка, а терминал тут же производит автоматическую отмену (Reversal), возвращая деньги клиенту. В итоге товар не продан, чек на фискальном регистраторе (например, АТОЛ 55Ф) не печатается, а кассир в замешательстве.
Разберем подробно причины этого поведения и пошагово выясним, как настроить связку 1С:Управление торговлей 10.3, эквайринга Сбербанка и кассы АТОЛ для стабильной работы.
Прежде чем приступать к настройкам, проанализируем ситуацию. Ошибка 4309 в протоколе взаимодействия со Сбербанком означает, что на стороне банковского процессинга транзакция прошла успешно, но программный модуль в 1С не смог подтвердить успешную печать слип-чека или фискального документа. В целях защиты прав потребителя (чтобы деньги не списывались без выдачи чека), в драйвере Сбербанка заложен алгоритм тайм-аута. Если подтверждение от ККТ не получено в течение нескольких секунд, терминал посылает сигнал «отмена» в банк.
Рассмотрим основные причины, по которым 1С «теряет» связь с оборудованием после оплаты:
SBRFCOM.dll и sbrf.dll..epf) и версии установленного ПО Сбербанка.pinpad.ini.Чаще всего проблема кроется в том, что операционная система не может корректно обратиться к COM-объекту драйвера эквайринга. Посмотрим на алгоритм правильной регистрации компонентов. Обратите внимание, что для 32-битной версии 1С (а 8.2 и большинство версий 8.3 являются именно такими) регистрацию нужно проводить специфическим образом.
Проанализируем действия для регистрации. Откроем командную строку от имени администратора и выполним следующие команды (предполагается, что ПО Сбербанка находится в папке C:\sc552):
cd C:\Windows\SysWOW64
regsvr32.exe C:\sc552\sbrf.dll
regsvr32.exe C:\sc552\sbrfcom.dll
Если ваша система 32-битная, используйте путь C:\Windows\System32. Важно убедиться, что в папке с библиотеками также присутствуют файлы pilot_nt.dll и gate.dll, так как они являются зависимыми. После успешной регистрации вы должны увидеть сообщение "DllRegisterServer в ... успешно".
Выясним причину конфликта параметров. В среде 1С эквайринг работает через обработку обслуживания (обычно это SberBankAcquiringTerminal.epf). Существует две основные модификации метода ОплатитьПлатежнойКартой в библиотеке Сбербанка:
Если ваша 1С:Управление торговлей 10.3 использует старую обработку, а вы зарегистрировали новую библиотеку (или наоборот), возникнет ошибка "Недостаточно фактических параметров". Проанализируем, какая версия библиотеки сейчас активна. Если вы получаете ошибку о параметрах, попробуйте заменить SBRFCOM.dll на версию из другого дистрибутива Сбербанка (например, перейти с версии 26.xx на 29.xx) и повторить регистрацию, описанную в первом шаге.
Настроим поведение самого терминала (в нашем примере Verifone VX805). Поскольку этот пин-пад не имеет встроенного принтера, печать должна осуществляться через АТОЛ 55Ф. За это отвечает параметр в файле C:\sc552\pinpad.ini.
Найдем и проверим следующие строки в конфигурационном файле:
PrinterEnd=1 — указывает на то, что управление печатью передается внешней программе (1С).PrinterType=0 — часто устанавливается для работы в режиме "безбумажного" терминала.Если эти параметры настроены неверно, терминал будет ждать сигнала от своего (несуществующего) принтера, не отправит подтверждение в 1С, что приведет к зацикливанию и той самой ошибке 4309.
Разберем технический нюанс работы драйвера. При каждой транзакции Сбербанк создает в своей рабочей папке временные файлы с результатами (файлы e, p, r). Если у пользователя, под которым запущена 1С, нет прав на "Запись" и "Изменение" в папке C:\sc552, драйвер не сможет записать результат операции. 1С "подумает", что ответа нет, и выдаст ошибку.
Рекомендация: Нажмите правой кнопкой мыши на папку с драйвером, перейдите в "Свойства" -> "Безопасность" и предоставьте группе "Все" (или конкретному пользователю) полные права.
Теперь перейдем в интерфейс 1С. Нам необходимо убедиться, что программа понимает, куда направлять текст слип-чека. Рассмотрим путь в меню:
Сервис -> Торговое оборудование -> Настройка торгового оборудования
На вкладке "Эквайринговые терминалы" откройте параметры вашего устройства. Убедитесь, что галочка "Печатать чек на терминале" СНЯТА. В этом случае 1С:Управление торговлей получит массив строк от терминала и самостоятельно передаст его на кассу АТОЛ 55Ф через драйвер ККТ.
Также стоит проверить настройки самой ККТ АТОЛ. В "Тесте драйвера ККТ" убедитесь, что в параметрах связи установлены корректные тайм-ауты (рекомендуется увеличить тайм-аут до 5000-10000 мс), чтобы касса успевала проснуться и начать печать до того, как банковская компонента решит сделать отмену.
Если вы программист и хотите убедиться, что библиотека видится системой, можно использовать простой скрипт на языке 1С для проверки создания объекта:
Попытка
ЭквайрингОбъект = Новый COMОбъект("SBRFSRV.Server");
Сообщить("Библиотека успешно загружена и готова к работе!");
Исключение
Сообщить("Ошибка загрузки компоненты: " + ОписаниеОшибки());
КонецПопытки;
Если этот код выполняется без ошибок, значит, системная регистрация прошла успешно, и проблему следует искать исключительно в настройках параметров (те самые 3 или 7 параметров в методах).
Для исправления ошибки 4309 и запуска печати чеков выполните следующие действия:
sbrf.dll и sbrfcom.dll через regsvr32 от имени администратора.После выполнения этих шагов связка 1C Торговля 10.3 и АТОЛ 55Ф начнет корректно обрабатывать безналичные платежи, а слип-чеки будут автоматически печататься сразу после подтверждения транзакции банком.