При работе с торговым оборудованием в старых конфигурациях 1С на обычных формах (таких как Управление торговлей редакции 10.3) на современной платформе 1С:Предприятие 8.3 системные администраторы часто сталкиваются с аппаратными сбоями. Типичная проблема: популярный сканер Symbol (Zebra) LS2208, настроенный на работу через виртуальный COM-порт, перестает передавать данные в программу в реальном времени. При этом физически сканер работает, а отсканированные штрихкоды накапливаются в буфере операционной системы и «выплескиваются» одной длинной строкой только при открытии окна теста устройства в драйвере 1С.
В этой статье мы подробно разберем, почему возникает эффект «накопления» данных в буфере COM-порта, и рассмотрим наиболее надежный способ решения этой проблемы — перевод сканера в режим клавиатурного ввода с генерацией полноценного внешнего события в 1С.
Для начала проанализируем физику процесса работы виртуального COM-порта (USB CDC Emulation) в операционной системе Windows при взаимодействии с платформой 1С. Когда сканер считывает этикетку, он отправляет пакет данных в последовательный порт. Чтобы эти данные отобразились в открытом документе 1С (например, в «Реализации товаров и услуг» или «Чеке ККМ»), программа должна постоянно «прослушивать» этот порт в фоновом режиме.
В случае сбоя или конфликта оборудования происходит следующее:
ОбработкаВнешнегоСобытия в модуле формы не генерируется. Программа никак не реагирует на сканирование.Эта проблема носит регулярный характер при использовании устаревших 32-битных библиотек драйверов (например, классического ScanOPOS.dll) на современных операционных системах Windows 10/11 и платформе 1С v8.3.
Среди начинающих специалистов бытует миф: если перевести сканер в режим обычной клавиатуры (USB Keyboard Emulation), то для ввода штрихкода кассиру придется каждый раз нажимать горячую клавишу F7 или вручную активировать поле ввода на форме. На самом деле это не так.
Современные версии драйвера «1С:Сканер штрихкода» (начиная с версий NativeApi) умеют перехватывать быстрый клавиатурный ввод. Драйвер анализирует скорость нажатия клавиш: человек физически не может ввести 13 цифр штрихкода за доли секунды, а сканер делает это мгновенно. Если драйвер фиксирует такой сверхбыстрый ввод, заканчивающийся специальным символом завершения (суффиксом), он блокирует передачу этих символов в активное поле ввода операционной системы и генерирует стандартное Внешнее событие в 1С. Программа отрабатывает точно так же, как если бы сканер работал по COM-порту.
Давайте пошагово настроим эту схему работы.
Прежде чем настраивать 1С, необходимо перепрограммировать сам физический сканер с помощью управляющих штрихкодов из официальной инструкции (Product Reference Guide) Zebra/Symbol LS2208.
Enter (ASCII-код 13). Это критически важно: именно по этому символу драйвер 1С будет определять окончание передачи штрихкода.Переходим к настройке программной части в конфигурации «Управление торговлей»:
Enter).При такой конфигурации сканер начнет стабильно функционировать в режиме клавиатурного перехвата. Никаких дополнительных нажатий клавиш или открытия диалоговых окон от пользователя не потребуется.
Рассмотрим ситуацию, когда по техническим причинам (например, при сложной работе в терминальном сервере RDP или при подключении нескольких разнородных сканеров) вам требуется сохранить работу именно через эмуляцию COM-порта. Чтобы решить проблему «засыпания» и накопления буфера, выполните следующие действия:
Старые версии обработок обслуживания в УТ 10.3 некорректно работают с портами с двузначными номерами (COM10 и выше). При автоматическом подключении Windows часто назначает сканеру высокие номера портов.
Переназначим номер порта вручную:
Если на рабочих местах установлена 64-разрядная версия платформы «1С:Предприятие 8.3», старый драйвер ScanOPOS.dll (который поставлялся в комплекте с УТ 10.3 много лет назад) работать не будет, так как он является строго 32-разрядным. При попытке инициализации порт будет зависать или выдавать ошибку отсутствия компоненты.
Решением является обновление компоненты интеграции на современную версию из состава БСП (Библиотеки стандартных подсистем), которая содержит скомпилированные библиотеки под обе архитектуры (x86 и x64).
Чтобы окончательно убедиться, как программа обрабатывает сигналы от сканера, посмотрим на пример стандартного кода, который отрабатывает в модуле управляемой или обычной формы при генерации события драйвером:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Проверяем, что событие пришло именно от сканера штрихкодов
Если ПолучитьЭкземплярПятогоДрайвера().ЭтоСигналСканера(Источник, Событие) Тогда
// Очищаем полученную строку от возможных пробелов и спецсимволов
ОчищенныйШтрихкод = СокрЛП(Данные);
// Вызываем экспортную процедуру обработки штрихкода
РаботаСТорговымОборудованием.ОбработатьШтрихкод(ОчищенныйШтрихкод, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
Благодаря правильной настройке суффикса (13) в режиме «Клавиатура», драйвер генерирует вызов этой процедуры автоматически при каждом сканировании, обеспечивая мгновенный поиск и добавление номенклатуры в табличную часть документа.