Каждый специалист, работающий с торговым оборудованием в 1С, рано или поздно сталкивается с капризами эквайринговых терминалов. Одной из самых коварных является плавающая ошибка 4309 (Печатать нечего) при использовании интеграции со Сбербанком. Ситуация выглядит следующим образом: клиент прикладывает карту, деньги успешно списываются банком (иногда они тут же возвращаются обратно через несколько минут), но в 1С внезапно вылетает ошибка 4309, слип-чек Сбербанка не печатается, а чек ККМ не пробивается.
Давайте подробно разберем, почему возникает эта проблема, как провести глубокую диагностику с помощью файлов логов и какие практические шаги помогут навсегда избавиться от этой ошибки.
Для начала проанализируем архитектуру взаимодействия 1С с эквайрингом Сбербанка. В системе задействованы три звена: сама 1С (управляемая внешней обработкой обслуживания, например, SberBankES.epf), библиотека Сбербанка (sb_kernel.dll или sbrf.dll) и сам пинпад (терминал оплаты).
Когда вы инициируете оплату, происходит следующая цепочка событий:
p без расширения и располагается в папке C:\SC552 или C:\sbrf).Код ошибки 4309 — это лишь верхушка айсберга. Она означает буквально следующее: 1С обратилась к библиотеке драйвера за образом чека, но библиотека ответила, что файла чека нет («печатать нечего»). А вот почему этого файла не оказалось — скрыто внутри логов самого Сбербанка.
Чтобы докопаться до сути, нам необходимо изучить лог-файл работы драйвера Сбербанка. Он обычно находится в папке с компонентами эквайринга и называется sber_log.txt или формируется в корне рабочего каталога Сбера.
Давайте сравним успешную операцию и операцию со сбоем, зафиксированные в логе:
При успешной оплате мы увидим примерно такую картину:
21.06 14:28:58 SBKRNL: Open com 9
21.06 14:29:11 SBKRNL: Close com 9
21.06 14:29:11 SBKRNL: Result = 0, Amount = 236.00, Card = '365478******6907'
При возникновении ошибки 4309 в 1С, в логе Сбербанка будет зафиксировано следующее:
21.06 14:40:21 SBKRNL: Open com 9
21.06 14:40:37 SBKRNL: Close com 9
21.06 14:40:37 SBKRNL: Result = 4322
Код Result = 4322 соответствует системной ошибке ERR_PIL_PRINT_ERROR. Она означает, что запись чека на диск компьютера завершилась сбоем. Терминал либо не смог физически создать файл p в папке обмена, либо связь оборвалась прямо в процессе записи строки чека. Из-за этого финансовая операция отменяется банком (происходит автоматический возврат денег покупателю), а 1С получает от драйвера пустоту и рапортует об ошибке 4309.
Ниже представлен пример кода на стороне 1С, демонстрирующий, почему обработка выводит неинформативную ошибку:
// Упрощенный пример вызова эквайринга в обработке обслуживания
РезультатТранзакции = ОбъектДрайвера.ОплатитьПлатежнойКартой(Сумма, ДанныеКарты);
Если РезультатТранзакции <> 0 Тогда
// Если произошел внутренний сбой (например, 4322), файл чека "p" не создан
ЗаписатьВЛогСобытий("Сбой транзакции с кодом: " + РезультатТранзакции);
КонецЕсли;
// Попытка напечатать чек ККМ, которая и вызывает ошибку 4309
Попытка
ДрайверККМ.ПечатьСлипЧека(); // Здесь 1С пытается прочитать файл "p", но его нет!
Исключение
// 1С перехватывает отсутствие файла и выдает обобщенную ошибку
ВызватьИсключение "Ошибка 4309. Печатать нечего!";
КонецПопытки;
Самая распространенная причина ошибки 4322 — это микросекундные прерывания связи между ПК и пинпадом. Чаще всего это происходит на ноутбуках или моноблоках из-за агрессивных настроек энергосбережения операционной системы Windows.
Выполним следующие действия для стабилизации связи:
Иногда пинпад не может записать файл чека просто потому, что у пользователя Windows или процесса драйвера нет прав на изменение файлов в рабочей директории Сбербанка.
Проанализируем и настроим права доступа:
C:\SC552 или C:\sbrf).p, если он там остался) не стоит атрибут «Только для чтения» (Read-only). Вручную удалите старый файл p, чтобы система могла создать его заново «с чистого листа».Для минимизации программных конфликтов внутри конфигурации 1С рекомендуется выполнить проверку следующих настроек торгового оборудования:
SBRFCOM.dll строго соответствует версии прошивки, установленной банком на пинпад. Если банк удаленно обновил прошивку терминала, старая библиотека в каталоге 1С может начать давать сбои. Для обновления параметров иногда достаточно зайти в форму настройки драйвера эквайринга в 1С и нажать кнопку «Записать и закрыть».Если все вышеперечисленные программные методы и настройки электропитания не привели к стабильной работе (особенно часто этим грешат пинпады моделей Verifone VX810 и VX820 из-за износа интерфейсных кабелей), рассмотрите следующие шаги: