Как привязать горячую клавишу к команде управляемой формы в 1С 8.3, если кнопка скрыта?

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

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

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

Почему не работает горячая клавиша для скрытой кнопки?

Для начала давайте выясним причину такого поведения системы. В управляемом приложении 1С действует строгая оптимизация отрисовки интерфейса. Если элемент формы имеет свойство Видимость = Ложь или расположен на странице панели, которая сейчас не активна, платформа полностью исключает этот элемент из активной структуры интерфейса на клиенте.

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

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

Способ 1. Перенос кнопки в меню «Еще» (Командная панель формы)

Этот способ является наиболее стандартным и «чистым» с точки зрения методологии разработки 1С. Мы выносим команду в основную командную панель формы, но скрываем ее в выпадающее подменю.

Разберем этот вариант по шагам:

  1. Создайте команду формы и назначьте ей нужное сочетание клавиш в свойстве СочетаниеКлавиш.
  2. Перетащите команду в элемент Командная панель формы.
  3. В свойствах созданной кнопки найдите параметр Отображение и установите его в значение Только во всех функциях (или Только в "Еще" в зависимости от версии платформы).

Поскольку сама командная панель формы активна и видима, назначенное сочетание клавиш будет прекрасно отрабатывать. При этом кнопка не занимает место на экране, а прячется в стандартном меню Еще.

Важное примечание: Если вы решите скрыть саму командную панель, установив для нее свойство Видимость = Ложь, горячие клавиши также перестанут функционировать.

Способ 2. Трюк с «невидимой» декорацией-гиперссылкой

Если вам вообще не нужна кнопка (даже в меню «Еще»), можно прибегнуть к хитрости с использованием элементов оформления. Мы создадим визуальный элемент, который физически будет присутствовать на форме, но пользователь его просто не увидит.

Проанализируем этот подход подробнее:

  1. Добавим на форму элемент типа Поле декорации с видом Гиперссылка (или обычную кнопку в режиме гиперссылки) и свяжем её с нашей командой.
  2. Разместим этот элемент непосредственно в основном теле формы (не внутри скрываемых страниц).
  3. Чтобы скрыть декорацию от пользователя визуально, установим её свойства следующим образом:
    • В поле Заголовок введем один символ пробела: " ".
    • Установим цвет текста, совпадающий с основным цветом фона управляемой формы.

Поскольку форма считает этот элемент видимым (свойство Видимость равно Истина), горячая клавиша будет отрабатывать мгновенно. Один пустой символ-пробел на форме будет абсолютно незаметен для пользователя и не нарушит компоновку интерфейса.

Настроить такое поведение можно также программно при открытии формы:


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

Способ 3. Размещение команды в контекстном меню

Еще один способ скрыть кнопку — привязать её к контекстному меню какого-либо часто используемого элемента формы, например, динамического списка или таблицы.

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

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

Способ 4. Быстрые клавиши через амперсанд (Акселераторы)

В управляемом приложении 1С 8.3 продолжает работать классический механизм акселераторов, пришедший еще из версии 7.7. Если в заголовке кнопки перед определенным символом поставить знак амперсанда &, этот символ станет горячей клавишей активации в сочетании с клавишей Alt.

Рассмотрим пример:

Если в свойстве Заголовок кнопки написать С&формировать, то на форме символ «ф» будет подчеркнут при зажатии клавиши Alt. Нажатие комбинации клавиш Alt + Ф мгновенно вызовет выполнение связанного действия. Это удобная альтернатива стандартным сочетаниям, не требующая сложной настройки свойств команды.

Ограничения использования клавиши F5

В исходном обсуждении автор планировал использовать клавишу F5. Давайте разберем, почему выбор этой клавиши может быть неудачным решением:

Рекомендация: Для назначения кастомных действий и обновлений в управляемых формах используйте более безопасные и свободные комбинации клавиш, например: Ctrl + Shift + R, Ctrl + F5 или Alt + U.

Пример реализации перехода на страницу и обновления данных

Давайте объединим полученные знания и напишем рабочий шаблон кода. По нажатию горячей клавиши (связанной с нашей «невидимой» командой) нам необходимо переключить фокус на определенную страницу панели и выполнить обновление находящихся там данных.


&НаКлиенте
Процедура ВыполнитьПереходИОбновление(Команда)
    
    // Переходим на нужную страницу панели управляемой формы
    Если Элементы.ГруппаПанельСтраниц.ТекущаяСтраница <> Элементы.ГруппаСтраницаДанных Тогда
        Элементы.ГруппаПанельСтраниц.ТекущаяСтраница = Элементы.ГруппаСтраницаДанных;
    КонецЕсли;
    
    // Вызываем процедуру обновления данных на этой странице
    ОбновитьДанныеНаСтранице();
    
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьДанныеНаСтранице()
    
    // Логика обновления, например, пересчет показателей или обновление динамического списка
    Элементы.СписокДокументов.Обновить();
    ПоказатьОповещениеПользователя("Данные успешно обновлены!");
    
КонецПроцедуры

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

← На главную