В этой статье разберем задачу, с которой часто сталкиваются при автоматизации процессов: как подключить внешний считыватель карт (на примере Prox KC MF-USB) к конфигурации 1С:Документооборот и заставить систему реагировать на прикладывание карты. Например, чтобы при идентификации сотрудника по его пропуску система автоматически открывала список его текущих задач — для этого подойдёт конфигурация СКУД для 1С с учетом рабочего времени.
Проанализируем основные подходы к решению этой задачи, от самого простого до более гибкого и профессионального, и по шагам рассмотрим, как реализовать необходимую бизнес-логику в системе.
Это самый быстрый и легкий способ заставить считыватель работать с 1С. Большинство современных USB-считывателей, включая модель Prox KC MF-USB, по умолчанию могут работать в режиме эмуляции клавиатуры (HID-устройство). Это означает, что для операционной системы и для 1С считыватель — это просто еще одна клавиатура.
Как это работает: При поднесении карты к устройству оно считывает ее уникальный номер (UID) и мгновенно "вводит" его в то поле, где в данный момент находится курсор, завершая ввод нажатием клавиши Enter (если это настроено).
Рассмотрим, как правильно настроить этот режим в 1С с использованием стандартных механизмов.
Важный нюанс: префиксы и суффиксы. Чтобы 1С могла отличить данные, поступившие от считывателя, от ручного ввода пользователя, считыватели и сканеры настраивают на передачу специальных управляющих символов до и после кода. Например, полезно запрограммировать сканер на добавление F7 перед кодом (как это делается для модели SCANTECH), а после — Enter (суффикс). В 1С можно настроить обработчик, который будет срабатывать именно на префикс F7, игнорируя любой другой ввод.
Плюсы этого метода:
Минусы:
Этот способ сложнее в настройке, но предоставляет гораздо больше гибкости. Он позволяет системе реагировать на считывание карты в любой момент, независимо от того, какое окно открыто и где находится курсор. Идеально подходит для создания киосков самообслуживания или фоновой идентификации.
Как это работает: Считыватель переключается в режим эмуляции COM-порта (часто с помощью DIP-переключателей на корпусе или специальной утилиты). После установки драйвера в системе появляется виртуальный COM-порт, который "слушает" 1С. При считывании карты драйвер генерирует внешнее событие, которое перехватывается специальным обработчиком в 1С.
Если же драйвер считывателя не поддерживает полноценное внешнее событие, можно воспользоваться программной прослойкой для чтения данных из COM порта и эмуляции нажатия клавиш, однако классический подход выглядит следующим образом:
Посмотрим на пример кода:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
// Источник - строка, обычно совпадает с наименованием
// подключенного оборудования, как оно задано в 1С.
// Например, "СканерШтрихкода".
// Событие - строка, идентифицирующая тип события.
// Для сканеров это часто "ScanData".
// Данные - это и есть считанный номер карты.
// Добавляем проверку, чтобы реагировать только на события от нашего устройства.
Если Источник = "МойСчитыватель" И Событие = "ScanData" Тогда
// Выводим сообщение для отладки
Сообщить("Считана карта с номером: " + Данные);
// Вызываем основную процедуру бизнес-логики
ВыполнитьДействиеПоКарте(Данные);
КонецЕсли;
КонецПроцедуры
Плюсы этого метода:
Минусы:
Независимо от того, какой способ подключения вы выбрали, в итоге вы получаете строку с номером карты. Теперь начинается самое интересное — написание кода, который будет выполнять полезное действие, такое как открытие форм по считыванию карты. Разберем логику на примере задачи "показать сотруднику его задачи".
1. Идентификация пользователя
Сначала нужно понять, какому сотруднику принадлежит карта — для этого подойдёт готовая система контроля доступа и идентификации сотрудников по пропускам. Для этого в системе необходимо реализовать сопоставление UID карт с пользователями.
Регистр сведений с названием, например, "КартыДоступаСотрудников".
НомерКарты (Строка).Сотрудник (СправочникСсылка.Сотрудники или СправочникСсылка.Пользователи).2. Получение и отображение задач
Теперь напишем процедуру, которая будет находить и показывать задачи.
&НаСервере
Процедура ВыполнитьДействиеПоКарте(НомерКарты)
// 1. Находим сотрудника по номеру карты
Сотрудник = НайтиСотрудникаПоКарте(НомерКарты);
Если Сотрудник = Неопределено Тогда
ПоказатьПредупреждение("Сотрудник с картой " + НомерКарты + " не найден!");
Возврат;
КонецЕсли;
// 2. Формируем список задач для сотрудника
ПараметрыФормы = Новый Структура("СотрудникДляОтбора", Сотрудник);
// 3. Открываем специальную форму со списком задач
ОткрытьФорму("ОбщаяФорма.ЗадачиСотрудника", ПараметрыФормы);
КонецПроцедуры
&НаСервереБезКонтекста
Функция НайтиСотрудникаПоКарте(НомерКарты)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КартыДоступаСотрудников.Сотрудник
|ИЗ
| РегистрСведений.КартыДоступаСотрудников КАК КартыДоступаСотрудников
|ГДЕ
| КартыДоступаСотрудников.НомерКарты = &НомерКарты";
Запрос.УстановитьПараметр("НомерКарты", НомерКарты);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Неопределено;
Иначе
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Возврат Выборка.Сотрудник;
КонецЕсли;
КонецФункции
В этом примере мы на сервере находим сотрудника по номеру карты, а затем открываем некую ОбщуюФорму.ЗадачиСотрудника, передавая в нее найденного сотрудника в качестве параметра. В самой форме, в событии ПриСозданииНаСервере, нужно будет получить этот параметр и на его основе настроить отбор в динамическом списке, который отображает задачи из регистра или бизнес-процессов.
Таким образом, для полной реализации задачи требуется не только техническое подключение оборудования, но и продуманная программная доработка в среде 1С для реализации необходимой бизнес-логики.