В процессе разработки интерфейсов на обычных формах (толстый клиент) программисты часто сталкиваются с необходимостью повысить скорость работы пользователя. Одним из наиболее эффективных способов является внедрение горячих клавиш для навигации. Типичная задача — обеспечить быстрый переход между табличными частями документа (например, «Товары», «Услуги», «Спецификации») без использования мыши. Однако стандартные механизмы назначения клавиш через кнопки часто приводят к тому, что интерфейс загромождается лишними элементами. Разберем подробно, как реализовать этот функционал, сохранив эстетичность формы.
Проанализируем самый «чистый» с точки зрения платформы 1С способ. В обычных формах у самого объекта «Форма» есть свойство Меню. Это главное меню окна, которое отображается в верхней части. Мы можем использовать его для создания команд, которые будут доступны пользователю по горячим клавишам, но при этом не будут занимать место на рабочей области формы.
Рассмотрим по шагам, как это реализовать:
Меню и нажмем на кнопку с лупой, чтобы создать или отредактировать меню.СочетаниеКлавиш выберем нужную комбинацию (например, Ctrl + 1, Ctrl + 2).Нажатие для этих пунктов меню пропишем программный перенос фокуса.Посмотрим на пример кода, который должен располагаться в модуле формы для обработки перехода:
Процедура КомандыПерейтиКТоварам(Элемент)
// Устанавливаем фокус на табличную часть "Товары"
ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Товары;
КонецПроцедуры
Процедура КомандыПерейтиКУслугам(Элемент)
// Устанавливаем фокус на табличную часть "Услуги"
ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Услуги;
КонецПроцедуры
Преимущество этого метода в том, что пункты меню выглядят естественно для Windows-приложений, а горячие клавиши работают стабильно, пока форма активна. Чтобы скрыть эти команды от глаз пользователя, их можно сгруппировать в один пункт меню в самом конце списка.
Выясним причину, по которой обычное скрытие кнопок через свойство Видимость = Ложь может не сработать. В некоторых версиях платформы 1С, если элемент полностью невидим, обработка его горячих клавиш прекращается. Однако существует проверенный «хак» с использованием Командной панели.
Разберем алгоритм настройки:
КоманднаяПанель.Автозаполнение, чтобы она была пустой.СочетаниеКлавиш.ЭлементыФормы.МояПанель.Видимость = Ложь, клавиши могут перестать нажиматься. Вместо этого можно использовать визуальную хитрость.Чтобы скрыть панель, не отключая её активность, попробуем следующие приемы:
— Разместим панель за границами видимости формы (если форма имеет фиксированный размер и не прокручивается), установив координаты Верх или Лево в отрицательные значения (например, -100).
— Установим высоту и ширину панели в значение 0 или 1 пиксель.
— Разместим панель «под» другими элементами управления (например, под большой табличной частью), используя порядок обхода или слои.
В обработчике нажатия кнопки такой панели используем аналогичный код для активации ТекущийЭлемент.
Часто табличные части в обычных формах разнесены по разным закладкам (страницам) элемента Панель. В этом случае простого переноса фокуса на таблицу может быть недостаточно — нужно сначала сделать видимой нужную страницу. Проанализируем ситуацию, когда нам нужно программно переключить вкладку.
Для этого используется свойство ТекущаяСтраница. Рассмотрим пример реализации:
Процедура ОбработкаГорячейКлавишиПерехода()
// 1. Находим нужную страницу на панели закладок
НужнаяСтраница = ЭлементыФормы.ОсновнаяПанель.Страницы.СтраницаТовары;
// 2. Делаем её активной
ЭлементыФормы.ОсновнаяПанель.ТекущаяСтраница = НужнаяСтраница;
// 3. Передаем фокус непосредственно в таблицу, чтобы пользователь мог сразу нажать "Добавить" или искать
ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Товары;
КонецПроцедуры
Этот подход гарантирует, что пользователь не только «нажмет» горячую клавишу, но и визуально увидит переключение контекста работы.
Разберем еще один стандартный, но часто забываемый способ — использование акселераторов в заголовках. Если в заголовке кнопки или закладки перед какой-либо буквой поставить символ &, эта буква станет «горячей» при зажатой клавише Alt.
Например, если назвать страницу панели "&Товары", то сочетание Alt + Т (или Alt + T в зависимости от раскладки и системных настроек) автоматически переключит фокус на эту страницу. Это штатный механизм Windows, который отлично поддерживается обычными формами 1С. Его преимущество в том, что он не требует написания кода и создания скрытых элементов — достаточно правильно настроить заголовки существующих объектов ЭлементыФормы.
При назначении своих сочетаний строго рекомендуется избегать пересечений со стандартными клавишами 1С. Посмотрим на список наиболее важных:
F9 — Копирование текущей строки.Del — Пометка на удаление.Ctrl + Enter — Записать и закрыть (провести) документ.F2 — Редактирование ячейки.Insert — Добавление новой строки.Если вы назначите переключение между ТЧ на Insert, пользователь потеряет возможность добавлять строки стандартным способом. Оптимально использовать комбинации с клавишами Alt, Ctrl или функциональные клавиши F, которые редко задействованы в конкретном документе (например, F11, F12).
Для реализации удобного перехода между табличными частями в обычных формах 1С лучше всего использовать Главное меню формы или скрытую командную панель. Ключевым программным инструментом здесь выступает установка свойства ЭтаФорма.ТекущийЭлемент. Помните, что в обычном приложении интерфейс управляется напрямую через коллекцию ЭлементыФормы, что дает большую гибкость в позиционировании элементов «за кадром» для обеспечения работы горячих клавиш без визуального шума.