При подключении торгового оборудования в решениях на базе 1С:Предприятие (например, в «1С:Розница» или «1С:Управление торговлей») технические специалисты часто сталкиваются со специфическим поведением сканеров штрихкодов. Типичный пример — популярный светодиодный сканер CipherLab 1070. Пользователи жалуются на то, что устройство «отказывается» автоматически открывать окно поиска штрихкода (не имитирует нажатие клавиши F7), либо при сканировании в режиме клавиатуры штрихкод «разрывается» и вносится в систему не полностью.
В этой статье мы подробно разберем природу возникновения этих неполадок, проанализируем разницу между режимами работы торгового оборудования и приведем пошаговые инструкции по правильной настройке сканера CipherLab для стабильной работы без сбоев.
Для начала выясним причины некорректного поведения оборудования. Проблема обычно проявляется в одном из двух сценариев:
F7 вручную, либо сканер успевает передать только часть штрихкода, из-за чего поиск товара завершается ошибкой.F7 не открывается, и визуально кажется, что устройство не работает.Рассмотрим детально физику этих процессов и найдем оптимальные пути решения для каждого режима.
Когда сканер работает в режиме клавиатуры, операционная система Windows воспринимает его как обычное устройство ввода. Передача данных происходит через системный буфер клавиатуры. Стандартный размер этого буфера в операционных системах Windows жестко ограничен (обычно до 16 кодов символов в очереди).
Для корректного поиска товара в режиме клавиатуры сканер должен передать следующую последовательность управляющих сигналов и символов:
F7 (2 кода клавиатуры).Enter или код #13 (1 код).В сумме получается: 2 + 13 + 1 = 16 кодов клавиатуры. Это предельное значение емкости системного буфера. Если компьютер или сама платформа 1С в момент сканирования хотя бы на миллисекунду замедляют работу (например, из-за фоновых процессов или тяжелых запросов к базе данных), буфер клавиатуры переполняется. «Хвост» посылки теряется, и штрихкод обрезается. Также на это влияет технология TurboHID, используемая в некоторых современных сканерах, которая передает символы на сверхвысокой скорости, к чему Windows зачастую оказывается не готова.
Кроме того, если префикс F7 отправляется мгновенно вместе с цифрами штрихкода, программа 1С физически не успевает инициализировать и открыть форму поиска. Цифры штрихкода начинают «лететь» в систему еще до того, как поле ввода активизировалось, что приводит к потере первых символов кода.
Проанализировав ситуацию, мы рекомендуем отказаться от работы в режиме клавиатуры в пользу виртуального COM-порта (USB-COM). В этом режиме сканер отправляет данные напрямую в порт Windows, минуя буфер клавиатуры. Платформа 1С перехватывает эти данные с помощью механизма внешнего события.
Важное преимущество: В режиме USB-COM нажимать клавишу F7 вообще не требуется! Платформа принимает данные в фоновом режиме через процедуру ОбработкаВнешнегоСобытия и сразу обрабатывает штрихкод, в каком бы месте программы ни находился пользователь (если активна форма, поддерживающая сканирование).
Выполним настройку по шагам:
Порты (COM и LPT) -> CipherLab USB VCOM Port (COM3).115200 или 9600). Скорость в настройках 1С должна строго соответствовать настройкам порта в Windows.CR (13). Префиксы в данном режиме настраивать не нужно.Если перевод в COM-порт по каким-то причинам невозможен (например, ограничения терминального сервера или тонкого клиента), настроим корректную работу в режиме USB-HID, исключив обрезку штрихкодов.
Для этого нам потребуется решить проблему быстродействия буфера и задержки открытия формы поиска по клавише F7.
Шаг 1. Настройка межсимвольной задержки (Inter-character delay):
По умолчанию сканер передает символы один за другим с нулевой задержкой. Нам необходимо искусственно замедлить передачу управляющих символов, чтобы дать операционной системе время отреагировать. В утилите конфигурирования сканеров CipherLab (например, ScanMaster) найдите параметр Inter-character delay (Межсимвольная задержка) или Inter-scancode delay и установите значение в диапазоне от 10 до 50 мс. Это предотвратит переполнение системного клавиатурного буфера.
Шаг 2. Настройка префикса и суффикса в самом сканере:
Чтобы сканер имитировал нажатие F7 перед передачей штрихкода, запрограммируйте в утилите ScanMaster или с помощью настроечной таблицы сервисной книжки следующие параметры:
F7 (в некоторых таблицах настроек обозначается шестнадцатеричным кодом, например 15H или выбором соответствующей функциональной клавиши из таблицы Keypad/Keyboard Emulation).Enter (код #13 или 0Dh).Шаг 3. Изменение таймаута в драйвере 1С:
При работе в режиме клавиатуры драйвер 1С должен понимать, где заканчивается один штрихкод и начинается другой. Перейдите в настройки сканера в 1С (Администрирование -> Подключаемое оборудование -> Настроить) и найдите параметр «Таймаут клавиатуры» (по умолчанию он равен 75 мс). Увеличьте это значение до 100–150 мс. Это позволит драйверу корректно собирать длинные штрихкоды в одну строку без их дробления и обрезки.
Для понимания того, как платформа обрабатывает сигналы от торгового оборудования, проанализируем пример кода. В случае использования COM-порта или правильно настроенного HID-драйвера, все данные поступают в предопределенную процедуру модуля управляемого приложения или модуля формы:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Источник — это идентификатор нашего настроенного сканера
// Событие — тип события (обычно "BarCode")
// Данные — считанный штрихкод в виде строки
Если Событие = "BarCode" Тогда
ОчищенныйШтрихкод = СокрЛП(Данные);
// Передаем полученный код в модуль обработки торгового оборудования
СтруктураБыстрогоПоиска = Новый Структура("Штрихкод", ОчищенныйШтрихкод);
ОбработатьШтрихкод(СтруктураБыстрогоПоиска);
КонецЕсли;
КонецПроцедуры
Этот программный обработчик полностью исключает необходимость эмуляции нажатия физических клавиш клавиатуры, делая процесс сканирования надежным, быстрым и не зависящим от текущей раскладки клавиатуры на компьютере пользователя.
Рассмотрим часто возникающие проблемы при пусконаладке сканеров CipherLab 1070:
115200 bps). Также убедитесь, что в сканере не активирована опция повторного сканирования одного и того же штрихкода с задержкой (Double Read Timeout).
Проанализировав все варианты, мы приходим к однозначному выводу: для стабильной и безотказной работы сканера CipherLab 1070 в связке с конфигурациями 1С наиболее надежным архитектурным решением является перевод сканера в режим эмуляции COM-порта (USB-Virtual COM). Это избавляет систему от ограничений клавиатурного буфера, решает проблему «обрезания» штрихкодов и исключает необходимость эмулировать функциональную клавишу F7.