Как правильно настроить структуру подчиненности для нетиповых документов в 1С

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

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

Различие между вводом на основании и структурой подчиненности

Для начала проанализируем важный методологический момент, который часто вызывает путаницу. Ввод на основании — это лишь механизм начального заполнения реквизитов нового объекта данными из объекта-родителя. Он срабатывает в момент создания документа (процедура ОбработкаЗаполнения). Однако само по себе это действие не создает постоянную связь для построения дерева.

Чтобы документ появился в структуре подчиненности, в нем должен физически существовать реквизит (например, ДокументОснование), в который записывается ссылка на родительский документ. Именно наличие этой ссылки в базе данных позволяет системе «увидеть» связь.

Шаг 1. Настройка критерия отбора

Основным объектом метаданных, отвечающим за сбор информации о связях, является Критерий отбора. В большинстве современных конфигураций он называется СтруктураПодчиненности или СвязанныеДокументы. Рассмотрим алгоритм его настройки:

  1. Откроем дерево метаданных и найдем ветку Критерии отбора.
  2. Перейдем на вкладку Данные.
  3. В поле Тип убедимся, что в список включен наш новый документ. Это позволит системе использовать наш документ в качестве «корня» или узла дерева.
  4. В разделе Состав необходимо отметить галочками реквизиты всех документов, которые ссылаются на наш документ или на которые ссылается он сам. Обычно это реквизиты с именами ДокументОснование, Основание или Заказ.

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

Шаг 2. Подключение команды на форму

Если мы используем Библиотеку стандартных подсистем (БСП), нам не нужно рисовать кнопку вручную. Достаточно использовать общую команду. Выполним следующие действия:

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

Шаг 3. Регистрация в программном коде БСП

Для конфигураций на базе БСП (УТ 11, ERP, КА 2, БП 3.0) одной настройки метаданных бывает недостаточно. Проанализируем ситуацию: система должна знать, для каких именно объектов нужно инициализировать форму связанных документов. Разберем, как прописать регистрацию программно:

Необходимо найти общий модуль СвязанныеДокументыПереопределяемый. В нем нас интересует процедура ПриОпределенииОбъектовСПодключеннымиДокументами. Добавим в нее наш документ:


Процедура ПриОпределенииОбъектовСПодключеннымиДокументами(СписокОбъектов) Экспорт
    СписокОбъектов.Добавить(Метаданные.Документы.НашНовыйДокумент);
КонецПроцедуры

Если вы ведете разработку в расширении, создайте аналогичный метод с префиксом &После, чтобы не затирать существующие регистрации типовых объектов.

Шаг 4. Проверка прав доступа

Если структура все равно пуста, выясним причину в области безопасности. Механизм структуры подчиненности требует прав на чтение самого Критерия отбора. Проверим роль пользователя:

Шаг 5. Особенности работы в расширениях

При использовании расширений часто возникает проблема, когда реквизит в расширении есть, а в критерий отбора основной конфигурации его добавить нельзя. В таких случаях:

  1. Проверим, добавлен ли сам критерий отбора в расширение.
  2. Убедимся, что все типы данных в составе критерия соответствуют типам в расширении.
  3. Иногда требуется создание собственного критерия отбора в расширении, если типовой не подлежит изменению (хотя в последних версиях платформы 8.3 это ограничение смягчено).

Итог совместной работы

Мы рассмотрели комплексный подход к настройке. Посмотрим на результат: теперь при нажатии кнопки «Структура подчиненности» система обращается к индексу критерия отбора, находит все документы, где в реквизите-основании указана ссылка на текущий объект, и строит наглядную иерархию. Помните, что ключевым звеном здесь является именно физическое заполнение реквизита ссылки в подчиненном документе.

← На главную