Автоматизация контроля присутствия и учета времени посетителей в помещении — частая задача при разработке систем для спортивных залов, выставок, коворкингов или закрытых мероприятий. При проектировании такого решения часто возникает дилемма: пытаться ли подключить дальнобойные радиометки напрямую в конфигурацию или использовать готовую систему контроля и управления доступом (СКУД). Разберем архитектурные варианты, технические сложности и способы интеграции RFID-оборудования с платформой 1С.
Рассмотрим подход, который рекомендуют опытные специалисты при необходимости надежно разделять вход и выход. Попытка организовать физический учет проходов только силами платформы 1С натыкается на аппаратные нюансы (одновременные считывания, задержки интерфейса, дребезг контактов). Промышленным стандартом является использование готового контроллера доступа и двух считывателей (один на вход, второй на выход).
Разберем по шагам, как устроена схема взаимодействия СКУД и 1С:
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-сервер, исключая потерю данных.
Если бюджет ограничен, а жесткого требования фиксировать человека прямо в движении без его участия нет, наиболее простым решением становится настольный USB-считыватель на стойке регистрации. Посетитель самостоятельно или при участии администратора подносит карту к считывателю.
Разберем особенности настройки такого оборудования:
ОбработкаОповещения.Посмотрим, как выглядит обработка события от считывателя в управляемой форме:
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ScanData" Тогда
// Считыватель передал номер RFID-метки
НомерКарты = СокрЛП(Параметр[0]);
ЗарегистрироватьВизитПосетителю(НомерКарты);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗарегистрироватьВизитПосетителю(НомерКарты)
СсылкаНаПосетителя = Справочники.Посетители.НайтиПоРеквизиту("RFIDКод", НомерКарты);
Если ЗначениеЗаполнено(СсылкаНаПосетителя) Тогда
// Фиксируем факт посещения в регистре сведений
МенеджерЗаписи = РегистрыСведений.ЖурналПосещений.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДатаСеанса();
МенеджерЗаписи.Посетитель = СсылкаНаПосетителя;
МенеджерЗаписи.Направление = ОпределитьНаправление(СсылкаНаПосетителя);
МенеджерЗаписи.Записать();
КонецЕсли;
КонецПроцедуры
Проанализируем современный архитектурный вариант без сторонних SQL-серверов. Сетевые считыватели или контроллеры, оснащенные интерфейсом Ethernet/Wi-Fi, поддерживают передачу событий через протокол HTTP (Web-hooks).
Разберем по шагам логику работы сервиса:
HTTPСервис с шаблоном URL, например /events/{action}.Рассмотрим пример кода обработчика 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-считыватели (диапазон 860–960 МГц). Именно они стоят порядка 30–40 тысяч рублей и выше. Выясним, с какими сложностями сталкивается разработчик при их прямом использовании:
Если проект ограничен по срокам и бюджету, имеет смысл рассмотреть альтернативные варианты идентификации посетителей: