Как в РМК 1С:Розница 2.3 отловить нажатие клавиши для запуска своего алгоритма?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

При автоматизации рабочего места кассира (РМК) в конфигурации «1С:Розница 2.3» нередко возникает потребность повесить запуск произвольной процедуры на горячую клавишу — например, вызывать калькулятор, вводить промокод или запускать внешнюю интеграцию по нажатию F3. Разберем особенности управляемых форм платформы «1С:Предприятие 8.3», выясним, почему нельзя просто так объявить событие нажатия кнопки клавиатуры, и рассмотрим проверенные способы реализации задачи.

Ограничения платформы на управляемых формах

Проанализируем архитектуру управляемого интерфейса РМК. В отличие от обычных форм или классических WinForms-приложений, на управляемых формах платформы «1С:Предприятие» отсутствуют низкоуровневые события вроде KeyDown или KeyUp. Перехватить произвольное нажатие физической клавиши напрямую в коде формы невозможно.

Штатный механизм обработки горячих клавиш в 1С привязан исключительно к командам формы через свойство СочетаниеКлавиш. Однако здесь действует критически важное платформенное правило: горячая клавиша срабатывает только в том случае, если связанная с ней кнопка добавлена в элементы формы и для нее установлено Видимость = Истина. Если разработчик скрывает кнопку через Видимость = Ложь, платформа полностью отключает перехват сочетания клавиш.

Также важно учитывать конфликты фокуса ввода. Например, клавиши навигации (стрелки), Enter, Delete или F1 зарезервированы ядром платформы для табличных частей и системной справки, а при работе через веб-клиент функциональные клавиши (включая F3 и F5) могут перехватываться самим браузером.

Способ 1. Доработка формы РМК через расширение конфигурации

Разберем по шагам наиболее правильный и поддерживаемый путь: добавление команды в форму РМК с помощью расширения конфигурации.

  1. Подключим форму РМК в расширение конфигурации (как правило, это форма Форма документа ЧекККМ или специализированная форма РМК конфигурации «1С:Розница 2.3»).
  2. В дереве элементов формы перейдем на вкладку «Команды» и создадим новую клиентскую команду формы, например, ВыполнитьСвойАлгоритм.
  3. В палитре свойств созданной команды найдем свойство СочетаниеКлавиш и укажем требуемую клавишу, например, F3.
  4. Создадим обработчик действия команды на клиенте и пропишем в нем вызов нужной бизнес-логики:
    
    &НаКлиенте
    Процедура Расш1_ВыполнитьСвойАлгоритм(Команда)
        
        // Запускаем необходимый кастомный алгоритм
        ВыполнитьОбработкуПоГорячейКлавише();
        
    КонецПроцедуры
    
  5. Перетащим команду в дерево элементов формы, чтобы сформировалась кнопка. Помним, что кнопка должна оставаться видимой для платформы, иначе нажатие F3 не сработает.

Рассмотрим подробнее, как замаскировать служебную кнопку, чтобы она не перегружала интерфейс кассира:

  1. Не отключаем свойство Видимость и не устанавливаем Доступность = Ложь.
  2. Поместим кнопку в служебную группу без отображения заголовка либо в нижнюю командную панель.
  3. Зададим кнопке вид ПолеГиперссылки с пустым текстом заголовка или пробелом, либо укажем минимальную ширину и высоту без отображения картинки. В таком случае кнопка остается полноправным элементом интерфейса для платформы, но фактически незаметна для пользователя на экране.

Штатные настройки РМК в «Рознице 2.3» и их ограничения

Выясним, можно ли обойтись без конфигурирования. В режиме «1С:Предприятие» в конфигурации «1С:Розница 2.3» существует справочник Настройки РМК, где предусмотрена настройка нижней панели и сочетаний клавиш.

Однако данный механизм имеет существенное ограничение: через штатные настройки назначить горячие клавиши разрешается только на жестко предопределенный разработчиками список типовых операций (поиск товара, аннулирование чека, оплата картой, отложить чек и т.д.). Подвязать запуск произвольного алгоритма без изменения метаданных через встроенный конструктор кнопок невозможно.

Способ 2. Использование механизмов БПО (Библиотеки подключаемого оборудования)

Если задача заключается в отлове событий со специализированной программируемой POS-клавиатуры или сканера штрихкодов, правильнее использовать механизмы БПО, встроенные в РМК.

В этом сценарии устройство ввода настраивается как клавиатурное торговое оборудование с префиксами. Сигнал от нажатия клавиши транслируется как внешнее событие и обрабатывается стандартной процедурой формы РМК, не завися от того, на каком конкретно элементе формы в этот момент установлен фокус кассира.

Способ 3. Перехват через внешнюю компоненту (Native API)

В специфических проектах, когда необходимо перехватывать системные клавиши операционной системы либо нажатия клавиш вне зависимости от активности окон, применяют внешнюю компоненту с глобальным клавиатурным перехватом (клавиатурный хук через функцию Windows API SetWindowsHookEx).

Компонента загружается при старте РМК и транслирует нажатия выбранных клавиш напрямую в платформу «1С:Предприятие» через механизм ВнешнееСобытие:


&НаКлиенте
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    
    Если Источник = "КлавиатурныйХук" И Событие = "KeyPressed" Тогда
        Если Данные = "F3" Тогда
            ВыполнитьОбработкуПоГорячейКлавише();
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Подводя итог: для большинства типовых задач в «1С:Розница 2.3» оптимальным решением является добавление клиентской команды с назначенным свойством СочетаниеКлавиш через расширение конфигурации и размещение на форме видимой, но визуально скрытой кнопки.

← На главную