Проблема достаточна известная, материалов достаточно, в том числе и решений с помощью внешних компонент, библиотек.
Хочу поделится еще одним способом, который пришлось реализовать из-за невозможности подключения сканера в режиме COM-порта.
Решение в общем-то очевидное и простое, однако натолкнулся на некоторые трудности в его реализации.
Итак, пускай есть следующая форма для ввода штрих-кода:
- создадим реквизит с типом строка и связанное с ним поле текстового документа (! но не поле ввода) на форме - это поле будет исключительно для проверки раскладки (поле имеет цвет фона формы и поэтому будет казаться невидимым).
- перед вводом штрих-кода нужно будет "послать" в созданное поле с помощью Wscript какую-нибудь клавишу
- проверяем клавишу
- продолжаем действие (например, показать окно ввода штрих-кода) или показываем предупреждение о необходимости переключить раскладку
Вроде все просто, однако натолкнулся на проблему, связанную с тем, что при попытке получить текст из этого поля сразу после отправки клавишу будет получена пустая строка "". Понятно, "не успевает" 1с).
Подключаем обработчик ожидания с минимальным интервалом. В этом обработчике уже получаем текст и делаем проверку, не забыв сразу его отключить.
Теперь уже сам код:
1. Процедура нажатия на кнопку с подключением обработчика ожидания
&НаКлиенте
Процедура ВвестиШтрихКод(Команда)
ВведенныйШтрихКод = "";
ПроверкаРаскладки = "";
ТекущийЭлемент = Элементы.ПроверкаРаскладки;
WshShell = Новый COMОбъект("Wscript.Shell");
WshShell.SendKeys("+2");
WshShell.SendKeys("^a");
WshShell = Неопределено;
ПодключитьОбработчикОжидания("ВвестиШтрихКодПроверитьРаскладкуЗавершение", 1);
КонецПроцедуры
2. Сам обработчик ожидания
&НаКлиенте
Процедура ВвестиШтрихКодПроверитьРаскладкуЗавершение()
ВведенныйСимвол = Элементы.ПроверкаРаскладки.ВыделенныйТекст;
ОтключитьОбработчикОжидания("ВвестиШтрихКодПроверитьРаскладкуЗавершение");
Если ВведенныйСимвол <> "@" Тогда
ПоказатьПредупреждение(, "Необходимо переключиться на английский язык!");
Иначе
ОпОп = Новый ОписаниеОповещения("ВводШтрихКодаЗавершение", ЭтотОбъект);
ПоказатьВводСтроки(ОпОп, , "Введите штрих-код:");
КонецЕсли;
КонецПроцедуры
3. Действие после проверки раскладки
&НаКлиенте
Процедура ВводШтрихКодаЗавершение(Текст, ДопПар) Экспорт
Если Текст = Неопределено Тогда
Возврат;
КонецЕсли;
ВведенныйШтрихКод = Текст;
КонецПроцедуры
В заключение, прикладываю саму обработку с примером для управляемых форм.
Дополнительная информация
Разработка велась на платформе 8.3.20.1674.
Поддерживается толстый и тонкий клиент.
Операционная система Winowds 10.