Подключение беспроводного торгового оборудования к самописным конфигурациям 1С часто вызывает трудности у разработчиков. Основная проблема заключается в том, что даже при корректной установке драйверов 1С может «не видеть» данные, поступающие от устройства. В этой статье мы подробно разберем, как подключить сканер Mertech CL-2310 P2D, используя режим эмуляции COM-порта, проанализируем программный код для работы с компонентой Scanopos и выясним, почему может не срабатывать стандартное ВнешнееСобытие.
Прежде чем переходить к написанию кода, давайте разберем, как физически и логически данные попадают из сканера в 1С. Модель Mertech CL-2310 является беспроводной и передает данные на базовую станцию (или через Bluetooth), которая подключается к компьютеру. Если вы планируете использовать устройство с мобильными терминалами, вам может быть полезно руководство про подключение сканера Bluetooth в режиме SPP на Android. Для работы через интерфейс RS-232 (или его эмуляцию через USB) на ПК устройство должно быть переведено в соответствующий режим. Это критически важный шаг, так как по умолчанию большинство сканеров работают в режиме эмуляции клавиатуры (HID), где данные просто «печатаются» в активное поле ввода, не вызывая обработчик внешнего события.
Для активации режима USB-COM необходимо считать специальный настроечный штрихкод из руководства пользователя Mertech. После этого в диспетчере устройств Windows должен появиться новый виртуальный COM-порт (например, COM5). Именно с этим портом мы будем взаимодействовать через внешнюю компоненту 1С.
Рассмотрим пример кода для инициализации сканера штрихкодов в самописной конфигурации. Для работы мы будем использовать классическую компоненту AddIn.Scanner (Scanopos). Несмотря на её почтенный возраст, она до сих пор успешно применяется для решения задач в простых конфигурациях на обычных формах.
var obj;
Procedure Open_Form()
try
// Программный идентификатор старой компоненты Scanopos
ПрогИД = "AddIn.Scanner";
// Пытаемся подключить компоненту в систему
ПодключитьВнешнююКомпоненту(ПрогИД);
// Создаем экземпляр объекта
obj = Новый (ПрогИД);
except
Сообщить("Ошибка при загрузке внешней компоненты сканера штрихкода!");
Возврат;
endtry;
if Connect() = 0 then
Сообщить("Сбой физического подключения сканера к порту");
endif;
endProcedure
Разберем теперь функцию Connect(), которая отвечает за установку параметров связи с оборудованием. Здесь важно правильно указать номер порта, скорость передачи и, самое главное, включить режим ожидания событий.
Function Connect()
// Открываем логическое устройство
if obj.Open("Сканер штрихкода") <> 0 then
return 0;
endif;
// Настраиваем параметры COM-соединения
obj.DataBits = 8;
obj.Port = 5; // Укажите номер порта из диспетчера устройств
obj.Speed = 115200;
obj.StopBits = 0; // 0 соответствует 1 стоповому биту
// Определяем символ завершения сообщения (Suffix)
// 13 - это код символа CR (Возврат каретки)
obj.StopChar = 13;
// Имя события, которое будет передано в процедуру ВнешнееСобытие
obj.EventName = "GetBareCode";
// Пытаемся захватить устройство (монопольный режим)
if obj.Claim(1) <> 0 then
Disconnect();
return 0;
endif;
// Активируем устройство и включаем генерацию событий
obj.DeviceEnabled = 1;
obj.DataEventEnabled = 1;
obj.DecodeData = 1; // Указываем компоненте самостоятельно декодировать данные
// Очищаем буферы
obj.ClearInput();
obj.ClearOutput();
if obj.DeviceEnabled <> 1 then
Disconnect();
return 0;
endif;
return 1;
endFunction
Часто программисты сталкиваются с ситуацией: код написан верно, драйвер установлен, сканер успешно считывает коды в специализированных утилитах (например, в гипертерминале или Mertech Utility), но в 1С процедура ВнешнееСобытие не вызывается — для поиска ошибок подключения пригодится инструмент отладки программного кода 1С. Проанализируем основные причины этой проблемы.
1. Отсутствие суффикса в настройках сканера.
Это самая частая причина. Внешняя компонента 1С ожидает специальный управляющий символ (обычно CR с кодом 13 или LF с кодом 10), который сигнализирует о завершении передачи пакета данных. Если сканер настроен на передачу только «голого» штрихкода, компонента будет бесконечно ждать окончания строки, и событие в 1С не возникнет. Для решения этой проблемы необходимо отсканировать из мануала Mertech штрихкод "Add Suffix CR+LF".
2. Конфликт версий и разрядности.
Старая компонента Scanopos является 32-битной. Если вы используете 64-битный клиент 1С, она просто не сможет загрузиться. В этом случае необходимо либо переходить на 32-битный клиент, либо использовать современный NativeApi драйвер.
3. Неверная привязка обработчика в форме.
Убедитесь, что в свойствах формы в поле «Внешнее событие» действительно выбрана соответствующая процедура. Проверьте правильность параметров: Источник, Событие, Данные. Пример обработки полученных данных:
Procedure GetBareCode(Источник, Событие, Данные)
// Проверяем, что событие пришло именно от нашего сканера
Если Событие = "GetBareCode" Тогда
Сообщить("Получен штрихкод: " + Данные);
// Здесь можно вызвать поиск товара в справочнике
КонецЕсли;
endProcedure
Как отмечают опытные специалисты, использование Scanopos в современных реалиях — это «древнедельфийский стиль», который несет в себе много рисков. Более надежным и универсальным решением является использование драйверов из состава БПО (Библиотека подключаемого оборудования). Эти драйверы работают по технологии NativeApi, поддерживают любую разрядность системы и корректно обрабатывают сложные коды маркировки (Data Matrix).
Посмотрим на пример подключения через современный драйвер 1С:
// Загрузка компоненты из макета или из файла
Если Не ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера", "InputDevice", ТипВнешнейКомпоненты.Native) Тогда
УстановитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера");
ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверСканера", "InputDevice", ТипВнешнейКомпоненты.Native);
Конецесли;
глСканер = Новый("AddIn.InputDevice.InputDevice");
// Настройка параметров через универсальный метод
глСканер.УстановитьПараметр("Port", 0); // 0 для USB-HID или номер порта для COM
глСканер.УстановитьПараметр("Suffix", 13);
глСканер.УстановитьПараметр("Timeout", 60);
глСканер.Подключить("СканерШтрихкода");
Поскольку Mertech CL-2310 P2D — это 2D-сканер, его часто используют для работы с системой «Честный ЗНАК» (для этого пригодится готовое решение для работы с маркировкой Честный Знак). В современных условиях критически важно правильно реализовать разрешительный режим на кассах для онлайн-проверки марок. Проанализируем нюансы, которые могут возникнуть при сканировании Data Matrix:
FNC1 (код 29) может «съедаться» драйвером. Это сделает код маркировки невалидным для проверки. Для контроля статуса кодов предприятия можно использовать запрос информации кодов Честного знака напрямую через API.Подводя итог, можно сказать: для стабильной работы Mertech CL-2310 в 1С важно обеспечить наличие суффикса в самом устройстве и корректно настроить параметры внешней компоненты. Если вы проектируете новую систему, настоятельно рекомендуем отказаться от Scanopos в пользу современных драйверов NativeApi, входящих в состав типовых конфигураций 1С.