При подключении сканеров штрихкодов к конфигурациям на обычных формах (например, «1С:Управление торговлей 10.3») разработчики и системные администраторы нередко сталкиваются со следующей ситуацией: сканер успешно переведен в режим эмуляции COM-порта, драйвер установлен, встроенный тест оборудования в параметрах 1С видит считанный код, однако при открытии рабочего документа или справочника процедура ВнешнееСобытие не вызывается. Разберем по шагам причины такого поведения платформы и внешних компонент, а также рассмотрим практические способы решения этой проблемы.
Проанализируем распространенную техническую особенность старых внешних компонент (включая классическую ScanOPOS.dll и смежные драйверы торгового оборудования). Ранние версии компонент некорректно обрабатывали порты с номерами выше COM4 (а иногда и выше COM3), если имя порта передавалось драйверу в стандартном виде. Даже если в мастере настроек оборудования порт опрашивался успешно, при передаче управления обработчикам событий рабочая форма не могла корректно зарегистрировать прослушивание порта.
Для исправления ситуации выполним переназначение номера порта в операционной системе:
COM1 или COM2. Если они заняты устаревшими системными ресурсами, освободим их или назначим COM3.Рассмотрим следующую частую проблему: драйвер торгового оборудования 1С ожидает конкретный завершающий символ (суффикс), по которому внешняя компонента определяет окончание считывания штрихкода. Если сканер передает последовательность CR (код 13) и LF (код 10), а в конфигурации 1С задан только суффикс CR или суффиксы отключены вовсе, генерации внешнего события не произойдет.
Выполним проверку и синхронизацию настроек:
Посмотрим на программную часть конфигурации «Управление торговлей 10.3». Для того чтобы внешние события от сканера направлялись в активное окно, форма должна быть явным образом зарегистрирована в механизме торгового оборудования при ее открытии и разрегистрирована при закрытии.
Проверим наличие и корректность кода в модуле формы документа или справочника:
Процедура ПриОткрытии()
// Подключаем форму к обработке событий торгового оборудования
ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
КонецПроцедуры
Процедура ПриЗакрытии()
// Обязательно отключаем клиента для освобождения порта
ПолучитьСерверТО().ОтключитьКлиента(ЭтаФорма);
КонецПроцедуры
Кроме того, типовой механизм торгового оборудования выполняет опрос формы на предмет поддерживаемых типов устройств. Если в модуле формы отсутствует функция ПоддерживаетсяВидТО, система проигнорирует регистрацию слушателя событий:
Функция ПоддерживаетсяВидТО(Вид) Экспорт
Возврат Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода;
КонецФункции
Выясним еще одну важную деталь обычного приложения: процедура ВнешнееСобытие не связывается с платформой автоматически только по совпадению имени. Если вы вручную добавили код процедуры в модуль, необходимо убедиться, что обработчик назначен в метаданных формы.
ВнешнееСобытие.
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Проверяем тип события и обрабатываем штрихкод
Если Не РаботаСТорговымОборудованием.ПроверитьСобытиеТО(Источник, Событие, Данные) Тогда
Возврат;
КонецЕсли;
ОбработатьШтрихкод(Данные);
КонецПроцедуры
Если специфика виртуального COM-порта вызывает сбои или не удается настроить работу через внешнюю компоненту, рассмотрим альтернативные варианты подключения:
F7 вместе с суффиксом Enter. В этом случае при чтении штрихкода 1С автоматически будет вызывать стандартное диалоговое окно поиска по штрихкоду без необходимости использования COM-порта.ВнешнееСобытие.