Разработка для мобильных платформ в экосистеме 1С имеет ряд специфических особенностей, особенно когда речь идет о взаимодействии с аппаратной частью терминалов сбора данных (ТСД). Часто разработчики сталкиваются с двумя основными проблемами: неработающая отладка (точки остановки игнорируются) и невозможность задействовать встроенный лазерный сканер стандартными методами платформы. В этой статье мы подробно разберем, как настроить окружение для полноценной отладки и как заставить 1С работать с профессиональным сканирующим модулем.
Проблема, когда "всё запускается, но на точки остановки не реагирует", является классической при настройке мобильной отладки. Проанализируем основные причины и пошагово настроим соединение.
Шаг 1: Выбор протокола отладки. Для мобильных устройств крайне рекомендуется использовать протокол HTTP, так как старый протокол TCP часто блокируется сетевыми экранами или нестабильно работает в Wi-Fi сетях. В конфигураторе перейдем в меню Сервис — Параметры — Отладка и установим переключатель в положение "Локальный протокол HTTP".
Шаг 2: Настройка брандмауэра. Выясним, не блокирует ли компьютер входящие соединения. Для работы отладки по HTTP необходимо открыть диапазон портов (обычно 1560–1591) в настройках брандмауэра Windows. ТСД должен "видеть" ваш компьютер в локальной сети.
Шаг 3: Настройка мобильного приложения. В самом мобильном приложении (в меню разработчика на ТСД) необходимо указать адрес сервера отладки. Это IP-адрес вашего компьютера. Важно: устройство и компьютер должны находиться в одной подсети Wi-Fi.
Шаг 4: Особенности инициализации. Рассмотрим ситуацию, когда точки остановки не срабатывают в модуле приложения. Это происходит из-за того, что соединение с отладочным сервером устанавливается не мгновенно. Чтобы "поймать" момент запуска, иногда полезно добавить небольшую задержку или вызвать Предупреждение() в начале процедуры ПриНачалеРаботыСистемы, чтобы дать платформе время инициализировать отладочную сессию.
Разберем типичную ошибку начинающих мобильных разработчиков. Метод СредстваМультимедиа.ПоказатьСканированиеШтрихКодов() предназначен для использования встроенной камеры смартфона. Проанализируем код, который обычно используют для этих целей:
#Если МобильноеПриложениеКлиент Тогда
Если СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда
ОбработчикСканирования = Новый ОписаниеОповещения("ОбработкаСканирования", ЭтаФорма);
ОбработчикЗакрытия = Новый ОписаниеОповещения("ОбработкаЗакрытияИнтерфейса", ЭтаФорма);
СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Наведите камеру на штрихкод", ОбработчикСканирования, ОбработчикЗакрытия, ТипШтрихКода.Линейный);
КонецЕсли;
#КонецЕсли
Этот код отлично работает на обычных телефонах, открывая интерфейс камеры. Однако на профессиональных ТСД (Zebra, Honeywell, CipherLab) установлен лазерный или имидж-модуль. Он работает значительно быстрее и точнее камеры, но платформа 1С "из коробки" через СредстваМультимедиа его не видит. Лазерный сканер обычно работает в одном из двух режимов:
ВнешнееСобытие.Как показывает практика, наиболее надежный способ работы с ТСД — использование драйвера (внешней компоненты) от производителя. Рассмотрим пример подключения для терминалов CipherLab (на примере модели RS50), который можно адаптировать под другие устройства.
Для начала необходимо поместить файл драйвера (обычно это .so файл для Android, упакованный в .zip) в общий макет конфигурации. Выясним, как программно инициализировать работу с этим драйвером:
// Процедура включения сканера
Процедура ПодключитьСканер()
// Загружаем компоненту из макета
Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверMobileDriver", "ScancodeBarcodeScannerCPT", ТипВнешнейКомпоненты.Native);
Если Результат Тогда
Попытка
ВК = Новый ("AddIn.ScancodeBarcodeScannerCPT.ScancodeBarcodeScannerCPT");
Если ВК <> Неопределено Тогда
// Настраиваем режим работы (1 - режим клавиатуры, 0 - программный режим)
ВК.SetDeviceAddress(1);
// Открываем устройство по его ID (обычно передается программно)
ВК.Open(IDУстройства);
Ошибка = "";
КодОшибки = ВК.GetLastError(Ошибка);
Если КодОшибки > 0 Тогда
Сообщить("Ошибка инициализации: " + Ошибка);
Иначе
СостояниеРежимаСканирования = "Вкл";
КонецЕсли;
КонецЕсли;
Исключение
Сообщить("Не удалось создать объект драйвера");
КонецПопытки;
Иначе
Сообщить("Ошибка загрузки внешней компоненты");
КонецЕсли;
КонецПроцедуры
Важно помнить, что при закрытии формы или завершении работы приложения внешнюю компоненту нужно корректно отключить, чтобы освободить ресурсы ТСД для других приложений:
// Процедура отключения
Процедура ОтключитьСканер()
Если СостояниеРежимаСканирования = "Вкл" Тогда
// Повторное обращение к компоненте для вызова метода Close
Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверMobileDriver", "ScancodeBarcodeScannerCPT", ТипВнешнейКомпоненты.Native);
Если Результат Тогда
ВК = Новый ("AddIn.ScancodeBarcodeScannerCPT.ScancodeBarcodeScannerCPT");
Если ВК <> Неопределено Тогда
ВК.Close(IDУстройства);
СостояниеРежимаСканирования = "Выкл";
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Если вы не хотите писать низкоуровневый код под каждую модель ТСД, проанализируем использование 1С:Библиотеки подключаемого оборудования для мобильных устройств. Это стандартный механизм, который уже содержит в себе драйверы для популярных марок (Zebra, Honeywell, RightScan, Атол).
Преимущество БПО в том, что она унифицирует получение данных. Сканирование будет приходить в обработчик ВнешнееСобытие формы. Посмотрим на логику обработки:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Источник - имя драйвера
// Событие - "Barcode" или аналогичное
// Данные - считанный штрихкод
Если Событие = "Barcode" Тогда
Штрихкод = СокрЛП(Данные);
ОбработатьСчитанныйКод(Штрихкод);
КонецЕсли;
КонецПроцедуры
Современная мобильная платформа 1С позволяет работать с широковещательными сообщениями Android (Intents). Многие ТСД позволяют настроить встроенный сканер так, чтобы он не эмулировал нажатие клавиш, а отправлял Broadcast Intent.
В настройках ТСД (например, в приложении DataWedge для Zebra) нужно указать Intent Action (например, com.mycompany.scan). В 1С мы можем подписаться на это событие. Это избавляет от необходимости использовать внешние компоненты (.so файлы), что значительно упрощает сборку приложения, так как не нужно заботиться об архитектуре процессора (ARMv7 или ARMv8).
При использовании внешних компонент или специфических функций ТСД, обратите внимание на следующие моменты:
Подведем итог: для успешной работы с ТСД на мобильной платформе 1С необходимо уйти от стандартного метода СредстваМультимедиа в сторону использования внешних компонент или механизмов Intent, а также правильно настроить HTTP-протокол для отладки кода.