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

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

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

Проблема автоматической генерации ссылок

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

Способ 1. Программное управление через КомандныйИнтерфейс

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

Рассмотрим по шагам, как реализовать скрытие ссылки в зависимости от значения реквизита:

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

Проанализируем пример кода:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Проверяем условие, при котором ссылка должна быть скрыта
    // Например, если в объекте не установлен флаг "РазмерВедется"
    Если Не Объект.РазмерВедется Тогда
        
        // Находим команду в интерфейсе по её полному имени
        // Имя команды обычно совпадает с полным именем объекта метаданных
        ИмяКоманды = "РегистрСведений.ИмяВашегоРегистра.Команда.ИмяКоманды";
        КомандаПерехода = КомандныйИнтерфейс.Найти(ИмяКоманды);
        
        Если КомандаПерехода <> Неопределено Тогда
            КомандаПерехода.Видимость = Ложь;
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Важный нюанс: программное изменение видимости в КомандныйИнтерфейс работает корректно только внутри процедуры ПриСозданииНаСервере. Если вы попытаетесь изменить видимость позже (например, в обработчике ПриИзменении какого-либо реквизита на клиенте), платформа проигнорирует эти изменения. Для динамического скрытия «на лету» потребуется переоткрытие формы, что не всегда удобно.

Способ 2. Настройка видимости в конфигураторе

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

Разберем последовательность действий в конфигураторе:

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

Если требуется настроить видимость для разных прав, используйте колонку «Видимость по ролям» в этом же окне. Это позволяет оставить ссылку бухгалтеру, но скрыть её от кладовщика без написания кода.

Способ 3. Использование пользовательских команд (Альтернатива)

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

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

Теперь эта команда будет доступна в коллекции Элементы. Посмотрим на пример управления такой командой:


&НаКлиенте
Процедура ПослеИзмененияРеквизита(Элемент)
    // В отличие от стандартных команд, пользовательские доступны через Элементы
    // и их видимость можно менять динамически на клиенте
    Элементы.ФормаКомандаПерейтиВРегистр.Видимость = Объект.НужноеУсловие;
КонецПроцедуры

Способ 4. Влияние функциональных опций

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

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

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

Подводя итог, выделим основные правила работы с видимостью в панели навигации:

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

← На главную