Рассмотрим частую и нетривиальную ситуацию: вы подключаете новый сканер штрих-кода, например, Honeywell 1470g, к старой конфигурации 1С, такой как "Управление торговлей 10.3". Сканер переведен в режим эмуляции COM-порта, система его видит, тест оборудования в 1С проходит успешно. При сканировании штрих-кода устройство издает характерный звуковой сигнал, но в 1С ничего не происходит — программа не заходит в обработчик ВнешнееСобытие. Разберем по шагам, как диагностировать и решить эту проблему.
Исходные данные проблемы:
Проанализируем возможные причины и методы их устранения, двигаясь от самых простых к более сложным.
Первое, что стоит проверить, — не пытаетесь ли вы поймать событие в режиме отладки. Механизм внешних событий в 1С на обычных формах устроен так, что обработчик ВнешнееСобытие может не срабатывать, когда активен отладчик, так как он блокирует некоторые асинхронные операции. Это связано с тем, что для обработки события требуется, чтобы приложение было в режиме ожидания ввода (ВводДоступен()).
Как проверить без отладки:
Добавьте в процедуру ВнешнееСобытие глобального модуля или модуля формы простую строку для вывода сообщения. Это позволит увидеть, вызывается ли процедура в принципе.
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Добавляем эту строку для проверки
Сообщить("Внешнее событие сработало! Источник: " + Источник + ", Событие: " + Событие + ", Данные: " + Данные);
// ... остальной код обработки события
КонецПроцедуры
Запустите 1С в обычном пользовательском режиме (не через "Отладку") и попробуйте отсканировать штрих-код. Если сообщение на экране появилось — значит, проблема была именно в отладчике, а сам механизм работает. Если сообщения нет — переходим к следующему шагу.
Суффикс — это специальный символ или последовательность символов, которые сканер добавляет в конец отсканированных данных. Для 1С этот символ является сигналом о том, что передача данных завершена и их можно обрабатывать. Без корректного суффикса драйвер 1С просто не поймет, что получил полный штрих-код, и не сгенерирует внешнее событие.
Ключевые моменты:
#13.
ScanOpos.dll, могут некорректно обрабатывать такую пару. Необходимо настроить сканер на передачу только одного символа — CR (#13).Как настроить: Настройка сканера Honeywell производится путем считывания управляющих штрих-кодов из официального руководства пользователя (User's Guide). Найдите в нем разделы, посвященные настройке суффиксов (Suffix), и последовательно отсканируйте коды для добавления суффикса CR.
В настройках торгового оборудования в 1С также убедитесь, что в поле "Суффикс" для вашего сканера указано значение #13.
Если суффикс настроен, а события все равно нет, нужно локализовать проблему. Возможно, данные от сканера вообще не доходят до COM-порта. Проверить это можно с помощью сторонних утилит для мониторинга COM-портов.
Что делаем:
Анализ результатов:
Для корректной работы сканера в режиме эмуляции COM-порта часто требуется установка специализированных драйверов от производителя.
Что проверить:
ScanOpos.dll — 32-битный, они не смогут взаимодействовать. Внешнее событие генерироваться не будет. Решением может стать установка 32-битной версии платформы 1С.Если все предыдущие шаги выполнены, но проблема не решена, причина может крыться в самой платформе 1С. Старые релизы платформы могут содержать ошибки в механизме обработки внешних событий от COM-устройств, которые уже давно исправлены в более свежих версиях.
В рассматриваемом случае именно это и оказалось решением. После того как пользователь обновил платформу 1С до актуальной на тот момент версии (8.3.22), сканер заработал в той же самой конфигурации УТ 10.3 без каких-либо дополнительных настроек.
Это говорит о том, что иногда самый эффективный способ решения — не поиск обходных путей, а обновление технологической платформы. Это устраняет множество скрытых ошибок и проблем совместимости с современным оборудованием и операционными системами.
Подведем итог. Если ваш сканер в режиме эмуляции COM-порта не вызывает внешнее событие в 1С, действуйте по следующему алгоритму:
Сообщить() в процедуре ВнешнееСобытие.#13) в сканере и в настройках драйвера 1С.Следуя этим шагам, вы сможете систематически продиагностировать и, с высокой вероятностью, решить проблему отсутствия внешнего события от сканера штрих-кода.