Как реализовать горячие клавиши в управляемых формах 1С и настроить работу сканера

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

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

Стандартный механизм назначения горячих клавиш

Для начала рассмотрим базовый алгоритм создания горячей клавиши в управляемом приложении. В отличие от обычных форм, где можно было перехватывать нажатия программно, в управляемых формах основной единицей логики является КомандаФормы.

Разберем по шагам процесс создания:

  1. Перейдем на вкладку Команды в редакторе управляемой формы.
  2. Создадим новую команду и дадим ей понятное имя, например, ОбработатьНажатиеF11.
  3. В свойствах команды найдем поле Сочетание клавиш. Нажав на кнопку выбора, мы можем задать нужную комбинацию (например, Ctrl+F5, F11 и т.д.).
  4. Укажем Действие — это процедура на клиенте, которая будет выполняться при нажатии.

Пример простейшего обработчика команды:


&НаКлиенте
Процедура ОбработатьНажатиеF11(Команда)
    // Опишем логику, которая должна сработать
    ОткрытьФорму("Обработка.МенюРМК.Форма.ФормаВыбора");
КонецПроцедуры

Проблема видимости элементов и работа горячих клавиш

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

Однако часто дизайн формы не предполагает наличия лишних кнопок. Выясним, как сделать кнопку "невидимой" для глаза, но активной для платформы:

  1. Размещение в меню "Еще": Добавим кнопку в Командную панель формы. В свойствах элемента (кнопки) установим флаг Только во "Все действия" = Да. В этом случае кнопка исчезнет с основной панели и спрячется в подменю "Еще", но горячая клавиша останется активной.
  2. Использование групп с особым отображением: Можно создать группу кнопок, установить ей Отображение управления группой = Нет и попробовать минимизировать ее размеры, хотя первый способ является более предпочтительным и "чистым" с точки зрения стандартов разработки 1С.
  3. Свойство "Отображение": Установите у кнопки в командной панели Отображение = Картинка и не назначайте картинку. Это оставит место под кнопку, но она будет практически незаметна.

Работа со сканером штрихкодов в режиме клавиатуры

Рассмотрим специфический случай, когда горячая клавиша нужна для перехвата данных со сканера штрихкодов, работающего в режиме эмуляции клавиатуры. В таком режиме сканер "выстреливает" последовательностью символов, как будто их быстро набрали на клавиатуре.

Чтобы 1С поняла, что началось сканирование, часто используют Префиксы. Например, сканер настраивается так, чтобы перед каждым штрихкодом он "нажимал" клавишу F7. В этом случае мы создаем команду с горячей клавишей F7, которая переводит фокус в нужное поле ввода или открывает модальное окно.

Проанализируем пример кода для обработки ввода:


&НаКлиенте
Процедура КомандаНажатиеF7(Команда)
    ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе", Истина);
    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВводаШтрихкода", ЭтотОбъект);
    
    // Вызываем стандартное окно ввода значения
    ПоказатьВводЗначения(ОписаниеОповещения, "", "Введите штрихкод", Тип("Строка"));
КонецПроцедуры

&НаКлиенте
Процедура ПослеВводаШтрихкода(Результат, ДополнительныеПараметры) Экспорт
    Если Результат <> Неопределено Тогда
        // Обрабатываем полученный штрихкод
        Сообщить("Считан штрихкод: " + Результат);
    КонецЕсли;
КонецПроцедуры

Почему режим эмуляции клавиатуры — это не лучший выбор?

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

Вместо этого рекомендуется использовать NativeApi драйверы или COM-порт (Virtual COM). В этом случае в форме используется процедура ВнешнееСобытие. Она срабатывает всегда, вне зависимости от того, нажата ли какая-то кнопка и где находится фокус.

Пример обработки внешнего события:


&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    // Проверим, что событие пришло именно от сканера штрихкода
    Если Источник = "BarcodeScanner" Тогда
        Штрихкод = Данные;
        // Логика поиска товара по штрихкоду
        ОбработатьШтрихкод(Штрихкод);
    КонецЕсли;
КонецПроцедуры

Тонкости использования сочетаний клавиш в Веб-клиенте

Важно учитывать, что если ваша конфигурация используется через браузер (Веб-клиент), многие горячие клавиши будут перехвачены самим браузером. Например, Ctrl+F почти всегда открывает поиск браузера, а F1 — справку ОС или браузера.

Для стабильной работы в любых условиях рекомендуется:

Подводя итог, можно сказать: горячие клавиши в управляемых формах 1С неразрывно связаны с командами. Если вам нужно скрыть кнопку, используйте стандартное свойство отображения в меню "Еще", но никогда не отключайте Видимость самого элемента, если хотите сохранить функциональность акселератора.

← На главную