Как подключить RFID-считыватель к 1С и настроить автоматическую обработку данных с карты?

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

В этой статье разберем задачу, с которой часто сталкиваются при автоматизации процессов: как подключить внешний считыватель карт (на примере Prox KC MF-USB) к конфигурации 1С:Документооборот и заставить систему реагировать на прикладывание карты. Например, чтобы при идентификации сотрудника по его пропуску система автоматически открывала список его текущих задач — для этого подойдёт конфигурация СКУД для 1С с учетом рабочего времени.

Проанализируем основные подходы к решению этой задачи, от самого простого до более гибкого и профессионального, и по шагам рассмотрим, как реализовать необходимую бизнес-логику в системе.

Способ 1: Простой. Режим эмуляции клавиатуры (HID-устройство)

Это самый быстрый и легкий способ заставить считыватель работать с 1С. Большинство современных USB-считывателей, включая модель Prox KC MF-USB, по умолчанию могут работать в режиме эмуляции клавиатуры (HID-устройство). Это означает, что для операционной системы и для 1С считыватель — это просто еще одна клавиатура.

Как это работает: При поднесении карты к устройству оно считывает ее уникальный номер (UID) и мгновенно "вводит" его в то поле, где в данный момент находится курсор, завершая ввод нажатием клавиши Enter (если это настроено).

Рассмотрим, как правильно настроить этот режим в 1С с использованием стандартных механизмов.

  1. Подключение устройства. Физически подключите считыватель к компьютеру через USB. Операционная система должна определить его как стандартное HID-устройство (клавиатуру) без необходимости установки специальных драйверов.
  2. Настройка в 1С через БПО. Самый правильный путь — выполнить настройку оборудования через БПО (Библиотеку подключаемого оборудования), встроенную в современные конфигурации 1С.
    • Перейдите в раздел Администрирование → РМК и подключаемое оборудование (путь может немного отличаться в зависимости от конфигурации).
    • Выберите "Подключаемое оборудование", установите флаг "Использовать подключаемое оборудование" и нажмите на ссылку "Подключаемое оборудование".
    • Создайте новый экземпляр оборудования. В качестве Типа оборудования выберите "Сканер штрихкода".
    • В поле Драйвер оборудования выберите стандартный драйвер от 1С, например, "1С:Сканеры штрихкода (NativeApi)". Кстати, эта технология универсальна: через NativeApi возможно даже подключение сканера Bluetooth SPP на мобильных устройствах Android.
    • В настройках драйвера укажите порт "Клавиатура".
  3. Проверка работы. Откройте любую форму в 1С, где есть поле для ввода текста. Установите в него курсор и поднесите карту к считывателю. В поле должен появиться номер карты.

Важный нюанс: префиксы и суффиксы. Чтобы 1С могла отличить данные, поступившие от считывателя, от ручного ввода пользователя, считыватели и сканеры настраивают на передачу специальных управляющих символов до и после кода. Например, полезно запрограммировать сканер на добавление F7 перед кодом (как это делается для модели SCANTECH), а после — Enter (суффикс). В 1С можно настроить обработчик, который будет срабатывать именно на префикс F7, игнорируя любой другой ввод.

Плюсы этого метода:

Минусы:

Способ 2: Продвинутый. Режим эмуляции COM-порта и внешнее событие

Этот способ сложнее в настройке, но предоставляет гораздо больше гибкости. Он позволяет системе реагировать на считывание карты в любой момент, независимо от того, какое окно открыто и где находится курсор. Идеально подходит для создания киосков самообслуживания или фоновой идентификации.

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

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

  1. Настройка считывателя и драйверов. Переключите считыватель в режим эмуляции COM-порта. Установите драйвер от производителя, чтобы в "Диспетчере устройств" Windows появился новый COM-порт. Для диагностики можно использовать утилиту ReadComPort, чтобы убедиться, что данные с порта приходят корректно.
  2. Настройка в 1С. Настройка также выполняется через БПО, как "Сканер штрихкода", но в параметрах подключения вместо "Клавиатура" нужно будет указать номер COM-порта, на который настроен считыватель, и параметры скорости (обычно 9600).
  3. Программирование обработчика. Главный элемент этого метода — процедура ОбработкаВнешнегоСобытия. Ее нужно разместить в модуле той формы, которая должна реагировать на событие. Схожий механизм используется при подключении сложного оборудования, например, через внешнюю компоненту SignotecPad для дисплеев подписи.

    Посмотрим на пример кода:

    
    Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    
        // Источник - строка, обычно совпадает с наименованием
        // подключенного оборудования, как оно задано в 1С.
        // Например, "СканерШтрихкода".
    
        // Событие - строка, идентифицирующая тип события.
        // Для сканеров это часто "ScanData".
    
        // Данные - это и есть считанный номер карты.
    
        // Добавляем проверку, чтобы реагировать только на события от нашего устройства.
        Если Источник = "МойСчитыватель" И Событие = "ScanData" Тогда
    
            // Выводим сообщение для отладки
            Сообщить("Считана карта с номером: " + Данные);
    
            // Вызываем основную процедуру бизнес-логики
            ВыполнитьДействиеПоКарте(Данные);
    
        КонецЕсли;
    
    КонецПроцедуры
    

Плюсы этого метода:

Минусы:

Шаг 3: Программирование бизнес-логики "Ознакомление с задачами"

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

1. Идентификация пользователя

Сначала нужно понять, какому сотруднику принадлежит карта — для этого подойдёт готовая система контроля доступа и идентификации сотрудников по пропускам. Для этого в системе необходимо реализовать сопоставление UID карт с пользователями.

2. Получение и отображение задач

Теперь напишем процедуру, которая будет находить и показывать задачи.


&НаСервере
Процедура ВыполнитьДействиеПоКарте(НомерКарты)

    // 1. Находим сотрудника по номеру карты
    Сотрудник = НайтиСотрудникаПоКарте(НомерКарты);

    Если Сотрудник = Неопределено Тогда
        ПоказатьПредупреждение("Сотрудник с картой " + НомерКарты + " не найден!");
        Возврат;
    КонецЕсли;

    // 2. Формируем список задач для сотрудника
    ПараметрыФормы = Новый Структура("СотрудникДляОтбора", Сотрудник);

    // 3. Открываем специальную форму со списком задач
    ОткрытьФорму("ОбщаяФорма.ЗадачиСотрудника", ПараметрыФормы);

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

&НаСервереБезКонтекста
Функция НайтиСотрудникаПоКарте(НомерКарты)

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    КартыДоступаСотрудников.Сотрудник
        |ИЗ
        |    РегистрСведений.КартыДоступаСотрудников КАК КартыДоступаСотрудников
        |ГДЕ
        |    КартыДоступаСотрудников.НомерКарты = &НомерКарты";

    Запрос.УстановитьПараметр("НомерКарты", НомерКарты);

    РезультатЗапроса = Запрос.Выполнить();

    Если РезультатЗапроса.Пустой() Тогда
        Возврат Неопределено;
    Иначе
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        Возврат Выборка.Сотрудник;
    КонецЕсли;

КонецФункции

В этом примере мы на сервере находим сотрудника по номеру карты, а затем открываем некую ОбщуюФорму.ЗадачиСотрудника, передавая в нее найденного сотрудника в качестве параметра. В самой форме, в событии ПриСозданииНаСервере, нужно будет получить этот параметр и на его основе настроить отбор в динамическом списке, который отображает задачи из регистра или бизнес-процессов.

Таким образом, для полной реализации задачи требуется не только техническое подключение оборудования, но и продуманная программная доработка в среде 1С для реализации необходимой бизнес-логики.

← На главную