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