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