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

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

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

Анализ ограничений платформы 1С:Предприятие 8.3

Начнем с важного технического факта: прямого программного доступа к коллекции элементов панели навигации через объектную модель формы (например, через свойство Элементы) в платформе не существует. Панель навигации формируется платформой автоматически на этапе инициализации формы на сервере. Она строится на основе метаданных, прав доступа и настроек командного интерфейса, определенных в конфигураторе.

Поскольку эти элементы не входят в коллекцию Элементы, мы не можем написать код вроде Элементы.ИмяКомандыНавигации.Видимость = Ложь. Платформа просто не «видит» эти команды как интерактивные объекты, доступные для изменения во время выполнения программного кода на встроенном языке.

Решение 1: Использование функциональных опций

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

Проанализируем алгоритм настройки:

  1. Создадим или выберем существующую Функциональную опцию в метаданных.
  2. Привяжем команду (например, переход к подчиненному справочнику) к этой опции в свойствах объекта.
  3. При изменении значения константы или реквизита, к которому привязана опция, платформа автоматически перестроит интерфейс всех открытых форм, включая панель навигации.

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

Решение 2: Настройка видимости по ролям

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

  1. Откроем форму документа в конфигураторе.
  2. Перейдем на закладку Командный интерфейс.
  3. В разделе «Панель навигации» мы увидим список всех доступных команд.
  4. В колонке «Видимость» можно снять флажки для определенных ролей или установить общую видимость по умолчанию.

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

Решение 3: Перенос функционала в командную панель формы

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

Разберем этот подход по шагам:

  1. Создадим обычную команду формы.
  2. Разместим кнопку этой команды в командной панели (шапке) формы или в специально созданной группе.
  3. Для этой кнопки программный доступ полностью открыт. Мы можем изменять свойство Видимость в любой момент.

Пример кода для управления такой командой в процедуре ПриЧтенииНаСервере или ПриСозданииНаСервере:


&НаСервере
Процедура УправлениеВидимостьюКоманд()
    
    // Если документ новый или не проведен, скрываем сервисную команду
    Элементы.ГруппаКомандыСпецДействий.Видимость = Объект.Проведен;
    
КонецПроцедуры

Таким образом, мы получаем полный контроль над поведением интерфейса, используя стандартную коллекцию Элементы.

Решение 4: Имитация панели навигации через группы

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

Это требует больше трудозатрат на верстку формы, но полностью снимает ограничения, накладываемые стандартной панелью навигации.

Резюме

Выясним причину, почему разработчики часто ищут обходные пути: стандартная панель навигации удобна тем, что она формируется автоматически, но она не предназначена для сложной динамической логики. Если вам нужно скрывать команды «по условию» здесь и сейчас, используйте функциональные опции для глобальных условий или команды формы с размещением в обычных группах для локальной логики конкретного документа. Помните, что свойство Использование в метаданных команды также играет важную роль, но оно не может быть изменено программно в контексте работы с конкретной формой.

← На главную