Как настроить ввод с механической клавиатуры ТСД Atol Smart Lite в мобильном приложении 1С?

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

При разработке мобильных приложений для терминалов сбора данных (ТСД) программисты часто сталкиваются с ситуацией, когда стандартные поля ввода игнорируют нажатия физических кнопок устройства. В то же время виртуальная клавиатура работает исправно. Особенно остро эта проблема проявляется на популярных моделях, таких как Atol Smart Lite. В этой статье мы подробно разберем, почему это происходит и как обеспечить стабильную работу аппаратных клавиш в среде 1С.

Анализ версии мобильной платформы

Первым делом проанализируем технические требования самой платформы 1С. Исторически мобильная платформа имела определенные ограничения в работе с аппаратными HID-устройствами (к которым относится физическая клавиатура ТСД). Рассмотрим важный нюанс: полноценная и стабильная поддержка аппаратной клавиатуры была официально заявлена и реализована в версиях, начиная с 8.3.17. Однако, как показывает практика реальной разработки, наиболее стабильные результаты без «пропадания» символов достигаются на версии 8.3.18 и выше.

Если вы столкнулись с тем, что кнопки нажимаются, но цифры не появляются в поле, первым делом выполним проверку версии сборщика мобильного приложения. Переход на актуальную версию платформы зачастую является «магической таблеткой», которая исправляет внутренние механизмы обработки событий нажатия клавиш (KeyEvents) в Android-контейнере 1С. В качестве готового решения можно применить инструмент для обработки и передачи нажатия аппаратных клавиш ТСД в мобильную платформу 1С.

Настройка операционной системы Android на ТСД

Если обновление платформы не помогло или помогло частично, проанализируем настройки самой операционной системы терминала. В устройствах Atol Smart Lite за взаимодействие аппаратных кнопок и сканера с приложениями отвечает специальный системный сервис. Обычно он находится в меню под названием «Scanner» или «ScanService».

Выясним причину возможного конфликта. В настройках этого сервиса существует параметр «Output Mode» (Режим вывода данных). Рассмотрим два основных режима:

  1. Intent Output: Данные передаются через широковещательные сообщения Android. В этом режиме стандартное текстовое поле 1С не «увидит» ввод, так как система ожидает программной обработки события.
  2. Keyboard Emulation (или Keyboard Wedge): В этом режиме сервис перехватывает данные с клавиатуры или сканера и «эмулирует» их ввод так, будто они были набраны на обычной клавиатуре. Именно этот режим должен быть включен для того, чтобы цифры попадали в активный фокус ввода 1С.

Помимо режима эмуляции, обратим внимание на параметр «Inter-character delay» (задержка между символами). При работе с мобильной платформой 1С иногда наблюдается эффект, когда символы «проглатываются» из-за слишком высокой скорости передачи данных из буфера клавиатуры в поле ввода. Рекомендуем установить небольшую задержку (около 10-20 мс) в настройках ТСД для стабилизации потока данных.

Программная обработка событий ввода

Разберем ситуацию, когда нам необходимо не просто получать цифры в поле, а обрабатывать нажатия специфических кнопок (например, функциональных клавиш Fn или кнопок сканирования). Для этого в 1С предусмотрен механизм внешних событий. Проанализируем, как можно перехватить нажатие аппаратной кнопки программно. Для этой задачи можно использовать программу для перехвата кодов нажатых клавиш и событий сканирования на ТСД под Android.

Для этого в модуле формы используется процедура ВнешнееСобытие. Посмотрим на пример логики, которую можно внедрить для обработки аппаратных кнопок:


&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    
    // Источник обычно указывает на драйвер или системный идентификатор
    // Событие может содержать код нажатой клавиши
    
    Если Событие = "KeyDown" Тогда
        КодКлавиши = Число(Данные);
        
        // Например, код 139 часто соответствует кнопке сканирования на Atol
        Если КодКлавиши = 139 Тогда
            // Выполняем специфическое действие
            ОбработатьНажатиеСканера();
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Если стандартный ввод все равно блокируется, мы можем принудительно устанавливать значение в текущий элемент формы. Для этого проанализируем текущий фокус:


ЭлементФокуса = ЭтаФорма.ТекущийЭлемент;
Если ТипЗнч(ЭлементФокуса) = Тип("ПолеФормы") Тогда
    // Программная вставка значения, полученного от клавиатуры
    ЭлементФокуса.ТекстРедактирования = ЭлементФокуса.ТекстРедактирования + СимволВвода;
КонецЕсли;

Специфика полей ввода в конфигураторе 1С

Часто проблема кроется в настройках самого элемента формы в конфигураторе. Проанализируем свойства поля ввода, которые могут блокировать аппаратный ввод:

Режимы раскладки (Fn и Alpha)

На терминалах Atol Smart Lite физические кнопки имеют двойное или тройное назначение, переключаемое цветными клавишами (синяя и оранжевая). Проанализируем ситуацию: если в верхней панели уведомлений Android (StatusBar) горит индикатор «A» или «Fn», клавиатура посылает буквенные коды или коды функциональных клавиш вместо цифр. Выясним у пользователя, не переключена ли раскладка случайно. В мобильном приложении 1С рекомендуется принудительно программно устанавливать фокус в нужные поля и проверять текущий режим ввода устройства.

Исправление проблемы с клавишей Enter

После обновления платформы до версии 8.3.18 вы можете столкнуться с другой проблемой: при нажатии на физическую клавишу подтверждения (Enter или центральная кнопка) форма может закрываться или фокус может перескакивать непредсказуемо. Рассмотрим, как это исправить. В свойствах формы 1С проверьте параметр «Кнопка по умолчанию». Если там указана кнопка с действием «Закрыть» или «ОК», физический Enter будет активировать именно её. Убедитесь, что логика перехода по полям настроена через порядок обхода или обрабатывается в событии ПриИзменении.

Подведем итог: для решения проблемы ввода с клавиатуры Atol Smart Lite мы должны действовать комплексно: обновить мобильную платформу до версии 8.3.18, переключить системный сервис сканирования в режим Keyboard Emulation и убедиться, что типы данных в конфигурации 1С не конфликтуют с входящими символами.

← На главную