В процессе разработки на платформе 1С:Предприятие 8.3 часто возникает задача динамического изменения интерфейса. Например, нам нужно скрыть определенную кнопку или команду в зависимости от прав текущего пользователя, настроек системы или бизнес-логики процесса. Давайте разберем, как это реализовать на практике.
Если ваша задача заключается в скрытии конкретной кнопки, которая выведена на форму, самый прямой способ — это перебор коллекции элементов формы. Управляемая форма содержит коллекцию Элементы, которую мы можем проанализировать в модуле формы, например, в обработчике ПриСозданииНаСервере. Для стандартизации и ускорения операций с интерфейсом можно применить модуль для программного изменения форм и команд.
Разберем по шагам, как реализовать этот алгоритм:
Видимость в значение Ложь.Посмотрим на пример кода:
Для Каждого Элемент Из ЭтаФорма.Элементы Цикл
Если ТипЗнч(Элемент) = Тип("КнопкаФормы") И Элемент.ИмяКоманды = "ИмяКомандыКоторуюНадоОтключать" Тогда
Элемент.Видимость = Ложь;
КонецЕсли;
КонецЦикла;
Обратите внимание: данный метод эффективно работает именно с элементами формы. Если кнопка является частью командной панели формы, она будет успешно скрыта. Однако, этот подход не повлияет на пункты меню, которые находятся в командном интерфейсе раздела (вне формы).
Если наша цель — ограничить доступ к команде на уровне всей конфигурации, лучше всего использовать Роли. В конфигураторе 1С для любой команды можно задать права доступа. Если у пользователя нет права Просмотр или Использование для конкретной команды, платформа автоматически скроет её из всех меню и командных интерфейсов.
Этот способ является наиболее «чистым» с точки зрения архитектуры, так как он не требует написания кода в формах и гарантирует, что пользователь не сможет запустить команду даже через другие механизмы платформы.
Когда необходимо управлять видимостью команд глобально для всей системы в зависимости от включенных настроек (например, «Использовать учет по складам»), лучшим решением будут Функциональные опции. Они позволяют декларативно настроить поведение командного интерфейса. При изменении значения параметра сеанса, от которого зависит функциональная опция, платформа самостоятельно обновит видимость команд для всех пользователей.
Важно понимать разницу между «Командами формы» и «Командами командного интерфейса».
Команды формы живут внутри самой формы, и мы можем гибко управлять ими через код ЭтаФорма.Элементы.
Команды командного интерфейса (панель навигации, панель действий) загружаются платформой при старте сеанса или открытии раздела. Программное вмешательство в них «изнутри формы» практически невозможно, так как форма может быть еще не создана, когда интерфейс уже отрисован.
Чтобы ваша разработка была качественной, следуйте этим правилам:
ПриСозданииНаСервере. Вы можете обращаться к элементу напрямую по имени: Элементы.ИмяВашейКнопки.Видимость = Ложь; — это гораздо быстрее, чем цикл по всем элементам формы.Роли в конфигураторе.ПараметрыСеанса в связке с Функциональными опциями.Расширения конфигурации, вы можете модифицировать видимость команд метаданных, но помните, что эти изменения применяются ко всему интерфейсу, а не к отдельным экземплярам форм.Проанализировав эти методы, вы сможете выбрать оптимальный вариант для вашей задачи. Помните, что архитектурно верное решение — это то, которое требует меньше всего «костылей» в коде и максимально использует возможности метаданных платформы 1С.