В процессе автоматизации рабочих мест кассиров и операторов часто возникает крайне неприятная и загадочная проблема: в процессе активной работы в программе 1С внезапно перестает реагировать на нажатия обычная USB- или PS/2-клавиатура. При этом компьютер не зависает — компьютерная мышь продолжает двигаться и нажимать на элементы интерфейса, сканер штрихкодов успешно считывает товары, а если свернуть окно 1С и открыть обычный Блокнот, то клавиатура там работает абсолютно нормально. Однако при возвращении в окно 1С ввод по-прежнему заблокирован.
В рамках этой статьи мы подробно разберем, почему возникает этот сбой, проанализируем внутренние механизмы взаимодействия торгового оборудования с операционной системой и предложим пошаговые проверенные способы решения этой проблемы.
Давайте проанализируем ситуацию и поймем, почему клавиатура «отваливается» исключительно внутри программы 1С. Ключевая подсказка кроется в том, что в системе установлен сканер штрихкодов, подключенный в режиме эмуляции клавиатуры (так называемый клавиатурный сканер).
Для того чтобы 1С могла перехватывать штрихкод в любом месте программы (а не только тогда, когда фокус ввода установлен в специальное текстовое поле), внешняя компонента драйвера оборудования (например, 1С:Сканер штрихкода или драйвер от АТОЛ) устанавливает в операционной системе Windows так называемый глобальный перехватчик событий клавиатуры (Keyboard Hook).
Этот перехватчик работает следующим образом:
Enter).Проблема заключается в том, что при определенных условиях (микрозадержки операционной системы, некорректная длина штрихкода в настройках, отсутствие суффикса) этот клавиатурный хук «залипает». Внешняя компонента начинает считать, что любое последующее нажатие на клавиши обычной физической клавиатуры — это продолжение бесконечного штрихкода. Она перехватывает эти нажатия, блокирует их передачу в интерфейс 1С и бесконечно ожидает суффикса завершения ввода. За пределами процесса 1С (в Блокноте или браузере) этот хук не активен, поэтому там клавиатура продолжает работать.
Рассмотрим по шагам основные способы устранения этого конфликта, начиная с самого надежного и профессионального.
Использование сканера штрихкодов в режиме клавиатуры в профессиональной среде считается устаревшим и нестабильным подходом. Самым надежным решением является перевод сканера в режим виртуального COM-порта. В этом режиме сканер передает данные по совершенно другому протоколу, не задействуя клавиатурный тракт Windows и не используя опасные клавиатурные перехватчики.
Разберем по шагам, как выполнить этот переход:
USB OEM Table Option, USB Serial Emulation или Enable Single Cable Virtual COM.Порты (COM и LPT) должно появиться новое устройство, например: Honeywell USB Serial Port (COM3). Запомните номер выделенного порта.Администрирование — Подключаемое оборудование). Откройте карточку настроек вашего сканера штрихкодов. Измените тип порта с Клавиатура на созданный виртуальный порт (например, COM3).После этой настройки данные от сканера будут поступать напрямую в 1С через интерфейс операционной системы, минуя клавиатурный буфер. Проблема с блокировкой клавиатуры исчезнет навсегда.
Если по каким-то причинам перевести сканер в режим COM-порта невозможно (например, устройство слишком старое или нет возможности установить драйверы на терминальный сервер), необходимо максимально тонко настроить работу клавиатурного хука драйвера.
Проанализируем ключевые параметры настройки сканера в 1С:
CR (код 13) или перевод строки LF (код 10). Если в физическом сканере суффикс не запрограммирован (или в настройках 1С указан неверно), драйвер будет бесконечно блокировать клавиатуру, ожидая окончания ввода. Настройте суффикс CR (код 13) как в самом сканере (путем сканирования соответствующего штрихкода из инструкции), так и в карточке оборудования в 1С.0 или 1, драйвер будет пытаться перехватывать и обрабатывать как штрихкод даже одиночные нажатия клавиш на клавиатуре. Установите этот параметр равным как минимум 3 или 4.Иногда залипание клавиатурного перехватчика провоцируется внутренними службами операционной системы Windows 7 или Windows 10. Рассмотрим две наиболее частые системные проблемы.
Конфликт со Службой сенсорной клавиатуры:
В операционных системах Windows присутствует служба, отвечающая за ввод на сенсорных экранах и панелях рукописного ввода. Она активно вмешивается в фокус ввода окон приложений, что часто приводит к блокировке ввода с физической клавиатуры в приложениях на базе форм 1С.
Для решения этой проблемы отключим данную службу:
Win + R, введите services.msc и нажмите Enter.TabletInputService).Конфликт стороннего программного обеспечения:
Иногда сторонние приложения, использующие защищенный ввод или собственные хуки, перехватывают управление клавиатурой у 1С. К таким программам относятся:
Nvidia GeForce Experience). Если на рабочем компьютере установлена дискретная видеокарта с этим ПО, отключите внутриигровой оверлей в настройках утилиты.Если клавиатура уже заблокировалась прямо во время обслуживания покупателя, а перезапускать сеанс 1С нет времени, можно воспользоваться быстрыми методами принудительного сброса клавиатурного хука:
Ctrl + Shift + Alt (несколько раз подряд) в большинстве случаев заставляет Windows принудительно сбросить зависшие хуки ввода сторонних драйверов.Win (или сочетание Alt + Tab), чтобы открыть меню Пуск или переключиться на другое приложение, сделайте несколько кликов мышью в Блокноте, после чего вернитесь в окно 1С. Это помогает переинициализировать фокус ввода приложения.Для понимания того, как платформа обрабатывает входящие данные от сканера на программном уровне, ниже приведем классический пример реализации перехвата внешнего события в модуле управляемого приложения:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Проверим, что событие пришло именно от сканера штрихкодов
Если ПолучитьПриводноеУстройство(Источник) = "BarcodeScanner" Тогда
// Очищаем буфер и обрабатываем полученные данные
ОбработатьПолученныйШтрихкод(Данные);
КонецЕсли;
КонецПроцедуры
Использование этого программного подхода совместно с переводом сканера на виртуальный COM-порт гарантирует стабильную, быструю и бесперебойную работу клавиатуры и торгового оборудования без зависаний и внезапных отключений.