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

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

При настройке торгового оборудования в среде 1С:Предприятие системные администраторы и программисты часто сталкиваются с загадочным поведением сканеров штрихкодов. В режиме тестирования драйвера вместо ожидаемой строки, например, с кодом маркировки «Честный Знак», устройство выдает странную последовательность, где часть букв заменена на цифровые коды (например, #112 или #114). При этом в обычном «Блокноте» или непосредственно в документах 1С данные могут отображаться корректно.

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

Анализ проблемы: почему «ломаются» символы

Рассмотрим типичную ситуацию. Автор темы столкнулся с тем, что английские буквы из определенного диапазона (от p до z) в окне теста драйвера 1С заменяются на их внутренние коды. Это происходит в режиме эмуляции клавиатуры (Keyboard HID). Проанализируем, почему это случается:

  1. Низкоуровневый перехват данных (Keyboard Hook). Окно «Тест устройства» в драйверах 1С работает не так, как обычное текстовое поле. Оно использует механизм «хуков», чтобы перехватить нажатия клавиш сканера до того, как их обработает операционная система. Если драйвер не успевает сопоставить скан-код клавиши с символом текущей раскладки, он выводит «сырой» код клавиши в формате #номер.
  2. Скорость передачи данных (Intercharacter Delay). Сканер имитирует очень быстрое нажатие клавиш. Если задержка между символами минимальна, буфер клавиатуры Windows или обработчик драйвера 1С может «захлебнуться», что приводит к искажению интерпретации символов.
  3. Зависимость от раскладки. В режиме клавиатуры сканер критически зависит от того, какой язык выбран в системе в момент сканирования. Если активна русская раскладка, а сканер передает английские символы, драйвер пытается произвести перекодировку, которая в окне теста может отображаться некорректно.

Различие в работе Блокнота и теста драйвера 1С

Часто возникает вопрос: «Почему в Блокноте всё хорошо, а в 1С — плохо?». Давайте разберем этот момент подробнее. Блокнот — это стандартное приложение Windows, которое получает уже полностью обработанные сообщения WM_CHAR. Система сама склеивает нажатия клавиш, учитывает регистр и раскладку, выдавая приложению готовый символ. Тест драйвера 1С пытается «быть умнее» и перехватывает события на уровне KeyDown/KeyUp, чтобы иметь возможность работать со сканером, даже если фокус ввода находится не в текстовом поле. Именно в этом механизме перехвата и кроется причина визуальных артефактов.

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

Самый надежный способ решить любые проблемы с подменой символов, спецсимволами GS1 и раскладкой клавиатуры — это полный отказ от эмуляции клавиатуры. Рассмотрим, как это сделать:

Проанализируем шаги по переходу на USB-Virtual COM:

  1. Найдите руководство (мануал) к вашей модели сканера.
  2. Считайте управляющий штрихкод «USB Serial Emulation» или «USB-CDC».
  3. После этого в диспетчере устройств Windows появится новое устройство в разделе «Порты (COM и LPT)». Установите соответствующий драйвер производителя, если система не опознала его автоматически.
  4. В 1С в настройках оборудования измените тип подключения на «COM-порт» и укажите номер созданного порта.

В этом режиме данные передаются как готовая текстовая строка напрямую в драйвер, минуя подсистему клавиатуры. Проблемы с #112 исчезнут навсегда.

Способ 2: Настройка задержки передачи символов

Если по каким-то причинам использование COM-порта невозможно (например, сканер не поддерживает этот режим или используется терминальный доступ с ограничениями), нужно замедлить сканер. Выясним, как это помогает: добавление небольшой задержки (обычно 10–20 миллисекунд) между отправкой каждого символа позволяет драйверу 1С корректно обработать каждое событие нажатия клавиши.

Рассмотрим алгоритм действий:

Способ 3: Настройка префикса Alt-Numpad

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

Если вы видите коды вместо букв, попробуйте отключить в настройках сканера функции типа «Alt Mode» или «Enable Unicode Simulation», вернув его к стандартной передаче скан-кодов клавиш.

Работа с кодами маркировки (GS1 DataMatrix)

В сообщении автора упоминается длинная строка, похожая на код маркировки. Важно понимать, что в таких кодах используются невидимые символы, такие как FNC1 (в начале) и разделитель групп данных GS (ASCII код 29). Рассмотрим, как на них реагирует 1С:

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

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

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


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

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

Если при использовании этого метода данные приходят корректно, значит, физический уровень настройки оборудования (сканера) выполнен правильно, а проблема с символами # является чисто косметической проблемой окна тестирования драйвера.

Выводы и рекомендации

Подведем итоги нашего анализа ситуации со странными символами в тесте драйвера:

  1. Не паникуйте. Если в Блокноте и в самой 1С (в режиме подбора товара) всё работает, значит, сканер настроен допустимо. Окно теста драйвера — это специфический инструмент с низкоуровневым доступом, который может ошибаться при визуализации.
  2. Используйте правильный драйвер. Рекомендуется использовать драйверы на базе NativeApi, так как они более стабильны в работе с современными версиями 1С:Предприятие 8.3.
  3. Приоритет COM-порту. Всегда, когда это возможно, переводите сканеры в режим эмуляции COM-порта. Это исключит влияние раскладки клавиатуры, залипание клавиш Shift и появление лишних кодов.
  4. Обновляйте прошивку. Иногда производители сканеров выпускают обновления, исправляющие некорректную передачу определенных диапазонов ASCII-символов в режиме клавиатуры.

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

← На главную