Как подключить Android ТСД к мобильному приложению 1С и настроить работу со сканером и аппаратной клавиатурой?

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

Подключение терминала сбора данных (ТСД) на платформе Android к мобильному приложению 1С может показаться нетривиальной задачей на первый взгляд, но мы с вами разберем ее по шагам. Часто возникают сложности с передачей данных со сканера штрихкодов и считыванием нажатий аппаратных клавиш. Давайте выясним, как настроить эту связку, чтобы все работало как часы.

Мы рассмотрим подробнее, что необходимо сделать как на стороне самого ТСД, так и в мобильном приложении 1С, чтобы обеспечить стабильную и корректную работу.

Подготовка Терминала Сбора Данных (ТСД) на Android

Для успешной работы с ТСД нам потребуется выполнить ряд настроек непосредственно на устройстве. Это ключевой этап, поскольку именно ТСД будет генерировать события, которые мы затем будем перехватывать в 1С.

Установка и активация службы специальных возможностей (Accessibility Service)

  1. Выясним причину необходимости: Для перехвата событий, генерируемых аппаратной клавиатурой ТСД (физические кнопки, а не экранная клавиатура), нам нужен специальный механизм Android. Стандартные средства 1С напрямую не "видят" эти события. Здесь на помощь приходит служба специальных возможностей (Accessibility Service).

  2. Пример реализации: Одним из распространенных решений является установка специализированного приложения-брокера, такого как AWMSDeviceBrokerService.apk. Это приложение разворачивает необходимый сервис, который мониторит системные события клавиатуры и преобразует их в широковещательные сообщения (Broadcast Intents), понятные внешней компоненте 1С.

  3. Пошаговая активация сервиса:

    1. Установите приложение: Загрузите и установите AWMSDeviceBrokerService.apk на ваш ТСД.

    2. Активируйте в системных настройках: После установки перейдите в системное меню Android. Обычно это "Настройки" -> "Специальные возможности" (или "Accessibility"). Найдите установленный сервис, например, "AWMS:Device broker", и включите его.

    3. Обратите внимание: На последних версиях Android процесс включения служб специальных возможностей может быть неочевидным и требовать дополнительных подтверждений из соображений безопасности. Будьте внимательны и следуйте системным подсказкам.

  4. Результат: После активации этот сервис будет генерировать события, например, с идентификатором com.awms.message.keycode и полем keycode, которые содержат информацию о нажатых аппаратных клавишах.

Настройка сканера ТСД для генерации широковещательных сообщений (Broadcast Intents)

  1. Понимание механизма: Для того чтобы данные, считанные сканером ТСД (штрихкоды), попадали в 1С, сам ТСД должен быть настроен на отправку этих данных в виде широковещательных сообщений (Broadcast Intents). Это стандартный способ межпроцессного взаимодействия в Android.

  2. Поиск настроек сканера: Местоположение этих настроек сильно зависит от производителя ТСД (Zebra, Honeywell, Newland, Urovo и т.д.) и версии Android. Обычно их можно найти в разделах "Настройки" -> "Сканирование", "DataWedge" (для Zebra), "ScanSettings" (для Honeywell) или в специализированных утилитах производителя.

  3. Ключевые параметры для настройки Intent'ов:

    1. Intent Action (Идентификатор события): Это уникальная строка, по которой внешняя компонента 1С будет "слушать" сообщения от сканера. Укажите здесь значение, которое будет ожидать ваша внешняя компонента. Примеры часто встречающихся значений:

      • com.honeywell.decode.action.DECODE
      • com.symbol.datawedge.api.ACTION_DATAWEDGE
      • scan.rcv.message (как упомянуто в исходной теме)
      • ru.1c.mobile.barcode (как пример собственного идентификатора)

      Важно: Убедитесь, что это значение совпадает с тем, которое будет настроено во внешней компоненте 1С.

    2. Intent Category: Часто требуется указать категорию android.intent.category.DEFAULT.

    3. Extra (Имя поля данных): Это имя поля, в котором будет передаваться сам отсканированный штрихкод. Примеры:

      • barcodeData
      • DATA_STRING
      • barcode_data

      Также необходимо, чтобы это имя поля совпадало с тем, что ожидает внешняя компонента 1С.

  4. Рекомендация по сбросу настроек: Если вы столкнулись с трудностями или не можете найти нужные настройки, иногда помогает сброс ТСД к заводским настройкам. Многие ТСД поставляются с предустановленными настройками, которые могут конфликтовать с нашей задачей. После сброса мы сможем настроить все "с чистого листа".

Внедрение и настройка внешней компоненты (ВК) в мобильном приложении 1С

После подготовки ТСД, наша следующая задача — научить мобильное приложение 1С принимать и обрабатывать события, которые генерирует терминал. Это достигается с помощью внешней компоненты.

Роль внешней компоненты

Мы разберем, как внешняя компонента (ВК) выступает в роли посредника. Она устанавливается в мобильное приложение 1С и выполняет следующие функции:

  1. Мониторинг Broadcast Intents: ВК "слушает" операционную систему Android на предмет появления широковещательных сообщений с определенными "Action" и "Extra", которые мы настроили на ТСД.

  2. Передача данных в 1С: Как только ВК перехватывает нужное событие (например, сканирование штрихкода или нажатие аппаратной клавиши), она инициирует вызов обработчика ОбработкаВнешнегоСобытия в мобильном приложении 1С, передавая ему полученные данные.

Инициализация и настройка компоненты в 1С

Для работы с внешней компонентой в 1С нам потребуется выполнить ее подключение и настройку параметров.

  1. Подключение компоненты: В коде мобильного приложения 1С мы сначала подключаем внешнюю компоненту. Обычно это делается с помощью метода Подключить() или аналогичного, предоставляемого компонентой.

  2. Получение параметров компоненты: Чтобы понять, какие параметры поддерживает наша ВК и как ее правильно настроить, мы можем запросить у нее список возможных параметров. Это очень полезный шаг для отладки и понимания работы компоненты.

    Рассмотрим пример кода:

    
    ПараметрыКомпонентыXML = "";
    // Предполагаем, что 'глСканер' - это глобальная переменная,
    // в которой хранится объект внешней компоненты.
    // Получаем XML документ, описывающий возможные параметры Компоненты.
    глСканер.ПолучитьПараметры(ПараметрыКомпонентыXML);
    // Теперь переменная ПараметрыКомпонентыXML будет содержать XML-строку
    // с описанием всех настроек. Мы можем проанализировать ее,
    // чтобы узнать, какие Action и Extra она ожидает.
    
  3. Установка параметров компоненты: После того как мы выяснили, какие параметры нам нужно задать (на основе настроек ТСД и информации от компоненты), мы передаем их ВК. Это делается с помощью метода УстановитьПараметры().

    Мы проанализируем, какие параметры необходимо передать:

    • ТипСобытия: Указываем BROADCAST, поскольку мы работаем с широковещательными сообщениями Android.
    • Action: Здесь мы указываем тот же "Intent Action", который был настроен на ТСД для сканера или который генерируется сервисом для клавиатуры (например, com.awms.message.keycode или scan.rcv.message).
    • Extra: Имя поля, в котором ВК должна искать данные штрихкода или код нажатой клавиши (например, barcodeData или keycode).
    • ExtraType: Обычно String, так как штрихкоды и коды клавиш передаются в виде строк.
    • Могут быть и другие специфические параметры, например, BluetoothDevice, если ТСД подключается через Bluetooth.

    Посмотрим на пример кода установки параметров:

    
    // Создаем соответствие для хранения параметров
    ПараметрыДляКомпоненты = Новый Соответствие();
    
    // Общие параметры для работы с Broadcast Intents
    ПараметрыДляКомпоненты.Вставить("ТипСобытия", "BROADCAST");
    // Параметры для перехвата событий аппаратной клавиатуры
    ПараметрыДляКомпоненты.Вставить("ActionКлавиатуры", "com.awms.message.keycode");
    ПараметрыДляКомпоненты.Вставить("ExtraКлавиатуры", "keycode");
    ПараметрыДляКомпоненты.Вставить("ExtraTypeКлавиатуры", "String");
    
    // Параметры для перехвата событий сканера штрихкодов
    // (должны соответствовать настройкам на ТСД!)
    ПараметрыДляКомпоненты.Вставить("ActionСканера", "scan.rcv.message"); // Пример из форума
    // ПараметрыДляКомпоненты.Вставить("ActionСканера", "com.honeywell.decode.action.DECODE"); // Пример для Honeywell
    ПараметрыДляКомпоненты.Вставить("ExtraСканера", "barcodeData");
    ПараметрыДляКомпоненты.Вставить("ExtraTypeСканера", "String");
    
    // Устанавливаем параметры внешней компоненте
    глСканер.УстановитьПараметры(ПараметрыДляКомпоненты);
    
    // После установки параметров, запускаем мониторинг событий
    глСканер.НачатьМониторингСобытий();
    
  4. Обработка внешнего события в 1С: После того как ВК перехватила событие, она вызывает процедуру ОбработкаВнешнегоСобытия в вашем мобильном приложении 1С. Здесь мы будем получать данные и выполнять необходимую логику.

    Рассмотрим структуру этого обработчика:

    
    Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    
        // Источник - обычно имя внешней компоненты
        // Событие - строка, идентифицирующая тип события (например, "Barcode", "Keyboard")
        // Данные - строка, содержащая отсканированный штрихкод или код клавиши
    
        Если Источник = "ПодключаемоеОборудование" Тогда // Или другое имя вашей компоненты
            Если Событие = "Barcode" Тогда
                // Здесь Данные содержат отсканированный штрихкод
                Сообщить("Отсканирован штрихкод: " + Данные);
                // Добавьте свою логику обработки штрихкода
            ИначеЕсли Событие = "Keyboard" Тогда
                // Здесь Данные содержат код нажатой аппаратной клавиши
                Сообщить("Нажата клавиша с кодом: " + Данные);
                // Добавьте свою логику обработки нажатий клавиш
            КонецЕсли;
        КонецЕсли;
    
    КонецПроцедуры
    

    Важно: Проанализируйте, какие именно значения Событие и Данные приходят от вашей конкретной внешней компоненты. Для этого используйте отладчик 1С.

Тестирование и отладка

После всех настроек нам необходимо убедиться, что все работает корректно. Этот этап критически важен для выявления и устранения возможных проблем.

  1. Использование тестовых приложений Android: Существуют специальные утилиты для Android (например, упомянутое в теме форума тестовое приложение от AWMS), которые помогают отладить работу с событиями. Они показывают, какие коды клавиш генерируются при нажатии и какие данные сканирования отправляются с каким идентификатором события (Intent Action). Поиграйтесь с таким приложением, чтобы убедиться, что ТСД правильно настроен и генерирует ожидаемые Broadcast Intents.

  2. Отладка в 1С: Используйте стандартный отладчик 1С для проверки, как внешняя компонента перехватывает события и какие именно данные передает в процедуру ОбработкаВнешнегоСобытия. Установите точки останова и проследите за значениями параметров Источник, Событие и Данные.

  3. Устранение "кривых настроек": Как было упомянуто в теме, при некорректных настройках ТСД или внешней компоненты можно получить несколько событий на одно действие (например, одновременно событие сканера и событие клавиатуры при сканировании). Внимательно сверяйте "Intent Action" и "Extra" на ТСД с параметрами, которые вы передаете внешней компоненте в 1С. Убедитесь, что нет дублирующих или конфликтующих настроек.

Заключение

Мы с вами подробно разобрали процесс подключения Android ТСД к мобильному приложению 1С. Как мы выяснили, успешная интеграция требует внимания к деталям и понимания механизмов взаимодействия:

Следуя этим шагам и используя инструменты отладки, вы сможете добиться стабильной и эффективной работы вашего ТСД с мобильным приложением 1С. Удачи!

← К списку