Как организовать учет посетителей по RFID-картам в 1С с нуля?

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

Автоматизация контроля присутствия и учета времени посетителей в помещении — частая задача при разработке систем для спортивных залов, выставок, коворкингов или закрытых мероприятий. При проектировании такого решения часто возникает дилемма: пытаться ли подключить дальнобойные радиометки напрямую в конфигурацию или использовать готовую систему контроля и управления доступом (СКУД). Разберем архитектурные варианты, технические сложности и способы интеграции RFID-оборудования с платформой 1С.

Вариант 1. Использование классической СКУД с интеграцией на уровне базы данных

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

Разберем по шагам, как устроена схема взаимодействия СКУД и 1С:

  1. Аппаратная часть: устанавливается специализированный контроллер доступа, к которому по протоколу Wiegand подключаются считыватели бесконтактных карт (например, формата EM-Marine или Mifare).
  2. Служебное ПО СКУД: контроллер опрашивается родной службой системы безопасности, которая записывает все события проходов (номер карты, идентификатор считывателя, точная дата и время) во внешнюю реляционную базу данных (например, Microsoft SQL Server или PostgreSQL).
  3. Интеграция с 1С: разработчик в 1С не управляет оборудованием напрямую. Вместо этого пишется регламентное задание или обработка, считывающая новые записи из SQL-таблицы событий СКУД через COMОбъект("ADODB.Connection") или внешние источники данных (ВИД).

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


Подключение = Новый COMОбъект("ADODB.Connection");
Подключение.ConnectionString = "Driver={SQL Server};Server=SRV-SECURITY;Database=skud_db;Uid=sa;Pwd=StrongPass123;";
Подключение.Open();

Команда = Новый COMОбъект("ADODB.Command");
Команда.ActiveConnection = Подключение;
Команда.CommandText = 
    "SELECT CardNumber, EventTime, ReaderID 
     |FROM EventsLog 
     |WHERE EventTime > ? 
     |ORDER BY EventTime ASC";

Команда.Parameters.Append(Команда.CreateParameter("LastSync", 135, 1, , ДатаПоследнейСинхронизации));
Выборка = Команда.Execute();

Пока НЕ Выборка.EOF Цикл
    НомерКарты = СокрЛП(Выборка.Fields("CardNumber").Value);
    ВремяСобытия = Выборка.Fields("EventTime").Value;
    КодСчитывателя = Выборка.Fields("ReaderID").Value;
    
    // Регистрируем проход в базе 1С
    ЗафиксироватьПроход(НомерКарты, ВремяСобытия, КодСчитывателя);
    
    Выборка.MoveNext();
КонецЦикла;

Подключение.Close();

Главный плюс такой схемы — высокая отказоустойчивость: если база 1С временно недоступна, обновляется или перезагружается, контроллер СКУД продолжает автономно собирать проходы в память или локальный SQL-сервер, исключая потерю данных.

Вариант 2. Подключение настольного RFID-считывателя через БПО

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

Разберем особенности настройки такого оборудования:

  1. Режим эмуляции: большинство считывателей поддерживают работу в режиме эмуляции клавиатуры (HID) либо виртуального COM-порта (VCP).
  2. Подключение через БПО: в 1С устройство подключается с помощью стандартной «1С:Библиотеки подключаемого оборудования» по типу «Сканеры штрихкода». При поднесении карты драйвер генерирует стандартное внешнее событие ОбработкаОповещения.

Посмотрим, как выглядит обработка события от считывателя в управляемой форме:


&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "ScanData" Тогда
        // Считыватель передал номер RFID-метки
        НомерКарты = СокрЛП(Параметр[0]);
        ЗарегистрироватьВизитПосетителю(НомерКарты);
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗарегистрироватьВизитПосетителю(НомерКарты)
    СсылкаНаПосетителя = Справочники.Посетители.НайтиПоРеквизиту("RFIDКод", НомерКарты);
    Если ЗначениеЗаполнено(СсылкаНаПосетителя) Тогда
        // Фиксируем факт посещения в регистре сведений
        МенеджерЗаписи = РегистрыСведений.ЖурналПосещений.СоздатьМенеджерЗаписи();
        МенеджерЗаписи.Период = ТекущаяДатаСеанса();
        МенеджерЗаписи.Посетитель = СсылкаНаПосетителя;
        МенеджерЗаписи.Направление = ОпределитьНаправление(СсылкаНаПосетителя);
        МенеджерЗаписи.Записать();
    КонецЕсли;
КонецПроцедуры

Вариант 3. Сетевые считыватели и HTTP-сервисы 1С

Проанализируем современный архитектурный вариант без сторонних SQL-серверов. Сетевые считыватели или контроллеры, оснащенные интерфейсом Ethernet/Wi-Fi, поддерживают передачу событий через протокол HTTP (Web-hooks).

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

  1. База 1С публикуется на веб-сервере (IIS или Apache).
  2. В конфигурации создается объект метаданных HTTPСервис с шаблоном URL, например /events/{action}.
  3. При считывании метки контроллер формирует POST-запрос с JSON-телом, где указан номер карты и идентификатор датчика (вход или выход).
  4. Метод сервиса 1С мгновенно обрабатывает входящий поток данных и возвращает ответ контроллеру.

Рассмотрим пример кода обработчика HTTP-запроса:


Функция РегистрацияСобытияPOST(Запрос)
    СтрокаJSON = Запрос.ПолучитьТелоКакСтроку("UTF-8");
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(СтрокаJSON);
    ДанныеСобытия = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    НомерМетки = ДанныеСобытия.card_uid;
    ТочкаПрохода = ДанныеСобытия.reader_direction; // "IN" или "OUT"
    
    // Запись события в информационной базе
    ЗафиксироватьПроход(НомерМетки, ТочкаПрохода, ТекущаяДатаСеанса());
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    Ответ.УстановитьТелоИзСтроки("{""status"": ""ok""}");
    Возврат Ответ;
КонецФункции

Специфика дальней идентификации (UHF) и подводные камни

Если планируется фиксация «в воздухе», когда человек просто проходит через дверной проем с меткой в кармане, используются UHF-считыватели (диапазон 860–960 МГц). Именно они стоят порядка 30–40 тысяч рублей и выше. Выясним, с какими сложностями сталкивается разработчик при их прямом использовании:

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

Альтернативные решения без RFID

Если проект ограничен по срокам и бюджету, имеет смысл рассмотреть альтернативные варианты идентификации посетителей:

  1. Штрихкоды и QR-коды: генерация билета или пропуска на экран смартфона посетителя либо печать бумажного пригласительного. На входе устанавливается стационарный 2D-сканер в режиме презентации (автоматическое чтение при поднесении). Затраты на расходные материалы минимальны, а интеграция через стандартную БПО занимает считанные часы.
  2. Терминалы распознавания лиц: биометрические терминалы исключают передачу карт сторонним лицам. Большинство современных терминалов также интегрируются с 1С через HTTP-уведомления или отправку событий по протоколу API.
← На главную