При подключении сканера штрихкодов в режиме эмуляции COM-порта (CDC / Virtual COM Port) разработчики и системные администраторы нередко сталкиваются с ситуацией, когда устройство корректно определяется в операционной системе, передает данные в терминальные программы (например, PuTTY) и тестовые утилиты драйверов, но платформа 1С 7.7 никак не реагирует на считывание кодов. Предопределенная процедура ОбработкаВнешнегоСобытия не вызывается ни в модулях форм документов, ни в справочниках, ни в глобальном модуле.
Разберем детально механизм возникновения этой неполадки, ключевые причины сбоя и проверенный алгоритм настройки оборудования и внешних компонент.
Внешние компоненты для работы с торговым оборудованием (такие как ScanOPOS.dll от фирмы 1С или Scaner1C.dll от компании АТОЛ) непрерывно считывают поток байтов из открытого последовательного порта. Чтобы компонента поняла, что передача последовательности штрихкода завершена и эти данные необходимо упаковать в событие платформы, ей требуется специальный символ-разделитель — суффикс.
Если сканер передает в COM-порт только «чистые» цифры штрихкода без завершающего символа возврата каретки (CR / Enter, ASCII-код 13), внешняя компонента ожидает продолжения ввода данных. В результате тайм-аут сбрасывает буфер, а вызов события ОбработкаВнешнегоСобытия так и не инициируется.
Для исправления ситуации выполним следующие шаги:
0x0D / 0x0A в зависимости от таблицы в инструкции) и завершающий код Save / Set Suffix.Проанализируем программную часть конфигурации. Для успешного приема внешнего события в коде 1С 7.7 компонента должна быть правильно инициализирована и подключена к порту.
Типовой пример инициализации внешней компоненты в глобальном модуле или обработке обслуживания выглядит следующим образом:
Если ЗагрузитьВнешнююКомпоненту("ScanOPOS.dll") = 0 Тогда
Предупреждение("Не удалось загрузить компоненту ScanOPOS.dll!");
Иначе
Попытка
ОбъектСканера = СоздатьОбъект("AddIn.Scanner");
ОбъектСканера.PortNumber = 2; // Номер COM-порта
ОбъектСканера.BaudRate = 9600;
ОбъектСканера.DataBits = 8;
ОбъектСканера.StopBits = 1;
ОбъектСканера.DeviceEnabled = 1;
Исключение
Сообщить("Ошибка инициализации сканера: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
После успешного считывания штрихкода управление автоматически передается в предопределенную процедуру конфигурации:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Событие = "BarCodeValue" Тогда
Штрихкод = СокрЛП(Данные);
Сообщить("Получен штрихкод: " + Штрихкод);
// Вызов логики поиска номенклатуры
КонецЕсли;
КонецПроцедуры
При использовании 32-битной платформы 1С:Предприятие 7.7 в современных 64-разрядных операционных системах необходимо учитывать ряд технических ограничений:
ScanOPOS.dll и Scaner1C.dll являются 32-битными библиотеками. В Windows 10 x64 их ручную регистрацию следует выполнять строго через 32-битную версию утилиты regsvr32.exe, расположенную по пути C:\Windows\SysWOW64\regsvr32.exe, с правами администратора.ScanOPOS.dll корректно работают только с портами в диапазоне от COM1 до COM9. Если операционная система при подключении USB-эмулятора автоматически назначила порт COM10 или выше, откроем «Диспетчер устройств», зайдем в свойства порта, вкладку «Параметры порта» -> «Дополнительно» и переназначим номер порта на свободный диапазон от 1 до 9.Вопрос()) полностью блокирует очередь внешних событий. Если сканирование происходит в момент, когда на экране открыто модальное окно без собственной процедуры ОбработкаВнешнегоСобытия, событие не будет обработано.Таким образом, для восстановления работы сканера достаточно перепрограммировать сканер на передачу завершающего суффикса Enter (CR), проконтролировать номер виртуального порта в пределах первого десятка и убедиться в корректной регистрации 32-битной компоненты в системе.