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