Как программно скрыть команду или кнопку в управляемой форме 1С?

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

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

Метод первый: Управление кнопками на управляемой форме

Если ваша задача заключается в скрытии конкретной кнопки, которая выведена на форму, самый прямой способ — это перебор коллекции элементов формы. Управляемая форма содержит коллекцию Элементы, которую мы можем проанализировать в модуле формы, например, в обработчике ПриСозданииНаСервере. Для стандартизации и ускорения операций с интерфейсом можно применить модуль для программного изменения форм и команд.

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

  1. Инициализируем цикл для обхода всех элементов формы.
  2. Проверяем тип элемента, чтобы убедиться, что мы работаем именно с кнопкой.
  3. Сверяем имя команды, привязанной к этой кнопке.
  4. Устанавливаем свойство Видимость в значение Ложь.

Посмотрим на пример кода:


Для Каждого Элемент Из ЭтаФорма.Элементы Цикл  
    Если ТипЗнч(Элемент) = Тип("КнопкаФормы") И Элемент.ИмяКоманды = "ИмяКомандыКоторуюНадоОтключать" Тогда    
        Элемент.Видимость = Ложь;
    КонецЕсли;
КонецЦикла;

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

Метод второй: Управление правами доступа

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

Этот способ является наиболее «чистым» с точки зрения архитектуры, так как он не требует написания кода в формах и гарантирует, что пользователь не сможет запустить команду даже через другие механизмы платформы.

Метод третий: Использование функциональных опций

Когда необходимо управлять видимостью команд глобально для всей системы в зависимости от включенных настроек (например, «Использовать учет по складам»), лучшим решением будут Функциональные опции. Они позволяют декларативно настроить поведение командного интерфейса. При изменении значения параметра сеанса, от которого зависит функциональная опция, платформа самостоятельно обновит видимость команд для всех пользователей.

Почему программное управление «на лету» ограничено?

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

Рекомендации по реализации

Чтобы ваша разработка была качественной, следуйте этим правилам:

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

← На главную