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