При разработке интерфейсов на платформе 1С:Предприятие 8.3 часто возникает задача ограничить действия пользователя. Казалось бы, достаточно убрать кнопку с командной панели или снять флажок в свойствах элемента, но платформа коварна: стандартные горячие клавиши, такие как F9 (копирование) или F4 (выбор), продолжают работать. Разберем подробно, почему так происходит и как полностью заблокировать системные механизмы.
Проанализируем ситуацию: когда мы в редакторе формы убираем команду из состава командной панели или снимаем галочку у свойства Кнопка выбора, мы влияем только на визуальное отображение интерфейса. Однако сама логика поведения объекта (табличной части или поля ввода) остается прежней. Платформа по умолчанию резервирует горячие клавиши для стандартных действий. Чтобы их нейтрализовать, нам нужно вмешаться в логику событий или перехватить управление на уровне команд.
Это самый надежный и «правильный» с точки зрения архитектуры 1С метод. Почти у каждого интерактивного действия есть событие, которое начинается со слова «Перед» или «При». В таких событиях часто доступен параметр СтандартнаяОбработка.
Блокировка копирования строки (F9)
Рассмотрим табличную часть. Даже если вы удалили кнопку «Скопировать», нажатие F9 вызовет создание новой строки. Чтобы это пресечь, создадим обработчик события ПередДобавлениемСтроки для таблицы формы. Проанализируем код:
&НаКлиенте
Процедура ИмяТаблицыПередДобавлениемСтроки(Элемент, Отказ, Копирование, Родитель, Группа, Параметры)
Если Копирование Тогда
// Если флаг Копирование установлен в Истина, значит пользователь нажал F9
// или выбрал "Скопировать" в контекстном меню.
Отказ = Истина;
Сообщить("Копирование строк в данном документе запрещено!");
КонецЕсли;
КонецПроцедуры
Блокировка выбора из списка (F4)
Для полей ввода установка свойства КнопкаВыбора = Нет лишь скрывает «лупу». Нажатие F4 все равно откроет форму выбора. Чтобы этого не случилось, воспользуемся событием НачалоВыбора:
&НаКлиенте
Процедура ИмяПоляНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
// Отключаем системный механизм открытия формы выбора
СтандартнаяОбработка = Ложь;
// Здесь можно реализовать свою логику или просто оставить процедуру пустой
КонецПроцедуры
Рассмотрим более хитрый метод, который позволяет «перехватить» нажатие клавиши еще до того, как оно дойдет до стандартного обработчика элемента. Мы можем создать собственную команду формы и назначить ей ту же горячую клавишу.
Заглушка_F9.F9.Теперь, когда пользователь нажмет F9, фокус управления перейдет к нашей пустой команде. Платформа увидит, что для этой клавиши назначена конкретная команда формы, и не будет выполнять стандартное копирование строки. Этот метод отлично работает для блокировки F2, F4, Del и других системных сочетаний.
Часто программисты забывают, что команды доступны не только в верхней панели, но и по правой кнопке мыши. Выясним, как полностью очистить контекстное меню.
Разберем настройки свойств таблицы формы:
Авто.Иногда проблему проще решить на уровне прав доступа или состояний элементов. Рассмотрим ситуацию, когда нам нужно запретить только редактирование, но оставить навигацию. Для этой задачи можно использовать расширение для настройки доступности и видимости элементов формы у пользователей.
Если мы установим для всей таблицы ТолькоПросмотр = Истина, то горячие клавиши изменения (например, F2 или Del) перестанут работать автоматически. Но если нам нужно разрешить добавление новых строк, но запретить изменение существующих полей, мы можем установить свойство ТолькоПросмотр для каждой конкретной колонки (элемента пути данных).
Проанализируем работу свойства РежимРедактирования у таблицы. Оно может принимать значения:
Изменение этого режима в сочетании с обработчиком ПриНачалеРедактирования позволяет гибко управлять поведением платформы при нажатии клавиш ввода данных.
Для надежного отключения стандартных команд в 1С 8.3 следует придерживаться комплексного подхода:
Отказ = Истина в событии ПередДобавлениемСтроки при условии Копирование = Истина.СтандартнаяОбработка = Ложь в событии НачалоВыбора.Помните, что платформа 8.3.15 и старше активно развивает механизмы доступности, поэтому программное управление через СтандартнаяОбработка остается самым стабильным методом, не зависящим от будущих обновлений интерфейса «Такси».