Как исправить ошибку эквайринговой системы Сбербанка 4309 при оплате картой в 1С?

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

При проведении оплаты банковской картой через эквайринговый терминал Сбербанка в программе 1С (например, в 1С:Управление торговлей или 1С:Розница) пользователи нередко сталкиваются с ошибкой «Ошибка эквайринговой системы 4309». При этом фискальный регистратор корректно печатает чеки при наличной оплате, а сбой происходит исключительно на этапе безналичного расчета.

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

Суть и механизм возникновения ошибки 4309

Код ошибки 4309 в банковском модуле Сбербанка расшифровывается как «Печатать нечего» (отсутствует образ документа для печати). Данная ошибка является вторичной и возникает из-за особенностей взаимодействия кассового модуля 1С и библиотеки эквайринга (sb_kernel.dll или драйвера pilot_nt).

Проанализируем типовой сценарий взаимодействия:

  1. 1С отправляет терминалу команду на проведение авторизации операции (списание средств с карты).
  2. На стороне терминала или банка возникает любой первичный сбой: отсутствие связи с сервером авторизации, неверно введенный ПИН-код, повреждение ключей безопасности KLK, отказ банка-эмитента или тайм-аут ожидания карты.
  3. Поскольку операция не завершилась успешно, банковская библиотека не формирует файл с образом слип-чека (по умолчанию текстовый файл с именем p в рабочем каталоге терминала).
  4. Кассовая обработка 1С, не обработав должным образом первичный код отказа, все равно запрашивает у библиотеки sb_kernel.dll слип-чек для печати на фискальном регистраторе.
  5. Библиотека возвращает ответ 4309 (нет данных для печати), который 1С выводит пользователю на экран, полностью затирая исходный код ошибки авторизации.

Шаг 1. Поиск исходной причины в логах эквайринга

Чтобы понять, что именно пошло не так при проведении платежа, необходимо обратиться к журналам самого банковского ПО, минуя интерфейс 1С.

Перейдем в рабочую папку эквайринга (чаще всего это C:\sc552 или каталог, указанный в настройках драйвера) и найдем файлы журналов:

  1. Откроем файл sb_kernel.log или upos.log с помощью текстового редактора.
  2. Перейдем в конец файла и найдем блок последней транзакции.
  3. Проверим реальный код ответа от процессинга или внутренней библиотеки терминала (например, ошибка связи Host not found, ошибка ключей KLK error, Declined и др.).

Шаг 2. Проверка автономной работы терминала

Проверим работоспособность оборудования без участия 1С, чтобы исключить влияние учетной системы и драйверов COM-соединения:

  1. Закроем 1С, чтобы освободить COM-порт, к которому подключен терминал.
  2. Откроем командную строку от имени администратора и перейдем в рабочую папку эквайринга: cd C:\sc552
  3. Запустим тестовую утилиту Сбербанка: sb_pilot.exe или утилиту pilot_nt.exe с параметрами тестирования связи.
  4. Если тест связи или тестовая сверка итогов завершаются ошибкой на стороне утилиты, проблема заключается в физическом подключении, настройке COM-порта, канале связи с банком или блокировке ключей. В этом случае требуется обращение в службу технической поддержки эквайринга Сбербанка.

Шаг 3. Настройка конфигурационного файла pinpad.ini

Если терминал успешно проходит автономные тесты, проверим корректность конфигурации интеграции в файле pinpad.ini (находится в рабочей директории эквайринга):

  1. Убедимся, что параметр PrinterFile настроен на правильное имя файла чека (обычно PrinterFile=p).
  2. Проверим номер виртуального COM-порта (параметр Port) и скорость обмена (Speed). Они должны строго соответствовать настройкам устройства в диспетчере устройств Windows.
  3. При работе в терминальном режиме (RDP) настроим разделение рабочих каталогов для разных пользователей через переменные окружения, прописав в pinpad.ini:
    
    WorkingDir=%UserProfile%\SC552
    TlvDir=%UserProfile%\SC552
    

Шаг 4. Проверка прав доступа к файловой системе

Банковский драйвер постоянно создает, перезаписывает и удаляет файлы в своем рабочем каталоге (файлы p, e, sb_kernel.log). Если у пользователя Windows, под которым запущена 1С, отсутствуют права на запись, сформировать чек не удастся.

  1. Откроем свойства рабочей папки эквайринга (например, C:\sc552).
  2. На вкладке Безопасность предоставим группе пользователей (или конкретной учетной записи кассира) права Полный доступ.

Шаг 5. Разрядность библиотек и регистрация SBRFCOM.dll

При использовании устаревших обработок обслуживания взаимодействие происходит через COM-объект SBRFCOM.dll:

  1. Помним, что библиотеки SBRF.dll и SBRFCOM.dll являются 32-разрядными (x86). При запуске 64-битного клиента 1С прямая работа с 32-битной COM-библиотекой не поддерживается. Для работы необходимо использовать 32-разрядный клиент 1С:Предприятие.
  2. Проверим корректность регистрации библиотеки через командную строку от имени администратора: regsvr32 "C:\Program Files (x86)\1cv8\8.3.X.XXXX\bin\SBRFCOM.dll"
  3. Обратим внимание на версию SBRFCOM.dll: более старые версии ожидали передачу 3 параметров при вызове методов, обновленные — 7 параметров. Если обработка обслуживания в 1С не совпадает по версии с используемой DLL, результат транзакции передается с ошибкой.

Шаг 6. Переход на драйвер БПО «Сбербанк 2.Х»

Для полного исключения подобных коллизий рекомендуется отказаться от ручной регистрации DLL в системных папках и перейти на использование стандартного драйвера из состава Библиотеки подключаемого оборудования (БПО):

  1. Откроем Администрирование → Подключаемое оборудование.
  2. В типе оборудования выберем Эквайринговые терминалы.
  3. Создадим новый экземпляр с драйвером «СБРФ:Эквайринговые терминалы 2.Х» (или актуальной версией из БПО).
  4. В параметрах подключения укажем путь к каталогу с банковским ПО (C:\sc552).
  5. Проверим тест устройства непосредственно из формы настройки оборудования в 1С.
← На главную