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

Программист 1С v7.7 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Интеграция эквайринга Сбербанка с устаревшими конфигурациями на платформе 1С 7.7, такими как «Торговля и Склад 9.2», остается актуальной задачей для многих предприятий. Особую сложность представляет работа в терминальном режиме (RDP), когда 1С запущена на сервере, а оборудование физически подключено к локальному компьютеру. В данной статье мы подробно разберем, как правильно подготовить файлы, зарегистрировать компоненты и модифицировать код 1С для стабильной работы оплаты картами.

Шаг 1. Подготовка рабочего каталога и необходимых файлов

Для начала работы нам понадобится комплект программного обеспечения Сбербанка, известный как UPOS (Pilot). Обычно специалисты банка предоставляют набор библиотек, но не всегда объясняют их назначение. Создадим на сервере и на локальном ПК папку (например, C:\sc552), куда поместим следующие файлы:

  1. Библиотеки ядра: gate.dll, sb_kernel.dll, pilot_nt.dll.
  2. Компоненты для связи с 1С: sbrf.dll и sbrfcom.dll.
  3. Конфигурационные файлы: pinpad.ini (здесь описываются параметры порта и связи) и e_comm.tlv.
  4. Служебные утилиты: LoadParm.exe (для загрузки параметров в терминал) и tlv_edit.exe.

Важный момент: Копирование файлов в папку BIN платформы 1С, как часто советуют на форумах, не всегда является лучшим решением. Рекомендуется хранить их в отдельной директории, прописав путь к ней в системной переменной PATH, либо обращаться к ним напрямую из кода.

Шаг 2. Регистрация библиотеки в операционной системе

Чтобы 1С «увидела» эквайринг, необходимо зарегистрировать компоненту sbrfcom.dll. Если вы работаете на современной 64-битной серверной ОС (Windows Server 2012/2016/2019), обычная регистрация может не сработать. Разберем правильный алгоритм:

Запустите командную строку от имени администратора и выполните команду:

C:\Windows\SysWOW64\regsvr32.exe "C:\sc552\sbrfcom.dll"

Использование regsvr32 из папки SysWOW64 критически важно, так как 1С 7.7 является 32-битным приложением и требует регистрации библиотеки в соответствующем реестре. Также убедитесь, что у пользователя терминальной сессии есть права на чтение и выполнение файлов в папке с библиотеками.

Шаг 3. Настройка связи в терминальном режиме (RDP)

При работе через удаленный рабочий стол терминал подключен к USB-порту локального клиента. Проанализируем, как «пробросить» это устройство на сервер:

  1. В настройках подключения RDP (mstsc) перейдите на вкладку Локальные ресурсы.
  2. Нажмите кнопку Подробнее и установите флажок напротив пункта Порты.
  3. На локальном компьютере в диспетчере устройств выясните номер COM-порта, который создал терминал (например, COM3).
  4. На сервере в файле pinpad.ini в секции [Pins] укажите этот же номер порта: ComPort=3.

Проверим работоспособность проброса с помощью утилиты LoadParm.exe, запущенной прямо в терминальной сессии на сервере. Если она выдает ошибку «Pinpad not found», значит, порт не проброшен или занят другим процессом.

Шаг 4. Программная инициализация терминала в 1С 7.7

Теперь перейдем к разработке. В 1С 7.7 для взаимодействия с эквайрингом используется объект SBRFSRV.Server. Рассмотрим пример кода для загрузки компоненты и инициализации объекта в модуле формы «Чек ККМ»:


// Попытка загрузки внешней компоненты
Если ЗагрузитьВнешнююКомпоненту("sbrfcom.dll") = 0 Тогда
    Предупреждение("Не удалось загрузить библиотеку sbrfcom.dll!");
    Возврат;
КонецЕсли;

// Создание объекта сервера Сбербанка
Попытка
    ЭквСервер = СоздатьОбъект("SBRFSRV.Server");
Исключение
    Сообщить("Ошибка при создании объекта SBRFSRV.Server. Проверьте регистрацию DLL.");
    Возврат;
КонецПопытки;

Шаг 5. Проведение оплаты и разбор кодов операций

Для выполнения финансовых операций используется метод NFun. Выясним назначение основных кодов:

Рассмотрим по шагам процедуру оплаты. Нам необходимо передать сумму и вызвать функцию оплаты. Обратите внимание, что сумма в компоненту передается в копейках или в зависимости от настроек (иногда как строка с разделителем):


ЭквСервер.Clear(); // Очистка параметров перед операцией
СуммаКопейки = СуммаКВзятию * 100; 
ЭквСервер.SParam("Amount", СуммаКопейки); // Установка суммы

// Вызов функции оплаты
Результат = ЭквСервер.NFun(4000);

Если Результат = 0 Тогда
    // Операция успешна
    Сообщить("Оплата одобрена банком");
    // Здесь должен быть код печати чека на фискальном регистраторе
Иначе
    // Ошибка. Попробуем получить описание
    ТекстОшибки = ЭквСервер.GParam("ErrorStr");
    Предупреждение("Ошибка эквайринга: " + ТекстОшибки + " (Код: " + Результат + ")");
КонецЕсли;

Шаг 6. Проблема отсутствия интернета на сервере

Часто встречается ситуация, когда сервер 1С изолирован от интернета по соображениям безопасности, а терминал требует связи с банком. В этом случае библиотека на сервере не сможет отправить запрос. Проанализируем решение:

Для таких случаев в ПО Сбербанка предусмотрена схема «Gate через локальный компьютер». На локальном компьютере (клиенте) запускается прокси-утилита (например, gate.exe или настраивается компонент SberBR). В файле pinpad.ini на сервере указывается IP-адрес клиентской машины. Таким образом, запрос из 1С уходит на терминал, а терминал через проброшенный канал отправляет данные на локальный компьютер клиента, который уже имеет выход в глобальную сеть.

Шаг 7. Интеграция в типовой бизнес-процесс ТиС 9.2

Чтобы автоматизация была полной, необходимо внести изменения в алгоритм печати чека. Стандартная конфигурация «Торговля и Склад» при печати чека ожидает оплату наличными. Выполним следующие доработки:

  1. Добавим в форму документа «Чек ККМ» переключатель Тип оплаты (Наличные/Карта).
  2. При выборе «Карты» сначала вызываем процедуру работы с sbrfcom.dll.
  3. Важное правило: Фискальный чек на ККМ должен печататься только после того, как метод NFun(4000) вернул 0.
  4. При печати фискального чека обязательно передаем признак безналичной оплаты в драйвер ККМ. В 1С 7.7 это обычно параметр ТипОплаты или ТипЧека. Если этого не сделать, сумма по Z-отчету «упадет» в наличные, что создаст проблемы при инкассации.

Разбор типовой ошибки 4325

Многие программисты сталкиваются с кодом возврата 4325. Проанализируем причину: этот код обычно означает тайм-аут или невозможность инициализации порта. Это происходит, если номер порта в pinpad.ini не совпадает с реально проброшенным портом в RDP-сессии, или если библиотека sbrf.dll не может найти зависимости в текущем каталоге. Всегда проверяйте наличие всех 5-6 файлов UPOS в одной папке с исполняемым файлом или библиотекой связи.

Соблюдение этих шагов позволит создать надежный мост между современной банковской системой и проверенной временем платформой 1С 7.7.

← На главную