При подключении сканера штрихкодов к 1С можно столкнуться с двумя неприятными, но взаимосвязанными проблемами. Первая — при сканировании QR-кода или DataMatrix в полученной строке появляются посторонние символы, например, буква "w". Вторая — после попытки решить первую проблему сменой драйвера сканер перестает вызывать события в 1С, хотя тест устройства проходит успешно. Рассмотрим подробно, почему это происходит и как настроить оборудование для корректной работы.
Чаще всего эта ситуация возникает, когда сканер работает в режиме «Эмуляция клавиатуры» (USB-HID). В этом режиме устройство притворяется обычной клавиатурой и очень быстро "печатает" символы из штрихкода в активное окно.
Выясним причину:
Основная причина — конфликт между данными, передаваемыми сканером, и текущей раскладкой клавиатуры в Windows. Если на компьютере в момент сканирования включена русская раскладка, операционная система может неверно интерпретировать служебные скан-коды, которые содержатся в QR-коде. В результате вместо ожидаемой последовательности символов мы получаем "мусор", включая буквы "w" или "ж", которые соответствуют определенным служебным кодам в другой раскладке.
Дополнительно на это могут влиять:
Самым надежным и кардинальным решением является изменение режима работы сканера. Вместо эмуляции клавиатуры нужно использовать режим эмуляции виртуального COM-порта (Virtual COM, VCOM, USB-COM). В этом режиме данные передаются напрямую в систему как байтовый поток, минуя обработку клавиатурного ввода Windows. Это полностью исключает проблемы с раскладкой и лишними символами.
Разберем по шагам, как это сделать:
После этих действий сканер готов к работе в надежном режиме. Принципы взаимодействия с торговым оборудованием в 1С во многом схожи, будь то сканер или мобильный принтер. Теперь устройство нужно правильно настроить в программе.
Предположим, вы решили первую проблему, переключившись с драйвера АТОЛ на нативный драйвер от 1С. Лишние символы пропали, но теперь возникла новая сложность: тест устройства в настройках торгового оборудования 1С проходит, а при сканировании в рабочей форме ничего не происходит — процедура ВнешнееСобытие или обработчик ОбработкаОповещения не вызываются.
Это типичная ситуация, особенно для самописных конфигураций. В таких случаях для поиска причин стоит использовать специализированный инструмент для отладки внешних форм и обработок. Проанализируем основные причины проблемы.
Если вы решили оставить сканер в режиме эмуляции клавиатуры, то для корректной работы нативного драйвера 1С ему нужно знать, когда заканчивается штрихкод. Для этого используется суффикс — специальный символ, который сканер добавляет в конец передаваемых данных.
Важный момент: недостаточно просто указать суффикс #13 (Enter) в настройках драйвера в 1С. Необходимо, чтобы сам сканер был физически запрограммирован отправлять этот суффикс после каждого сканирования.
Если сканер не отправляет суффикс, драйвер 1С будет бесконечно ждать окончания ввода и, как следствие, не сгенерирует событие.
Решение: Найдите в инструкции к сканеру управляющий штрихкод "Добавить суффикс Enter" (или Add Suffix CR, Add Enter Key) и отсканируйте его.
В типовых конфигурациях, использующих Библиотеку стандартных подсистем (БСП), механизмы подключения и работы с торговым оборудованием уже реализованы. В самописной конфигурации об этом нужно позаботиться самостоятельно, опираясь на справочник по методам БСП с примерами.
Успешное прохождение "Теста устройства" ничего не говорит о том, что драйвер будет работать в вашей форме. Тест запускает свой собственный, изолированный экземпляр подключения. Чтобы драйвер стал активен в форме, его нужно явно подключить при ее открытии.
Решение: В коде формы, где предполагается работа со сканером, необходимо добавить логику подключения оборудования и назначения обработчика событий.
Посмотрим на пример для управляемой формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Эта функция должна вызывать стандартные методы БПО или
// ваши собственные для подключения оборудования типа "Сканер штрихкода".
// Важно, чтобы в результате ее выполнения был вызван метод "Подключить" для драйвера.
УправлениеПодключаемымОборудованиемКлиент.НачатьПодключениеОборудования(ЭтотОбъект, "СканерШтрихкода");
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
// Стандартное событие от подсистемы работы с оборудованием
Если ИмяСобытия = "ВыполненоПодключениеОборудования" Тогда
// Оборудование успешно подключено, можно работать
КонецЕсли;
КонецПроцедуры
// Обработчик самого события сканирования. Он должен быть экспортируемым в модуле формы.
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Проверяем, что событие пришло именно от сканера
Если Источник = "СканерШтрихкода" И Событие = "BarCodeValue" Тогда
// В переменной "Данные" находится отсканированный штрихкод
Сообщить("Отсканирован код: " + Данные);
// Здесь ваш код обработки штрихкода
КонецЕсли;
КонецПроцедуры
Важно: если вы не используете БСП, вам потребуется вручную создать экземпляр драйвера через Новый("AddIn.Scaner45"), вызвать его метод Подключить() и настроить обработку событий. Однако использование механизмов БСП является предпочтительным.
Как мы уже выяснили, перевод сканера в режим VCOM решает проблему с лишними символами. Оказывается, этот же режим является самым стабильным и для генерации событий в 1С.
Разберем по шагам настройку в 1С:
Почему это работает лучше? В режиме COM-порта драйвер 1С не пытается перехватывать клавиатурный ввод, а напрямую "слушает" указанный порт. Как только сканер отправляет данные, драйвер немедленно их получает и гарантированно генерирует событие ВнешнееСобытие. Этот способ не зависит от фокуса ввода, раскладки клавиатуры и настроек суффиксов.
Итог: Для стабильной и безошибочной работы 2D-сканеров в среде 1С настоятельно рекомендуется использовать режим эмуляции COM-порта (VCOM). Это избавляет как от проблемы появления "мусорных" символов, так и от нестабильной генерации событий сканирования.