Как подключить два эквайринговых терминала Сбербанка на одном компьютере в 1С?

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

Приветствуем вас! В практической работе автоматизаторов и администраторов 1С часто возникает классическая, но от этого не менее сложная задача: подключение двух физических эквайринговых терминалов Сбербанка к одному рабочему месту (компьютеру). Такая необходимость обычно продиктована бизнес-требованиями, когда на одной кассе одновременно ведутся продажи от двух юридических лиц (например, ООО и ИП), для каждого из которых открыто свое рабочее место кассира (РМК) и установлена отдельная ККТ.

В этой статье мы подробно разберем, почему возникает конфликт оборудования, когда при попытке оплаты на разных РМК реагирует только один и тот же терминал, выясним первопричину этой проблемы и рассмотрим пять эффективных способов ее решения — от классических "костылей" с реестром Windows до современных и архитектурно правильных подходов.

Почему возникает конфликт при работе двух терминалов?

Рассмотрим подробнее физику процесса взаимодействия 1С и Сбербанка. Традиционный (устаревший, но все еще крайне распространенный) драйвер Сбербанка использует COM-технологию, базирующуюся на библиотеке sbrfcom.dll. При регистрации этой библиотеки в операционной системе Windows создается глобальная запись в реестре. Эта запись указывает на конкретную рабочую папку (обычно это C:\sberbank), из которой библиотека считывает конфигурационный файл настроек pinpad.ini.

Даже если мы физически подключим два терминала (например, Pax SP30) к разным USB-портам (которые эмулируют виртуальные COM-порты, допустим, COM3 и COM4) и создадим две разные папки C:\sberbank1 и C:\sberbank2, операционная система при вызове COM-объекта из 1С все равно будет обращаться к единственному зарегистрированному пути в реестре. В результате драйвер всегда будет считывать один и тот же pinpad.ini и отправлять сигнал на один и тот же COM-порт. Именно поэтому при оплате из любого окна РМК реагирует только один терминал.

Выяснив причину, давайте последовательно разберем все способы решения этой проблемы.

Решение 1. Динамическое изменение путей в реестре Windows

Проанализируем первый способ решения, который часто применяется на практике в конфигурациях прошлых поколений, таких как 1С:Управление торговлей 11.1. Суть метода заключается в том, чтобы перед каждым обращением к эквайринговому терминалу из кода 1С принудительно перезаписывать в реестре Windows путь к рабочей директории Сбербанка.

Для реализации этого метода выполним следующие шаги по подготовке:

  1. Создадим на диске две папки с индивидуальными настройками: C:\sberbank1 (для первого терминала, настроенного на первый COM-порт) и C:\sberbank2 (для второго терминала на другом COM-порте).
  2. Подготовим два файла реестра с расширением .reg.

Файл sber1.reg будет содержать информацию для переключения драйвера на первую папку:


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{SBERBANK-COM-CLASS-ID}\InprocServer32]
@="C:\\sberbank1\\sbrfcom.dll"

[HKEY_CURRENT_USER\Software\Sberbank]
"Path"="C:\\sberbank1"

Соответственно, файл sber2.reg будет указывать на вторую папку:


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{SBERBANK-COM-CLASS-ID}\InprocServer32]
@="C:\\sberbank2\\sbrfcom.dll"

[HKEY_CURRENT_USER\Software\Sberbank]
"Path"="C:\\sberbank2"

В коде 1С перед выполнением транзакции оплаты мы можем программно запускать импорт нужного .reg-файла с помощью встроенной функции:


ПутьКФайлуРеестра = "C:\sberbank1\sber1.reg";
ЗапуститьПриложение("regedit /s """ + ПутьКФайлуРеестра + """", , Истина);

Важное примечание: данный метод требует предоставления пользователю операционной системы повышенных прав на редактирование соответствующих веток реестра. Кроме того, если кассиры работают одновременно и транзакции могут отправляться в одну и ту же секунду, возможна коллизия, когда один поток перезапишет реестр прямо во время работы другого. Поэтому рассмотрим более надежные варианты.

Решение 2. Использование метода ЗадатьИмяБиблиотеки без манипуляций с реестром

Если мы хотим избежать потенциально опасного и нестабильного редактирования реестра, мы можем использовать встроенную возможность самого драйвера Сбербанка. Мало кто знает, но библиотека sbrfcom.dll поддерживает динамическое переопределение пути к служебной библиотеке gate.dll.

Давайте разберем этот изящный алгоритм по шагам:

  1. Зарегистрируем библиотеку sbrfcom.dll в системе стандартным способом (например, через regsvr32) всего один раз из любой директории.
  2. Разложим файлы настроек терминалов в две папки: C:\Sberbank_1 и C:\Sberbank_2. В каждой папке должны находиться индивидуальный файл pinpad.ini и копия файла gate.dll.
  3. В коде интеграции 1С (в модуле обработки обслуживания эквайринга Сбербанка, при вызове функции подключения устройства) обратимся к объекту драйвера и укажем точный путь к gate.dll для конкретного терминала:

// Пример программного переопределения рабочей папки драйвера Сбербанка в 1С
ПутьКПапкеТерминала = "C:\Sberbank_1"; // или C:\Sberbank_2 в зависимости от кассы
Попытка
    Драйвер.ЗадатьИмяБиблиотеки(ПутьКПапкеТерминала + "\gate.dll");
Исключение
    ЗаписьЖурналаРегистрации("Эквайринг", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка инициализации gate.dll: " + ОписаниеОшибки());
КонецПопытки;

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

Решение 3. Переход на современный драйвер Сбербанк 2.х (технология sb_pilot)

Если ваша конфигурация 1С (например, обновленная УТ 11, Розница или ERP) поддерживает современный сертифицированный драйвер Сбербанка версии 2.х, мы настоятельно рекомендуем полностью отказаться от устаревшей технологии COM (ActiveX) и перейти на работу через консольную утилиту sb_pilot.exe.

Этот способ является наиболее правильным с точки зрения современных стандартов разработки 1С. Рассмотрим, как его настроить:

  1. Создаем на жестком диске две независимые папки, например C:\Sberbank_CLI_1 и C:\Sberbank_CLI_2.
  2. Помещаем в каждую папку дистрибутив консольного клиента Сбербанка (файлы sb_pilot.exe, pilot_nt.dll и сопутствующие библиотеки).
  3. Настраиваем файлы pinpad.ini в каждой папке на соответствующие COM-порты подключенных устройств PAX SP30.
  4. В режиме "1С:Предприятие" переходим в раздел Администрирование -> Подключаемое оборудование.
  5. Создаем два отдельных устройства с типом оборудования "Эквайринговые терминалы", выбрав драйвер "1С:Эквайринговые терминалы Сбербанк 2.х".
  6. В настройках каждого оборудования в поле "Путь к дистрибутиву" (или "Рабочая директория") указываем свою папку: для первого терминала — C:\Sberbank_CLI_1, для второго — C:\Sberbank_CLI_2.

При проведении оплаты 1С будет самостоятельно запускать исполняемый файл sb_pilot.exe непосредственно из указанной директории. Поскольку утилиты работают изолированно друг от друга, они гарантированно будут считывать правильные файлы настроек и адресовать команды на нужные физические устройства без каких-либо конфликтов.

Решение 4. Использование функции "Мультимерчант" на одном физическом терминале

Давайте проанализируем бизнес-требование с практической точки зрения. Часто кассирам крайне неудобно держать на рабочем столе два громоздких физических терминала, путаться в проводах и постоянно ошибаться, передавая покупателю не тот пин-пад.

Эту проблему можно решить элегантно, настроив работу одного физического терминала на две разные организации. Данная технология называется "Мультимерчант" (Multi-merchant) или разделение по логическим отделам:

  1. Обратитесь в обслуживающий банк (Сбербанк) с просьбой прошить ваш терминал Pax SP30 под две разные организации (два разных Merchant ID / договора эквайринга). Специалисты банка настроят внутренние таблицы терминала и привяжут их к разным логическим номерам отделов (например, Отдел 1 — ООО, Отдел 2 — ИП).
  2. В 1С в справочнике "Эквайринговые терминалы" мы создаем два элемента. Оба будут ссылаться на одну и ту же физическую папку Сбербанка и один и тот же COM-порт.
  3. В настройках каждого терминала в 1С (или в параметрах договоров эквайринга) мы заполняем ключевой реквизит — "Номер отдела" (или "Код отдела" / "Department"). Указываем для терминала ООО значение 1, а для терминала ИП — значение 2.

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

Решение 5. Перевод терминалов на работу по сети TCP/IP (Ethernet)

Иногда корни проблем кроются в нестабильной работе эмуляции COM-портов через USB-кабель. Из-за скачков напряжения, перезапуска операционной системы или смены USB-разъема виртуальные порты в диспетчере устройств Windows могут "слетать", меняться местами или зависать.

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

  1. Подключите оба терминала Pax SP30 к вашей локальной сети сетевыми кабелями RJ-45 (или по Wi-Fi, если это поддерживается моделью).
  2. Задайте устройствам статические IP-адреса в вашей подсети (например, 192.168.1.150 для первого и 192.168.1.151 для второго). Это можно сделать через сервисное меню терминала или обратившись к технической поддержке банка.
  3. В файлах конфигурации pinpad.ini отключите использование COM-порта и пропишите параметры сетевого подключения:

; Пример настройки pinpad.ini для сетевого подключения
; Параметр ComPort должен быть закомментирован или удален
PinpadIPAddr=192.168.1.150
PinpadIPPort=8888

Сетевой протокол TCP/IP работает несравнимо стабильнее, не зависит от драйверов виртуального COM-порта в Windows и позволяет легко разносить оборудование на любые расстояния. Это идеальное решение при работе в терминальных сессиях RDP (удаленный рабочий стол).

Подведем итоги

Мы подробно рассмотрели все возможные варианты настройки двух эквайринговых терминалов на одном компьютере. Если вы работаете на старой конфигурации без возможности обновления платформы и БСП, лучшим техническим выбором станет использование метода ЗадатьИмяБиблиотеки (Решение 2). Если же конфигурация современная — смело переходите на драйвер версии 2.х (Решение 3) или рассмотрите переход на удобную схему мультимерчанта (Решение 4), которая сэкономит место на рабочем столе и упростит жизнь вашим кассирам.

← На главную