Идея проста - отлавливаем штрихкод и пересылаем его в другую процедуру (например, ОбработкаВнешнегоСобытия).
Выкладываю демонстрационную обработку - позволяет попробовать "драйвер" без изменения конфигурации. Просто запускаем, указываем параметры и драйвер будет работать до выхода из 1С.
Для полноценного использования лучше перенести процедуру в глобальный модуль. Сама процедура с переменными находится внутри обработки в мокселе.
"Драйвер" требует обязательного наличия префикса и суффикса, а также ВК Formex. Есть возможность настройки таймаута (полезно при работе через RDP по "плохим" каналам связи).
P.S. Хороший ликбез по сканерам от Че смотрим тут.
P.P.S. Можно просто добавить в нужную форму (или глобальный модуль) следующий код, и сканер начнет работать.
Перем fn_scan_kb_drv_ТЗ Экспорт; //ТЗ для хранения переменных
Процедура ПриНажатииКнопкиКлавиатуры(Конт,КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО) Экспорт
Если ФСО=0 тогда Возврат; КонецЕсли;
Если fn_scan_kb_drv_ТЗ.ВремяПоследнегоСимвола+fn_scan_kb_drv_ТЗ.Таймаут<_GetPerformanceCounter() тогда
//если задержка между нажатиями клавиш более указанной - значит это не сканер, а ручной ввод. Очищаем переменную со штрихкодом
fn_scan_kb_drv_ТЗ.Данные="";
fn_scan_kb_drv_ТЗ.Состояние="Ждем префикс";
КонецЕсли;
fn_scan_kb_drv_ТЗ.ВремяПоследнегоСимвола=_GetPerformanceCounter();
Если fn_scan_kb_drv_ТЗ.Состояние="Ждем префикс" тогда
fn_scan_kb_drv_ТЗ.Данные=fn_scan_kb_drv_ТЗ.Данные+Строка(КодКлавиши)+"+";
Если fn_scan_kb_drv_ТЗ.Данные=fn_scan_kb_drv_ТЗ.Префикс тогда
//Префикс поймали. Собираем штрихкод и ждем суффикс.
ФСО=0;
fn_scan_kb_drv_ТЗ.Состояние="Ждем суффикс";
fn_scan_kb_drv_ТЗ.Данные="";
Возврат;
КонецЕсли;
КонецЕсли;
Если fn_scan_kb_drv_ТЗ.Состояние="Ждем суффикс" тогда
//пришел суффикс, значит штрихкод передан полностью
fn_scan_kb_drv_ТЗ.Данные=fn_scan_kb_drv_ТЗ.Данные+Строка(КодКлавиши)+"+";
ФСО=0;
Если Прав(fn_scan_kb_drv_ТЗ.Данные,СтрДлина(fn_scan_kb_drv_ТЗ.Суффикс))=fn_scan_kb_drv_ТЗ.Суффикс тогда //поймали суффикс
fn_scan_kb_drv_ТЗ.Данные=Лев(fn_scan_kb_drv_ТЗ.Данные,СтрДлина(fn_scan_kb_drv_ТЗ.Данные)-СтрДлина(fn_scan_kb_drv_ТЗ.Суффикс));
fn_scan_kb_drv_ТЗ.Данные=СтрЗаменить(fn_scan_kb_drv_ТЗ.Данные,"+",РазделительСтрок);
fn_scan_kb_drv_ПолученныйШтрихКод="";
//формируем штрихкод из полученных кодов клавиш
Для fn_scan_kb_drv_х=1 по СтрКоличествоСтрок(fn_scan_kb_drv_ТЗ.Данные) Цикл
fn_scan_kb_drv_ТекСимвол=Число(СтрПолучитьСтроку(fn_scan_kb_drv_ТЗ.Данные,fn_scan_kb_drv_х));
Если fn_scan_kb_drv_ТекСимвол=16 тогда Продолжить; КонецЕсли; //сканеры любят нажимать шифт
Если fn_scan_kb_drv_ТекСимвол=20 тогда Продолжить; КонецЕсли; //сканеры любят нажимать капс
//обрабатываем нумпад + другие специфичные клавиши
Если fn_scan_kb_drv_ТекСимвол>96 тогда
Если fn_scan_kb_drv_ТекСимвол=96 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("0"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=97 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("1"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=98 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("2"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=99 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("3"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=100 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("4"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=101 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("5"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=102 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("6"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=103 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("7"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=104 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("8"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=105 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("9"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=106 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("*"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=107 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("+"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=109 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("-"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=110 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("."); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=111 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("/"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=186 тогда fn_scan_kb_drv_ТекСимвол=КодСимв(";"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=187 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("+"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=188 тогда fn_scan_kb_drv_ТекСимвол=КодСимв(","); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=189 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("-"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=190 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("."); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=191 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("/"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=192 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("~"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=219 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("["); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=220 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("\"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=221 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("]"); КонецЕсли;
Если fn_scan_kb_drv_ТекСимвол=222 тогда fn_scan_kb_drv_ТекСимвол=КодСимв("'"); КонецЕсли;
КонецЕсли;
fn_scan_kb_drv_ПолученныйШтрихКод=fn_scan_kb_drv_ПолученныйШтрихКод+Симв(fn_scan_kb_drv_ТекСимвол);
КонецЦикла;
Сервис=СоздатьОбъект("Сервис");
Сервис.ВнешнееСобытие("СканерВРазрыв","BarCodeValue",fn_scan_kb_drv_ПолученныйШтрихКод);
fn_scan_kb_drv_ТЗ.Данные="";
fn_scan_kb_drv_ТЗ.Состояние="Ждем префикс";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//======================================================================
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
//Данные - отсканированный штрихкод
Сообщить(""+Источник+": "+Событие+":"+Данные);
КонецПроцедуры // ОбработкаВнешнегоСобытия
fn_scan_kb_drv_ТЗ=СоздатьОбъект("ТаблицаЗначений");
fn_scan_kb_drv_ТЗ.НоваяКолонка("ВремяПоследнегоСимвола","Число");
fn_scan_kb_drv_ТЗ.НоваяКолонка("Префикс","Строка");
fn_scan_kb_drv_ТЗ.НоваяКолонка("Суффикс","Строка");
fn_scan_kb_drv_ТЗ.НоваяКолонка("Таймаут","Число");
fn_scan_kb_drv_ТЗ.НоваяКолонка("Состояние","Строка");
fn_scan_kb_drv_ТЗ.НоваяКолонка("Данные","Строка");
fn_scan_kb_drv_ТЗ.новаяСтрока();
fn_scan_kb_drv_ТЗ.Состояние="Ждем префикс";
fn_scan_kb_drv_ТЗ.ВремяПоследнегоСимвола=_GetPerformanceCounter();
fn_scan_kb_drv_ТЗ.ВыбратьСтроки(); fn_scan_kb_drv_ТЗ.ПолучитьСтроку();
fn_scan_kb_drv_ТЗ.Префикс="118"; //клавиша F7
fn_scan_kb_drv_ТЗ.Суффикс="13"; //Enter
fn_scan_kb_drv_ТЗ.Таймаут=100; //в милисекундах