В процессе автоматизации розничной торговли часто возникает задача минимизировать лишние действия пользователя. Типичный пример — необходимость нажимать функциональную клавишу F8 (или F7 в зависимости от конфигурации) для вызова окна ввода штрих-кода перед непосредственным сканированием товара. Рассмотрим подробно, как заставить систему делать это автоматически при срабатывании луча сканера.
Большинство сканеров штрих-кода по умолчанию работают в режиме эмуляции клавиатуры (HID). Это значит, что для компьютера сканер — это просто очень быстро печатающий человек. Чтобы при сканировании система «думала», что сначала была нажата клавиша F8, а затем введены цифры кода, необходимо запрограммировать в сканере Префикс.
Проанализируем этот процесс шаг за шагом:
Важный нюанс: при таком подходе возникает риск «скорострельности». Как отмечают опытные специалисты, операционная система Windows может не успеть обработать нажатие F8 (открытие окна) до того, как сканер начнет передавать символы самого штрих-кода. В результате первые цифры кода могут потеряться. Чтобы этого избежать, в настройках сканера следует установить параметр Inter-Character Delay (задержка между символами) в значение 20–50 мс.
Разберем, почему опытные программисты 1С считают работу через эмуляцию клавиатуры устаревшим методом. При использовании COM-порта 1С постоянно «слушает» порт в фоновом режиме. Как только данные поступают, срабатывает ВнешнееСобытие, и система обрабатывает код мгновенно, без необходимости открывать какие-либо промежуточные окна по F8.
Для реализации этого метода выполним следующие действия:
Проанализируем преимущество: в этом случае 1С сама понимает, что пришли данные штрих-кода, и вызывает процедуру поиска товара в документе. Пользователю вообще не нужно следить за фокусом ввода или нажимать кнопки.
Если по каким-то причинам изменить настройки сканера невозможно, а лезть глубоко в логику конфигурации не хочется, можно воспользоваться «костылем» в виде COM-объекта Windows, который программно пошлет команду нажатия клавиши в активное окно. Рассмотрим пример кода, который можно добавить в обработчик события сканирования (если оно уже настроено):
// Создаем объект для управления оболочкой Windows
Ws = Новый COMОбъект("Wscript.shell");
// Имитируем нажатие функциональной клавиши F8
Ws.SendKeys("{F8}");
Однако стоит помнить, что этот метод считается нестабильным, так как он сильно зависит от того, какое окно в данный момент активно и успеет ли фокус переместиться в нужное поле.
Если ваша конфигурация построена на базе современных библиотек 1С (БСП или БПО), то ручное нажатие клавиш для поиска — это чаще всего признак неверной настройки системы. Рассмотрим, как это работает в штатном режиме:
В коде формы документа обычно присутствует инициализация оборудования. Проверьте наличие вызова функции подключения сканера:
Процедура ПриОткрытии(Отказ)
// Подключаем сканер штрихкода для текущей формы
МенеджерОборудованияКлиент.ПодключитьОборудованиеПоТипу(УникальныйИдентификатор,
Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода);
КонецПроцедуры
Если сканер правильно настроен в справочнике оборудования, то при считывании будет генерироваться событие ВнешнееСобытие. Выясним причину, по которой оно может не работать: часто это связано с тем, что в настройках драйвера внутри 1С не указаны префиксы или суффиксы, которые реально выдает сканер. Обязательно проверьте, чтобы Суффикс (обычно это CR или #13) совпадал в настройках устройства и в параметрах 1С.
Проанализируем ситуацию и выберем оптимальный путь:
Inter-Character Delay.Wscript.shell, но учитываем возможные задержки интерфейса.Важный совет: Прежде чем приступать к сложным настройкам, попробуйте просто сбросить сканер на заводские настройки (Scan Capabilities / Recall Defaults) и настроить заново драйвер «1С:Сканеры штрихкода (NativeApi)». В современных версиях 1С это решает 90% проблем с автоматическим распознаванием кода без всяких F8.