Проблема подключения торгового оборудования в 1С — одна из самых распространенных задач, с которыми сталкивается разработчик или системный администратор. Ситуация, когда сканер Honeywell 1450g успешно проходит тест в настройках, но отказывается реагировать в документах или справочниках, является классической. Разберем подробно, почему процедура ВнешнееСобытие может не вызываться, и какие шаги необходимо предпринять для устранения этой неисправности.
Для начала проанализируем, как работает механизм внешнего события. Когда сканер считывает штрихкод, драйвер (например, 1С:Сканеры штрихкода) получает данные из порта (COM или клавиатурного буфера) и инициирует событие в платформе 1С. Если процедура ВнешнееСобытие в модуле формы не срабатывает, это может означать одно из трех: данные не считаются завершенными (нет суффикса), драйвер не «слушает» порт в конкретной форме или процедура обработчика объявлена некорректно.
Это критически важный момент. Для того чтобы 1С поняла, что передача штрихкода завершена, сканер должен передать специальный символ — суффикс. Чаще всего это символ возврата каретки (CR — Carriage Return), который соответствует коду ASCII 13.
Рассмотрим порядок действий:
#13 в конце каждого считанного кода.13 (CR).#13.Важно: Если сканер работает в режиме эмуляции клавиатуры, убедитесь, что в настройках драйвера в 1С также выбран порт «Клавиатура», а суффикс установлен в значение 13. Без этого драйвер может «бесконечно» ждать продолжения ввода данных, и событие не будет сгенерировано.
Проанализируем типичную ошибку начинающих разработчиков. Процедура ВнешнееСобытие должна иметь строго определенное количество параметров и быть правильно связана с событием формы. Если вы написали заголовок процедуры вручную, велика вероятность опечатки или несоответствия метаданным.
Рекомендуем не писать код вручную, а выбрать событие ВнешнееСобытие в палитре свойств формы и нажать на лупу. Платформа сама сгенерирует заготовку:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Сообщим параметры для проверки связи
Сообщить("Источник: " + Источник);
Сообщить("Событие: " + Событие);
Сообщить("Данные: " + Данные);
// Здесь должна быть логика обработки штрихкода
КонецПроцедуры
Если вы используете обычные формы (как в УТ 10.3), убедитесь, что в свойствах формы в строке "Внешнее событие" указано имя этой процедуры. Если поле пустое — событие игнорируется.
В современных конфигурациях (УТ 11, БП 3.0, Розница 2.x) на управляемых формах используется Библиотека Подключаемого Оборудования (БПО). В этом случае недостаточно просто иметь процедуру в модуле. Сканер нужно программно «подключить» при открытии формы, чтобы драйвер начал перехватывать данные.
Посмотрим на пример кода, который необходимо разместить в модуле формы для работы с оборудованием:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Подключаем сканер при открытии формы
ОповещенияПриПодключении = Новый ОписаниеОповещения("ПодключитьСканерШКЗавершение", ЭтотОбъект);
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПоТипу(ОповещенияПриПодключении, УникальныйИдентификатор, "СканерШтрихкода");
КонецПроцедуры
&НаКлиенте
Процедура ПодключитьСканерШКЗавершение(РезультатВыполнения, ДополнительныеПараметры) Экспорт
// Если результат Истина, сканер готов к работе
СканерШтрихкодаПодключен = РезультатВыполнения.Результат;
КонецПроцедуры
Этот код инициализирует подписку формы на события от сканеров. Без вызова НачатьПодключениеОборудованиеПоТипу платформа не будет транслировать данные в ВнешнееСобытие конкретной формы, даже если сканер настроен верно в системе.
Выясним причину, почему COM-порт может быть предпочтительнее. Сканеры Honeywell 1450g часто переводят в режим USB Serial (COM-эмуляция). Это позволяет 1С работать со сканером монопольно и стабильно.
Однако здесь есть подводные камни:
Если вы работаете через удаленный рабочий стол, проброс COM-порта может быть нестабильным. В этом случае часто помогает перевод сканера в режим клавиатуры, но с использованием драйвера NativeApi от 1С. Современный драйвер NativeApi умеет перехватывать клавиатурный ввод сканера (HID-устройство) и преобразовывать его во внешнее событие без использования виртуальных COM-портов. Это избавляет от проблем с занятыми портами и их пробросом через RDP.
Для этого в настройках оборудования 1С выберите драйвер "1С:Сканеры штрихкода (NativeApi)" и установите порт "Клавиатура".
Для восстановления работоспособности Honeywell 1450g выполните следующие действия: сбросьте настройки сканера к заводским, добавьте суффикс CR (#13) с помощью управляющего штрихкода, проверьте наличие этого суффикса в настройках 1С и убедитесь, что процедура ВнешнееСобытие в вашей форме не только существует, но и вызывается за счет корректного подключения оборудования при открытии. Соблюдение этих правил гарантирует стабильную работу торгового оборудования.