Как подключить Bluetooth-сканеры и принтеры к мобильному приложению 1С?

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

Разработка под мобильные платформы в экосистеме 1С:Предприятие всегда была сопряжена с определенными вызовами, особенно когда речь заходит о взаимодействии с внешним оборудованием. Подключение сканеров штрихкодов в режиме SPP (Serial Port Profile) и организация прямой печати на Bluetooth-принтеры — это задачи, требующие понимания не только встроенного языка 1С, но и механизмов работы операционной системы Android. Рассмотрим подробно, как преодолеть ограничения мобильной платформы и заставить периферию работать корректно.

Активация функциональности Bluetooth в конфигурации

Часто разработчики сталкиваются с ситуацией, когда код написан правильно, но при попытке обращения к Bluetooth-модулю система выдает ошибку: «Функциональность 'Bluetooth принтеры, WiFi принтеры' отключены в мобильном приложении». Это происходит из-за того, что по умолчанию в целях оптимизации размера приложения многие модули отключены в ядре мобильной платформы.

Разберем по шагам, как включить необходимую поддержку:

  1. Откроем конфигуратор на стационарном компьютере.
  2. В дереве конфигурации выделим корневой элемент (название вашей конфигурации).
  3. Вызовем окно свойств (через правую кнопку мыши или Alt + Enter).
  4. Найдем раздел Используемая функциональность мобильного приложения (или мобильного клиента).
  5. Проанализируем список и установим флажки напротив пунктов Печать и Bluetooth.

Важно помнить, что если ваша конфигурация находится на поддержке, для изменения этих настроек может потребоваться ее снятие с поддержки или включение возможности редактирования. Однако, как показывает практика, даже включение этих опций в конфигураторе иногда не решает проблему, если приложение уже собрано. Выясним причину: при сборке .apk файла через «Сборщик мобильных приложений» необходимо убедиться, что соответствующие разрешения (Permissions) прописаны в манифесте Android. К ним относятся BLUETOOTH, BLUETOOTH_ADMIN, а для новых версий Android — еще и ACCESS_FINE_LOCATION, так как поиск Bluetooth-устройств приравнен к определению местоположения.

Организация работы со сканером штрихкодов в режиме SPP

Стандартный режим HID (клавиатурный) является самым простым, но крайне неудобным для профессиональной работы: он требует наличия фокуса в поле ввода, часто обрезает символы и вызывает экранную клавиатуру в неподходящие моменты. Режим SPP позволяет передавать данные напрямую в приложение в фоновом режиме. Для реализации такого сценария можно использовать компоненту NativeAPI для подключения Bluetooth-сканера в режиме SPP.

Рассмотрим, как реализовать это в мобильной 1С, используя метод ЗапускПриложенияМобильногоУстройства. Поскольку 1С не всегда может напрямую «слушать» последовательный порт Bluetooth, мы воспользуемся схемой с приложением-посредником. Посредником может выступать специализированный драйвер от производителя или универсальная утилита.

Проанализируем механизм взаимодействия:

1. Мобильное приложение 1С вызывает внешнее приложение через Intent.

2. Внешнее приложение считывает данные со сканера и возвращает их в 1С через результат работы или через Broadcast Receiver (внешнее событие).

Пример программного кода для вызова внешнего сканера (если он поддерживает прием команд через Интенты):


ПараметрыЗапуска = Новый Соответствие;
ПараметрыЗапуска.Вставить("action", "com.google.zxing.client.android.SCAN");
ПараметрыЗапуска.Вставить("packageName", "com.google.zxing.client.android");

ОписаниеЗапуска = Новый ОписаниеЗапускаПриложенияМобильногоУстройства;
ОписаниеЗапуска.Действие = "com.google.zxing.client.android.SCAN";

ЗапускПриложенияМобильногоУстройства(ОписаниеЗапуска);

Для профессиональных сканеров (например, Zebra или Honeywell) данные обычно приходят в 1С в виде Внешнего события. Посмотрим на алгоритм обработки:


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Если Событие = "Barcode" Тогда
        Штрихкод = СокрЛП(Данные);
        // Обработка полученного кода
        ОбработатьСканирование(Штрихкод);
    КонецЕсли;
КонецПроцедуры

Печать на Bluetooth-принтер

Прямая печать табличных документов 1С на мобильные принтеры через Bluetooth штатными средствами (методом Напечатать()) часто ограничена. Основная проблема заключается в том, что принтеры требуют специфических команд управления (например, ESC/POS или TSPL). Для решения этой задачи подойдёт инструмент для печати на мобильных принтерах по Bluetooth с поддержкой языков ZPL, TSPL и CPCL.

Рассмотрим наиболее надежный путь — использование приложения-драйвера (например, RawBT или PrintHand) в качестве моста. Мы формируем данные в 1С и передаем их в драйвер, который уже знает, как общаться с конкретным Bluetooth-устройством.

Алгоритм действий следующий:

  1. Сформируем текстовый макет чека или подготовим картинку (бинарные данные).
  2. Используем метод ЗапускПриложенияМобильногоУстройства для передачи этих данных в драйвер печати.

Посмотрим на пример формирования интента для печати текста:


ОписаниеПриложения = Новый ОписаниеЗапускаПриложенияМобильногоУстройства;
ОписаниеПриложения.Действие = "ru.a402d.rawbtprinter.action.PRINT";
ОписаниеПриложения.ДополнительныеДанные.Вставить("text", "Текст для печати" + Символы.ПС);

Попытка
    ЗапускПриложенияМобильногоУстройства(ОписаниеПриложения);
Исключение
    Сообщить("Приложение для печати не установлено");
КонецПопытки;

Этот подход позволяет избежать «костылей» и гарантирует стабильную печать на устройствах разных производителей.

Использование внешних компонентов (Native SDK)

Современные версии мобильной платформы поддерживают технологию Внешних компонентов (ВК). Это самый мощный инструмент, позволяющий программисту на 1С использовать возможности Java (Android) или Swift (iOS) напрямую. Если вам необходимо полностью контролировать Bluetooth-стек (проверять статус, включать/выключать Bluetooth, искать устройства), мы рекомендуем написать или приобрести готовую ВК.

Внешняя компонента работает внутри процесса 1С и может генерировать события. Выясним преимущества этого метода:

Управление системными настройками (Wi-Fi, GPS)

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

Если нам нужно, чтобы пользователь включил Bluetooth или GPS, проанализируем следующую возможность:


ОписаниеЗапуска = Новый ОписаниеЗапускаПриложенияМобильногоУстройства;
ОписаниеЗапуска.Действие = "android.settings.BLUETOOTH_SETTINGS";
ЗапускПриложенияМобильногоУстройства(ОписаниеЗапуска);

Этот код откроет перед пользователем страницу настроек Bluetooth, после чего он сможет вернуться в 1С одной кнопкой «Назад». Аналогично работают интенты для Wi-Fi (android.settings.WIFI_SETTINGS) и геолокации.

Резюмируя: реализация профессиональной работы с Bluetooth в мобильной 1С требует комбинации правильных настроек конфигурации, использования метода ЗапускПриложенияМобильногоУстройства для связи с внешними утилитами и, в идеале, внедрения внешних компонентов для бесшовной интеграции с оборудованием.

← На главную