Почему на сервере терминалов слетает регистрация DLL Сбербанка и как это исправить

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

При организации работы кассовых узлов в терминальном режиме (RDP) на базе 1С часто возникает типовая проблема: эквайринговые библиотеки sbrf.dll и sbrfcom.dll периодически теряют регистрацию в операционной системе Windows Server. В результате 1С выдает ошибку: «Драйвер эквайринговой системы не найден» или «Ошибка инициализации объекта», а оплата по банковским картам становится невозможной до повторного выполнения команды regsvr32 администратором сервера.

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

Причины сбоя регистрации COM-библиотек в терминальных сессиях

Выясним, какие факторы приводят к потере регистрации библиотек Сбербанка в течение рабочего дня:

  1. Конфликт глобальной регистрации COM-сервера (ветка HKLM / HKCR): При стандартной регистрации с помощью regsvr32.exe информация о компонентах и их CLSID помещается в общую ветку реестра HKEY_CLASSES_ROOT (связанную с HKEY_LOCAL_MACHINE). Если несколько терминальных пользователей запускают сеансы с разными каталогами или скрипты инициализации пытаются перерегистрировать DLL, сессии перезаписывают системные указатели путей друг друга.
  2. Блокировка разделяемых файлов драйвера (пакет UPOS / sc552): Библиотеки Сбербанка при работе активно используют временные файлы ответов, журналов и сверки итогов. Если все RDP-сеансы обращаются к единому каталогу (например, C:\sc552), одновременные транзакции на разных кассах вызывают коллизии файлового доступа, приводя к аварийному завершению работы COM-объекта в памяти 1С.
  3. Политики безопасности Active Directory и временные профили: В терминальных средах часто настроен сброс или очистка пользовательских веток реестра HKEY_CURRENT_USER при завершении сеанса (User Profile Disks, сброс сессий по тайм-ауту), что приводит к удалению локальных связей классов.
  4. Разрядность клиента 1С: Библиотеки sbrf.dll и sbrfcom.dll являются 32-разрядными (x86). При использовании 64-битной платформы 1С:Предприятие прямая загрузка 32-битного COM-объекта невозможна без суррогатного процесса. На 64-разрядной ОС Windows регистрация должна проводиться утилитой из папки C:\Windows\SysWOW64\regsvr32.exe.

Способ 1. Изоляция рабочих каталогов Сбербанка под каждого пользователя

Проанализируем базовый шаг для корректной работы нескольких терминалов на одном RDP-сервере. Главная задача — разделить рабочие каталоги драйвера между всеми сессиями кассиров.

  1. Создадим персональные каталоги для каждого кассира, например, в профиле пользователя: %UserProfile%\sc552 или в структурированных папках C:\sc552_kassa1, C:\sc552_kassa2.
  2. Разместим в каждой папке полный комплект файлов драйвера (включая sbrf.dll, sbrfcom.dll, pilot_nt.dll, конфигурационный файл pinpad.ini).
  3. Откроем файл pinpad.ini в каждой папке и явно укажем персональные пути к рабочим файлам:

Пример настройки pinpad.ini:


WorkingDir=%UserProfile%\SC552
TlvDir=%UserProfile%\SC552

Такая изоляция исключает блокировку журналов и файлов транзакций при параллельной оплате на разных кассах.

Способ 2. Перенос регистрации COM-объекта в ветку пользователя (HKCU)

Чтобы избежать конфликтов глобального реестра и необходимости выдавать кассирам административные права, снимем глобальную регистрацию и зафиксируем COM-классы индивидуально в ветке текущего пользователя HKEY_CURRENT_USER\Software\Classes.

  1. Снимем общую системную регистрацию библиотек под учетной записью администратора: C:\Windows\SysWOW64\regsvr32.exe /u "C:\sc552\sbrfcom.dll"
  2. Экспортируем ветки реестра, относящиеся к CLSID компонента SBRFCOM, и импортируем их в ветку HKEY_CURRENT_USER\Software\Classes\CLSID для каждого терминального пользователя.
  3. Пропишем путь к персональному файлу sbrfcom.dll конкретного кассира.

Способ 3. Использование службы компонентов COM+ (DCOM / dllhost)

Рассмотрим вариант изоляции работы 32-битной библиотеки через суррогатный процесс Windows:

  1. Откроем консоль «Службы компонентов» (dcomcnfg.exe).
  2. Перейдем в раздел Службы компонентов -> Компьютеры -> Мой компьютер -> Приложения COM+.
  3. Создадим новое серверное приложение (Server Application), зададим ему имя (например, Sberbank_Driver) и выберем запуск от имени системной учетной записи или выделенного локального пользователя с правами.
  4. В созданное приложение добавим компонент sbrfcom.dll.

При такой схеме все вызовы драйвера изолируются в системных процессах dllhost.exe. Это снимает зависимость от прав локального кассира на системные ветки реестра и устраняет падения сессий при многопоточных обращениях.

Способ 4. Программная проверка и инициализация в 1С

Если специфика инфраструктуры требует контроля состояния драйвера непосредственно из 1С перед проведением операции, проанализируем пример кода для проверки доступности COM-объекта с перехватом исключений:


Попытка
    ДрайверСбербанка = Новый COMОбъект("SBRFSRV.Server");
    // Либо обращение к компоненте SBRFCOM.dll в зависимости от используемой версии
    ДрайверСбербанка = Новый COMОбъект("Sbrf.Terminal");
Исключение
    ТекстОшибки = ОписаниеОшибки();
    ЗаписьЖурналаРегистрации("Эквайринг.Сбербанк", 
        УровеньЖурналаРегистрации.Ошибка,,, 
        "Ошибка инициализации COM-объекта Сбербанка: " + ТекстОшибки);
    ВызватьИсключение "Не удалось инициализировать драйвер эквайринга Сбербанка. Обратитесь к администратору.";
КонецПопытки;

Способ 5. Современная альтернатива: отказ от COM в пользу Native API или локального сервиса

Использование устаревших библиотек sbrf.dll и sbrfcom.dll в среде терминального сервера RDP архитектурно не рекомендуется производителем.

Рассмотрим современные и более надежные способы организации работы:

  1. Переход на драйвер «1С:Эквайринговые терминалы Сбербанк 2.x» (Native API): Современный драйвер из БПО (Библиотеки подключаемого оборудования 1С) работает по технологии Native API и обращается напрямую к динамической библиотеке pilot_nt.dll. Он не требует выполнения regsvr32 и не зависит от записей в реестре Windows.
  2. Подключение по протоколу TCP/IP: Вместо проброса виртуальных COM-портов через RDP рекомендуется настраивать терминалы Сбербанка для работы по протоколу Ethernet/Wi-Fi (TCP/IP). Это устраняет задержки и коллизии каналов ввода-вывода.
  3. Вынос работы с оборудованием на локальный ПК кассира: Запуск тонкого клиента 1С локально на рабочем месте кассира с подключением к серверной базе данных по протоколу HTTP/HTTPS или TCP. Вся работа с физическим терминалом при этом выполняется на локальной операционной системе кассы, изолированно от сервера.
← На главную