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

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

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

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

Почему стандартное свойство «Видимость = Ложь» блокирует горячие клавиши?

В старых версиях платформы (1С 8.1 и «Обычные формы» в 1С 8.2) разработчики часто использовали простой трюк: создавали кнопку на форме, привязывали к ней сочетание клавиш и устанавливали свойство Видимость в значение Ложь. Кнопка исчезала с экрана, но продолжала успешно обрабатывать нажатия клавиш.

В современных управляемых формах (начиная с 1С 8.2 и во всех версиях 1С 8.3) архитектура работы с интерфейсом кардинально изменилась. Платформа стремится минимизировать объем данных, передаваемых между сервером и тонким клиентом, а также снизить нагрузку на рендеринг интерфейса.

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

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

Решение 1. Добавление команды в контекстное меню (Рекомендуемый способ)

Этот способ является наиболее чистым с точки зрения стандартов разработки 1С и не нарушает логику построения интерфейса.

Рассмотрим по шагам, как реализовать этот метод:

  1. Откроем нужную управляемую форму в конфигураторе.
  2. В окне элементов формы найдем объект, с которым пользователь активно взаимодействует (например, основная табличная часть, динамический список или даже ключевое поле ввода).
  3. Развернем этот элемент и найдем его подчиненный элемент — КонтекстноеМеню. Если его нет, создадим его.
  4. Перетащим нашу команду формы в это контекстное меню, чтобы создалась кнопка.
  5. В свойствах созданной кнопки контекстного меню найдем параметр СочетаниеКлавиш и зададим нужное нам сочетание (например, Ctrl+F11).

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

Решение 2. Перенос кнопки в меню «Еще»

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

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

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

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

Решение 3. Использование глобальной «Общей команды» (Обходной путь)

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

Проанализируем алгоритм настройки:

  1. В дереве метаданных конфигурации перейдем в ветку Общие -> Общие команды.
  2. Создадим новую общую команду.
  3. В свойствах общей команды настроим параметр СочетаниеКлавиш.
  4. В модуле команды опишем логику, которую необходимо выполнить. При необходимости мы можем анализировать, какая именно форма сейчас активна.
  5. При этом мы не добавляем эту команду на форму принудительно.

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

Решение 4. Маскировка кнопки («Микро-кнопка» с прозрачной картинкой)

Бывают ситуации, когда на форме нет контекстных меню, командных панелей с кнопкой «Еще», а использовать глобальные команды нельзя из-за ограничений архитектуры. В таких редких случаях разработчики применяют визуальную маскировку.

Давайте разберем этот «костыль», который тем не менее показывает стопроцентную надежность:

  1. Создадим обычную кнопку на форме, связав её с нашей командой.
  2. Оставим свойство Видимость в значении Истина.
  3. Установим свойство кнопки Отображение в значение Картинка.
  4. В качестве картинки загрузим полностью прозрачный PNG-файл размером 1х1 пиксель.
  5. Уберем текст кнопки, сделаем её рамки невидимыми (свойство Рамка в значение Нет рамки).
  6. Поместим эту кнопку в самый незаметный угол формы (например, в самый низ или внутрь невидимой группы, у которой, однако, сохранена видимость).

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

Дополнительно: Динамическое программное управление горячими клавишами

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

Посмотрим на пример кода, который можно разместить в обработчике ПриСозданииНаСервере или при изменении определенных реквизитов формы:


// Назначим сочетание клавиш Ctrl + Shift + Z для кнопки программно
НовоеСочетание = Новый СочетаниеКлавиш(Клавиша.Z, Ложь, Истина, Истина);
Элементы.ИмяВашейКнопки.СочетаниеКлавиш = НовоеСочетание;

В конструкторе объекта СочетаниеКлавиш параметры передаются в следующем порядке:

  1. Клавиша — системное перечисление клавиш (например, Клавиша.F5, Клавиша.Z и т.д.).
  2. Alt — булево значение (Истина, если должна быть зажата клавиша Alt).
  3. Ctrl — булево значение (Истина, если должен быть зажат Ctrl).
  4. Shift — булево значение (Истина, если должен быть зажат Shift).

Если в какой-то момент времени сочетание клавиш необходимо отключить, мы можем просто присвоить свойству значение Неопределено:


// Отключение горячей клавиши для элемента формы
Элементы.ИмяВашейКнопки.СочетаниеКлавиш = Неопределено;

Сравнительный анализ решений

Подводя итоги, сопоставим предложенные методы, чтобы выбрать оптимальный для вашей задачи:

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

← На главную