Подключение специализированного оборудования, такого как магнитные ридеры или системы контроля и управления доступом (СКУД), часто вызывает вопросы у начинающих разработчиков 1С. В данной статье мы подробно разберем процесс интеграции считывателей производства «Система-Браво» и затронем аспекты взаимодействия с сетевыми системами типа «Лавина». Мы пройдем путь от физического подключения устройства до написания программного кода для обработки считанных данных.
Прежде чем приступать к настройке в самой 1С, нам необходимо проанализировать, в каком режиме работает ваше устройство. Ридеры Bravo (обычно серии MSR) могут функционировать в двух основных режимах:
Если ваше устройство определилось как COM-порт (как указано в Сообщении 9), это отличная новость. Мы можем использовать стандартные механизмы 1С для работы с торговым оборудованием.
Рассмотрим по шагам процесс подключения ридера в типовых конфигурациях на платформе 1С:Предприятие 8.3. Большинство современных решений используют «Библиотеку подключаемого оборудования» (БПО). Нам не нужно искать специфические «самописные» обработки, достаточно штатных средств.
COM-порт (например, COM3), укажем скорость (по умолчанию обычно 9600) и таймаут.Важный нюанс: Обратите внимание на настройки префиксов и суффиксов. Магнитные карты часто передают служебные символы в начале и в конце данных дорожки. Например, для второй дорожки стандартным префиксом является символ ;, а суффиксом — ?. Если их не указать в настройках оборудования 1С, система может некорректно идентифицировать код.
После того как оборудование настроено в справочнике, проанализируем, как получить данные в коде. Когда ридер считывает карту, он генерирует внешнее событие. Нам нужно перехватить его в модуле формы или в модуле управляемого приложения.
Для перехвата события в форме документа или справочника используется процедура ВнешнееСобытие. Рассмотрим пример кода:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Источник — это имя подключенного устройства
// Событие — тип события (обычно "ScanData" или "MagneticCardData")
// Данные — считанная строка с магнитной дорожки
Если Событие = "MagneticCardData" Тогда
ОбработатьДанныеКарты(Данные);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьДанныеКарты(СчитаннаяСтрока)
// Проанализируем полученные данные
// Часто данные приходят в формате: ;1234567890?
// Нам нужно очистить их от префиксов и суффиксов
ЧистыйКод = СтрЗаменить(СчитаннаяСтрока, ";", "");
ЧистыйКод = СтрЗаменить(ЧистыйКод, "?", "");
Сообщить("Считан код карты: " + ЧистыйКод);
// Далее можно запустить поиск клиента или сотрудника в базе
КонецПроцедуры
Ситуация усложняется, когда нам нужно не просто считать карту, но и управлять исполнительными устройствами (открывать двери, турникеты) или получать логи проходов из внешней системы СКУД, такой как «Лавина». Выясним, как это реализовать.
СКУД «Лавина» обычно хранит свои данные в СУБД (например, Firebird). Выделим два основных сценария интеграции:
Для фиксации входов и выходов в 1С мы можем напрямую подключаться к базе данных СКУД через технологию ADO. Разберем пример инициализации подключения:
&НаСервере
Процедура ПолучитьСобытияИзЛавины()
Connection = Новый COMОбъект("ADODB.Connection");
ConnectionString = "Driver={Firebird/InterBase(r) driver};Dbname=IP_СЕРВЕРА:C:\Lavina\BASE.FDB;User=SYSDBA;Password=masterkey;";
Попытка
Connection.Open(ConnectionString);
RecordSet = Connection.Execute("SELECT * FROM EVENTS WHERE EVENT_TIME > '2023-01-01'");
// Обработка данных
Connection.Close();
Исключение
Сообщить("Ошибка подключения к СКУД: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Если производитель автоматики предоставляет SDK в виде DLL-библиотеки или COM-объекта, мы можем управлять контроллерами напрямую. Как упоминалось в обсуждении, если оборудование работает по IP, можно проанализировать возможность использования HTTP-запросов или специализированных команд драйвера.
Проанализируем пример использования COM-объекта драйвера (если он зарегистрирован в системе):
&НаКлиенте
Процедура ОткрытьДверьНажать()
Попытка
ДрайверСКУД = Новый COMОбъект("Lavina.Automation");
ДрайверСКУД.Connect("192.168.1.100"); // IP контроллера
ДрайверСКУД.OpenDoor(1); // Номер двери/реле
Исключение
Предупреждение("Не удалось связаться с контроллером доступа.");
КонецПопытки;
КонецПроцедуры
При продаже готовых решений, включающих 1С и стороннее железо, часто возникает вопрос лицензирования. Важно помнить, что для работы внутренних механизмов (подключение COM-порта, работа с SQL) дополнительные лицензии 1С не требуются — достаточно стандартных рабочих мест. Однако, если вы планируете тиражировать решение, стоит ознакомиться с правилами программы «1С:Совместимо».
Практические рекомендации:
СтрРазделить(), чтобы выделить нужный сегмент данных.Таким образом, подключение магнитного ридера к 1С — это стандартная задача, которая решается через использование БПО и правильную обработку внешних событий. Интеграция же со сложными системами СКУД требует понимания протоколов взаимодействия с базами данных или использования API производителя оборудования.