При автоматизации рабочего места кассира (РМК) в конфигурации «1С:Розница 2.3» нередко возникает потребность повесить запуск произвольной процедуры на горячую клавишу — например, вызывать калькулятор, вводить промокод или запускать внешнюю интеграцию по нажатию F3. Разберем особенности управляемых форм платформы «1С:Предприятие 8.3», выясним, почему нельзя просто так объявить событие нажатия кнопки клавиатуры, и рассмотрим проверенные способы реализации задачи.
Проанализируем архитектуру управляемого интерфейса РМК. В отличие от обычных форм или классических WinForms-приложений, на управляемых формах платформы «1С:Предприятие» отсутствуют низкоуровневые события вроде KeyDown или KeyUp. Перехватить произвольное нажатие физической клавиши напрямую в коде формы невозможно.
Штатный механизм обработки горячих клавиш в 1С привязан исключительно к командам формы через свойство СочетаниеКлавиш. Однако здесь действует критически важное платформенное правило: горячая клавиша срабатывает только в том случае, если связанная с ней кнопка добавлена в элементы формы и для нее установлено Видимость = Истина. Если разработчик скрывает кнопку через Видимость = Ложь, платформа полностью отключает перехват сочетания клавиш.
Также важно учитывать конфликты фокуса ввода. Например, клавиши навигации (стрелки), Enter, Delete или F1 зарезервированы ядром платформы для табличных частей и системной справки, а при работе через веб-клиент функциональные клавиши (включая F3 и F5) могут перехватываться самим браузером.
Разберем по шагам наиболее правильный и поддерживаемый путь: добавление команды в форму РМК с помощью расширения конфигурации.
Форма документа ЧекККМ или специализированная форма РМК конфигурации «1С:Розница 2.3»).ВыполнитьСвойАлгоритм.СочетаниеКлавиш и укажем требуемую клавишу, например, F3.
&НаКлиенте
Процедура Расш1_ВыполнитьСвойАлгоритм(Команда)
// Запускаем необходимый кастомный алгоритм
ВыполнитьОбработкуПоГорячейКлавише();
КонецПроцедуры
F3 не сработает.Рассмотрим подробнее, как замаскировать служебную кнопку, чтобы она не перегружала интерфейс кассира:
Видимость и не устанавливаем Доступность = Ложь.ПолеГиперссылки с пустым текстом заголовка или пробелом, либо укажем минимальную ширину и высоту без отображения картинки. В таком случае кнопка остается полноправным элементом интерфейса для платформы, но фактически незаметна для пользователя на экране.Выясним, можно ли обойтись без конфигурирования. В режиме «1С:Предприятие» в конфигурации «1С:Розница 2.3» существует справочник Настройки РМК, где предусмотрена настройка нижней панели и сочетаний клавиш.
Однако данный механизм имеет существенное ограничение: через штатные настройки назначить горячие клавиши разрешается только на жестко предопределенный разработчиками список типовых операций (поиск товара, аннулирование чека, оплата картой, отложить чек и т.д.). Подвязать запуск произвольного алгоритма без изменения метаданных через встроенный конструктор кнопок невозможно.
Если задача заключается в отлове событий со специализированной программируемой POS-клавиатуры или сканера штрихкодов, правильнее использовать механизмы БПО, встроенные в РМК.
В этом сценарии устройство ввода настраивается как клавиатурное торговое оборудование с префиксами. Сигнал от нажатия клавиши транслируется как внешнее событие и обрабатывается стандартной процедурой формы РМК, не завися от того, на каком конкретно элементе формы в этот момент установлен фокус кассира.
В специфических проектах, когда необходимо перехватывать системные клавиши операционной системы либо нажатия клавиш вне зависимости от активности окон, применяют внешнюю компоненту с глобальным клавиатурным перехватом (клавиатурный хук через функцию Windows API SetWindowsHookEx).
Компонента загружается при старте РМК и транслирует нажатия выбранных клавиш напрямую в платформу «1С:Предприятие» через механизм ВнешнееСобытие:
&НаКлиенте
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Источник = "КлавиатурныйХук" И Событие = "KeyPressed" Тогда
Если Данные = "F3" Тогда
ВыполнитьОбработкуПоГорячейКлавише();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Подводя итог: для большинства типовых задач в «1С:Розница 2.3» оптимальным решением является добавление клиентской команды с назначенным свойством СочетаниеКлавиш через расширение конфигурации и размещение на форме видимой, но визуально скрытой кнопки.