При работе со складским оборудованием в 1С:ERP Управление предприятием 2.4 часто возникает задача: сделать так, чтобы сканер штрихкодов считывал данные всегда, независимо от того, в какой форме находится пользователь и на каком поле стоит курсор. Особенно актуально это для Bluetooth-моделей, таких как АТОЛ 2109BT, которые имеют свойство «засыпать» или разрывать соединение при неактивности. Разберем пошагово, как реализовать фоновую работу сканера через внешние события, используя механизмы Библиотеки подключаемого оборудования (БПО).
Рассмотрим стандартную ситуацию: вы настроили драйвер 1С:Сканеры штрихкода (NativeApi), выбрали порт, успешно прошли тест подключения, но при выходе из формы настроек синий индикатор на сканере гаснет, и устройство перестает реагировать на штрихкоды. Это происходит потому, что в типовых решениях на базе БСП (БПО) активация оборудования происходит динамически. Система подключает сканер только тогда, когда открыта форма, программно заявившая о поддержке сканирования. Как только форма закрывается, порт освобождается, и Bluetooth-стек Windows может разорвать соединение для экономии энергии.
Для фоновой работы нам категорически не подходит режим эмуляции клавиатуры (HID). В этом режиме сканер просто «печатает» текст в активное поле ввода. Нам же нужно Внешнее событие. Проанализируем настройки устройства:
Перейдем в раздел НСИ и Администрирование — РМК и оборудование. Создадим новый экземпляр подключаемого оборудования:
13 (CR) или 10 (LF), в зависимости от настроек самого сканера.Проанализируем ситуацию: нам нужно, чтобы сканер включился при старте системы и не выключался. Использовать прямой вызов ПодключитьВнешнююКомпоненту в ERP 2.4 не рекомендуется, так как это нарушает логику работы БПО. Вместо этого обратимся к глобальному модулю управляемого приложения.
В модуле УправляемоеПриложение в процедуре ПриНачалеРаботыСистемы мы должны инициализировать подключение. Рассмотрим пример кода:
Процедура ПриНачалеРаботыСистемы()
// Инициализация механизма подключаемого оборудования
МенеджерОборудованияКлиент.УстановитьПодключениеОборудованияПриСтарте(Истина);
// Попытаемся подключить сканер глобально
ПараметрыПодключения = Неопределено;
Результат = МенеджерОборудованияКлиент.НачатьПодключениеОборудования(
"ОбработкаЗавершенияПодключения",
Неопределено, // Владелец не указан, значит подключение глобальное
"СканерШтрихкода",
ПараметрыПодключения
);
КонецПроцедуры
Обратите внимание: когда в качестве параметра Владелец мы передаем Неопределено, БПО понимает, что устройство не привязано к конкретной форме и должно оставаться активным на протяжении всего сеанса.
Теперь выясним, куда придут данные. Поскольку мы подключили сканер без привязки к форме, событие будет «всплывать» на уровень управляемого приложения. Нам нужно реализовать обработчик ОбработкаОповещения в модуле управляемого приложения.
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
// Проверяем, что событие пришло от торгового оборудования
Если Источник = "ПодключаемоеОборудование" И ИмяСобытия = "ScanData" Тогда
// Параметр содержит массив: [Штрихкод, Данные, ТипШтрихкода]
ДанныеШК = Параметр[0];
// Рассмотрим ситуацию: если открыта активная форма,
// которая умеет обрабатывать ШК, лучше передать управление ей.
// Если нет — выполняем фоновую логику.
ВыполнитьФоновуюОбработкуШтрихкода(ДанныеШК);
КонецЕсли;
КонецПроцедуры
Процедура ВыполнитьФоновуюОбработкуШтрихкода(Штрихкод)
// Здесь ваша логика. Например, поиск товара и открытие его карточки
// или фиксация прихода сотрудника.
Сообщить("Считан штрихкод в фоновом режиме: " + Штрихкод);
КонецПроцедуры
Проанализируем важный момент: если вы открываете, например, «Заказ клиента», БПО автоматически попытается подключить сканер для этой формы. Чтобы не возникло конфликта между «глобальным» сканером и сканером в форме, в ERP используется механизм очередей событий. Однако лучшей практикой в ERP 2.4 является использование стандартного метода БСП внутри самих форм, если вам нужно сканирование в документ.
В форме документа настраивается реквизит ПоддерживаемыеТипыПодключаемогоОборудования и в ПриОткрытии вызывается:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Стандартный механизм БСП для форм
МенеджерОборудованияКлиент.НачатьПодключениеОборудованияПриОткрытииФормы(
"ОбработкаПодключения",
ЭтаФорма,
"СканерШтрихкода"
);
КонецПроцедуры
Разберем преимущества работы через COM-порт (NativeApi), которые мы настроили:
ERP 2.4.Таким образом, для реализации полноценного фонового режима работы со сканером АТОЛ 2109BT необходимо: перевести устройство в режим SPP, настроить его как NativeApi устройство на конкретный COM-порт в 1С и инициализировать подключение в модуле управляемого приложения без указания владельца формы. Это обеспечит постоянную готовность сканера к работе и корректный захват внешних событий системой.