В обработке представляется структура метаданных выбранного документа не в конфигураторе, а в пользовательском режиме. Программным способом обработка обращается к метаданным и считывает соответствующие свойства. Корневым узлом будет выбранный документ. Подчиненными элементами дерева будут реквизиты этого документа, стандартные реквизиты, табличные части и их реквизиты. Если реквизит ссылочного типа, например, номенклатура, то у него выбираются все реквизиты. Реквизиты бывают составного типа данных. Это значит, что некоторые реквизиты, например, получатель, может иметь тип, ссылка на справочник физ. лица и ссылка на справочник контрагенты. В этом случае структура данного реквизита будет следующая: следующим подчиненным узлом указывается его тип. Для реквизита получатель существует два ответвления физ. лица и контрагенты, дальше их реквизиты. Если тип реквизита не является составным, то его тип выводится в одной строке с именем реквизита. Так выглядит дерево. При построении дерева используется рекурсия. Обрабатывается каждый реквизит и если он ссылочного типа данных, для него строится поддерево и так далее, до тех пор, пока не дойдёт до окончания этого дерева, т.е. до простых примитивных типов данных, для которых нельзя сделать разузлование. Возможно зацикливание. Например, в номенклатуре есть реквизит последней продажи, тип ДокументСсылка.РеализацияТоваров. Система поймет, что перед ней ссылочный тип и будет пытаться строить поддерево, которое уже начала строить в начале, затем процесс дойдет до номенклатуры, и опять по циклу. Проблема решена так, необходимо запомнить, при каждом рекурсивном вызове, какие реквизиты были обработаны ранее и если реквизит с таким типом данных уже обрабатывался прекращать построение поддерева.
Вступайте в нашу телеграмм-группу Инфостарт