При автоматизации складского учета и розничной торговли с использованием мобильного клиента 1С на операционной системе Android разработчики часто сталкиваются со следующей проблемой. При сканировании штрихкода с помощью терминала сбора данных (ТСД) устройство по умолчанию эмулирует нажатие клавиш клавиатуры (режим Keystroke emulation). Для того чтобы штрихкод попал в программу, фокус ввода (курсор) должен находиться в текстовом поле формы 1С. Однако, как только текстовое поле становится активным, операционная система Android автоматически выдвигает экранную (виртуальную) клавиатуру на половину экрана. Это перекрывает интерфейс приложения, замедляет работу оператора и создает существенный дискомфорт.
В этой статье мы подробно разберем, как решить проблему всплывающей экранной клавиатуры, сохранив при этом стабильное сканирование штрихкодов. Мы проанализируем различные подходы — от самых простых системных «костылей» до профессиональной настройки обмена данными через Android Intent и библиотеку подключаемого оборудования (БПО) 1С.
Прежде чем перейти к решениям, выясним причину такого поведения системы. Большинство Android-ТСД «из коробки» настроены так, чтобы передавать считанные данные штрихкода самым простым путем — имитируя быстрый последовательный ввод символов с клавиатуры. Для операционной системы Android и для мобильного клиента 1С этот процесс выглядит так, будто пользователь вручную с огромной скоростью набирает цифры штрихкода на физической клавиатуре. Поскольку фокус установлен на текстовое поле ввода, Android считает своим долгом помочь пользователю и открывает виртуальную экранную клавиатуру (IME) для ввода данных. Наша задача — заставить операционную систему понять, что выводить виртуальные клавиши на экран нет необходимости.
---
Самым надежным, быстрым и технологически правильным способом работы со сканером на ТСД является отказ от клавиатурной эмуляции в пользу механизма Android Intent. В этом режиме сканер ТСД не «печатает» штрихкод в активное поле, а отправляет широковещательное сообщение (Broadcast Intent) внутри операционной системы. Мобильный клиент 1С перехватывает это сообщение и генерирует внешнее событие. При необходимости можно использовать готовые примеры мобильных конфигураций для настройки встроенных Android-сканеров через Intent.
Преимущества этого метода:
Рассмотрим по шагам, как настроить этот режим на примере популярного ТСД Zebra MC3300 и платформы 1С:
На устройствах Zebra управление встроенным сканером осуществляется через предустановленное приложение DataWedge. Нам необходимо настроить профиль сканера для работы с мобильным клиентом 1С:
Profile0 или создайте отдельный профиль для приложения 1С).Enabled).Enabled).Intent delivery в значение Broadcast intent.Intent action. Вы можете использовать любое уникальное имя, например, com.1c.mobile.SCAN. Запомните это имя, оно понадобится нам при настройке 1С.Intent category оставьте по умолчанию или укажите категорию вашего приложения.Теперь нам нужно научить 1С принимать эти широковещательные сообщения. В современных версиях платформы 1С v8.3 мобильный клиент имеет встроенную поддержку работы с Intent-событиями через библиотеку подключаемого оборудования (БПО). При возникновении проблем с приемом событий на Android 13 и выше пригодится решение для устранения бага с получением данных от сканеров Zebra и Meferi.
Широковещательный Intent.Action (Действие) то же самое имя, которое вы указали в DataWedge — com.1c.mobile.SCAN.com.symbol.datawedge.data_string).После этого напишем код для обработки внешнего события в модуле формы 1С:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Подключаем обработчик сканера штрихкодов
ПодключитьОбработчикОповещения("ОбработкаСканирования");
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаСканирования(ДанныеСканирования, Источник, Результат) Экспорт
Если Результат Тогда
Штрихкод = ДанныеСканирования.Значение;
// Вызываем серверную или клиентскую процедуру обработки штрихкода
ОбработатьПолученныйШтрихкод(Штрихкод);
КонецЕсли;
КонецПроцедуры
Использование этого подхода полностью исключает появление экранной клавиатуры и делает работу с ТСД максимально быстрой и профессиональной.
---
Многие промышленные ТСД, такие как Zebra MC3300, Caribe PL-40L и другие, оснащены полноценной аппаратной (физической) клавиатурой. В операционной системе Android предусмотрен штатный механизм отключения экранной клавиатуры при обнаружении подключенной физической клавиатуры.
Давайте проанализируем, как активировать эту настройку:
После выключения этой опции Android будет понимать, что у устройства есть аппаратные клавиши для ввода букв и цифр, поэтому выводить на экран виртуальные кнопки больше не нужно. При позиционировании курсора в текстовом поле в 1С экранная клавиатура появляться не будет, но физический ввод (и, соответственно, сканирование в режиме клавиатурной эмуляции) продолжит функционировать в штатном режиме.
---
Если специфика вашего ТСД не позволяет настроить отправку через Intent (например, используется старая модель сканера или сильно урезанная прошивка Android), а системная настройка физической клавиатуры отсутствует, можно прибегнуть к программному обходу проблемы. Для этого используются так называемые «пустые клавиатуры» — специальные Android-приложения, которые регистрируются в системе как метод ввода (IME), но физически не отображают никаких кнопок на экране.
Наиболее популярными и проверенными решениями являются приложения "Null Input Method" и "Null Keyboard".
Пошаговый алгоритм настройки:
Null Input Method.Null Input Method.Экранная клавиатура мгновенно исчезнет и больше не будет появляться при фокусе на полях ввода 1С. Сканирование штрихкода при этом продолжит корректно отрабатывать. При использовании приложения Null Input Method вы также сохраняете возможность быстро переключаться обратно на стандартную клавиатуру (например, Gboard) через панель уведомлений Android, если вам экстренно потребуется ввести текстовые данные вручную.
---
На многих современных ТСД Zebra предустановлено фирменное ПО Enterprise Keyboard. Это продвинутая экранная клавиатура, спроектированная специально для корпоративного использования.
В настройках Enterprise Keyboard присутствует гибкая конфигурация правил отображения клавиатуры. Мы можем настроить ее так, чтобы клавиатура автоматически скрывалась при сканировании штрихкодов или вообще была заблокирована для конкретного приложения (например, для мобильного клиента 1С). Ознакомьтесь с руководством к вашему ТСД Zebra, чтобы настроить профиль Enterprise Keyboard под бизнес-требования вашего склада.
---
Если вам все же приходится использовать эмуляцию клавиатуры и стандартный ввод, можно попробовать минимизировать время нахождения клавиатуры на экране программными методами 1С. Рассмотрим логику работы с фокусом формы.
Для этого мы можем использовать свойство элемента формы ТолькоЧтение или динамически управлять видимостью и фокусом элементов. Посмотрим на пример кода, который после считывания штрихкода сразу переводит фокус на кнопку формы, у которой нет свойства текстового ввода, что заставляет Android свернуть экранную клавиатуру:
&НаКлиенте
Процедура ПолеВводаШтрихкодаПриИзменении(Элемент)
// Штрихкод успешно считан в поле ввода
Штрихкод = Объект.ПолеВводаШтрихкода;
// Выполняем обработку данных
ОбработатьШтрихкод(Штрихкод);
// Очищаем поле ввода для следующего сканирования
Объект.ПолеВводаШтрихкода = "";
// Сдвигаем фокус на кнопку формы, чтобы убрать клавиатуру с экрана
ЭтаФорма.ТекущийЭлемент = Элементы.ДекорацияСтатусСканирования;
КонецПроцедуры
Этот способ является компромиссным и требует ручной доработки каждой формы, где происходит сканирование, однако в сочетании с другими методами он позволяет добиться приемлемого удобства работы пользователей.
Мы подробно разобрали все возможные варианты отключения экранной клавиатуры при сканировании штрихкодов в мобильном клиенте 1С под Android. Выбор конкретного метода зависит от технических характеристик вашего ТСД: