Как подключить один USB-сканер биометрии Anviz U-Bio на два компьютера в 1С

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

При автоматизации рабочих мест кассиров, операторов или администраторов часто возникает задача организации биометрической авторизации. Использование персонального сканера отпечатков пальцев для каждого сотрудника — идеальное решение, однако на практике клиенты часто просят оптимизировать расходы и использовать один физический USB-сканер (например, популярную модель Anviz U-Bio) на два близко расположенных рабочих места (окошка обслуживания).

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

---

Способ 1. Программная синхронизация через общую базу данных 1С (опрос флагов)

Это классический и самый очевидный способ реализации логики совместного доступа средствами самой платформы «1С». Суть метода заключается в разделении ролей компьютеров на «Сервер сканирования» (хост, к которому физически подключен USB-сканер) и «Клиент» (второй компьютер, которому требуется получить данные сканирования).

Рассмотрим по шагам алгоритм работы этой схемы:

  1. Сканер биометрии подключается локально к Компьютеру 1 (Хост). В сеансе «1С» на этом компьютере инициализируется стандартная внешняя компонента Anviz.
  2. Когда пользователю на Компьютере 2 (Клиент) требуется считать отпечаток пальца, в информационной базе создается специальная запись-запрос. Для этого удобно использовать быстрый регистр сведений (например, РегистрСведений.ЗапросыБиометрии) или специальную константу.
  3. Сеанс «1С» на Компьютере 1 в фоновом режиме (с помощью обработчика ожидания) периодически опрашивает этот регистр.
  4. Обнаружив активный флаг запроса, Компьютер 1 активирует сканер, ожидает прикладывания пальца пользователем, считывает шаблон и записывает результат (идентифицированного пользователя или сырые данные шаблона) обратно в регистр сведений, сбрасывая флаг запроса.
  5. Компьютер 2, который все это время ожидал изменения статуса записи в регистре, считывает полученный результат и завершает бизнес-процесс авторизации.

Для реализации записи запроса со второго компьютера мы можем использовать следующий код:


Процедура СоздатьЗапросНаСканирование(ИдентификаторКассы) Экспорт
    
    НоваяЗапись = РегистрыСведений.ЗапросыБиометрии.СоздатьМенеджерЗаписи();
    НоваяЗапись.КассаИсточник = ИдентификаторКассы;
    НоваяЗапись.СтатусЗапроса = Перечисления.СтатусыЗапросовБиометрии.Ожидание;
    НоваяЗапись.ДатаЗапроса = ТекущаяДатаСеанса();
    НоваяЗапись.РезультатСканирования = "";
    НоваяЗапись.Записать(Истина);
    
КонецПроцедуры

На хост-компьютере, к которому подключено устройство, настраивается регулярное фоновое выполнение процедуры проверки:


Процедура ПроверитьНаличиеЗапросов() Экспорт
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЗапросыБиометрии.КассаИсточник КАК КассаИсточник
        |ИЗ
        |   РегистрСведений.ЗапросыБиометрии КАК ЗапросыБиометрии
        |ГДЕ
        |   ЗапросыБиометрии.СтатусЗапроса = ЗНАЧЕНИЕ(Перечисление.СтатусыЗапросовБиометрии.Ожидание)";
        
    РезультатЗапроса = Запрос.Выполнить();
    Если Не РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Пока Выборка.Следующий() Цикл
            // Вызываем процедуру сканирования пальца через компоненту Anviz
            ДанныеОтпечатка = ПолучитьСнимокСоСканера(); 
            Если ЗначениеЗаполнено(ДанныеОтпечатка) Тогда
                ЗаписатьРезультатСканирования(Выборка.КассаИсточник, ДанныеОтпечатка);
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры

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

---

Способ 2. Использование HTTP-сервисов для мгновенного обмена

Предыдущий способ имеет существенный недостаток: периодический опрос базы данных (даже раз в 1-2 секунды) создает постоянную паразитную нагрузку на СУБД и вносит задержку в работу пользователей. Чтобы избавиться от задержек, мы можем использовать встроенные механизмы интеграции «1С» — HTTP-сервисы.

При такой схеме Компьютер 1 выступает в роли локального веб-сервера (или обращается к базе данных, опубликованной на веб-сервере IIS/Apache):

  1. На основном веб-сервере базы «1С» создается и публикуется простой шаблон HTTP-сервиса (например, BiometryExchange).
  2. При запросе авторизации Компьютер 2 отправляет быстрый HTTP-запрос (POST) на адрес сервиса, сообщая о готовности принять данные.
  3. Компьютер 1, подключенный к сканеру, мгновенно получает push-уведомление или напрямую пересылает считанный по событию скан-код через HTTP-запрос.

Рассмотрим пример создания метода чтения данных в модуле HTTP-сервиса «1С»:


Функция ПередатьДанныеСканирования(Запрос)
    
    // Получаем тело запроса с шаблоном отпечатка пальца
    ДанныеШаблона = Запрос.ПолучитьТелоКакСтроку();
    ИдентификаторПолучателя = Запрос.ПараметрыЗапроса.Получить("ИдентификаторПолучателя");
    
    // Помещаем данные во временное хранилище или передаем через систему взаимодействия
    АдресХранилища = ПоместитьВоВременноеХранилище(ДанныеШаблона, Новый УникальныйИдентификатор);
    
    // Оповещаем ждущего клиента (например, через Систему Взаимодействия)
    ОповеститьКлиентаОСканировании(ИдентификаторПолучателя, АдресХранилища);
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИЗСтроки("Данные успешно приняты и перенаправлены.");
    Возврат Ответ;
    
КонецФункции

---

Способ 3. Реализация через Систему взаимодействия 1С

Если ваша конфигурация развернута на платформе «1С:Предприятие 8.3» версии 8.3.10 и выше, оптимальным способом связывания двух клиентских мест является использование штатной Системы взаимодействия. Этот механизм работает поверх протокола веб-сокетов, что гарантирует мгновенную (доли секунды) доставку сообщений между сеансами без необходимости опроса СУБД.

Разберем алгоритм работы по шагам:

  1. В базе данных настраивается и активируется Система взаимодействия.
  2. Компьютер 2 отправляет целенаправленное сообщение пользователю Компьютера 1 с текстом-командой: "ЗапуститьСканирование".
  3. На Компьютере 1 срабатывает обработчик оповещения Системы взаимодействия. Программа перехватывает это событие, активирует форму сканирования Anviz и просит сотрудника приложить палец.
  4. После успешного считывания Компьютер 1 отправляет ответное сообщение с уникальным кодом отпечатка обратно Компьютеру 2. На Компьютере 2 срабатывает входящее оповещение, и данные автоматически подставляются в форму авторизации.

Пример отправки сообщения через Систему взаимодействия:


Процедура ОтправитьЗапросНаСканированиеЧерезСВ(ИдентификаторПользователяХоста)
    
    // Получаем обсуждение один-на-один с пользователем компьютера-хоста
    ВыборкаПользователей = Новый Массив;
    ВыборкаПользователей.Добавить(ИдентификаторПользователяХоста);
    
    Обсуждение = СистемаВзаимодействия.СоздатьОбсуждение(ВыборкаПользователей);
    Обсуждение.Ключ = "БиометрическийЗапрос_" + Строка(Новый УникальныйИдентификатор);
    Обсуждение.Записать();
    
    НовоеСообщение = СистемаВзаимодействия.СоздатьСообщение(Обсуждение.Идентификатор);
    НовоеСообщение.Текст = "ЗапуститьСканирование";
    НовоеСообщение.Записать();
    
КонецПроцедуры

---

Способ 4. Программный проброс USB по сети (USB-over-IP)

Если вы хотите избежать доработки конфигурации «1С» и написания сложного программного кода взаимодействия сеансов, можно решить задачу на уровне системного администрирования. Для этого используются специализированные утилиты класса USB-over-IP (например, VirtualHere или USB Network Gate).

Проанализируем сценарий настройки этого решения:

Важный нюанс автоматизации: Так как монопольно использовать сканер в один момент времени может только один компьютер, нам необходимо динамически управлять подключением устройства. Программа VirtualHere поддерживает управление через интерфейс командной строки (CLI).

Мы можем написать в «1С» простую процедуру, которая перед вызовом окна авторизации будет «захватывать» устройство по сети, а после закрытия формы — «отпускать» его для возможности использования на первом компьютере:


Процедура УправлениеПодключениемСканера(РежимПодключения)
    
    ПутьККонсолиКлиента = "C:\VirtualHere\vhuit64.exe";
    
    Если РежимПодключения = "Подключить" Тогда
        // Захватываем устройство по его сетевому адресу
        ПараметрыЗапуска = "-t ""USE, IP_АДРЕС_ХОСТА, ID_УСТРОЙСТВА""";
    Иначе
        // Освобождаем устройство
        ПараметрыЗапуска = "-t ""FREE, IP_АДРЕС_ХОСТА, ID_УСТРОЙСТВА""";
    КонецЕсли;
    
    ЗапуститьСистемноеПриложение(ПутьККонсолиКлиента, ПараметрыЗапуска);
    
КонецПроцедуры

Этот метод полностью бесплатен при использовании VirtualHere для одного устройства и не требует от разработчика «1С» написания кода обмена шаблонами биометрии.

---

Способ 5. Аппаратный переключатель (USB-KVM или USB-реле)

Для полноты картины рассмотрим физический вариант коммутации. На рынке существуют механические и автоматические USB-переключатели (KVM-свитчи), которые позволяют нажатием физической кнопки перенаправлять сигнал с одного USB-порта на один из двух подключенных компьютеров.

Существуют также программно-управляемые USB-реле (USB Relay), которые позволяют управлять коммутацией линий питания USB-кабеля по команде с ПК. Однако у этого подхода есть серьезные технологические недостатки:

Вывод: Аппаратная коммутация с помощью реле или механических переключателей крайне не рекомендуется для работы с чувствительным биометрическим оборудованием.

---

Резюме и рекомендации по выбору решения

Выбор конкретного метода зависит от архитектуры вашей ИТ-системы и бюджета проекта:

  1. Если у вас современная база данных на управляемых формах и стабильная локальная сеть — используйте Систему взаимодействия 1С (Способ 3) или связку с HTTP-сервисами (Способ 2). Это даст максимальную скорость отклика (менее 0.5 сек) и абсолютную стабильность работы драйверов.
  2. Если вам нужно быстро запустить систему без изменения конфигурации «1С» — внедрите программный проброс через VirtualHere (Способ 4).
  3. Если бюджет проекта позволяет скорректировать закупку — лучшим решением будет отказ от настольного USB-сканера Anviz U-Bio в пользу сетевого терминала (например, Anviz T5 Pro). Такой терминал работает по TCP/IP, хранит базу шаблонов внутри себя и доступен неограниченному числу компьютеров по сети одновременно.
← На главную