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