Как настроить ТСД Zebra MC92N0-G для корректной передачи символа Enter после сканирования штрихкода в 1С Мобильную платформу?

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

При работе с терминалами сбора данных (ТСД) Zebra MC92N0-G и мобильной платформой 1С, версий 8.3.11.57 и 8.3.10.84, пользователи часто сталкиваются с проблемой некорректной обработки символа Enter, который ТСД должен автоматически отправлять после каждого сканирования штрихкода. Мы рассмотрим эту проблему подробно и предложим проверенное решение, которое позволит вам эффективно интегрировать ТСД с вашей мобильной платформой 1С.

Суть проблемы: Некорректная обработка Enter и других управляющих символов

Изначально, при использовании ТСД Zebra MC92N0-G, если не применять специальные настройки, после сканирования штрихкода данные просто вводятся в активное поле ввода, но для активации события обработки (например, перехода к следующему полю или выполнению какой-либо логики) требуется дополнительное ручное нажатие клавиши Enter на клавиатуре ТСД. Очевидно, что такой подход замедляет работу и является неприемлемым для устройств стоимостью в несколько тысяч долларов.

Для автоматизации этого процесса, мы можем воспользоваться встроенными функциями ТСД. В настройках профиля сканера ТСД Zebra, обычно через утилиту DataWedge (Profile -> Keystroke Output -> Basic data formatting), существует опция Send ENTER key. Активация этой опции должна, по идее, автоматически добавлять символ Enter после каждого отсканированного штрихкода.

Однако на практике, особенно при работе с мобильной платформой 1С, мы обнаруживаем, что это не всегда работает так, как ожидается. Символ Enter, отправленный таким образом, мобильная платформа 1С либо не воспринимает вообще, либо воспринимает крайне нестабильно. В большинстве случаев мы видим, как отсканированный код появляется в поле ввода и тут же пропадает, как будто платформа не успевает его обработать или воспринимает Enter как сигнал к очистке поля или отмене ввода. Иногда это срабатывает "с десятого раза", что совершенно неприемлемо для производственной среды.

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

Кроме того, мы выяснили, что даже попытка заменить Enter на другой управляющий символ, например, Tab (опция Send TAB key в настройках DataWedge), также не приводит к успеху. Мобильная платформа 1С совершенно не воспринимает символ Tab, что исключает его использование в качестве разделителя.

Эффективное решение: Использование события «АвтоПодборТекста» и пользовательского суффикса

В ходе практических экспериментов и благодаря рекомендациям сообщества, было найдено эффективное решение, которое позволяет нам обойти проблемы с некорректной обработкой символа Enter. Это решение включает в себя два ключевых компонента:

  1. Настройка ТСД для отправки пользовательского суффикса вместо символа Enter.
  2. Обработка сканированных данных в 1С Мобильной платформе с помощью события АвтоПодборТекста.

Давайте разберем эти шаги подробнее.

Шаг 1: Настройка ТСД Zebra MC92N0-G через DataWedge

DataWedge — это мощное программное обеспечение от Zebra, которое позволяет нам гибко настраивать работу сканера штрихкодов и передачу данных в различные приложения. Для нашей задачи мы должны настроить его так, чтобы вместо Enter после штрихкода отправлялся любой другой, выбранный нами, символ, который мобильная платформа 1С будет корректно воспринимать как окончание ввода.

  1. Доступ к DataWedge: На вашем ТСД Zebra MC92N0-G найдите и запустите приложение DataWedge. Это стандартная утилита, предустановленная на устройствах Zebra.
  2. Создание или выбор профиля:
    • Если вы уже используете 1С Мобильную платформу, вероятно, у вас уже есть профиль, связанный с вашим приложением 1С. Выберите его.
    • Если нет, то рекомендуется создать новый профиль специально для вашего мобильного приложения 1С. Для этого зайдите в меню DataWedge, выберите "New Profile", дайте ему имя (например, "1C Mobile") и ассоциируйте его с вашим приложением 1С (обычно по имени пакета приложения, например, "com.1c.client" или название вашего развернутого мобильного приложения).

    Создание отдельного профиля критически важно, так как это позволяет настроить поведение сканера именно для 1С, не затрагивая другие приложения на ТСД.

  3. Настройка вывода клавиатурных команд (Keystroke Output):
    • В выбранном или созданном профиле прокрутите вниз до раздела "Keystroke Output" и выберите его.
    • Далее перейдите в подраздел "Basic data formatting".
    • Отключение "Send ENTER key": Убедитесь, что опция "Send ENTER key" (Отправлять клавишу Enter) отключена. Именно она вызывает нестабильное поведение.
    • Установка пользовательского суффикса: Найдите опцию "Suffix" (Суффикс) и введите в нее выбранный вами символ. В нашем случае успешно показал себя символ "равно" (=). Вы можете использовать любой другой символ, который не встречается в ваших штрихкодах и не является управляющим символом, вызывающим проблемы. Например, #, $, |, ~.

      Важно: Выбирайте символ, который явно не будет присутствовать в данных штрихкода, чтобы избежать ложных срабатываний.

      Пример: в поле "Suffix" введите символ =.

  4. Сохранение и активация профиля: Убедитесь, что изменения сохранены, и профиль активирован. Иногда требуется перезапустить ТСД для полного применения новых настроек DataWedge.

Теперь после каждого сканирования штрихкода ТСД будет отправлять данные штрихкода, за которыми будет следовать выбранный вами суффикс (например, 1234567890=).

Шаг 2: Обработка сканированных данных в 1С Мобильной платформе

Теперь, когда ТСД отправляет штрихкод с пользовательским суффиксом, нам необходимо научить 1С Мобильную платформу правильно обрабатывать этот ввод. Для этого мы будем использовать событие АвтоПодборТекста для поля ввода, в которое поступают данные.

  1. Идентификация поля ввода: В вашей мобильной форме 1С выберите поле ввода, предназначенное для сканирования штрихкодов. Это может быть элемент управления типа "Поле ввода" (ПолеВвода) на форме.
  2. Настройка обработчика события АвтоПодборТекста:
    • В свойствах этого поля ввода на форме найдите событие АвтоПодборТекста и создайте для него обработчик на стороне клиента.
    • Это событие срабатывает, когда в поле ввода вводится текст, который может быть использован для автоподбора. Поскольку сканер имитирует ввод с клавиатуры, оно прекрасно подходит для нашей цели, так как оно запускается при поступлении каждого символа или небольшой порции текста, но особенно актуально, когда введенный текст "завершается" и платформа пытается его проанализировать. Наличие нашего суффикса в конце строки явно сигнализирует о завершении ввода штрихкода.
  3. Реализация логики обработки в обработчике: Внутри обработчика события АвтоПодборТекста мы должны будем проверить, содержит ли введенный текст наш суффикс. Если да, то это означает, что сканирование завершено, и мы можем обработать штрихкод.

Рассмотрим пример кода для обработчика события АвтоПодборТекста:


&НаКлиенте
Процедура ПолеВводаШтрихкодаАвтоПодборТекста(Элемент, Текст, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь; // Отключаем стандартную обработку автоподбора, чтобы полностью контролировать процесс

    ПеременныйСуффикс = "="; // Наш пользовательский суффикс, настроенный в DataWedge

    // Проверяем, содержит ли введенный текст наш суффикс
    Если Найти(Текст, ПеременныйСуффикс) > 0 Тогда

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

        // 2. Выполнить логику обработки штрихкода (поиск товара, добавление в список и т.д.)
        ОбработатьОтсканированныйШтрихкод(Штрихкод);

        // 3. Очистить поле ввода для следующего сканирования
        Элемент.Значение = "";

    Иначе
        // Если суффикс еще не пришел (код сканируется по частям или еще не завершен)
        // Мы можем временно отобразить текущий текст в поле
        Элемент.Значение = Текст;
    КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ОбработатьОтсканированныйШтрихкод(Штрихкод)
    // Здесь размещаем вашу основную логику обработки штрихкода
    // Например, поиск товара по штрихкоду, добавление в таблицу,
    // оповещение пользователя и т.д.
    Сообщить("Отсканирован штрихкод: " + Штрихкод);
    // Пример:
    // ПодключитьОбработчикОповещения("ВыполнитьДействиеПослеСканирования", Неопределено, Штрихкод);
    // Или сразу вызывать серверную процедуру
    // ОбработатьШтрихкодНаСервере(Штрихкод);
КонецПроцедуры

// Пример серверной процедуры, если требуется работа с данными на сервере
&НаСервереБезКонтекста
Процедура ОбработатьШтрихкодНаСервере(Штрихкод)
    // Здесь логика работы с БД, справочниками и т.д.
    // Например:
    // Запрос = Новый Запрос;
    // Запрос.Текст = "ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Штрихкод = &Штрихкод";
    // Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
    // Результат = Запрос.Выполнить().Выбрать();
    // ...
КонецПроцедуры

Пояснения к коду:

Почему же АвтоПодборТекста сработал, а ПриИзменении или ОкончаниеВводаТекста нет? Вероятно, это связано с особенностями внутренней архитектуры мобильной платформы 1С и тем, как она обрабатывает быстрый ввод с эмулированной клавиатуры. Событие АвтоПодборТекста, возможно, имеет более низкий уровень срабатывания или более длительный тайм-аут для анализа введенного текста, что позволяет ему "захватить" весь штрихкод до того, как платформа решит, что ввод завершен или ошибочен, особенно когда имеется четкий символ-разделитель в конце.

Дополнительные рекомендации и альтернативные подходы

Хотя предложенное решение является рабочим, существуют и другие аспекты и альтернативы, которые мы должны рассмотреть для более глубокой интеграции и устойчивости системы.

Внешние компоненты и нативная интеграция

Для более гибкой и надежной работы со сканерами штрихкодов в 1С Мобильной платформе мы можем использовать внешние компоненты. Например, компонент "1С:Сканер штрихкода (NativeApi)" позволяет получать данные в режиме "BROADCAST" (широковещательные сообщения) непосредственно от сканера ТСД. Этот режим предоставляет более прямой контроль над данными, поступающими от сканера, и часто является более стабильным способом, чем эмуляция клавиатуры. Мы рекомендуем изучить возможности этого компонента, если стандартное эмулирование клавиатуры продолжает вызывать проблемы или требуются расширенные функции управления сканером.

Библиотека подключаемого оборудования (БПО) для мобильной платформы

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

Режимы работы сканера

Сканеры могут работать в различных режимах, включая "keyboard wedge" (эмуляция клавиатуры) и "serial interface" (последовательный интерфейс). Режим эмуляции клавиатуры, который мы сейчас рассматриваем, прост в настройке, но, как мы выяснили, может вызывать проблемы с распознаванием управляющих символов (таких как Enter или Tab) в некоторых приложениях, включая 1С Мобильную платформу. Если вы столкнулись с непреодолимыми трудностями, стоит рассмотреть возможность использования режима последовательного интерфейса, если ваше ТСД и мобильная платформа 1С поддерживают его через специальные драйверы или внешние компоненты.

Сторонние приложения для интеграции

На рынке существуют сторонние мобильные приложения, такие как "1Scan", разработанные специально для интеграции возможностей Android-устройств (включая сканеры штрихкодов ТСД, камеру, NFC, GPS и Bluetooth) с веб-клиентом 1С. Эти приложения обычно используют обмен JSON-командами, что может обеспечить более стабильное и многофункциональное взаимодействие по сравнению с простой эмуляцией клавиатуры. Если ваш проект требует расширенных возможностей или вы хотите избежать глубокой программной доработки, мы можем рассмотреть использование таких готовых решений.

Отладка взаимодействия

Для эффективной отладки работы со сканером в 1С Мобильной платформе мы рекомендуем использовать режим "Отладка клавиатуры", если он доступен в настройках драйвера "1С:Сканеры штрихкода". Этот режим позволяет увидеть всю последовательность переданных клавиатурных сообщений, что может помочь нам точно понять, какие символы и в какой последовательности получает 1С от ТСД. Также существуют методы имитации события сканирования штрихкода в режиме отладки, что значительно ускоряет процесс разработки и проверки логики.

Сканирование через камеру устройства

Следует помнить, что 1С Мобильная платформа также поддерживает сканирование штрихкодов с использованием встроенной камеры устройства. Для этого в свойствах конфигурации необходимо установить разрешение "Мультимедиа". Хотя это не является решением проблемы с внешним ТСД, это может быть полезной альтернативой для некоторых сценариев, когда интеграция внешнего сканера оказывается слишком сложной или дорогостоящей.

Заключение

Проблема некорректной обработки символа Enter, отправляемого ТСД Zebra MC92N0-G в 1С Мобильной платформе, является распространенной, но, как мы выяснили, имеет эффективное решение. Путем настройки DataWedge на ТСД для отправки пользовательского суффикса и использования события АвтоПодборТекста в 1С, мы можем добиться стабильной и автоматической обработки отсканированных штрихкодов. Мы рекомендуем вам внимательно следовать предложенным шагам и при необходимости рассмотреть более продвинутые методы интеграции с использованием внешних компонентов или сторонних решений для достижения максимальной эффективности и надежности вашей системы.

← На главную