Почему 1С некорректно считывает код маркировки и как это исправить?

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

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

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

Для начала проанализируем пример искажения. В исходном сообщении автор приводит два варианта одного и того же кода:

Разберем ситуацию. Мы видим, что первая часть кода (GTIN товара), состоящая из цифр, считывается верно. Проблемы начинаются во второй части — так называемом «криптохвосте», где используются символы разного регистра и спецсимволы. Это происходит из-за того, что сканер работает в режиме HID-клавиатуры. Для системы 1С такое сканирование выглядит как очень быстрое нажатие клавиш пользователем. Если в этот момент в Windows включена русская раскладка, драйвер пытается «перевести» нажатия клавиш на текущий язык, что превращает код в набор нечитаемых символов.

Решение 1: Обновление драйвера торгового оборудования

Как показала практика участников форума, наиболее эффективным способом решения проблемы для старых версий конфигураций является обновление компоненты ScanOPOS. Рассмотрим этот процесс подробнее.

Старые драйверы ScanOPOS (версий ниже 8.0.17) не были рассчитаны на работу с длинными последовательностями символов и специфическими разделителями групп данных (символ GS). Установка версии ScanOPOS_8.0.17.3 или выше позволяет драйверу корректно перехватывать поток данных от сканера-клавиатуры и игнорировать текущую раскладку Windows.

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

  1. Скачиваем актуальную версию драйвера «1С:Сканер штрихкода» с портала поддержки пользователей или берем ее из состава современных библиотек подключаемого оборудования.
  2. В режиме «1С:Предприятие» переходим в раздел «Администрирование» — «Подключаемое оборудование».
  3. Находим наш сканер в списке и открываем его настройки.
  4. В поле «Драйвер оборудования» выбираем обновленную версию или переустанавливаем текущую, указав путь к новому файлу .exe или .zip.
  5. После установки обязательно нажимаем кнопку «Тест устройства» и проверяем считывание кода маркировки непосредственно в окне теста 1С.

Решение 2: Перевод сканера в режим USB-COM (эмуляция COM-порта)

Если обновление драйвера не помогло или вы хотите добиться максимально стабильной работы, разберем перевод сканера в режим VCP (Virtual COM Port). Это профессиональный стандарт работы с маркировкой.

В режиме клавиатуры сканер передает данные медленно и зависим от фокуса ввода. В режиме COM-порта данные передаются мгновенно и напрямую в драйвер 1С, минуя буфер клавиатуры и языковые настройки ОС.

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

  1. Найдите инструкцию к вашему сканеру (например, Global Pos GP-3300). Вам нужно считать управляющий штрихкод «USB COM Mode» или «Enable Virtual COM».
  2. После считывания кода Windows обнаружит новое устройство. Вам может потребоваться установка драйвера виртуального COM-порта от производителя сканера.
  3. В Диспетчере устройств Windows проверьте, какой номер порта был присвоен сканеру (например, COM3).
  4. В настройках оборудования в 1С измените тип подключения с «Клавиатура» на «COM-порт» и укажите соответствующий номер порта.

Решение 3: Контроль раскладки клавиатуры и спецсимволов

Если вы вынуждены продолжать работу в режиме клавиатуры (HID), необходимо убедиться, что система правильно обрабатывает символ-разделитель GS (Group Separator, код ASCII 29). В кодах DataMatrix он отделяет GTIN и серийный номер от ключа проверки.

Выясним причину искажения через раскладку. Если при сканировании в 1С установлена русская раскладка (RU), то символ / может превратиться в ., а Q в Й. Некоторые программисты используют программные методы «подрезки» кода, но это не рекомендуется для маркировки, так как код должен передаваться в систему полностью.

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


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

Однако помните, что ручная обработка — это крайняя мера. Правильно настроенный драйвер ScanOPOS версии 8.0.17.3 или переход на NativeApi решают проблему искажения символов автоматически, так как они умеют самостоятельно переключать контекст ввода или считывать скан напрямую.

Важные замечания по модели Global Pos GP-3300

Проанализируем специфику бюджетных сканеров, таких как Global Pos. Часто у них по умолчанию отключена передача управляющих символов GS1. Если вы обновили драйвер, но код все равно «склеивается» или не проходит проверку в 1С, попробуйте следующее:

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

Подводя итог, мы выяснили, что для исправления «абракадабры» при сканировании необходимо в первую очередь обновить драйвер ScanOPOS до версии не ниже 8.0.17.3, а в идеале — перевести оборудование в режим эмуляции COM-порта. Это исключит влияние раскладки клавиатуры и обеспечит корректную передачу криптохвоста маркировки в информационную базу.

← На главную