Как в 1С 7.7 проверить наличие подключения устройства к COM-порту или зарегистрированной библиотеки пин-пада?

Программист 1С v7.7 Торговля и дистрибуция
← На главную

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

Проверка наличия зарегистрированной библиотеки эквайринга в системах Windows

Если для работы с пин-падом в системе должна быть зарегистрирована внешняя компонента или ActiveX-объект (библиотеки с расширениями .dll или .ocx), самый простой и надежный способ проверить её присутствие из кода 1С 7.7 — попробовать программно создать этот OLE-объект с помощью функции СоздатьОбъект().

Проанализируем пример реализации данного подхода с использованием конструкции Попытка ... Исключение:


БиблиотекаПодключена = 0;
Попытка
    // Пытаемся создать OLE-объект драйвера эквайринга
    ДрайверТерминала = СоздатьОбъект("NameSpace.DeviceClass");
    БиблиотекаПодключена = 1;
Исключение
    // Если объект не создался, значит библиотека не зарегистрирована в regsvr32
    БиблиотекаПодключена = 0;
КонецПопытки;

Если БиблиотекаПодключена = 1 Тогда
    Сообщить("Драйвер эквайринга найден и готов к работе.");
Иначе
    Сообщить("Драйвер эквайринга не зарегистрирован на данном ПК.");
КонецЕсли;

Важное замечание: успешное создание OLE-объекта подтверждает лишь то, что драйвер зарегистрирован в операционной системе Windows. Однако это не гарантирует, что сам пин-пад физически подключен к COM-порту и включен в сеть.

Аппаратные особенности COM-портов и способы проверки физического соединения

Разберем технические нюансы работы последовательных интерфейсов (RS-232) и виртуальных USB-to-COM портов:

  1. Отсутствие Plug-and-Play у RS-232: Последовательный порт на аппаратном уровне не оповещает операционную систему о типе подключенного устройства. ОС осведомлена лишь о наличии самого порта.
  2. Особенности виртуальных COM-портов (USB): Если эквайринговый терминал подключается через USB-кабель с эмуляцией COM-порта, то при отсоединении провода виртуальный COM-порт полностью исчезает из диспетчера устройств Windows.
  3. Проверка связи через методы драйвера: Единственный корректный способ убедиться, что пин-пад готов к приему команд — использовать штатные функции самого драйвера (например, опрос статуса или метод проверки связи/эхо-тест).

Если выполнить попытку прямого открытия порта в 1С 7.7 при отсутствии ответа от физического устройства, сеанс 1С может временно заблокироваться или зависнуть из-за ожидания таймаута системного ввода-вывода.

Проверка наличия COM-порта через системный интерфейс WMI

Чтобы проверить, существует ли конкретный COM-порт в системе без его прямого открытия и блокировки, можно обратиться к инструментарию WMI (Windows Management Instrumentation) через класс Win32_PnPEntity или Win32_SerialPort.

Посмотрим на пример функции, позволяющей опрашивать список устройств ПК:


Функция ПроверитьНаличиеПортаWMI(ИскомыйПорт)
    Результ = 0;
    Попытка
        WMI = СоздатьОбъект("WbemScripting.SWbemLocator");
        СлужбаWMI = WMI.ConnectServer(".", "root\cimv2");
        СписокПортов = СлужбаWMI.ExecQuery("SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%(" + ИскомыйПорт + ")%'");
        Если СписокПортов.Count > 0 Тогда
            Результ = 1;
        КонецЕсли;
    Исключение
        Сообщить("Ошибка обращения к WMI");
    КонецПопытки;
    Возврат Результ;
КонецФункции;

Архитектурный подход: привязка оборудования к рабочему месту

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

С помощью встроенной функции ИмяКомпьютера() мы можем легко разделять логику работы кассовых рабочих мест:


ТекущийПК = СокрЛП(ВВерх(ИмяКомпьютера()));

Если ТекущийПК = "KASSA_01" Тогда
    // Настройки для первой кассы с подключенным терминалом
    ИспользоватьПинПад = 1;
    НомерПорта = 3;
ИначеЕсли ТекущийПК = "KASSA_02" Тогда
    // Настройки для второй кассы без эквайринга
    ИспользоватьПинПад = 0;
КонецЕсли;

Подводя итоги, сформируем оптимальный алгоритм проверки оборудования при запуске 1С 7.7:

  1. Определить имя ПК через функцию ИмяКомпьютера() и сопоставить его со справочником торгового оборудования в базе данных.
  2. Если для данного ПК предусмотрен эквайринг, выполнить проверку наличия OLE-компоненты через блок Попытка ... Исключение при вызове СоздатьОбъект().
  3. Вызвать метод проверки связи из библиотеки эквайринга для финального подтверждения готовности пин-пада к приему оплаты.
← На главную