Почему пропадает текст при сканировании штрихкода на ТСД в мобильном приложении 1С и как это исправить?

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

При разработке мобильных приложений на платформе 1С разработчики часто сталкиваются с неочевидным поведением терминалов сбора данных (ТСД), таких как Symbol MC3200 или устройства Zebra / Honeywell. Типичная ситуация: пользователь сканирует штрихкод в поле ввода с типом Строка, значение на долю секунды появляется на экране и тут же исчезает, оставляя поле пустым. Если же вводить символы вручную с клавиатуры устройства, данные сохраняются корректно.

Проанализируем причины возникновения этой проблемы и рассмотрим практические способы её решения.

Выясним причину сбоя ввода

По умолчанию большинство ТСД работают в режиме эмуляции клавиатуры (режим «в разрыв клавиатуры» или Keystroke Output). Когда сканер считывает штрихкод, он посылает в активное текстовое поле поток символов с высокой скоростью и завершает передачу символом перевода строки — Enter (CR/LF).

В этот момент происходит следующее:

  1. Мобильная платформа 1С получает символы штрихкода, но не успевает полностью обновить внутренний буфер и зафиксировать редактирование элемента формы.
  2. Вслед за символами моментально поступает команда нажатия клавиши Enter.
  3. Платформа расценивает такой мгновенный переход как отмену или незавершенный ввод строки, сбрасывая содержимое поля до исходного состояния (пустой строки).

Если установить точку останова в обработчиках событий ОкончаниеВводаТекста или АвтоПодбор, можно заметить, что на экране ТСД цифры еще видны, но параметр Текст в коде уже равен пустой строке "".

Способ 1. Настройка суффиксов и задержек в службе сканирования ТСД

Самый простой способ устранить гонку событий — скорректировать параметры службы сканирования на самом устройстве (например, утилиты DataWedge на ТСД Motorola / Symbol / Zebra):

  1. Настройка межсимвольной задержки: В профиле сканера в разделе вывода клавиатуры (Keystroke output) включите параметры Inter-character delay (задержка между символами) или Delay before Send. Задержка в 10–30 миллисекунд позволит интерфейсному потоку мобильной платформы 1С корректно обработать поступающий поток данных.
  2. Замена суффикса Enter на Tab: Измените завершающий символ в настройках суффикса (Basic data formatting -> Send ENTER key / Suffix) с Enter (ASCII 13) на Tab (ASCII 9). Символ табуляции завершает ввод строки и переключает фокус на следующий элемент формы без сброса текста.
  3. Отключение суффикса: Полностью отключите отправку Enter/CR/LF в настройках сканера. В этом случае штрихкод будет появляться в поле ввода стабильно, но для фиксации потребуется нажать клавишу перехода на клавиатуре ТСД или программно обработать событие изменения.

Способ 2. Обработка ввода через событие ПриИзменении

Если требуется сохранить автопереход после сканирования, можно использовать событие ПриИзменении поля ввода. В этом случае мы считываем значение элемента, выполняем необходимую бизнес-логику (например, поиск товара) и очищаем поле для приема следующего штрихкода.

Рассмотрим пример кода формы:


Процедура ШтрихКодПриИзменении(Элемент)
	
	СтрокаШтрихкода = СокрЛП(Элемент.Значение);
	
	Если Не ЗначениеЗаполнено(СтрокаШтрихкода) Тогда
		Возврат;
	КонецЕсли;
	
	// Выполняем поиск или обработку полученного штрихкода
	ОбработатьСканирование(СтрокаШтрихкода);
	
	// Очищаем поле и возвращаем на него фокус для следующего сканирования
	Элемент.Значение = "";
	ЭтаФорма.ТекущийЭлемент = Элемент;
	
КонецПроцедуры

Способ 3. Отключение автоподбора у поля ввода

Если у реквизита формы включено свойство АвтоПодбор, платформа пытается на лету искать совпадения в списках при каждом поступившем символе. При высокоскоростном вводе со сканера механизм автоподбора вступает в конфликт с окончанием ввода текста.

В свойствах элемента формы установку Автоподбор следует перевести в значение Выключить (или задать программно Элемент.АвтоПодбор = Ложь).

Способ 4. Переход на работу через Broadcast Intent (Внешние события)

Работа со сканером штрихкодов в режиме эмуляции клавиатуры считается наименее надежной для мобильной разработки. Рекомендуемый подход для мобильной платформы 1С — работа с оборудованием через механику внешних событий.

  1. В утилите DataWedge на ТСД отключается вывод нажатий клавиш (Keystroke output) и включается вывод через Intent Output (Broadcast Intent).
  2. В мобильное приложение 1С подключается внешняя компонента для работы с ТСД (например, из состава БПО — Библиотеки подключаемого оборудования).
  3. Данные со сканера поступают напрямую в модуль формы через процедуру ОбработкаВнешнегоСобытия(Источник, Событие, Данные).

При использовании ОбработкаВнешнегоСобытия удерживать фокус в текстовом поле ввода не требуется — считывание штрихкода происходит корректно в любом состоянии формы.

← На главную