Как подключить два эквайринговых терминала к одному RDP-серверу?

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

При организации работы нескольких кассиров на одном терминальном сервере (RDP) часто возникает задача подключения нескольких эквайринговых терминалов Сбербанка. Стандартная схема работы через COM-объект SBRFCOM.DLL часто дает сбои: система путает папки с настройками, блокирует доступ к портам или просто не позволяет инициализировать два устройства одновременно. В этой статье мы подробно разберем, как уйти от использования устаревших COM-технологий и настроить стабильную работу оборудования через Native API.

Почему стандартный метод с COM-объектом не подходит?

Рассмотрим ситуацию: у нас есть две папки C:\termSber\sberL и C:\termSber\sberR. Казалось бы, достаточно зарегистрировать библиотеку и обращаться к разным путям. Однако компонента SBRFCOM.DLL при регистрации в реестре Windows жестко привязывается к определенным путям. Даже если попытаться создать несколько COM+ приложений в службе компонентов, драйвер все равно может обращаться к глобальным настройкам в корне системы или системным переменным, что приводит к конфликтам. Выясним причину: архитектура старого драйвера не была рассчитана на многопоточную изоляцию в рамках одного процесса или сессии без сложных манипуляций с реестром.

Решение проблемы: переход на Native API (SberAcquiringTerminal2)

Самым надежным и современным способом решения задачи является использование интеграционной компоненты нового типа — SberAcquiringTerminal2 (библиотека SberAcquiringTerminalNativeWin.dll). Основное преимущество этого драйвера заключается в поддержке параметра DistribPath, который позволяет программно указать каждому экземпляру объекта, где именно искать его рабочие файлы (pilot.exe, pinpad.ini и другие).

Проанализируем шаги, необходимые для настройки:

  1. Подготовка файловой структуры: Создадим для каждого терминала отдельный каталог на сервере, например C:\SberTerminal_1 и C:\SberTerminal_2. В каждую папку необходимо скопировать полный набор файлов от Сбербанка (библиотеки gate.dll, sbpilot.dll, исполняемый файл pilot.exe и файл настроек pinpad.ini).
  2. Настройка параметров связи: В каждом файле pinpad.ini укажите соответствующий COM-порт, на котором «висит» конкретный терминал. При работе через RDP крайне важно обеспечить стабильность имен портов для каждой сессии.
  3. Подключение компоненты в 1С: В отличие от COM, Native-компоненту не нужно регистрировать через regsvr32. Она подключается динамически из кода или из макета конфигурации.

Программная реализация в 1С

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


// Путь к Native-библиотеке (можно хранить в макете)
ПутьККомпоненте = "C:\Sber\SberAcquiringTerminalNativeWin.dll";

// Подключаем внешнюю компоненту
Если ПодключитьВнешнююКомпоненту(ПутьККомпоненте, "SberNative", ТипВнешнейКомпоненты.Native) Тогда
    
    // Создаем объект драйвера
    Драйвер = Новый("AddIn.SberNative.SberAcquiringTerminal2");
    
    // Устанавливаем критически важный параметр DistribPath
    // Именно он указывает драйверу на папку с настройками конкретного терминала
    Драйвер.УстановитьПараметр("DistribPath", "C:\SberTerminal_1\");
    
    // Теперь можно вызывать методы оплаты
    // Результат = Драйвер.ОплатитьПлатежнойКартой(Сумма, НомерЧека);
    
Иначе
    Сообщить("Не удалось загрузить Native-компоненту Сбербанка");
КонецЕсли;

Разберем по шагам работу с параметрами

Проанализируем, какие параметры и методы становятся доступны при использовании SberAcquiringTerminal2.

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

Особенности работы в RDP-сессиях

Посмотрим на ситуацию со стороны системного администрирования. При работе нескольких пользователей на одном сервере возникают нюансы с пробросом COM-портов. Если терминалы подключены к локальным ПК кассиров и «пробрасываются» в сессию, порты могут динамически менять свои номера (например, сегодня это COM3, а завтра COM7).

Рекомендации для стабильной работы:

Выясним причину возможных ошибок

Если при вызове метода Подключить() система выдает ошибку, проверьте следующее:

  1. Верно ли указан путь в DistribPath (наличие закрывающего слэша иногда критично).
  2. Находится ли в этой папке файл gate.dll. Native-компонента является «оберткой», которая все равно вызывает функции из gate.dll.
  3. Не заблокирован ли COM-порт другим приложением. На одном порту в один момент времени может работать только один экземпляр драйвера.

Использование Native API с разделением рабочих каталогов — это единственный надежный способ заставить два и более терминала Сбербанка работать на одном сервере без взаимного влияния. Это решение позволяет избежать «зависаний» сессий и гарантирует, что оплата с кассы №1 уйдет именно на терминал №1, а не на соседний.

← На главную