Как настроить печать слип-чека при интеграции терминала Сбербанка (SBRFCOM.dll) в 1С?

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

При интеграции эквайринговых терминалов Сбербанка (например, Pax SP30, IPP320 и других) с конфигурациями 1С на обычных формах (таких как 1С:Управление торговлей 10.3, 1С:Розница 1.0) специалисты часто сталкиваются со следующей проблемой: оплата по карте проходит успешно, деньги со счета клиента списываются, однако фискальный регистратор не печатает слип-чек. При отладке выясняется, что компонент драйвера Сбербанка SBRFCOM.dll возвращает пустое значение в параметре текста чека или свойство Количество строк слип-чека (или аналогичное в зависимости от версии обработки) устанавливается равным 0.

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

Выясняем причину: почему драйвер возвращает 0 строк или пустой чек

Проанализируем стандартную схему работы. Когда кассир инициирует оплату картой, 1С обращается к зарегистрированной в операционной системе COM-библиотеке SBRFCOM.dll. Данная библиотека связывается со служебным ПО Сбербанка (обычно расположенным в каталоге C:\sc552 или C:\sbrf) и отправляет команду на пин-пад. После успешного проведения транзакции терминал возвращает ответ драйверу, а драйвер, в свою очередь, должен передать массив строк слип-чека обратно в 1С для последующего вывода на фискальный регистратор. Для детального изучения принципов взаимодействия и доступных функций компоненты можно использовать описание методов и функций внешней компоненты SBRFCOM.DLL.

Рассмотрим фрагмент типичного кода в обработке обслуживания эквайринга, где происходит обработка результата операции:


// Получаем объект драйвера платежной системы
ОбъектДрайвера = ПолучитьОбъектДрайвера();

// Вызываем метод проведения оплаты
РезультатОплаты = ОбъектДрайвера.ОплатитьПлатежнойКартой(Сумма, НомерКарты);

Если РезультатОплаты Тогда
    // Проверяем количество строк слип-чека, возвращенное драйвером
    КоличествоСтрок = ОбъектДрайвера.КоличествоСтрокСлипЧека;
    
    Если КоличествоСтрок = 0 Тогда
        // Сюда мы попадаем, если драйвер вернул нулевую длину
        ЗаписатьВЛог("Внимание: Драйвер вернул 0 строк для слип-чека.");
    Иначе
        // Печатаем строки слип-чека на фискальном регистраторе
        Для НомерСтроки = 1 По КоличествоСтрок Цикл
            СтрокаЧека = ОбъектДрайвера.ПолучитьСтрокуСлипЧека(НомерСтроки);
            ФискальныйРегистратор.НапечататьНефискальнуюСтроку(СтрокаЧека);
        КонецЦикла;
    EndIf;
КонецЕсли;

Если свойство КоличествоСтрокСлипЧека возвращает 0 (или метод GetLine возвращает пустые строки), фискальный регистратор просто не получает команду на печать. Проблема кроется в том, что по умолчанию во многих конфигурациях терминалов вывод слип-чека заблокирован на уровне настроек самого банковского ПО, либо драйвер ожидает печать чека непосредственно встроенным принтером самого терминала (если это автономный терминал с чековой лентой).

Решение 1. Настройка параметров на стороне банка (Сбербанк)

В 99% случаев данная проблема не связана с ошибками в коде 1С. Количество слип-чеков и режим их передачи в ККТ жестко задаются в параметрах терминала на сервере Сбербанка и загружаются в устройство при инициализации. Вам необходимо связаться с технической поддержкой банка (или инженером, обслуживающим вашу точку) и поставить им следующую задачу:

"Необходимо изменить параметры работы терминала в базе Сбербанка для печати двух копий слип-чеков на фискальном регистраторе (ККТ), подключенном к хосту (компьютеру), а не на самом терминале."

После того как инженер изменит настройки на стороне хоста Сбера, выполните на терминале операцию сверки итогов или загрузки параметров (команда LoadParm.exe) для применения изменений.

Решение 2. Корректировка конфигурационного файла pinpad.ini

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

  1. Откройте файл pinpad.ini с помощью текстового редактора (например, Блокнот) от имени администратора.
  2. Найдите или добавьте параметр PrinterFile. Этот параметр указывает драйверу записывать образ чека во внешний текстовый файл.
    Установите значение: PrinterFile=p
    В этом случае при проведении оплаты Сбербанк будет сохранять текстовый образ чека в файл с именем p (без расширения) в той же рабочей папке.
  3. Проверьте параметр PrinterEnd. Он отвечает за символ окончания печати и отрезки чека.
    Рекомендуемое значение для корректной интеграции с ККТ: PrinterEnd=01 или PrinterEnd=010D0A.
  4. Сохраните изменения в файле pinpad.ini.

Решение 3. Обходной путь в 1С — чтение слип-чека из файла p

Если Сбербанк упорно отказывается возвращать массив строк через COM-интерфейс (что часто бывает с новыми версиями библиотек), но при этом успешно создает файл чека благодаря параметру PrinterFile=p, мы можем доработать код в 1С для чтения чека напрямую из этого файла. Этот способ является крайне надежным и гарантирует результат.

Рассмотрим, как реализовать этот алгоритм в коде 1С:


// Задаем путь к файлу чека, настроенному в pinpad.ini
ПутьКРабочейПапке = "C:\sc552\";
ИмяФайлаЧека = ПутьКРабочейПапке + "p";

ФайлНаДиске = Новый Файл(ИмяФайлаЧека);
Если ФайлНаДиске.Существует() Тогда
    // Создаем текстовый документ для чтения чека
    ТекстовыйДок = Новый ТекстовыйДокумент;
    
    // Сбербанк обычно выгружает текст в кодировке OEM (DOS)
    ТекстовыйДок.Прочитать(ИмяФайлаЧека, КодировкаТекста.OEM);
    
    КоличествоСтрок = ТекстовыйДок.КоличествоСтрок();
    
    Если КоличествоСтрок > 0 Тогда
        Для НомерСтроки = 1 По КоличествоСтрок Цикл
            ТекущаяСтрока = ТекстовыйДок.ПолучитьСтроку(НомерСтроки);
            // Отправляем строку на фискальный регистратор
            ФискальныйРегистратор.НапечататьНефискальнуюСтроку(ТекущаяСтрока);
        КонецЦикла;
        
        // Отрезаем ленту
        ФискальныйРегистратор.ОтрезатьДокумент();
    КонецЕсли;
    
    // Обязательно удаляем временный файл чека, чтобы избежать наложения при следующих оплатах
    Попытка
        УдалитьФайлы(ИмяФайлаЧека);
    Исключение
        ЗаписатьВЛог("Не удалось удалить временный файл слип-чека: " + ОписаниеОшибки());
    КонецПопытки;
Иначе
    ЗаписатьВЛог("Файл слип-чека не обнаружен по пути: " + ИмяФайлаЧека);
КонецЕсли;

Решение 4. Совместимость версий SBRFCOM.dll (3 и 7 параметров)

Обратите внимание на версию регистрируемой библиотеки SBRFCOM.dll. Существуют две основные разновидности этой компоненты:

Если в вашей конфигурации 1С обработка обслуживания ожидает новую версию библиотеки с 7 параметрами, а в системе зарегистрирована старая (или наоборот), то вызовы методов будут завершаться ошибками или возвращать пустые (нулевые) результаты. Убедитесь, что библиотека зарегистрирована правильно в операционной системе через утилиту regsvr32:

Выполните в командной строке (cmd) от имени администратора следующие команды для перерегистрации библиотек:

  1. regsvr32 /u "C:\sc552\SBRFCOM.dll" (снятие старой регистрации)
  2. regsvr32 "C:\sc552\SBRFCOM.dll" (регистрация актуальной версии)
  3. В некоторых случаях также требуется регистрация основной библиотеки: regsvr32 "C:\sc552\sbrf.dll"

Также помните о разрядности платформы 1С. Если вы используете 32-разрядный клиент 1С (что стандартно для обычных форм), библиотеки Сбербанка также должны быть 32-разрядными.

Решение 5. Настройка TLV-тегов через утилиту TlvEdit

Если у вас есть доступ к сервисной утилите TlvEdit (которая часто поставляется инженерам Сбербанка для настройки шаблонов чеков), проверьте внутреннюю конфигурацию терминала:

Решение 6. Современная альтернатива через sb_pilot.exe (WinCLI)

Если вы устали бороться со сбоями COM-соединения и регистрацией библиотек SBRFCOM.dll в Windows, рассмотрите возможность перехода на работу через консольную утилиту sb_pilot.exe. Это современный стандарт интеграции Сбербанка, поддерживаемый БПО (Библиотекой подключаемого оборудования 1С):

Для перехода на этот метод достаточно обновить обработку обслуживания эквайринга в 1С на ту, которая поддерживает работу через драйвер "СБ РФ: Эквайринговые терминалы" нового образца. Для этой задачи подойдёт обработка обслуживания эквайринговых терминалов Сбербанка на новом драйвере для УТ 10.x.

← На главную