При разработке мобильных приложений для терминалов сбора данных (ТСД) программисты часто сталкиваются с ситуацией, когда стандартные поля ввода игнорируют нажатия физических кнопок устройства. В то же время виртуальная клавиатура работает исправно. Особенно остро эта проблема проявляется на популярных моделях, таких как Atol Smart Lite. В этой статье мы подробно разберем, почему это происходит и как обеспечить стабильную работу аппаратных клавиш в среде 1С.
Первым делом проанализируем технические требования самой платформы 1С. Исторически мобильная платформа имела определенные ограничения в работе с аппаратными HID-устройствами (к которым относится физическая клавиатура ТСД). Рассмотрим важный нюанс: полноценная и стабильная поддержка аппаратной клавиатуры была официально заявлена и реализована в версиях, начиная с 8.3.17. Однако, как показывает практика реальной разработки, наиболее стабильные результаты без «пропадания» символов достигаются на версии 8.3.18 и выше.
Если вы столкнулись с тем, что кнопки нажимаются, но цифры не появляются в поле, первым делом выполним проверку версии сборщика мобильного приложения. Переход на актуальную версию платформы зачастую является «магической таблеткой», которая исправляет внутренние механизмы обработки событий нажатия клавиш (KeyEvents) в Android-контейнере 1С. В качестве готового решения можно применить инструмент для обработки и передачи нажатия аппаратных клавиш ТСД в мобильную платформу 1С.
Если обновление платформы не помогло или помогло частично, проанализируем настройки самой операционной системы терминала. В устройствах Atol Smart Lite за взаимодействие аппаратных кнопок и сканера с приложениями отвечает специальный системный сервис. Обычно он находится в меню под названием «Scanner» или «ScanService».
Выясним причину возможного конфликта. В настройках этого сервиса существует параметр «Output Mode» (Режим вывода данных). Рассмотрим два основных режима:
Помимо режима эмуляции, обратим внимание на параметр «Inter-character delay» (задержка между символами). При работе с мобильной платформой 1С иногда наблюдается эффект, когда символы «проглатываются» из-за слишком высокой скорости передачи данных из буфера клавиатуры в поле ввода. Рекомендуем установить небольшую задержку (около 10-20 мс) в настройках ТСД для стабилизации потока данных.
Разберем ситуацию, когда нам необходимо не просто получать цифры в поле, а обрабатывать нажатия специфических кнопок (например, функциональных клавиш Fn или кнопок сканирования). Для этого в 1С предусмотрен механизм внешних событий. Проанализируем, как можно перехватить нажатие аппаратной кнопки программно. Для этой задачи можно использовать программу для перехвата кодов нажатых клавиш и событий сканирования на ТСД под Android.
Для этого в модуле формы используется процедура ВнешнееСобытие. Посмотрим на пример логики, которую можно внедрить для обработки аппаратных кнопок:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Источник обычно указывает на драйвер или системный идентификатор
// Событие может содержать код нажатой клавиши
Если Событие = "KeyDown" Тогда
КодКлавиши = Число(Данные);
// Например, код 139 часто соответствует кнопке сканирования на Atol
Если КодКлавиши = 139 Тогда
// Выполняем специфическое действие
ОбработатьНажатиеСканера();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Если стандартный ввод все равно блокируется, мы можем принудительно устанавливать значение в текущий элемент формы. Для этого проанализируем текущий фокус:
ЭлементФокуса = ЭтаФорма.ТекущийЭлемент;
Если ТипЗнч(ЭлементФокуса) = Тип("ПолеФормы") Тогда
// Программная вставка значения, полученного от клавиатуры
ЭлементФокуса.ТекстРедактирования = ЭлементФокуса.ТекстРедактирования + СимволВвода;
КонецЕсли;
Часто проблема кроется в настройках самого элемента формы в конфигураторе. Проанализируем свойства поля ввода, которые могут блокировать аппаратный ввод:
Число, а клавиатура ТСД в данный момент передает символы (например, из-за включенного режима Alpha/Fn), платформа может просто игнорировать такой ввод. Попробуем изменить тип поля на Строка и выполнять преобразование в число программно в событии ПриИзменении.На терминалах Atol Smart Lite физические кнопки имеют двойное или тройное назначение, переключаемое цветными клавишами (синяя и оранжевая). Проанализируем ситуацию: если в верхней панели уведомлений Android (StatusBar) горит индикатор «A» или «Fn», клавиатура посылает буквенные коды или коды функциональных клавиш вместо цифр. Выясним у пользователя, не переключена ли раскладка случайно. В мобильном приложении 1С рекомендуется принудительно программно устанавливать фокус в нужные поля и проверять текущий режим ввода устройства.
После обновления платформы до версии 8.3.18 вы можете столкнуться с другой проблемой: при нажатии на физическую клавишу подтверждения (Enter или центральная кнопка) форма может закрываться или фокус может перескакивать непредсказуемо. Рассмотрим, как это исправить. В свойствах формы 1С проверьте параметр «Кнопка по умолчанию». Если там указана кнопка с действием «Закрыть» или «ОК», физический Enter будет активировать именно её. Убедитесь, что логика перехода по полям настроена через порядок обхода или обрабатывается в событии ПриИзменении.
Подведем итог: для решения проблемы ввода с клавиатуры Atol Smart Lite мы должны действовать комплексно: обновить мобильную платформу до версии 8.3.18, переключить системный сервис сканирования в режим Keyboard Emulation и убедиться, что типы данных в конфигурации 1С не конфликтуют с входящими символами.