Как исправить зависание COM-порта и настроить сканер Symbol LS2208 в 1С:Управление торговлей 10.3

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

При работе с торговым оборудованием в старых конфигурациях 1С на обычных формах (таких как Управление торговлей редакции 10.3) на современной платформе 1С:Предприятие 8.3 системные администраторы часто сталкиваются с аппаратными сбоями. Типичная проблема: популярный сканер Symbol (Zebra) LS2208, настроенный на работу через виртуальный COM-порт, перестает передавать данные в программу в реальном времени. При этом физически сканер работает, а отсканированные штрихкоды накапливаются в буфере операционной системы и «выплескиваются» одной длинной строкой только при открытии окна теста устройства в драйвере 1С.

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

Выясняем причину: почему штрихкоды «застревают» в COM-порту

Для начала проанализируем физику процесса работы виртуального COM-порта (USB CDC Emulation) в операционной системе Windows при взаимодействии с платформой 1С. Когда сканер считывает этикетку, он отправляет пакет данных в последовательный порт. Чтобы эти данные отобразились в открытом документе 1С (например, в «Реализации товаров и услуг» или «Чеке ККМ»), программа должна постоянно «прослушивать» этот порт в фоновом режиме.

В случае сбоя или конфликта оборудования происходит следующее:

  1. При запуске 1С или открытии формы документа компонента драйвера пытается монопольно захватить COM-порт. Если порт занят другим процессом, заблокирован операционной системой или драйвер некорректно инициализировался, 1С молча прекращает прослушивание.
  2. Операционная система Windows продолжает принимать сигналы от сканера на уровне железа и складывает их в буфер виртуального COM-порта.
  3. Поскольку обработчик ожидания 1С не активен, внешнее событие ОбработкаВнешнегоСобытия в модуле формы не генерируется. Программа никак не реагирует на сканирование.
  4. Когда мы открываем форму «Тест устройства» в настройках торгового оборудования, драйвер принудительно инициализирует порт заново, отправляя команду сброса буфера. В этот момент все накопленные штрихкоды моментально считываются драйвером и выводятся на экран сплошным потоком.

Эта проблема носит регулярный характер при использовании устаревших 32-битных библиотек драйверов (например, классического ScanOPOS.dll) на современных операционных системах Windows 10/11 и платформе 1С v8.3.

Разбираем главное решение: режим клавиатурного перехвата (USB HID)

Среди начинающих специалистов бытует миф: если перевести сканер в режим обычной клавиатуры (USB Keyboard Emulation), то для ввода штрихкода кассиру придется каждый раз нажимать горячую клавишу F7 или вручную активировать поле ввода на форме. На самом деле это не так.

Современные версии драйвера «1С:Сканер штрихкода» (начиная с версий NativeApi) умеют перехватывать быстрый клавиатурный ввод. Драйвер анализирует скорость нажатия клавиш: человек физически не может ввести 13 цифр штрихкода за доли секунды, а сканер делает это мгновенно. Если драйвер фиксирует такой сверхбыстрый ввод, заканчивающийся специальным символом завершения (суффиксом), он блокирует передачу этих символов в активное поле ввода операционной системы и генерирует стандартное Внешнее событие в 1С. Программа отрабатывает точно так же, как если бы сканер работал по COM-порту.

Давайте пошагово настроим эту схему работы.

Шаг 1. Программирование самого сканера Symbol LS2208

Прежде чем настраивать 1С, необходимо перепрограммировать сам физический сканер с помощью управляющих штрихкодов из официальной инструкции (Product Reference Guide) Zebra/Symbol LS2208.

  1. Найдите в инструкции и последовательно считайте штрихкод Set Defaults (Сброс на заводские настройки). Это переведет сканер в базовый режим эмуляции USB-клавиатуры.
  2. Считайте системный штрихкод добавления суффикса (обычно называется Write Suffix или находится в разделе Data Formatting -> Prefix/Suffix Values).
  3. Запрограммируйте отправку суффикса Carriage Return (CR), который соответствует клавише Enter (ASCII-код 13). Это критически важно: именно по этому символу драйвер 1С будет определять окончание передачи штрихкода.

Шаг 2. Подключение и настройка драйвера в 1С:УТ 10.3

Переходим к настройке программной части в конфигурации «Управление торговлей»:

  1. Откройте меню Сервис -> Торговое оборудование -> Подключение и настройка торгового оборудования.
  2. Перейдите на вкладку Сканеры штрихкода и создайте новое устройство.
  3. В качестве обработки обслуживания выберите актуальную «1С:Сканер штрихкода». Если вы используете платформу 1С 8.3 (особенно 64-битную версию клиента), убедитесь, что библиотека драйвера поддерживает технологию NativeApi.
  4. Откройте параметры созданного устройства для детальной настройки:
    • В поле Порт вместо конкретного значения (например, COM3) выберите значение «Клавиатура» (в некоторых версиях драйвера — «Keyboard»).
    • В поле Префикс установите значение «NONE» (пусто).
    • В поле Суффикс укажите значение «13» (что соответствует клавише Enter).
  5. Нажмите кнопку Записать и закройте форму настроек.

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

Альтернативное решение: если необходим именно виртуальный COM-порт

Рассмотрим ситуацию, когда по техническим причинам (например, при сложной работе в терминальном сервере RDP или при подключении нескольких разнородных сканеров) вам требуется сохранить работу именно через эмуляцию COM-порта. Чтобы решить проблему «засыпания» и накопления буфера, выполните следующие действия:

1. Устранение конфликта номеров портов в Windows

Старые версии обработок обслуживания в УТ 10.3 некорректно работают с портами с двузначными номерами (COM10 и выше). При автоматическом подключении Windows часто назначает сканеру высокие номера портов.

Переназначим номер порта вручную:

  1. Откройте Диспетчер устройств Windows.
  2. Разверните ветку Порты (COM и LPT).
  3. Найдите ваш виртуальный порт сканера (например, Zebra CDC ACM Virtual COM Port), нажмите правой кнопкой мыши и выберите Свойства.
  4. Перейдите на вкладку Параметры порта и нажмите кнопку Дополнительно.
  5. В выпадающем списке Номер COM-порта выберите любой свободный порт в диапазоне от COM1 до COM9. Подтвердите изменения и перезагрузите компьютер.

2. Решение проблемы разрядности платформы 1С

Если на рабочих местах установлена 64-разрядная версия платформы «1С:Предприятие 8.3», старый драйвер ScanOPOS.dll (который поставлялся в комплекте с УТ 10.3 много лет назад) работать не будет, так как он является строго 32-разрядным. При попытке инициализации порт будет зависать или выдавать ошибку отсутствия компоненты.

Решением является обновление компоненты интеграции на современную версию из состава БСП (Библиотеки стандартных подсистем), которая содержит скомпилированные библиотеки под обе архитектуры (x86 и x64).

Анализируем код: как 1С обрабатывает внешнее событие

Чтобы окончательно убедиться, как программа обрабатывает сигналы от сканера, посмотрим на пример стандартного кода, который отрабатывает в модуле управляемой или обычной формы при генерации события драйвером:


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    
    // Проверяем, что событие пришло именно от сканера штрихкодов
    Если ПолучитьЭкземплярПятогоДрайвера().ЭтоСигналСканера(Источник, Событие) Тогда
        
        // Очищаем полученную строку от возможных пробелов и спецсимволов
        ОчищенныйШтрихкод = СокрЛП(Данные);
        
        // Вызываем экспортную процедуру обработки штрихкода
        РаботаСТорговымОборудованием.ОбработатьШтрихкод(ОчищенныйШтрихкод, ЭтотОбъект);
        
    КонецЕсли;

КонецПроцедуры

Благодаря правильной настройке суффикса (13) в режиме «Клавиатура», драйвер генерирует вызов этой процедуры автоматически при каждом сканировании, обеспечивая мгновенный поиск и добавление номенклатуры в табличную часть документа.

← На главную