Как подключить эквайринговый терминал Inpas под Linux к 1С и исправить падение программы?

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

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

1. Проверка используемого дистрибутива драйвера и обработок

Проанализируем первую и наиболее распространенную причину ошибки установки компоненты в 1С. В дистрибутивах Inpas присутствуют раздельные каталоги для Windows и Linux. Внешняя обработка или архив драйвера для Windows содержат динамические библиотеки формата .dll, тогда как в Linux-клиенте 1С требуются разделяемые библиотеки с расширением .so.

Разберем типичные ошибки при подготовке комплекта драйвера:

  1. Несоответствие операционной системы: если загрузить в базу 1С обработку, содержащую только Windows-компоненты, система выдаст требование доустановки драйвера или ошибку инициализации. Необходимо использовать обработку и архив драйвера строго из специализированной папки под Linux.
  2. Формат архива драйвера: платформа «1С:Предприятие» при установке драйверов торгового оборудования ожидает стандартный ZIP-архив. Если архив с сайта поставщика упакован в формат .rar, 1С не сможет распаковать его манифест. В таком случае распакуем архив штатными средствами ОС и переупакуем его в стандартный .zip.
  3. Регистрозависимость файловой системы: в операционной системе Linux имена файлов чувствительны к регистру. Проверим, чтобы внутри архива файл описания манифеста и пути к библиотекам .so строго соответствовали фактическим именам файлов (например, не допускается разночтение между manifest.xml и MANIFEST.XML).

2. Диагностика зависимостей разделяемых библиотек (.so)

Если нужная обработка загружена, но при открытии формы настройки или подключении оборудования процесс 1cv8 / 1cv8c аварийно закрывается (происходит Segmentation fault), выясним причину сбоя на уровне системных библиотек. В современных дистрибутивах, таких как Debian 12, используются свежие версии системных пакетов (OpenSSL 3.0, glibc 2.36+), тогда как скомпилированные вендором модули Inpas часто собраны под более старые версии библиотек (например, OpenSSL 1.1).

Для поиска отсутствующих или несовместимых зависимостей выполним следующие действия в терминале Linux:

  1. Извлечем файл библиотеки .so из архива драйвера или каталога временных файлов 1С в отдельную директорию.
  2. Запустим утилиту анализа динамических связей с ключом проверки неразрешенных символов: ldd -r ./libDualConnector.so
  3. Внимательно изучим вывод команды. Строки со статусом not found, а также сообщения об undefined symbol укажут на недостающие системные библиотеки (чаще всего это libssl.so.1.1, libcrypto.so.1.1 или определенные версии libstdc++).
  4. Установим недостающие пакеты обратной совместимости из репозиториев дистрибутива либо вручную добавим необходимые версии библиотек в системные пути /usr/lib/x86_64-linux-gnu/.

Также проверим разрядность: если установлен 64-битный клиент платформы 1С (x86_64), внешняя компонента обязательно должна быть 64-битной. Использование 32-битной библиотеки (i386) в 64-битном клиенте приводит к мгновенному падению программы.

3. Запуск фоновой службы DualConnector и права доступа

Утилита управления DC Control на Java позволяет проверить связь с хостом банка и выполнить тестовые операции, однако после ее закрытия обмен с терминалом прекращается. Драйвер Inpas ожидает наличие постоянно запущенного системного демона (фоновой службы DualConnector), который осуществляет непосредственное взаимодействие с терминалом по виртуальному COM-порту или локальной сети и слушает обращения от кассового ПО по локальному порту.

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

  1. Убедимся, что служба DualConnector зарегистрирована как системный сервис systemd и находится в активном состоянии (статус active (running)).
  2. Проверим права пользователя: учетная запись Linux, под которой запускается сеанс 1С, должна иметь доступ к портам ввода-вывода. Для этого добавим пользователя в системные группы dialout и tty: sudo usermod -aG dialout,tty $USER После добавления в группы необходимо перезайти в систему.
  3. Для точной локализации падения запустим клиент 1С непосредственно из командной строки терминала (например, /opt/1cv8/x86_64/8.3.XX.XXXX/1cv8c). В момент краха в окно терминала будет выведен конкретный сигнал операционной системы (дамп ошибки, ошибка сегментации или сбой WebKit).

4. Изолированное подключение внешней компоненты в коде 1С

По умолчанию внешние компоненты загружаются прямо в адресное пространство процесса платформы. Любая ошибка обращения к памяти внутри кода .so приводит к мгновенному падению всей программы. Если конфигурация позволяет вносить изменения или используется подключаемая внешняя обработка, переведем подключение компоненты в изолированный режим.

Посмотрим на пример программного кода подключения компоненты с обработкой возможных исключений:


&НаКлиенте
Процедура ПодключитьДрайверЭквайринга()
    
    ИмяФайлаКомпоненты = "DualConnector";
    Местоположение = "ОбщийМакет.ДрайверInpasLinux";
    
    // Подключаем внешнюю компоненту в изолированном процессе ОС
    Попытка
        РезультатПодключения = ПодключитьВнешнююКомпоненту(
            Местоположение, 
            ИмяФайлаКомпоненты, 
            ТипПодключенияВнешнейКомпоненты.Изолированно
        );
        
        Если РезультатПодключения Тогда
            ОбъектДрайвера = Новый ("AddIn." + ИмяФайлаКомпоненты + ".DualConnector");
        Иначе
            Сообщить("Не удалось загрузить внешнюю компоненту эквайринга.");
        КонецЕсли;
    Исключение
        ИнформацияОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
        Сообщить("Сбой при инициализации драйвера: " + ИнформацияОбОшибке);
    КонецПопытки;

КонецПроцедуры

Параметр ТипПодключенияВнешнейКомпоненты.Изолированно запускает исполнение кода драйвера в отдельном системном процессе 1c_inproc_host. В этом случае даже при фатальном сбое внутри библиотеки .so основной клиент 1С продолжит работу, перехватит исключение в блоке Попытка ... Исключение и выдаст информативное сообщение об ошибке, что позволит продолжить диагностику без перезапуска всей программы.

← На главную