Интеграция эквайринга Сбербанка с устаревшими конфигурациями на платформе 1С 7.7, такими как «Торговля и Склад 9.2», остается актуальной задачей для многих предприятий. Особую сложность представляет работа в терминальном режиме (RDP), когда 1С запущена на сервере, а оборудование физически подключено к локальному компьютеру. В данной статье мы подробно разберем, как правильно подготовить файлы, зарегистрировать компоненты и модифицировать код 1С для стабильной работы оплаты картами.
Для начала работы нам понадобится комплект программного обеспечения Сбербанка, известный как UPOS (Pilot). Обычно специалисты банка предоставляют набор библиотек, но не всегда объясняют их назначение. Создадим на сервере и на локальном ПК папку (например, C:\sc552), куда поместим следующие файлы:
gate.dll, sb_kernel.dll, pilot_nt.dll.sbrf.dll и sbrfcom.dll.pinpad.ini (здесь описываются параметры порта и связи) и e_comm.tlv.LoadParm.exe (для загрузки параметров в терминал) и tlv_edit.exe.Важный момент: Копирование файлов в папку BIN платформы 1С, как часто советуют на форумах, не всегда является лучшим решением. Рекомендуется хранить их в отдельной директории, прописав путь к ней в системной переменной PATH, либо обращаться к ним напрямую из кода.
Чтобы 1С «увидела» эквайринг, необходимо зарегистрировать компоненту sbrfcom.dll. Если вы работаете на современной 64-битной серверной ОС (Windows Server 2012/2016/2019), обычная регистрация может не сработать. Разберем правильный алгоритм:
Запустите командную строку от имени администратора и выполните команду:
C:\Windows\SysWOW64\regsvr32.exe "C:\sc552\sbrfcom.dll"
Использование regsvr32 из папки SysWOW64 критически важно, так как 1С 7.7 является 32-битным приложением и требует регистрации библиотеки в соответствующем реестре. Также убедитесь, что у пользователя терминальной сессии есть права на чтение и выполнение файлов в папке с библиотеками.
При работе через удаленный рабочий стол терминал подключен к USB-порту локального клиента. Проанализируем, как «пробросить» это устройство на сервер:
COM3).pinpad.ini в секции [Pins] укажите этот же номер порта: ComPort=3.Проверим работоспособность проброса с помощью утилиты LoadParm.exe, запущенной прямо в терминальной сессии на сервере. Если она выдает ошибку «Pinpad not found», значит, порт не проброшен или занят другим процессом.
Теперь перейдем к разработке. В 1С 7.7 для взаимодействия с эквайрингом используется объект SBRFSRV.Server. Рассмотрим пример кода для загрузки компоненты и инициализации объекта в модуле формы «Чек ККМ»:
// Попытка загрузки внешней компоненты
Если ЗагрузитьВнешнююКомпоненту("sbrfcom.dll") = 0 Тогда
Предупреждение("Не удалось загрузить библиотеку sbrfcom.dll!");
Возврат;
КонецЕсли;
// Создание объекта сервера Сбербанка
Попытка
ЭквСервер = СоздатьОбъект("SBRFSRV.Server");
Исключение
Сообщить("Ошибка при создании объекта SBRFSRV.Server. Проверьте регистрацию DLL.");
Возврат;
КонецПопытки;
Для выполнения финансовых операций используется метод NFun. Выясним назначение основных кодов:
4000 — Оплата (Sale).4001 — Возврат (Refund).4003 — Сверка итогов (закрытие смены на терминале).6000 — Проверка связи с терминалом.Рассмотрим по шагам процедуру оплаты. Нам необходимо передать сумму и вызвать функцию оплаты. Обратите внимание, что сумма в компоненту передается в копейках или в зависимости от настроек (иногда как строка с разделителем):
ЭквСервер.Clear(); // Очистка параметров перед операцией
СуммаКопейки = СуммаКВзятию * 100;
ЭквСервер.SParam("Amount", СуммаКопейки); // Установка суммы
// Вызов функции оплаты
Результат = ЭквСервер.NFun(4000);
Если Результат = 0 Тогда
// Операция успешна
Сообщить("Оплата одобрена банком");
// Здесь должен быть код печати чека на фискальном регистраторе
Иначе
// Ошибка. Попробуем получить описание
ТекстОшибки = ЭквСервер.GParam("ErrorStr");
Предупреждение("Ошибка эквайринга: " + ТекстОшибки + " (Код: " + Результат + ")");
КонецЕсли;
Часто встречается ситуация, когда сервер 1С изолирован от интернета по соображениям безопасности, а терминал требует связи с банком. В этом случае библиотека на сервере не сможет отправить запрос. Проанализируем решение:
Для таких случаев в ПО Сбербанка предусмотрена схема «Gate через локальный компьютер». На локальном компьютере (клиенте) запускается прокси-утилита (например, gate.exe или настраивается компонент SberBR). В файле pinpad.ini на сервере указывается IP-адрес клиентской машины. Таким образом, запрос из 1С уходит на терминал, а терминал через проброшенный канал отправляет данные на локальный компьютер клиента, который уже имеет выход в глобальную сеть.
Чтобы автоматизация была полной, необходимо внести изменения в алгоритм печати чека. Стандартная конфигурация «Торговля и Склад» при печати чека ожидает оплату наличными. Выполним следующие доработки:
sbrfcom.dll.NFun(4000) вернул 0.ТипОплаты или ТипЧека. Если этого не сделать, сумма по Z-отчету «упадет» в наличные, что создаст проблемы при инкассации.Многие программисты сталкиваются с кодом возврата 4325. Проанализируем причину: этот код обычно означает тайм-аут или невозможность инициализации порта. Это происходит, если номер порта в pinpad.ini не совпадает с реально проброшенным портом в RDP-сессии, или если библиотека sbrf.dll не может найти зависимости в текущем каталоге. Всегда проверяйте наличие всех 5-6 файлов UPOS в одной папке с исполняемым файлом или библиотекой связи.
Соблюдение этих шагов позволит создать надежный мост между современной банковской системой и проверенной временем платформой 1С 7.7.