При разработке мобильных приложений на платформе 1С программисты часто сталкиваются с ситуацией: внешняя компонента для сканера успешно подключается, но при считывании штрихкода ничего не происходит — процедура ОбработкаВнешнегоСобытия просто не вызывается. В этой статье мы подробно разберем, как правильно инициализировать драйвер, настроить взаимодействие через Android Intent и превратить обычный смартфон в полноценный мобильный ТСД для инвентаризации и маркировки (для этого есть готовое приложение ТСД на смартфон для 1С).
Прежде чем писать код, нам необходимо понять, как именно сканер ТСД передает данные в операционную систему Android. Существует два основных режима:
ОбработкаВнешнегоСобытия. Это профессиональный подход, позволяющий сканировать в любом месте программы. Именно так работает настраиваемое мобильное приложение для сканирования штрихкодов через механизмы Intent.Для реализации второго варианта нам потребуется использовать внешнюю компоненту из БПО (Библиотеки подключаемого оборудования) и правильно её настроить.
Рассмотрим процесс подключения внешней компоненты. Для стабильной работы крайне важно объявить переменную драйвера как глобальную (например, в модуле приложения или в общем модуле с признаком «Клиент»), чтобы сборщик мусора Android не удалил объект из памяти.
Проанализируем пример кода для инициализации компоненты:
// В модуле управляемого приложения
Перем глДрайверСкана Экспорт;
Процедура ПриНачалеРаботыСистемы()
// Пытаемся установить и подключить компоненту из макета
РезультатУстановки = УстановитьВнешнююКомпоненту("ОбщийМакет.Драйвер1ССканерШтрихкода");
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Драйвер1ССканерШтрихкода", "InputDevice", ТипВнешнейКомпоненты.Native) Тогда
глДрайверСкана = Новый("AddIn.InputDevice.InputDevice");
// Указываем, что будем слушать системные сообщения (Broadcast)
глДрайверСкана.УстановитьПараметр("BluetoothDevice", "BROADCAST");
// Настройка параметров обработки данных
глДрайверСкана.УстановитьПараметр("OutputDataType", 0); // Данные возвращаются как строка
глДрайверСкана.УстановитьПараметр("Timeout", 35);
// Подключаем устройство программно
IDParametr = "";
Результат = глДрайверСкана.Подключить(IDParametr);
Если Результат Тогда
Сообщить("Сканер успешно подключен и ожидает данных.");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Это самый важный этап, без которого внешнее событие не сработает. Нам нужно синхронизировать настройки «железа» (самого ТСД) и настройки драйвера в 1С. Каждое устройство Android отправляет сообщения с определенным «заголовком» (Action) и ключом данных (Extra).
Рассмотрим, как прописать эти параметры в коде для конкретного устройства (на примере M3 Mobile):
// Эти параметры должны соответствовать настройкам в приложении Scanner на самом ТСД
глДрайверСкана.УстановитьПараметр("Action", "com.android.server.scannerservice.broadcast");
глДрайверСкана.УстановитьПараметр("Extra", "m3scannerdata");
глДрайверСкана.УстановитьПараметр("Category", "android.intent.category.DEFAULT");
Если вы не знаете параметры вашего ТСД, выполните следующие действия:
Intent Action и Intent String Extra. Скопируйте эти значения в код 1С.Ниже приведен список стандартных настроек для популярных моделей:
com.symbol.datawedge.api.ACTION_SCANNED_DATA_RESPONSE, Extra: com.symbol.datawedge.data_stringcom.honeywell.decode.intent.action.EDIT_DATA, Extra: dataandroid.intent.ACTION_DECODE_DATA, Extra: barcode_stringКогда параметры настроены верно, при успешном сканировании 1С вызовет процедуру в модуле приложения или модуле формы. Проанализируем, как выглядит стандартный обработчик, который может использовать программа учета складских остатков (для автоматизации которых подойдёт готовое решение для учета на ТСД и смартфонах) для небольшого склада:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
// Проверяем, что событие пришло именно от нашего сканера
Если Источник = "InputDevice" И Событие = "Barcode" Тогда
// Очищаем данные от возможных спецсимволов (префиксов/суффиксов)
Штрихкод = СокрЛП(Данные);
// Здесь вызываем вашу бизнес-логику поиска товара
ОбработатьСканирование(Штрихкод);
КонецЕсли;
КонецПроцедуры
Правильная обработка событий особенно важна, когда выполняется заказ кодов маркировки остатков одежды и ввод их в оборот, где важна точность каждого считанного кода — с этой задачей отлично справляется программа для интеграции ТСД и смартфонов с 1С.
Если вы все настроили, но данных нет, проанализируем типичные ошибки:
LogType (значение 0) и LogFilePath (путь к файлу на ТСД).Предупреждение или Вопрос) может блокировать очередь внешних событий в мобильной платформе.Использование связки Native-компоненты 1С и Broadcast Intent является наиболее стабильным способом автоматизации склада. Это позволяет избежать проблем с переключением раскладки клавиатуры и необходимостью постоянно держать фокус в поле ввода. Для этого также разработана обработка для инвентаризации с мобильных устройств и ТСД.