При разработке интерфейсов на платформе 1С:Предприятие 8.3 (особенно в режиме управляемых форм) часто возникает задача оптимизации рабочего пространства. Разработчики стремятся скрыть редко используемые функции, оставив для опытных пользователей возможность быстрого вызова через горячие клавиши. Однако стандартный подход, работавший в обычных формах, в управляемом интерфейсе преподносит неприятный сюрприз.
В этой статье мы подробно разберем, почему привычный метод скрытия кнопок не работает, проанализируем внутренние механизмы платформы 1С и изучим четыре надежных способа реализации горячих клавиш без загромождения интерфейса формы.
В старых версиях платформы (1С 8.1 и «Обычные формы» в 1С 8.2) разработчики часто использовали простой трюк: создавали кнопку на форме, привязывали к ней сочетание клавиш и устанавливали свойство Видимость в значение Ложь. Кнопка исчезала с экрана, но продолжала успешно обрабатывать нажатия клавиш.
В современных управляемых формах (начиная с 1С 8.2 и во всех версиях 1С 8.3) архитектура работы с интерфейсом кардинально изменилась. Платформа стремится минимизировать объем данных, передаваемых между сервером и тонким клиентом, а также снизить нагрузку на рендеринг интерфейса.
Когда мы устанавливаем элементу формы свойство Видимость = Ложь (программно или в конфигураторе), платформа полностью исключает этот элемент из дерева рендеринга на клиенте. Для клиентского приложения этой кнопки физически не существует. Раз элемента нет на клиенте, то и зарегистрировать обработчик сочетания клавиш для него невозможно. В результате горячая клавиша просто перестает срабатывать.
Выяснив причину такого поведения, давайте рассмотрим альтернативные, полностью рабочие архитектурные решения этой задачи.
Этот способ является наиболее чистым с точки зрения стандартов разработки 1С и не нарушает логику построения интерфейса.
Рассмотрим по шагам, как реализовать этот метод:
КонтекстноеМеню. Если его нет, создадим его.СочетаниеКлавиш и зададим нужное нам сочетание (например, Ctrl+F11).Почему это работает: Кнопка контекстного меню считается активным элементом формы, готовым к взаимодействию, даже когда само меню не открыто на экране. Платформа регистрирует хоткей на клиенте, и он стабильно срабатывает при нажатии. При этом визуально форма остается абсолютно чистой — пользователь не увидит кнопку, пока специально не вызовет контекстное меню правой кнопкой мыши.
Если на форме присутствует стандартная командная панель (или командная панель связанной таблицы), мы можем использовать встроенный механизм группировки платформы.
Разберем этот вариант подробнее:
ОтображениеВКоманднойПанели.Только в Еще.СочетаниеКлавиш зададим требуемую комбинацию клавиш.Результат: Кнопка убирается из основного видимого ряда и скрывается под кнопку «Еще». Поскольку элемент остается частью активного интерфейса (он доступен пользователю при нажатии на «Еще»), платформа держит обработчик горячих клавиш активным. Данный способ идеально подходит, если вам нужно скрыть кнопку с глаз, но сохранить стандартное поведение для продвинутых пользователей.
Этот метод основан на интересной особенности платформы 1С, которую разработчики часто называют «полезным багом».
Проанализируем алгоритм настройки:
Общие -> Общие команды.СочетаниеКлавиш.Особенности работы: Общие команды регистрируются платформой глобально. Заданное сочетание клавиш перехватывается на уровне всего приложения. Этот метод отлично подходит, если вам нужно вызывать определенную функцию (например, калькулятор, окно выбора организации или специфический отчет) из абсолютно любого места программы по единому нажатию клавиши.
Бывают ситуации, когда на форме нет контекстных меню, командных панелей с кнопкой «Еще», а использовать глобальные команды нельзя из-за ограничений архитектуры. В таких редких случаях разработчики применяют визуальную маскировку.
Давайте разберем этот «костыль», который тем не менее показывает стопроцентную надежность:
Видимость в значении Истина.Отображение в значение Картинка.Рамка в значение Нет рамки).С точки зрения платформы кнопка видима и активна — значит, сочетание клавиш гарантированно сработает. С точки зрения пользователя на форме нет никаких лишних элементов.
В некоторых случаях горячую клавишу нужно назначать динамически, в зависимости от прав пользователя, настроек программы или текущего режима работы формы. Платформа 1С позволяет управлять сочетаниями клавиш программно с помощью встроенного языка. Для ускорения такой разработки можно использовать модуль для программного добавления элементов форм и команд.
Посмотрим на пример кода, который можно разместить в обработчике ПриСозданииНаСервере или при изменении определенных реквизитов формы:
// Назначим сочетание клавиш Ctrl + Shift + Z для кнопки программно
НовоеСочетание = Новый СочетаниеКлавиш(Клавиша.Z, Ложь, Истина, Истина);
Элементы.ИмяВашейКнопки.СочетаниеКлавиш = НовоеСочетание;
В конструкторе объекта СочетаниеКлавиш параметры передаются в следующем порядке:
Клавиша — системное перечисление клавиш (например, Клавиша.F5, Клавиша.Z и т.д.).Alt — булево значение (Истина, если должна быть зажата клавиша Alt).Ctrl — булево значение (Истина, если должен быть зажат Ctrl).Shift — булево значение (Истина, если должен быть зажат Shift).Если в какой-то момент времени сочетание клавиш необходимо отключить, мы можем просто присвоить свойству значение Неопределено:
// Отключение горячей клавиши для элемента формы
Элементы.ИмяВашейКнопки.СочетаниеКлавиш = Неопределено;
Подводя итоги, сопоставим предложенные методы, чтобы выбрать оптимальный для вашей задачи:
Используя эти архитектурные подходы, мы сможем создавать гибкие, быстрые и интуитивно понятные интерфейсы в решениях на платформе 1С:Предприятие 8.3. Для освоения практических приемов генерации интерфейса пригодится пример динамического добавления и удаления элементов формы.