Интеграция систем контроля и управления доступом (СКУД) с платформой 1С — это классическая задача для автоматизации учета рабочего времени и оперативного управления доступом на объект. Одной из самых популярных систем в этой сфере является Sigur (ранее известная как «Сфинкс»). Основная сложность заключается в том, что 1С не имеет встроенных механизмов для прямой работы с низкоуровневыми TCP-сокетами или COM-портами. В этой статье мы подробно разберем, как обойти это ограничение и настроить полноценное взаимодействие между учетной системой и контроллером безопасности.
Для начала проанализируем, как именно происходит общение с сервером Sigur. Система использует открытый протокол интеграции — OIF (Open Integration Format). Это текстовый протокол, работающий поверх TCP, обычно на порту 3312. Работа с ним напоминает взаимодействие с почтовым сервером: мы отправляем текстовую команду и получаем ответ в виде статуса.
Рассмотрим стандартный сценарий санкционирования прохода:
LOGIN 1.8 user pass, где 1.8 — версия протокола, а user/pass — данные оператора с правами на «Доступ по протоколу OIF».OK.ALLOWPASS 1 ANONYMOUS IN (разблокировать точку доступа №1 для входа).OK от сервера.Рассмотрим наиболее простой программный способ реализации TCP-соединения через старый, но проверенный компонент MSWinsock.Winsock. Этот метод подходит, если ваша 1С работает в 32-битном окружении (например, на старом сервере или клиенте).
Проанализируем пример кода для установления соединения:
Процедура ПодключитьсяКСКУД(ПараметрыПодключения)
Попытка
Контроллер = Новый COMОбъект("MSWinsock.Winsock");
Исключение
Сообщить("Компонент Winsock не зарегистрирован в системе!");
Возврат;
КонецПопытки;
Контроллер.RemoteHost = СокрЛП(ПараметрыПодключения.Адрес);
Контроллер.RemotePort = СокрЛП(ПараметрыПодключения.Порт); // Обычно 3312
Контроллер.Connect();
// Здесь должна быть логика ожидания состояния Connect (состояние 7)
// И последующая отправка данных методом .SendData()
КонецПроцедуры
Важное примечание: Выясним причину, по которой этот метод может не подойти. Компонент MSWinsock является 32-битным. Если ваш сервер 1С работает в 64-битном режиме, попытка создать этот COMОбъект завершится ошибкой. В этом случае нам потребуются альтернативные подходы.
Если нам необходимо решение, работающее в 64-битной среде, мы можем использовать библиотеку System.Net.Sockets из состава .NET Framework. В 1С это реализуется либо через специализированные внешние компоненты, либо через NetObjectTo1C.
Разберем алгоритм работы с TcpClient:
TcpClient.NetworkStream для записи и чтения.LOGIN...) в массив байтов (важно использовать кодировку UTF-8).Использование .NET позволяет избежать проблем с регистрацией старых ActiveX компонентов и обеспечивает более стабильную работу современной платформы 1С.
Современные версии сервера Sigur поддерживают работу не только через сырые TCP-сокеты, но и через HTTP API. Это самый «чистый» способ интеграции с точки зрения 1С, так как нам не нужны никакие внешние компоненты.
Рассмотрим преимущества этого метода:
HTTPСоединение.Пример реализации запроса к API Sigur:
Соединение = Новый HTTPСоединение(СерверСКУД, ПортAPI, Логин, Пароль);
Запрос = Новый HTTPЗапрос("/api/v1/points/1/unlock"); // Пример пути API
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
Если Ответ.КодСостояния = 200 Тогда
// Обрабатываем успешное открытие
КонецЕсли;
Часто задача стоит не только в том, чтобы «открыть дверь», но и в том, чтобы фиксировать проходы сотрудников. Для этого в протоколе OIF предусмотрен режим подписки. Разберем, как это реализовать.
Выясним, как работает команда SUBSCRIBE. После ее отправки сервер Sigur не закрывает соединение, а начинает транслировать в него каждое событие (поднесение карты, открытие двери). Чтобы 1С могла «слушать» эти данные, необходимо организовать Фоновое задание. Это задание будет постоянно висеть в памяти, ожидать данные из сокета и при их появлении записывать информацию в документ РегистрацияПроходов или соответствующий регистр сведений.
Проанализируем настройки на стороне самого Sigur. Для того чтобы 1С смогла подключиться, недостаточно знать IP и порт. В настройках программного обеспечения СКУД необходимо:
Подведем итог нашему анализу. Если перед вами стоит задача интеграции:
ADODB, но помните, что изменять данные лучше через API/OIF во избежание конфликтов.Выбор конкретного метода зависит от архитектуры вашей системы и требований к скорости реакции оборудования. Использование внешних компонент типа Native API является наиболее надежным и современным способом для реализации низкоуровневого обмена данными в среде 1С:Предприятие 8.3.