Как настроить работу сканера штрихкодов в фоновом режиме в 1С:ERP 2.4?

Программист 1С v8.3 (Управляемые формы) Торговля и дистрибуция
← На главную

При работе со складским оборудованием в 1С:ERP Управление предприятием 2.4 часто возникает задача: сделать так, чтобы сканер штрихкодов считывал данные всегда, независимо от того, в какой форме находится пользователь и на каком поле стоит курсор. Особенно актуально это для Bluetooth-моделей, таких как АТОЛ 2109BT, которые имеют свойство «засыпать» или разрывать соединение при неактивности. Разберем пошагово, как реализовать фоновую работу сканера через внешние события, используя механизмы Библиотеки подключаемого оборудования (БПО).

Разбор проблемы: почему сканер «тухнет» после теста

Рассмотрим стандартную ситуацию: вы настроили драйвер 1С:Сканеры штрихкода (NativeApi), выбрали порт, успешно прошли тест подключения, но при выходе из формы настроек синий индикатор на сканере гаснет, и устройство перестает реагировать на штрихкоды. Это происходит потому, что в типовых решениях на базе БСП (БПО) активация оборудования происходит динамически. Система подключает сканер только тогда, когда открыта форма, программно заявившая о поддержке сканирования. Как только форма закрывается, порт освобождается, и Bluetooth-стек Windows может разорвать соединение для экономии энергии.

Шаг 1: Аппаратная настройка сканера АТОЛ 2109BT

Для фоновой работы нам категорически не подходит режим эмуляции клавиатуры (HID). В этом режиме сканер просто «печатает» текст в активное поле ввода. Нам же нужно Внешнее событие. Проанализируем настройки устройства:

  1. Найдите в руководстве пользователя АТОЛ 2109BT управляющий штрихкод Bluetooth SPP.
  2. Сопрягите сканер с компьютером. В диспетчере устройств Windows должен появиться виртуальный COM-порт (например, COM3 или COM4).
  3. Обязательно считайте код «Disable Sleep Mode» или увеличьте время ожидания, иначе при коротком простое сканер будет отключаться от порта, и первая попытка сканирования после паузы уйдет «в никуда» на время инициализации соединения.

Шаг 2: Настройка в интерфейсе 1С

Перейдем в раздел НСИ и Администрирование — РМК и оборудование. Создадим новый экземпляр подключаемого оборудования:

Шаг 3: Программная инициализация сканера в фоне

Проанализируем ситуацию: нам нужно, чтобы сканер включился при старте системы и не выключался. Использовать прямой вызов ПодключитьВнешнююКомпоненту в ERP 2.4 не рекомендуется, так как это нарушает логику работы БПО. Вместо этого обратимся к глобальному модулю управляемого приложения.

В модуле УправляемоеПриложение в процедуре ПриНачалеРаботыСистемы мы должны инициализировать подключение. Рассмотрим пример кода:


Процедура ПриНачалеРаботыСистемы()
    // Инициализация механизма подключаемого оборудования
    МенеджерОборудованияКлиент.УстановитьПодключениеОборудованияПриСтарте(Истина);
    
    // Попытаемся подключить сканер глобально
    ПараметрыПодключения = Неопределено;
    Результат = МенеджерОборудованияКлиент.НачатьПодключениеОборудования(
        "ОбработкаЗавершенияПодключения", 
        Неопределено, // Владелец не указан, значит подключение глобальное
        "СканерШтрихкода", 
        ПараметрыПодключения
    );
КонецПроцедуры

Обратите внимание: когда в качестве параметра Владелец мы передаем Неопределено, БПО понимает, что устройство не привязано к конкретной форме и должно оставаться активным на протяжении всего сеанса.

Шаг 4: Обработка данных в модуле приложения

Теперь выясним, куда придут данные. Поскольку мы подключили сканер без привязки к форме, событие будет «всплывать» на уровень управляемого приложения. Нам нужно реализовать обработчик ОбработкаОповещения в модуле управляемого приложения.


Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    // Проверяем, что событие пришло от торгового оборудования
    Если Источник = "ПодключаемоеОборудование" И ИмяСобытия = "ScanData" Тогда
        // Параметр содержит массив: [Штрихкод, Данные, ТипШтрихкода]
        ДанныеШК = Параметр[0]; 
        
        // Рассмотрим ситуацию: если открыта активная форма, 
        // которая умеет обрабатывать ШК, лучше передать управление ей.
        // Если нет — выполняем фоновую логику.
        
        ВыполнитьФоновуюОбработкуШтрихкода(ДанныеШК);
    КонецЕсли;
КонецПроцедуры

Процедура ВыполнитьФоновуюОбработкуШтрихкода(Штрихкод)
    // Здесь ваша логика. Например, поиск товара и открытие его карточки
    // или фиксация прихода сотрудника.
    Сообщить("Считан штрихкод в фоновом режиме: " + Штрихкод);
КонецПроцедуры

Шаг 5: Нюансы использования в формах документов

Проанализируем важный момент: если вы открываете, например, «Заказ клиента», БПО автоматически попытается подключить сканер для этой формы. Чтобы не возникло конфликта между «глобальным» сканером и сканером в форме, в ERP используется механизм очередей событий. Однако лучшей практикой в ERP 2.4 является использование стандартного метода БСП внутри самих форм, если вам нужно сканирование в документ.

В форме документа настраивается реквизит ПоддерживаемыеТипыПодключаемогоОборудования и в ПриОткрытии вызывается:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Стандартный механизм БСП для форм
    МенеджерОборудованияКлиент.НачатьПодключениеОборудованияПриОткрытииФормы(
        "ОбработкаПодключения", 
        ЭтаФорма, 
        "СканерШтрихкода"
    );
КонецПроцедуры

Почему NativeApi лучше, чем клавиатурный режим?

Разберем преимущества работы через COM-порт (NativeApi), которые мы настроили:

Таким образом, для реализации полноценного фонового режима работы со сканером АТОЛ 2109BT необходимо: перевести устройство в режим SPP, настроить его как NativeApi устройство на конкретный COM-порт в 1С и инициализировать подключение в модуле управляемого приложения без указания владельца формы. Это обеспечит постоянную готовность сканера к работе и корректный захват внешних событий системой.

← На главную