Разработка мобильных решений на платформе 1С для терминалов сбора данных (ТСД) — это особая область автоматизации складской и производственной логистики. На первый взгляд может показаться, что современный ТСД — это обычный смартфон на операционной системе Android, помещенный в защищенный корпус и снабженный физической клавиатурой. Однако при детальном рассмотрении процесса разработки мы сталкиваемся со специфическими техническими нюансами. В этой статье мы подробно проанализируем ключевые отличия разработки под ТСД, разберем архитектурные подходы, особенности работы со сканирующим модулем, обработку аппаратных клавиш и реальные эксплуатационные проблемы на складах.
Перед тем как приступить к написанию первой строчки кода, нам необходимо определиться с базовой архитектурой решения. В экосистеме 1С для мобильных устройств существует два принципиально разных подхода:
HTTP-сервисы или Web-сервисы). Этот вариант незаменим в условиях полного отсутствия или сильной нестабильности беспроводной связи на складе.Проанализируем ситуацию: если ваш склад имеет стабильную беспроводную сеть, выбор в пользу Мобильного клиента сбережет сотни часов разработки. Если же работа предполагается в удаленных точках, экранированных ангарах или на выезде — придется проектировать полноценное Мобильное приложение с локальным кэшированием данных.
Главное физическое отличие ТСД от обычного смартфона — наличие аппаратного лазерного или светодиодного сканера штрихкодов. В отличие от сканирования камерой (которое медленное и неудобное в промышленных масштабах), встроенный модуль ТСД работает мгновенно. Передать считанные данные в 1С можно двумя путями:
Выясним причину, почему настоятельно рекомендуется отказаться от режима эмуляции клавиатуры в пользу Broadcast Intent. Во-первых, при эмуляции клавиатуры фокус ввода обязательно должен находиться в конкретном текстовом поле. Если кладовщик случайно нажмет мимо поля или на экране появится модальное окно, считанный штрихкод запишется не туда или сотрет важные данные. Во-вторых, скорость работы при посимвольной эмуляции крайне низкая, а при включенной русской раскладке символы штрихкода могут необратимо искажаться. В-третьих, работа через системные события позволяет обрабатывать штрихкод асинхронно в процедуре ОбработкаВнешнегоСобытия, независимо от того, какая форма сейчас открыта и где находится курсор.
Рассмотрим подробнее, как реализовать перехват широковещательных сообщений Android (Broadcast Intents) в коде 1С. Для этого нам понадобится внешняя компонента, умеющая подписываться на системные события Android. Ниже приведен пример реализации с использованием универсальной внешней компоненты для работы с широковещательными сообщениями:
ИмяСобытия = "scan.rcv.message";
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.Component", "Broadcasts", ТипВнешнейКомпоненты.Native) Тогда
Компонента = Новый("AddIn.Broadcasts.UniversalBroadcast");
Компонента.УстановитьПараметр("FilterName", ИмяСобытия);
ШаблонДанных = Компонента.ПолучитьШаблонОписанияДанных();
barcode = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонДанных, "data", XMLСтрока(Ложь), XMLСтрока(0));
Компонента.УстановитьПараметр("CaptureData", barcode);
КонецЕсли;
Если Не Компонента.Подключить(НомерУстройства) Тогда
ЗаписатьЛогСобытий("Не удалось подключить компоненту сканера!");
КонецЕсли;
Разберем этот код по шагам. Переменная ИмяСобытия содержит строку идентификатора интента (Intent action), которую мы прописываем в системных настройках самого ТСД (в утилите сканирования, которая предустановлена производителем устройства, например, DataWedge у Zebra или аналоги у Honeywell, Urovo, Atol). Мы переименовываем стандартное системное действие в "scan.rcv.message". Параметр "data" указывает, в каком именно поле структуры сообщения (Intent string extra) ТСД передает сам текст штрихкода. После успешного подключения компонента начинает транслировать все отсканированные данные напрямую в глобальный модуль 1С, вызывая предопределенную процедуру:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Источник = "Broadcasts" Тогда
// Здесь мы получаем наш штрихкод и запускаем логику поиска товара
ШтрихкодТовара = СокрЛП(Данные);
ОбработатьСканирование(ШтрихкодТовара);
КонецЕсли;
КонецПроцедуры
Стоит отметить, что в современных реалиях фирма «1С» предлагает отличную альтернативу самописным или сторонним внешним компонентам — Библиотеку подключаемого оборудования для мобильных приложений (БПО для МП). В ее состав входит штатный native-драйвер «1С:Сканер штрихкода», который настраивается аналогичным образом через параметры широковещательного сообщения в интерфейсе 1С, избавляя вас от необходимости вручную регистрировать DLL и писать низкоуровневый код инициализации.
Многие модели ТСД оснащены физической клавиатурой (цифровой или буквенно-цифровой). Разработчики часто сталкиваются с тем, что мобильная платформа 1С «из коробки» не видит нажатия специфических аппаратных клавиш (например, функциональных кнопок F1-F12, боковых желтых кнопок активации сканера или клавиши Backspace). Посмотрим на варианты решения этой проблемы:
Enter, Tab или стандартных цифр).onKeyEvent) и транслирует его в 1С через те же широковещательные интенты (Broadcast), которые мы научились обрабатывать в предыдущем разделе.Проектируя решение для ТСД, крайне важно выйти из «офисного» режима тестирования и учесть суровые реалии работы складской инфраструктуры:
Мобильного клиента 1С будет завершаться аварийно. Сеть предприятия должна поддерживать стандарты быстрого роуминга 802.11r, 802.11k и 802.11v, а в коде 1С необходимо предусматривать мягкую обработку сетевых исключений.Подводя итог, можно утверждать: разработка под ТСД существенно отличается от разработки под обычные смартфоны. Главные отличия кроются в необходимости глубокой интеграции с аппаратным сканером через механизмы Android Intents, адаптации интерфейса под суровые условия эксплуатации и борьбе за стабильность связи в условиях складских помещений. Использование штатных механизмов БПО для мобильных приложений и знание системного устройства Android позволит вам создать быстрое, надежное и отказоустойчивое решение.