При организации работы нескольких кассиров на одном терминальном сервере (RDP) часто возникает задача подключения нескольких эквайринговых терминалов Сбербанка. Стандартная схема работы через COM-объект SBRFCOM.DLL часто дает сбои: система путает папки с настройками, блокирует доступ к портам или просто не позволяет инициализировать два устройства одновременно. В этой статье мы подробно разберем, как уйти от использования устаревших COM-технологий и настроить стабильную работу оборудования через Native API.
Рассмотрим ситуацию: у нас есть две папки C:\termSber\sberL и C:\termSber\sberR. Казалось бы, достаточно зарегистрировать библиотеку и обращаться к разным путям. Однако компонента SBRFCOM.DLL при регистрации в реестре Windows жестко привязывается к определенным путям. Даже если попытаться создать несколько COM+ приложений в службе компонентов, драйвер все равно может обращаться к глобальным настройкам в корне системы или системным переменным, что приводит к конфликтам. Выясним причину: архитектура старого драйвера не была рассчитана на многопоточную изоляцию в рамках одного процесса или сессии без сложных манипуляций с реестром.
Самым надежным и современным способом решения задачи является использование интеграционной компоненты нового типа — SberAcquiringTerminal2 (библиотека SberAcquiringTerminalNativeWin.dll). Основное преимущество этого драйвера заключается в поддержке параметра DistribPath, который позволяет программно указать каждому экземпляру объекта, где именно искать его рабочие файлы (pilot.exe, pinpad.ini и другие).
Проанализируем шаги, необходимые для настройки:
C:\SberTerminal_1 и C:\SberTerminal_2. В каждую папку необходимо скопировать полный набор файлов от Сбербанка (библиотеки gate.dll, sbpilot.dll, исполняемый файл pilot.exe и файл настроек pinpad.ini).pinpad.ini укажите соответствующий COM-порт, на котором «висит» конкретный терминал. При работе через RDP крайне важно обеспечить стабильность имен портов для каждой сессии.regsvr32. Она подключается динамически из кода или из макета конфигурации.Рассмотрим пример кода, который позволяет инициализировать драйвер и привязать его к конкретной папке с настройками. Это исключает конфликты между устройствами и подготавливает базу для таких задач, как групповая печать чеков.
// Путь к Native-библиотеке (можно хранить в макете)
ПутьККомпоненте = "C:\Sber\SberAcquiringTerminalNativeWin.dll";
// Подключаем внешнюю компоненту
Если ПодключитьВнешнююКомпоненту(ПутьККомпоненте, "SberNative", ТипВнешнейКомпоненты.Native) Тогда
// Создаем объект драйвера
Драйвер = Новый("AddIn.SberNative.SberAcquiringTerminal2");
// Устанавливаем критически важный параметр DistribPath
// Именно он указывает драйверу на папку с настройками конкретного терминала
Драйвер.УстановитьПараметр("DistribPath", "C:\SberTerminal_1\");
// Теперь можно вызывать методы оплаты
// Результат = Драйвер.ОплатитьПлатежнойКартой(Сумма, НомерЧека);
Иначе
Сообщить("Не удалось загрузить Native-компоненту Сбербанка");
КонецЕсли;
Проанализируем, какие параметры и методы становятся доступны при использовании SberAcquiringTerminal2.
Подключить() — устанавливает связь с терминалом, проверяет наличие pilot.exe по указанному пути.ОплатитьПлатежнойКартой() — инициирует транзакцию.ОтменитьПлатеж() — используется для отмены операции в рамках текущей смены.ИтогиДня() — выполняет сверку итогов и закрытие смены на терминале.Важный момент: если вы используете типовую конфигурацию (например, 1С:Управление торговлей или 1С:Бухгалтерия), данная компонента обычно уже включена в состав макетов торгового оборудования. Вам достаточно в настройках «Подключаемого оборудования» создать два экземпляра устройства «Эквайринговый терминал Сбербанк», и в параметрах каждого указать свой рабочий каталог.
Посмотрим на ситуацию со стороны системного администрирования. При работе нескольких пользователей на одном сервере возникают нюансы с пробросом COM-портов. Если терминалы подключены к локальным ПК кассиров и «пробрасываются» в сессию, порты могут динамически менять свои номера (например, сегодня это COM3, а завтра COM7).
Рекомендации для стабильной работы:
SberAcquiringTerminalNativeWin.dll должна быть 32-битной, независимо от разрядности Windows Server.DistribPath, а также права на запись для формирования лог-файлов драйвера.Если при вызове метода Подключить() система выдает ошибку, проверьте следующее:
DistribPath (наличие закрывающего слэша иногда критично).gate.dll. Native-компонента является «оберткой», которая все равно вызывает функции из gate.dll.Использование Native API с разделением рабочих каталогов — это единственный надежный способ заставить два и более терминала Сбербанка работать на одном сервере без взаимного влияния. Это решение позволяет избежать «зависаний» сессий и гарантирует, что оплата с кассы №1 уйдет именно на терминал №1, а не на соседний.