Тема генерации события со сканера штрихкодов в разрыв клавиатуры поднималась не раз. Может быть я плохо искал, но ршения, которе бы меня устроило, я так и не нашел. На многочисленных формах довольно часто предлагают использовать драйвера, которые умеют эмулировать COM порт (это касается только USB сканера, но не KB). Как по мне -- это не всегда хорошо. Люди, работающие с этими драйверами регулярно жалутся, что шрихкоды читаются иногда не верно, с ошибками, или вообще прекращается прием данных со сканера. Кроме того, при работе через удаленный рабочий стол тоже возникают некоторые проблемы с пробросом портов от клиента к серверу, а тем более если таковых подключений не один десяток... Ну а об использовании сканера в разрыв клавиатуры "as is" вообще речь не ведется. Крайне неудобно в каждой форме заводить поле для считываемого штрихкода, да еще и следить за тем, что бы курсор стоял именно в этом поле, а не где попало.
Все эти проблемы поможет решить приведенная методика генерации внешнего события, как для USB, так и для чистого KB сканера.
В публикации представлены демо конфигурации для платформ 7.7 и для 8.2 (управляемые формы)
Важно:
Сканер штрихкодов должен быть запрограммирован таким образом, что бы перед штрихкодом выдавался какой-нибудь служебный символ (префикс).
В текущих примерах для 7.7 используется префикс '$'. Для 8.2 -- 'C' Prefix. (тестировалось сканером Metrologic MS9520)
Это и есть единственный минус данного решения. Тот символ, который будет запрограммирован в сканере, будет невозможно набрать с клавиатуры (хотя читать/не читать можно тоже задать программно). Решено: символ '$' как текст можно ввести, например, клавишей F3 (для 7.7)
Потестить данный пример можно и без наличия сканера штрихкодов. В любой из форм можно набрать символ '$' и ввести штрихкод с клавиатуры, закончив ввод клавишей [Enter]. Результат будет одинаковым...
(для тестирования без сканера в 8.2 в настройке "Использовать сканер штрихкодов" поставить НЕТ)
Чуть было не забыл... В приведенном примере решена проблема транслитерации символов, если сканер "в разрыв" считывает данные, когда включена русская раскладка клавиатуры. Для тех, кто работает только с числовыми штрихкодами это не актуально, а вот тем, кому приходится работать с серийными номерами -- это проблема. Дело в том что сканеры "в разрыв" при включенной русской раскладке штрихкод [s/n00557F452AZZUI] считает как [ы/т00557А452ФЯЯГШ] что совсем не устроит ни программу учета, ни самого пользователя :)
Еще один момент... для нормальной отработки сканера в 8.2 кроме префикса 'C' (Enable "C" Prefix) в нем желательно запрограммировать задержку (25 msec Intercharacter Delay)
Источник внешней компоненты перехвата клавиатуры для 8.2: //infostart.ru/public/91306/