Как подключить два терминала Сбербанка к одному рабочему месту в 1С?

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

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

Архитектурные ограничения подсистемы ТО в УТ 10.3

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

  1. Старый механизм торгового оборудования: типовые обработки обслуживания оперируют фиксированным набором реквизитов. Передача нестандартных свойств устройства в интерфейсе настроек не предусмотрена без модификации структуры обработки.
  2. Глобальная регистрация COM-библиотек: классическая схема работы драйвера Сбербанка опирается на файлы sbrf.dll и sbrfcom.dll, регистрируемые в операционной системе через утилиту regsvr32. При создании экземпляра COM-объекта SBRFSRV.Server библиотека обращается к каталогу своей регистрации (по умолчанию это C:\sc552) и считывает параметры физического порта только из одного конфигурационного файла pinpad.ini. Попытка одновременно открыть два разных COM-порта из одного процесса Windows через стандартный COM-сервер приводит к конфликту.

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

Вариант 1. Настройка одного терминала на два юридических лица (режим «Мультимерчант»)

Рассмотрим наиболее удобный с точки зрения рабочего места кассира вариант — использование одного физического пин-пада, в который банк прошивает два независимых идентификатора (TID). В терминологии эквайринга Сбербанка эти идентификаторы разносятся по отделам (Department).

Разберем процесс настройки по шагам:

  1. Настройка на стороне банка: подаем заявку инженерам банка на активацию услуги «мультимерчант». Специалист настраивает прошивку терминала так, чтобы отдел с номером 0 соответствовал первой организации, а отдел с номером 1 — второй.
  2. Подготовка библиотеки: убедимся, что используется версия внешней компоненты sbrfcom.dll, поддерживающая работу с расширенным набором параметров (семипараметрический вызов).
  3. Доработка кода 1С: находим в модуле обработки обслуживания эквайринговой системы вызов функций проведения оплаты и сверки итогов. Для указания нужного юрлица используется параметр Department. Если передать значение 0 или 1, транзакция уйдет на соответствующую организацию без лишних вопросов. Если передать значение -1, терминал принудительно отобразит меню выбора организации на своем дисплее, где кассир сможет нажать кнопку вручную.

Посмотрим на пример доработки функции инициализации оплаты в кодовой базе обработки обслуживания:


// Определяем номер отдела в зависимости от организации документа
НомерОтдела = 0;
Если ДокументОплаты.Организация = ВтораяОрганизация Тогда
    НомерОтдела = 1;
КонецЕсли;

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

Обратим отдельное внимание на операцию закрытия смены (сверку итогов). При работе в режиме мультимерчанта сверку необходимо выполнять дважды — отдельно для каждого отдела, передавая сначала номер 0, а затем номер 1. В противном случае банковский отчет закроется только по одной организации.

Вариант 2. Подключение двух физических терминалов к одному компьютеру

Если специфика бизнеса требует наличия двух отдельных физических устройств (например, они привязаны к разным банкам или разным договорам эквайринга), подключить их через стандартный единый COM-объект невозможно. Разберем, как обойти это системное ограничение.

  1. Разделение каталогов UPOS: создаем на жестком диске две независимые директории, например, C:\sc552_1 и C:\sc552_2. В каждой папке настраиваем свой конфигурационный файл pinpad.ini, прописав в параметре ComPort соответствующий виртуальный номер порта первого и второго пин-пада.
  2. Использование консольной утилиты sb_pilot: наиболее стабильный способ работы с несколькими терминалами — отказ от вызова устаревшего COM-объекта в пользу утилиты командной строки sb_pilot.exe из пакета UPOS. Мы можем вызывать утилиту напрямую из нужной папки, передавая аргументы операции через платформу 1С.

Посмотрим на пример вызова утилиты через команду ЗапуститьПриложение():


// Формируем путь к рабочей папке требуемого терминала
Если ДокументОплаты.Организация = ПерваяОрганизация Тогда
    КаталогТерминала = "C:\sc552_1\";
Иначе
    КаталогТерминала = "C:\sc552_2\";
КонецЕсли;

// Параметры: 1 - код операции оплаты, далее сумма в копейках
КоманднаяСтрока = КаталогТерминала + "sb_pilot.exe 1 " + Формат(Сумма * 100, "ЧГ=0");

// Запуск процесса в синхронном режиме с ожиданием завершения
ЗапуститьПриложение(КоманднаяСтрока, КаталогТерминала, Истина);

// Анализ результата из выходных файлов p (текст чека) и e (код ошибки)
ФайлОшибки = КаталогТерминала + "e";
ФайлЧека   = КаталогТерминала + "p";

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

Системные нюансы и рекомендации

Проанализируем технические моменты, с которыми можно столкнуться при развертывании схемы:

  1. Разрядность платформы 1С: классические библиотеки sbrfcom.dll и sbrf.dll являются 32-разрядными. Если конфигурация запускается под 64-битным клиентом «1С:Предприятие», попытка выполнить конструкцию Новый COMОбъект("SBRFSRV.Server") вызовет системную ошибку. В случае 64-битного клиента вызов консольной утилиты sb_pilot.exe является безальтернативным и самым надежным решением.
  2. Энергосбережение USB-портов: при подключении двух устройств по USB Windows может периодически отключать питание неактивного концентратора. Обязательно откройте диспетчер устройств, перейдите в свойства корневых USB-концентраторов и снимите флаг «Разрешить отключение этого устройства для экономии энергии», чтобы предотвратить потерю связи и смену номеров COM-портов.

Таким образом, для большинства задач оптимальным решением является включение мультимерчанта с передачей параметра Department. Если же физически требуется два устройства — переводите логику работы эквайринга на раздельные каталоги с утилитой sb_pilot.exe.

← На главную