Почему сканер штрихкодов переводит DataMatrix в верхний регистр и как это исправить?

Программист 1С v7.7 Торговля и дистрибуция
← На главную

Рассмотрим ситуацию, с которой часто сталкиваются при внедрении маркировки «Честный Знак». При сканировании двумерного штрихкода (например, сканером Honeywell Orbit 7910g) данные считываются, но часть символов или вся строка внезапно переводится в верхний регистр (капслок). Из-за этого система маркировки не принимает значение, так как криптохвост кода строго чувствителен к регистру.

Проанализируем причину такого поведения и разберем по шагам, как навсегда избавиться от проблем с искажением регистра при сканировании кодов DataMatrix в 1С.

Почему происходит смена регистра при сканировании?

Выясним причину этого явления. Коды маркировки формата GS1 DataMatrix содержат не только привычные буквы и цифры, но и скрытые управляющие символы. К ним относятся разделители блоков данных (символ GS с кодом ASCII 29) и признак символики (FNC1 с кодом ASCII 232). Они критически важны для корректного разделения GTIN, серийного номера и криптохвоста.

Если ваш сканер настроен в режиме эмуляции клавиатуры (USB-HID), он передает считанный код не как единую строку, а как последовательность очень быстрых виртуальных нажатий клавиш. Чтобы передать заглавные буквы, сканер программно «зажимает» и «отпускает» виртуальную клавишу Shift.

Проблема возникает в момент, когда в этот процесс вмешивается пользователь или особенности платформы:

  1. Ручное вмешательство: Если кладовщик отсканировал код не в ту строку, он часто пытается стереть его с помощью клавиши Backspace или перемещается стрелками. Это сдвигает курсор на невидимые управляющие символы, нарушая последовательность буфера клавиатуры Windows. В итоге происходит программное «залипание» регистра — все последующие вводы идут заглавными буквами.
  2. Особенности старых платформ: Элементы управления в старых версиях 1С (особенно в 1С 7.7) не рассчитаны на обработку непечатных символов внутри обычного текстового поля. Платформа может воспринять их как команду форматирования. Для перехода на современные версии программ доступен подбор решений для переноса данных из 1С 7.7.
  3. Сторонние программы: Иногда подобное поведение вызывает Punto Switcher, который пытается автозаменять «абракадабру» криптохвоста. Однако, даже при отключенном автопереключателе, баг с Backspace остается из-за системного буфера клавиатуры.

Почему нельзя просто использовать функцию Нрег()?

Может показаться, что проблему легко решить программной обработкой полученной строки с помощью встроенных функций платформы. Однако использовать функцию Нрег() категорически нельзя. Эта функция переведет абсолютно все символы в нижний регистр.

Код «Честного Знака» (в частности, его криптографическая часть) содержит как строчные, так и прописные буквы английского алфавита. Принудительное изменение регистра сделает код невалидным, и система маркировки ответит ошибкой валидации.

Решение 1: Обходной путь (защита от ручного редактирования)

Посмотрим на пример решения, которое можно применить, если по каким-то причинам перенастроить сканер невозможно. Суть заключается в изоляции процесса ввода от рук пользователя.

Поскольку сбой возникает в тот момент, когда кладовщик стирает символы или использует стрелки в поле ввода, мы можем лишить его этой возможности:

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

В таком случае пользователь физически не сможет нажать Backspace внутри поля со служебными символами, и залипания CapsLock не произойдет. Однако это решение является «костылем» и не защищает от потери управляющих символов в буфере клавиатуры. Для восстановления пропущенных разделителей при работе в таком режиме можно использовать расширение для дополнения кодов маркировки символами GS.

Решение 2: Правильная настройка (Режим COM-порта)

Рассмотрим самое надежное и профессиональное решение. Чтобы полностью исключить влияние раскладки клавиатуры, залипание клавиш Shift и случайные нажатия кладовщиков, необходимо отказаться от режима эмуляции клавиатуры.

Разберем алгоритм действий по шагам:

  1. Перенастройка сканера: С помощью служебных штрихкодов из инструкции к вашему сканеру (например, Honeywell) переведите его в режим эмуляции COM-порта (Virtual COM / USB Serial).
  2. Установка драйвера: Установите в операционной системе драйвер виртуального COM-порта от производителя вашего сканера. После этого в «Диспетчере устройств» Windows должен появиться новый COM-порт.
  3. Подключение в 1С: Используйте внешнюю компоненту для работы с торговым оборудованием (например, Scaner1C.dll или драйверы от компаний АТОЛ/Штрих-М). Настройте подключение сканера к новому COM-порту в настройках торгового оборудования 1С.

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

Посмотрим на пример обработки такого события в модуле формы:


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    Если (Источник = "Scanner") И (Событие = "BarCodeValue") Тогда
        // Переменная Данные содержит чистую строку штрихкода без искажений
        // Здесь мы можем безопасно разобрать DataMatrix на составляющие
        ОбработатьОтсканированныйКодМаркировки(Данные);
    КонецЕсли;
КонецПроцедуры

Преимущества режима COM-порта:

Используя режим виртуального COM-порта, вы обеспечите стабильную и безошибочную работу склада с кодами маркировки «Честного Знака», избежав непредвиденных искажений данных. Для настройки оборудования в типовых конфигурациях можно использовать драйвер NativeAPI для подключения сканеров штрихкода.

← На главную