Как отобразить подчиненный документ в структуре подчиненности в 1С?

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

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

Почему документ не появляется в структуре подчиненности?

Механизм построения связанной структуры документов в платформе 1С работает через метаобъект КритерийОтбора.СвязанныеДокументы. Дерево подчиненности формируется рекурсивно на основе прямых ссылок в реквизитах документов. Чтобы подчиненный документ корректно отображался в иерархии, должны выполняться три ключевых условия:

  1. В подчиненном документе есть реквизит, ссылающийся на родительский документ, и тип этого реквизита включает ссылку на новый документ.
  2. Этот реквизит явно отмечен в составе критерия отбора СвязанныеДокументы в Конфигураторе.
  3. Реквизит физически заполнен объектом-основанием при записи или проведении документа.

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

Шаг 1. Настройка метаданных и типа реквизита

Рассмотрим порядок действий, если требуется связать новый документ (например, псМаршрутныйЛист) и стандартный подчиненный документ (например, РасходныйКассовыйОрдер):

  1. Откроем Конфигуратор и найдем подчиненный документ (РасходныйКассовыйОрдер).
  2. Перейдем в список его реквизитов и найдем реквизит основания (обычно это ДокументОснования или ЗаявкаНаРасходованиеСредств).
  3. В свойствах реквизита откроем редактирование типа данных и добавим тип созданного документа — ДокументСсылка.псМаршрутныйЛист.

Шаг 2. Настройка критерия отбора «СвязанныеДокументы»

Простого добавления типа в реквизит недостаточно — платформа должна знать, какой именно реквизит искать при построении дерева связей.

  1. В дереве конфигурации найдем ветку Общие → Критерии отбора → СвязанныеДокументы.
  2. Откроем окно свойств и перейдем на вкладку Состав.
  3. Найдем в списке документ РасходныйКассовыйОрдер, развернем его и установим флажок напротив конкретного реквизита ДокументОснования.

Важно: Флажок должен стоять не просто напротив самого документа, а именно напротив реквизита, содержащего ссылку на родительский документ.

Шаг 3. Программное заполнение реквизита основания

Даже после настройки конфигуратора при создании документа вводом на основании реквизит ДокументОснования останется пустым, пока мы не пропишем логику его заполнения в коде.

Откроем модуль объекта подчиненного документа (в данном примере — РКО) и найдем процедуру обработки заполнения (ОбработкаЗаполнения или вызываемый из нее алгоритм заполнения по основанию). Добавим проверку типа входящего документа-основания и запись ссылки:


// Доработка заполнения по маршрутному листу
Если ТипЗнч(Основание) = Тип("ДокументСсылка.псМаршрутныйЛист") Тогда
    ЗаполнениеДокументов.ЗаполнитьШапкуДокументаПоОснованию(ЭтотОбъект, Основание);
    ДокументОснования = Основание;
КонецЕсли;

Благодаря этому коду при вводе на основании поле ДокументОснования будет заполняться автоматически, и платформа включит сформированный документ в общий список связанных документов.

Особенности работы с созданными ранее документами

Обратите внимание: внесенные в процедуру ОбработкаЗаполнения изменения повлияют только на новые документы, создаваемые после доработки. Если подчиненные документы были созданы до настройки кода, они не появятся в структуре подчиненности автоматически. Чтобы отобразить их в дереве связей, потребуется открыть такие документы и вручную выбрать нужный ДокументОснования, либо воспользоваться групповой обработкой для перезаполнения данного реквизита.

← На главную