Почему сканер Zebra не читает русские буквы в QR-кодах и как это исправить?

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

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

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

Выясняем причины: почему сканер искажает кириллицу?

Прежде чем переходить к настройкам, давайте разберемся в механизме передачи данных от сканера в операционную систему. Существуют две основные проблемы, приводящие к искажению русских букв:

  1. Проблема кодировки (UTF-8 против ASCII): По умолчанию большинство современных генераторов QR-кодов (включая встроенные механизмы 1С и программы для печати этикеток) кодируют русские символы в международном формате UTF-8. В этой кодировке каждый символ кириллического алфавита занимает 2 байта. Сканер Zebra по умолчанию настроен на чтение однобайтовой кодировки ASCII. Не понимая двухбайтовую структуру, он разбивает каждый русский символ на два отдельных байта и передает их в операционную систему как два независимых знака. На экране мы видим классические кракозябры и иероглифы.
  2. Проблема активной раскладки клавиатуры (USB HID эмуляция): Если сканер подключен к компьютеру в режиме эмуляции клавиатуры, он работает как физическое устройство ввода. При сканировании он генерирует так называемые «скан-коды» клавиш и передает их в Windows. Если в момент сканирования на компьютере пользователя активна английская раскладка клавиатуры (EN), Windows интерпретирует скан-код русской клавиши как английскую букву. В результате вместо русского текста в поле ввода попадает бессмысленный набор латинских символов.

Рассмотрим по шагам все доступные способы решения этой проблемы — от простой программной обработки до профессиональной перенастройки оборудования.


Способ 1. Программная конвертация раскладки в 1С (Быстрое решение)

Если у вас нет возможности перенастраивать сам сканер на рабочем месте пользователя (например, сканер используется на удаленном складе или у вас нет прав администратора), можно решить проблему программно на стороне 1С. Этот метод упомянут опытными разработчиками в обсуждении на форуме.

Суть метода заключается в том, что при получении данных от сканера в английской раскладке («ghbdtn») система автоматически перекодирует символы в правильную русскую раскладку клавиатуры.

Ниже представлен готовый пример функции на языке 1С, которую можно встроить в модуль управляемого приложения или в обработчик внешнего события формы:


// Функция преобразует строку, ошибочно введенную в английской раскладке клавиатуры, в русскую.
// Используется для обработки данных со сканеров штрихкодов в режиме эмуляции клавиатуры.
Функция ПреобразоватьЛатиницуВКириллицу(Знач ВходнаяСтрока) Экспорт

    // Определяем соответствие символов двух раскладок
    Латиница  = "qwertyuiop[]asdfghjkl;'zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:""ZXCVBNM<>";
    Кириллица = "йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ";
    
    Результат = "";
    КоличествоСимволов = СтрДлина(ВходнаяСтрока);
    
    Для Индекс = 1 По КоличествоСимволов Цикл
        ТекущийСимвол = Сред(ВходнаяСтрока, Индекс, 1);
        Позиция = СтрНайти(Латиница, ТекущийСимвол);
        
        Если Позиция > 0 Тогда
            // Если символ найден в английской раскладке, заменяем его на соответствующий русский
            Результат = Результат + Сред(Кириллица, Позиция, 1);
        Иначе
            // Если символ не найден (например, цифра или спецсимвол), оставляем без изменений
            Результат = Результат + ТекущийСимвол;
        КонецЕсли;
    КонецЦикла;
    
    Возврат Результат;
КонецФункции

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


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

Преимущества метода: Работает мгновенно, не требует физического доступа к сканеру и изменения его внутренних настроек.

Недостатки: Это «костыль», который борется с симптомами, а не с причиной. Метод не поможет, если сканер передает неудобочитаемые иероглифы (кракозябры UTF-8) вместо латинских букв.


Способ 2. Перевод сканера в режим эмуляции COM-порта (Самый надежный способ)

Профессиональное решение проблемы интеграции торгового оборудования с 1С — это полный отказ от режима эмуляции клавиатуры (USB HID) в пользу режима эмуляции виртуального COM-порта (USB CDC / Virtual COM). В этом режиме сканер передает данные напрямую в порт Windows, минуя системную раскладку клавиатуры и фокус ввода.

Проанализируем шаги по настройке данного режима:

  1. Найдите официальное руководство пользователя (Product Reference Guide) конкретно для вашей модели сканера Zebra (например, наиболее распространенные модели DS2208, DS4308, DS8108).
  2. В разделе «USB Interface» найдите и отсканируйте настроечный управляющий штрихкод USB CDC Host (в некоторых старых моделях он может называться Simple COM Port Emulation).
  3. После сканирования операционная система Windows обнаружит новое устройство. Вам потребуется скачать и установить официальный драйвер виртуального COM-порта с сайта Zebra (Zebra CoreScanner Driver).
  4. Откройте «Диспетчер устройств» в Windows и убедитесь, что в разделе «Порты (COM и LPT)» появилось новое устройство, например: Zebra CDC Scanner (COM3). Запомните номер выделенного порта.
  5. Перейдите в 1С в меню «Администрирование» — «Подключаемое оборудование».
  6. Создайте новое устройство с типом «Сканеры штрихкода», выберите стандартный драйвер 1С:Сканеры штрихкода (NativeApi).
  7. Нажмите кнопку «Настроить». В открывшемся окне параметров выберите порт (например, COM3).
  8. В поле «Кодировка» принудительно укажите значение UTF-8 (или CP1251 в зависимости от исходной кодировки ваших этикеток).

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


Способ 3. Активация поддержки UTF-8 в режиме клавиатуры

Если бизнес-процесс требует, чтобы сканер работал именно как клавиатура (например, данные необходимо сканировать напрямую в веб-браузер, документы Microsoft Excel или текстовый Блокнот), необходимо научить сканер корректно обрабатывать двухбайтовые символы UTF-8.

Для этого выполните следующие действия:

  1. Откройте руководство пользователя к вашему сканеру Zebra.
  2. Перейдите к разделу настроек декодирования двумерных кодов (Symbologies -> QR Code).
  3. Найдите параметр, отвечающий за кодировку символов. В современных сканерах Zebra он называется UTF-8 Emulation (или Non-CJK UTF-8).
  4. Распечатайте страницу с этим штрихкодом на лазерном принтере и отсканируйте его.

Эта настройка заставит внутренний микроконтроллер сканера правильно сопоставлять двухбайтовые последовательности UTF-8 и транслировать их в операционную систему как полноценные символы кириллической раскладки Windows.


Способ 4. Тонкая настройка страны раскладки через Zebra 123Scan

Для централизованного управления парком торгового оборудования Zebra предоставляет бесплатную профессиональную утилиту 123Scan. С её помощью можно создать единый конфигурационный файл и загрузить его в сканер через USB-кабель.

Разберем процесс настройки по шагам:

  1. Скачайте и установите утилиту Zebra 123Scan на ваш компьютер.
  2. Подключите сканер Zebra к компьютеру по USB-кабелю и запустите программу. Она автоматически определит модель вашего устройства.
  3. Создайте новый конфигурационный файл (Create new configuration file) -> Кликните по вашей модели сканера.
  4. В левом меню перейдите в раздел Cable Connection (Параметры интерфейсного кабеля).
  5. Найдите важный параметр Keyboard Country Layout (Язык раскладки клавиатуры устройства ввода). По умолчанию там всегда установлен английский язык (North American). Измените это значение на Russian (Windows) или Russian.
  6. В этом же разделе найдите параметр Keystroke Delay (Задержка между нажатиями клавиш). Для длинных QR-кодов операционная система Windows может не успевать обрабатывать поток символов. Установите значение задержки на Medium Delay (20ms) или Long Delay (40ms). Это гарантированно защитит от «пропуска» букв при передаче данных.
  7. Нажмите кнопку «Load to scanner» (Загрузить в сканер) на верхней панели инструментов.

После завершения прошивки сканер перезагрузится и начнет эмулировать русскую клавиатуру аппаратно, что полностью устранит появление латинских букв.


Способ 5. Настройка терминалов сбора данных (ТСД) Zebra на Android

Если вы столкнулись с аналогичной проблемой (иероглифы в QR-кодах) не на проводном сканере, а на мобильном терминале сбора данных Zebra под управлением операционной системы Android, решение кроется во встроенной утилите управления сканированием DataWedge.

Проанализируем последовательность действий для ТСД:

  1. Откройте меню приложений на ТСД Zebra и запустите программу DataWedge.
  2. Выберите профиль сканирования, который используется вашей учетной системой (по умолчанию это Profile0 или профиль, связанный с приложением 1С).
  3. Перейдите в настройки детектора штрихкодов: Configure scanner settings -> Decoders.
  4. Найдите и откройте настройки для типа кода QR Code.
  5. Активируйте опцию Treat data as binary (Обрабатывать данные как бинарные). Это предотвратит ошибочные попытки Android интерпретировать поток байт как системные ASCII-коды.
  6. В поле Decoder Character Set (Набор символов декодера) выберите значение UTF-8. Если ваши QR-коды генерируются в старой кодировке 1С, выберите WINDOWS-1251.
  7. Сохраните изменения и протестируйте сканирование в мобильном клиенте 1С.

Резюме и рекомендации

Подводя итог, мы рекомендуем придерживаться следующей стратегии при решении проблемы с русскими буквами в QR-кодах:

← На главную