Как устранить зависание банковских терминалов Сбербанка при оплате через 1С в режиме RDP?

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

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

Анализ причин зависания в многопользовательской среде

Когда мы работаем в конфигурации Управление торговлей 10.3 на сервере через RDP, основной конфликт возникает из-за совместного использования ресурсов драйвера Сбербанка. Рассмотрим основные факторы, приводящие к блокировке процесса:

  1. Блокировка лог-файлов: По умолчанию драйвер Сбербанка записывает результаты своей работы в файл p.log. В среде RDP несколько пользовательских сессий пытаются одновременно писать в один и тот же файл в папке C:\sc552, что вызывает блокировку на уровне операционной системы.
  2. Общий реестр для COM-компоненты: При регистрации библиотеки SBRFCOM.dll через regsvr32 запись создается в ветке HKEY_LOCAL_MACHINE. Если несколько пользователей одновременно обращаются к одному и тому же экземпляру объекта, возникают коллизии.
  3. Конфликты временных файлов: Драйвер создает временные файлы для обмена данными с терминалом. Без разделения рабочих каталогов один пользователь может «перехватить» или удалить данные другого.

Решение 1: Изоляция рабочих директорий для каждого пользователя

Проанализируем самый надежный метод — создание индивидуального окружения для каждого кассира. Вместо того чтобы использовать одну общую папку C:\sc552, мы создадим структуру папок под каждого пользователя.

Выполним следующие шаги:

  1. Создадим на сервере базовый каталог, например C:\Sberbank\Users\.
  2. Внутри этого каталога создадим подпапки по именам пользователей: C:\Sberbank\Users\Ivanov, C:\Sberbank\Users\Petrov и так далее.
  3. Скопируем содержимое стандартной папки Сбербанка (где лежат loadpar.exe, pinpad.ini и прочие файлы) в каждую из этих подпапок.
  4. В файле pinpad.ini для каждого пользователя явно пропишем пути к логам, чтобы они не пересекались.

Рассмотрим пример настройки путей в pinpad.ini:


[Settings]
LogPath=C:\Sberbank\Users\Ivanov\logs\
TempPath=C:\Sberbank\Users\Ivanov\temp\

Решение 2: Регистрация COM-компоненты в контексте пользователя

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

Посмотрим на команду регистрации:

regsvr32.exe /n /i:user "C:\Sberbank\Users\Ivanov\SBRFCOM.dll"

Этот метод позволяет системе искать компоненту сначала в пользовательской ветке реестра. Однако в 1С 8.3 и 8.2 (Обычные формы) при вызове Новый COMОбъект("SBRFCOM.SberBank") система все равно может обратиться к общему пути. Чтобы этого избежать, в некоторых случаях эффективнее использовать динамическое создание объекта с предварительным изменением пути в реестре программным способом перед инициализацией оборудования.

Решение 3: Настройка таймаутов и параметров связи

Зависание 1С происходит из-за того, что основной поток программы ожидает завершения выполнения функции драйвера. Если драйвер «ушел в себя» из-за сетевой ошибки или потери порта, 1С будет ждать бесконечно. Проанализируем критические параметры в файле pinpad.ini:

Решение 4: Стабилизация проброса COM-портов в RDP

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

  1. Энергосбережение: На локальном ПК зайдите в «Диспетчер устройств», найдите USB-контроллеры и порты, через которые подключен терминал. В свойствах на вкладке «Управление электропитанием» обязательно снимите галочку «Разрешить отключение этого устройства для экономии энергии».
  2. Номера портов: Старайтесь использовать номера портов от 1 до 9. Некоторые версии драйверов Сбербанка некорректно обрабатывают порты с номерами COM10 и выше. Переназначить номер порта можно в настройках драйвера USB-Serial в диспетчере устройств.
  3. Стороннее ПО: Если штатный механизм RDP работает нестабильно, рассмотрим использование утилит типа FabulaTech USB for Remote Desktop, которые создают более надежный туннель для USB-устройств.

Использование современного драйвера NativeApi

Если ваша конфигурация Управление торговлей 10.3 обновлена до последних релизов, поддерживающих современную библиотеку подключаемого оборудования, настоятельно рекомендуем отказаться от использования старой COM-компоненты SBRFCOM.dll.

Переход на SberBankPos.dll (NativeApi) решает большинство проблем с многопользовательским доступом, так как этот драйвер изначально проектировался с учетом требований 1С к современному оборудованию. В настройках оборудования 1С выберите драйвер «Сбербанк:Эквайринговая система» и укажите путь к установленным файлам эквайринга.

Важный момент: Даже при использовании нового драйвера, правило «один пользователь — одна папка с файлами Сбера» остается золотым стандартом для терминальных серверов. Это гарантирует отсутствие конфликтов при записи логов и обращении к внутренним ресурсам драйвера.

Резюме действий для исправления проблемы:

  1. Разнести файлы эквайринга по личным папкам пользователей на сервере.
  2. Настроить уникальные пути к логам в каждом pinpad.ini.
  3. Отключить энергосбережение USB-портов на клиентских машинах.
  4. Проверить таймауты в настройках связи с банком.
  5. Добавить папку с ПО Сбербанка в исключения антивируса на сервере, так как проверка loadpar.exe при каждом обращении может вызывать задержки, приводящие к таймауту.

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

← На главную