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

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

Интеграция мобильных устройств с торговым оборудованием — одна из наиболее востребованных задач при автоматизации складской логистики, розничной торговли и проведения инвентаризаций. Использование компактных Bluetooth-сканеров, особенно в форм-факторе кольца на палец, позволяет существенно повысить производительность работы персонала, оставляя руки сотрудника свободными для работы с товаром. В этой статье мы подробно рассмотрим, как реализовать подключение беспроводного Bluetooth-сканера к мобильному приложению или мобильному клиенту на платформе 1С:Предприятие 8, разберем архитектуру взаимодействия и напишем готовый код для обработки считанных штрихкодов.

Архитектурные основы работы со сканером на мобильной платформе 1С

Для реализации полноценного взаимодействия мобильного устройства со сканером штрихкодов нам не требуется писать низкоуровневые драйверы с нуля. Компания 1С предоставляет специализированный инструмент — «1С:Библиотека подключаемого оборудования для мобильных приложений» (МБПО). Именно на ее основе строятся все типовые мобильные решения от 1С.

В основе работы с оборудованием на мобильной платформе Android лежат так называемые внешние компоненты, созданные по технологии Native API. Эти компоненты компилируются под целевые операционные системы (в данном случае — под архитектуру процессоров Android ARM/x86) и поставляются внутри конфигурации 1С в виде двоичных данных, упакованных в zip-архивы и помещенных в ОбщиеМакеты. Примером такого макета является Драйвер1СУстройствоВводаNative или специализированный Драйвер1ССканерШтрихкода.

Когда мобильное приложение запускается, платформа с помощью метода ПодключитьВнешнююКомпоненту извлекает бинарный драйвер из общего макета, устанавливает его в операционную систему мобильного устройства и инициализирует объект драйвера. После этого драйвер начинает слушать порт подключения и транслировать полученные данные в платформу 1С в виде внешнего события.

Выбор режима работы сканера: HID против SPP

Перед тем как перейти к настройке программной части, нам необходимо четко разграничить два принципиально разных режима работы Bluetooth-сканера. Неправильный выбор режима — наиболее частая причина сбоев при интеграции. Рассмотрим их подробнее.

1. Режим HID (Human Interface Device / Эмуляция клавиатуры)

В этом режиме мобильный телефон воспринимает подключенный по Bluetooth сканер как обычную беспроводную клавиатуру. При сканировании штрихкода устройство просто эмулирует быстрое нажатие клавиш, «печатая» символы штрихкода в активное текстовое поле на экране.

2. Режим SPP (Serial Port Profile) и BLE (Bluetooth Low Energy)

В этом режиме сканер работает как виртуальный последовательный COM-порт. Данные передаются в фоновом режиме напрямую в приложение 1С через соответствующий сокет, минуя системный буфер ввода клавиатуры Android.

Для профессиональной работы на складе мы настоятельно рекомендуем использовать исключительно режим SPP.

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

Рассмотрим процедуру подключения недорогого беспроводного сканера-кольца к мобильному телефону по шагам:

  1. Настройка сканера: Возьмите инструкцию (руководство пользователя), которая поставлялась со сканером. Найдите в ней управляющий штрихкод для переключения устройства в режим Bluetooth SPP (он может называться «SPP Mode», «Bluetooth SPP Profile» или «SPP Connection»). Наведите сканер на этот штрихкод и считайте его. Сканер подаст звуковой сигнал и перейдет в режим ожидания подключения по последовательному порту.
  2. Сопряжение на уровне Android: Перейдите в системные настройки вашего смартфона, откройте раздел «Bluetooth», включите поиск новых устройств. Найдите в списке ваш сканер (обычно он отображается под именем модели или как «Barcode Scanner SPP») и выполните сопряжение. Если операционная система потребует ввести PIN-код, попробуйте стандартные комбинации: 0000, 1234 или 1111 (точные данные всегда указаны в инструкции к устройству).
  3. Настройка торгового оборудования в 1С: Откройте ваше мобильное приложение (или демонстрационную базу БПО). Перейдите в меню подключения оборудования. Добавьте новое устройство с типом «Сканер штрихкода». В качестве обработчика драйвера выберите универсальный «1С:Сканер штрихкода (Native)» (в кодовой базе он представлен как Драйвер1СУстройствоВводаNative). В параметрах подключения укажите порт подключения «Bluetooth». Нажмите кнопку поиска устройств, выберите из списка ваше сопряженное сканер-кольцо и сохраните настройки.

Программная реализация: Получение данных штрихкода в коде 1С

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

Проанализируем пример кода для управляемой формы мобильного приложения, выполняющей сканирование товаров:


&НаКлиенте
Перем ПоддерживаемыйИсточник;

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    // Задаем имя источника события, которое генерирует наш драйвер сканера
    ПоддерживаемыйИсточник = "BarcodeScanner";
    
    // Попытаемся подключить внешнюю компоненту из общего макета конфигурации
    ИмяМакета = "ОбщийМакет.Драйвер1СУстройствоВводаNative";
    
    Попытка
        РезультатПодключения = ПодключитьВнешнююКомпоненту(ИмяМакета, "СканерШК", ТипВнешнейКомпоненты.Native);
        Если РезультатПодключения Тогда
            // Инициализируем объект драйвера для работы с портами
            ОбъектДрайвера = Новый("АддитивнаяКомпонента.СканерШК");
            Сообщить("Драйвер сканера штрихкодов успешно подключен!");
        Иначе
            Сообщить("Не удалось загрузить внешнюю компоненту сканера.");
        КонецЕсли;
    Исключение
        ЗаписьЖурналаРегистрации("ПодключениеСканера", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        Сообщить("Критическая ошибка при подключении драйвера!");
    КонецПопытки;
    
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    
    // Проверяем, что событие пришло именно от нашего сканера штрихкодов
    Если Источник = ПоддерживаемыйИсточник Или ИмяСобытия = "ВнешнееСобытие" Тогда
        
        // В зависимости от драйвера, штрихкод может приходить напрямую в параметре
        // или требовать разбора структуры данных. Рассмотрим стандартный вариант БПО.
        Штрихкод = "";
        
        Если ТипЗнч(Параметр) = Тип("Структура") Тогда
            Параметр.Свойство("Штрихкод", Штрихкод);
        ИначеЕсли ТипЗнч(Параметр) = Тип("Массив") И Параметр.Количество() > 0 Тогда
            Штрихкод = Строка(Параметр[0]);
        Иначе
            Штрихкод = Строка(Параметр);
        EndIf;
        
        Штрихкод = СокрЛП(Штрихкод);
        
        Если НЕ ПустаяСтрока(Штрихкод) Тогда
            // Вызываем процедуру обработки полученного значения
            ОбработатьПолученныйШтрихкод(Штрихкод);
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция НайтиТоварНаСервере(Знач Штрихкод)
    
    Результат = Новый Структура("Найден, Номенклатура, Характеристика, Цена", Ложь, Неопределено, Неопределено, 0);
    
    // Выполняем запрос к регистру сведений "ШтрихкодыНоменклатуры"
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |   Штрихкоды.Номенклатура КАК Номенклатура,
        |   Штрихкоды.Характеристика КАК Характеристика
        |ИЗ
        |   РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
        |ГДЕ
        |   Штрихкоды.Штрихкод = &Штрихкод";
        
    Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        Результат.Найден = Истина;
        Результат.Номенклатура = Выборка.Номенклатура;
        Результат.Характеристика = Выборка.Характеристика;
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции

Продвинутый сценарий: Работа через широковещательные сообщения (Broadcast Intents)

Если вы используете не просто бытовой смартфон, а специализированный защищенный сканфон или промышленный ТСД со встроенным лазерным считывателем (например, устройства от Zebra, Honeywell, Urovo), наиболее производительным и отказоустойчивым решением будет использование механизма Broadcast Intents (широковещательных сообщений Android).

Суть метода заключается в следующем:

Для реализации этого сценария в настройках интеграции 1С выбирается режим работы драйвера «Широковещательное сообщение» (Broadcast), и указываются параметры перехвата, настроенные в утилите управления сканером на ТСД (например, Action: android.intent.ACTION_DECODE_DATA, Extra: barcode_string).

Предотвращение критических ошибок при публикации базы (MIME-типы веб-сервера)

Разработчики часто сталкиваются с непонятной ошибкой: при отладке на компьютере в тонком клиенте все работает штатно, но при попытке запустить мобильный клиент на Android-смартфоне метод ПодключитьВнешнююКомпоненту возвращает Ложь, и сканер отказывается инициализироваться.

Выясним причину этой проблемы. При работе через мобильный клиент или мобильное приложение, которое синхронизируется с сервером базы данных, платформа пытается скачать бинарные файлы драйверов (архивы и скомпилированные библиотеки .so для Android) с веб-сервера (IIS или Apache), на котором опубликована информационная база 1С. По умолчанию популярные веб-серверы из соображений безопасности блокируют скачивание файлов с неизвестными им расширениями.

Чтобы решить эту проблему, необходимо вручную прописать разрешенные MIME-типы в настройках вашего веб-сервера:

Для Microsoft IIS:

  1. Откройте Диспетчер служб IIS.
  2. Выберите ваш опубликованный сайт (или виртуальный каталог базы 1С).
  3. В центральной панели дважды щелкните по иконке «Типы MIME» (MIME Types).
  4. В панели «Действия» справа нажмите кнопку «Добавить...» (Add...).
  5. Заполните поля:
    • Расширение имени файла: .so
    • Тип MIME: application/octet-stream
  6. Аналогичным образом добавьте еще одно расширение для обновления мобильных приложений:
    • Расширение имени файла: .apk
    • Тип MIME: application/octet-stream
  7. Выполните перезапуск веб-сервера IIS.

Для Apache (httpd.conf):

В конфигурационный файл httpd.conf веб-сервера Apache необходимо добавить следующие строки, разрешающие отдачу бинарных файлов мобильным клиентам:


AddType application/octet-stream .so
AddType application/octet-stream .apk

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

Практические рекомендации по выбору оборудования и организации рабочих мест

Проанализируем накопленный опыт использования связки «смартфон + Bluetooth-сканер-кольцо» в реальных складских условиях по сравнению с классическими терминалами сбора данных (ТСД):

Таким образом, мы рассмотрели полный цикл интеграции беспроводного сканирующего оборудования с мобильной 1С — от физических настроек сопряжения Bluetooth SPP до написания кода обработки внешних событий и конфигурирования веб-сервера. Следуя этим инструкциям, вы сможете развернуть стабильную и быструю систему мобильного учета на вашем предприятии.

← На главную