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

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Ограничения платформы

Важно понимать, что панель навигации в управляемом интерфейсе 1С не является обычным элементом формы, которым можно управлять через свойство Видимость. Это системный объект, который строится платформой автоматически на этапе формирования формы на основе метаданных команд. Система анализирует права доступа пользователя, доступность функциональных опций и связи объектов, поэтому прямое программное вмешательство в этот процесс через Элементы.ИмяКоманды.Видимость не предусмотрено архитектурой.

Способ №1: Использование функциональных опций (ФО)

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

Рассмотрим, как это работает:

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

Важно: Данный метод является декларативным. С точки зрения архитектуры 1С это наиболее «чистый» способ, однако помните, что ФО влияют на систему глобально. Использование ФО для управления интерфейсом конкретного элемента (например, одного контрагента) может привести к избыточности метаданных.

Способ №2: Имитация панели навигации через командную панель

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

Рассмотрим пошаговую реализацию:

  1. На форме создайте группу с типом Командная панель.
  2. Внутри группы разместите обычные кнопки или гиперссылки.
  3. В модуле формы (в событиях ПриЧтенииНаСервере или ПриИзменении соответствующих полей) программно управляйте свойством Видимость этих элементов.

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


// Пример программного управления видимостью в модуле формы
&НаКлиенте
Процедура ВидКонтрагентаПриИзменении(Элемент)
    // Управляем видимостью нашей пользовательской панели
    Элементы.ГруппаНавигацииПоставщика.Видимость = (Объект.ТипКонтрагента = "Поставщик");
    Элементы.ГруппаНавигацииКлиента.Видимость     = (Объект.ТипКонтрагента = "Клиент");
КонецПроцедуры

Способ №3: Перехват команд в расширении

Если вы не хотите отказываться от стандартной панели, но вам нужно ограничить доступ к переходу по гиперссылке, используйте механизм расширений. Вы можете перехватить выполнение команды (например, через обработчик ПередНачаломДобавления или ПередОткрытием) и программно отменить действие, если условия не соблюдены.

Резюме:

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

← На главную