Почему 1С 7.7 не отрабатывает процедуру ОбработкаВнешнегоСобытия при сканировании штрихкода?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

При подключении сканера штрихкодов в режиме эмуляции COM-порта (CDC / Virtual COM Port) разработчики и системные администраторы нередко сталкиваются с ситуацией, когда устройство корректно определяется в операционной системе, передает данные в терминальные программы (например, PuTTY) и тестовые утилиты драйверов, но платформа 1С 7.7 никак не реагирует на считывание кодов. Предопределенная процедура ОбработкаВнешнегоСобытия не вызывается ни в модулях форм документов, ни в справочниках, ни в глобальном модуле.

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

Главная причина: отсутствие суффикса завершения передачи (Enter / CR)

Внешние компоненты для работы с торговым оборудованием (такие как ScanOPOS.dll от фирмы 1С или Scaner1C.dll от компании АТОЛ) непрерывно считывают поток байтов из открытого последовательного порта. Чтобы компонента поняла, что передача последовательности штрихкода завершена и эти данные необходимо упаковать в событие платформы, ей требуется специальный символ-разделитель — суффикс.

Если сканер передает в COM-порт только «чистые» цифры штрихкода без завершающего символа возврата каретки (CR / Enter, ASCII-код 13), внешняя компонента ожидает продолжения ввода данных. В результате тайм-аут сбрасывает буфер, а вызов события ОбработкаВнешнегоСобытия так и не инициируется.

Для исправления ситуации выполним следующие шаги:

  1. Откроем руководство пользователя к конкретной модели сканера (например, Symbol / Zebra LS4208, LS2208).
  2. Найдем раздел настройки суффиксов (Scan Options или Suffix / Prefix Values).
  3. Последовательно отсканируем управляющие штрихкоды: Scan Suffix, затем код символа Enter (или шестнадцатеричный код 0x0D / 0x0A в зависимости от таблицы в инструкции) и завершающий код Save / Set Suffix.
  4. Если используется специализированная сервисная утилита настройки от производителя (например, Zebra 123Scan), подключимся к сканеру и принудительно добавим действие Send Enter / CR в правило обработки данных (Data Formatting).

Особенности работы с внешними компонентами ScanOPOS и Scaner1C

Проанализируем программную часть конфигурации. Для успешного приема внешнего события в коде 1С 7.7 компонента должна быть правильно инициализирована и подключена к порту.

Типовой пример инициализации внешней компоненты в глобальном модуле или обработке обслуживания выглядит следующим образом:


Если ЗагрузитьВнешнююКомпоненту("ScanOPOS.dll") = 0 Тогда
    Предупреждение("Не удалось загрузить компоненту ScanOPOS.dll!");
Иначе
    Попытка
        ОбъектСканера = СоздатьОбъект("AddIn.Scanner");
        ОбъектСканера.PortNumber = 2; // Номер COM-порта
        ОбъектСканера.BaudRate = 9600;
        ОбъектСканера.DataBits = 8;
        ОбъектСканера.StopBits = 1;
        ОбъектСканера.DeviceEnabled = 1;
    Исключение
        Сообщить("Ошибка инициализации сканера: " + ОписаниеОшибки());
    КонецПопытки;
КонецЕсли;

После успешного считывания штрихкода управление автоматически передается в предопределенную процедуру конфигурации:


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

Тонкости настройки виртуального COM-порта в Windows 10 x64

При использовании 32-битной платформы 1С:Предприятие 7.7 в современных 64-разрядных операционных системах необходимо учитывать ряд технических ограничений:

  1. Регистрация 32-битных библиотек: Файлы ScanOPOS.dll и Scaner1C.dll являются 32-битными библиотеками. В Windows 10 x64 их ручную регистрацию следует выполнять строго через 32-битную версию утилиты regsvr32.exe, расположенную по пути C:\Windows\SysWOW64\regsvr32.exe, с правами администратора.
  2. Ограничение номеров COM-портов: Ранние версии библиотеки ScanOPOS.dll корректно работают только с портами в диапазоне от COM1 до COM9. Если операционная система при подключении USB-эмулятора автоматически назначила порт COM10 или выше, откроем «Диспетчер устройств», зайдем в свойства порта, вкладку «Параметры порта» -> «Дополнительно» и переназначим номер порта на свободный диапазон от 1 до 9.
  3. Энергосбережение USB-концентраторов: В свойствах виртуального COM-порта и корневых USB-концентраторов в «Диспетчере устройств» рекомендуется снять флаг «Разрешить отключение этого устройства для экономии энергии». Это предотвратит засыпание драйвера порта и потерю дескриптора (handle) компонентой 1С при простое.
  4. Блокировка модальными окнами: Обратим внимание, что в платформе 1С 7.7 открытие модальных диалогов (например, модального выбора из справочника или окна с функцией Вопрос()) полностью блокирует очередь внешних событий. Если сканирование происходит в момент, когда на экране открыто модальное окно без собственной процедуры ОбработкаВнешнегоСобытия, событие не будет обработано.

Таким образом, для восстановления работы сканера достаточно перепрограммировать сканер на передачу завершающего суффикса Enter (CR), проконтролировать номер виртуального порта в пределах первого десятка и убедиться в корректной регистрации 32-битной компоненты в системе.

← На главную