Что делать, если при сканировании QR-кода в 1С появляются лишние символы или не срабатывает событие?

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

При подключении сканера штрихкодов к 1С можно столкнуться с двумя неприятными, но взаимосвязанными проблемами. Первая — при сканировании QR-кода или DataMatrix в полученной строке появляются посторонние символы, например, буква "w". Вторая — после попытки решить первую проблему сменой драйвера сканер перестает вызывать события в 1С, хотя тест устройства проходит успешно. Рассмотрим подробно, почему это происходит и как настроить оборудование для корректной работы.

Проблема 1: Лишние символы ("w", "ж" и другие) при сканировании

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

Выясним причину:

Основная причина — конфликт между данными, передаваемыми сканером, и текущей раскладкой клавиатуры в Windows. Если на компьютере в момент сканирования включена русская раскладка, операционная система может неверно интерпретировать служебные скан-коды, которые содержатся в QR-коде. В результате вместо ожидаемой последовательности символов мы получаем "мусор", включая буквы "w" или "ж", которые соответствуют определенным служебным кодам в другой раскладке.

Дополнительно на это могут влиять:

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

Самым надежным и кардинальным решением является изменение режима работы сканера. Вместо эмуляции клавиатуры нужно использовать режим эмуляции виртуального COM-порта (Virtual COM, VCOM, USB-COM). В этом режиме данные передаются напрямую в систему как байтовый поток, минуя обработку клавиатурного ввода Windows. Это полностью исключает проблемы с раскладкой и лишними символами.

Разберем по шагам, как это сделать:

  1. Найдите инструкцию к вашему сканеру. Обычно она поставляется в комплекте или доступна на сайте производителя. В инструкции должен быть раздел с управляющими штрихкодами для настройки режимов работы.
  2. Отсканируйте управляющий штрихкод. Найдите штрихкод с названием "USB-COM", "VCOM" или "Эмуляция COM-порта" и отсканируйте его. Сканер издаст звуковой сигнал, подтверждающий смену режима.
  3. Установите драйвер. После переключения режима Windows может запросить драйвер. Установите драйвер виртуального COM-порта с сайта производителя вашего сканера.
  4. Проверьте результат в "Диспетчере устройств". Откройте Диспетчер устройств в Windows и разверните раздел "Порты (COM и LPT)". Там должен появиться новый порт, например, "Pro-Series USB-to-Serial Comm Port (COM3)". Запомните номер этого порта.

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

Проблема 2: Событие сканирования не срабатывает в 1С

Предположим, вы решили первую проблему, переключившись с драйвера АТОЛ на нативный драйвер от 1С. Лишние символы пропали, но теперь возникла новая сложность: тест устройства в настройках торгового оборудования 1С проходит, а при сканировании в рабочей форме ничего не происходит — процедура ВнешнееСобытие или обработчик ОбработкаОповещения не вызываются.

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

Причина 1: Некорректная настройка суффикса в режиме "Клавиатура"

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

Важный момент: недостаточно просто указать суффикс #13 (Enter) в настройках драйвера в 1С. Необходимо, чтобы сам сканер был физически запрограммирован отправлять этот суффикс после каждого сканирования.

Если сканер не отправляет суффикс, драйвер 1С будет бесконечно ждать окончания ввода и, как следствие, не сгенерирует событие.

Решение: Найдите в инструкции к сканеру управляющий штрихкод "Добавить суффикс Enter" (или Add Suffix CR, Add Enter Key) и отсканируйте его.

Причина 2: Отсутствие инициализации драйвера в самописной конфигурации

В типовых конфигурациях, использующих Библиотеку стандартных подсистем (БСП), механизмы подключения и работы с торговым оборудованием уже реализованы. В самописной конфигурации об этом нужно позаботиться самостоятельно, опираясь на справочник по методам БСП с примерами.

Успешное прохождение "Теста устройства" ничего не говорит о том, что драйвер будет работать в вашей форме. Тест запускает свой собственный, изолированный экземпляр подключения. Чтобы драйвер стал активен в форме, его нужно явно подключить при ее открытии.

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

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


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Эта функция должна вызывать стандартные методы БПО или 
    // ваши собственные для подключения оборудования типа "Сканер штрихкода".
    // Важно, чтобы в результате ее выполнения был вызван метод "Подключить" для драйвера.
    УправлениеПодключаемымОборудованиемКлиент.НачатьПодключениеОборудования(ЭтотОбъект, "СканерШтрихкода");
КонецПроцедуры

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

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

Важно: если вы не используете БСП, вам потребуется вручную создать экземпляр драйвера через Новый("AddIn.Scaner45"), вызвать его метод Подключить() и настроить обработку событий. Однако использование механизмов БСП является предпочтительным.

Универсальное и надежное решение: Настройка работы через COM-порт в 1С

Как мы уже выяснили, перевод сканера в режим VCOM решает проблему с лишними символами. Оказывается, этот же режим является самым стабильным и для генерации событий в 1С.

Разберем по шагам настройку в 1С:

  1. Переведите сканер в режим эмуляции COM-порта, как было описано в первой части. Убедитесь, что в "Диспетчере устройств" появился новый COM-порт и вы знаете его номер (например, COM3).
  2. В 1С откройте настройки подключаемого оборудования (раздел "Администрирование" или "НСИ и Администрирование").
  3. Выберите ваш сканер или создайте новый. В качестве драйвера укажите "1С:Сканеры штрихкода (NativeApi)".
  4. Нажмите кнопку "Настроить". В открывшемся окне укажите Порт, выбрав из списка номер COM-порта, который вы запомнили на первом шаге.
  5. Остальные параметры (Скорость, Биты данных и т.д.) обычно можно оставить по умолчанию. Сохраните настройки.

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

Итог: Для стабильной и безошибочной работы 2D-сканеров в среде 1С настоятельно рекомендуется использовать режим эмуляции COM-порта (VCOM). Это избавляет как от проблемы появления "мусорных" символов, так и от нестабильной генерации событий сканирования.

← На главную