Почему сканер штрих-кода не вызывает внешнее событие (ВнешнееСобытие) в 1С?

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

Рассмотрим частую и нетривиальную ситуацию: вы подключаете новый сканер штрих-кода, например, Honeywell 1470g, к старой конфигурации 1С, такой как "Управление торговлей 10.3". Сканер переведен в режим эмуляции COM-порта, система его видит, тест оборудования в 1С проходит успешно. При сканировании штрих-кода устройство издает характерный звуковой сигнал, но в 1С ничего не происходит — программа не заходит в обработчик ВнешнееСобытие. Разберем по шагам, как диагностировать и решить эту проблему.

Исходные данные проблемы:

  1. Оборудование: Сканер Honeywell 1470g.
  2. Режим подключения: Эмуляция COM-порта (USB Serial).
  3. Конфигурация: УТ 10.3 на обычных формах.
  4. Симптомы: Тест оборудования в 1С (меню "Сервис" -> "Параметры") показывает "COM3 ОК, Keyboard OK". При сканировании есть звук, но событие в 1С не генерируется.

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

Шаг 1. Исключаем влияние отладчика

Первое, что стоит проверить, — не пытаетесь ли вы поймать событие в режиме отладки. Механизм внешних событий в 1С на обычных формах устроен так, что обработчик ВнешнееСобытие может не срабатывать, когда активен отладчик, так как он блокирует некоторые асинхронные операции. Это связано с тем, что для обработки события требуется, чтобы приложение было в режиме ожидания ввода (ВводДоступен()).

Как проверить без отладки:

Добавьте в процедуру ВнешнееСобытие глобального модуля или модуля формы простую строку для вывода сообщения. Это позволит увидеть, вызывается ли процедура в принципе.


Процедура ВнешнееСобытие(Источник, Событие, Данные)
    // Добавляем эту строку для проверки
    Сообщить("Внешнее событие сработало! Источник: " + Источник + ", Событие: " + Событие + ", Данные: " + Данные);

    // ... остальной код обработки события
КонецПроцедуры

Запустите 1С в обычном пользовательском режиме (не через "Отладку") и попробуйте отсканировать штрих-код. Если сообщение на экране появилось — значит, проблема была именно в отладчике, а сам механизм работает. Если сообщения нет — переходим к следующему шагу.

Шаг 2. Проверка суффикса — "камень преткновения"

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

Ключевые моменты:

  1. Какой суффикс нужен? Чаще всего используется символ возврата каретки (Carriage Return, CR, код 13). В настройках драйвера 1С он обычно обозначается как #13.
  2. Настройки должны быть синхронизированы. Важно, чтобы один и тот же суффикс был установлен и в настройках самого сканера, и в параметрах драйвера в 1С.
  3. Составной суффикс CR+LF. Некоторые сканеры по умолчанию настроены на передачу двух символов: CR (код 13) и LF (Line Feed, код 10). Старые драйверы, такие как ScanOpos.dll, могут некорректно обрабатывать такую пару. Необходимо настроить сканер на передачу только одного символа — CR (#13).

Как настроить: Настройка сканера Honeywell производится путем считывания управляющих штрих-кодов из официального руководства пользователя (User's Guide). Найдите в нем разделы, посвященные настройке суффиксов (Suffix), и последовательно отсканируйте коды для добавления суффикса CR.

В настройках торгового оборудования в 1С также убедитесь, что в поле "Суффикс" для вашего сканера указано значение #13.

Шаг 3. Диагностика COM-порта вне 1С

Если суффикс настроен, а события все равно нет, нужно локализовать проблему. Возможно, данные от сканера вообще не доходят до COM-порта. Проверить это можно с помощью сторонних утилит для мониторинга COM-портов.

Что делаем:

  1. Скачайте любую терминальную программу, например, PuTTY, или специализированные утилиты вроде commtest.
  2. Закройте 1С, чтобы освободить COM-порт.
  3. Запустите утилиту и настройте подключение к вашему порту (в нашем примере это COM3). Параметры скорости и четности обычно стандартные (9600, 8, N, 1), но лучше уточнить их в документации к сканеру.
  4. Откройте порт в утилите и отсканируйте любой штрих-код.

Анализ результатов:

Шаг 4. Проблемы с драйверами

Для корректной работы сканера в режиме эмуляции COM-порта часто требуется установка специализированных драйверов от производителя.

Что проверить:

Шаг 5. Обновление платформы "1С:Предприятие"

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

В рассматриваемом случае именно это и оказалось решением. После того как пользователь обновил платформу 1С до актуальной на тот момент версии (8.3.22), сканер заработал в той же самой конфигурации УТ 10.3 без каких-либо дополнительных настроек.

Это говорит о том, что иногда самый эффективный способ решения — не поиск обходных путей, а обновление технологической платформы. Это устраняет множество скрытых ошибок и проблем совместимости с современным оборудованием и операционными системами.

Итоги и план действий

Подведем итог. Если ваш сканер в режиме эмуляции COM-порта не вызывает внешнее событие в 1С, действуйте по следующему алгоритму:

  1. Проверьте работу без отладчика, используя Сообщить() в процедуре ВнешнееСобытие.
  2. Проверьте и настройте суффикс. Он должен быть одинаковым (рекомендуется #13) в сканере и в настройках драйвера 1С.
  3. Проведите диагностику COM-порта с помощью сторонней утилиты, чтобы убедиться, что данные от сканера вообще поступают в систему.
  4. Убедитесь в наличии и корректности драйверов: установите официальный драйвер эмуляции COM-порта от производителя (например, HSM USB Serial Driver) и проверьте совместимость разрядности платформы 1С и драйвера.
  5. Если ничего не помогло — обновите платформу "1С:Предприятие" до свежего стабильного релиза. Велика вероятность, что проблема вызвана ошибкой в старой версии платформы.

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

← На главную