Функция ПолучитьСоответствиеИзОбъекта(знач ТекОбъект,МассивЭлементов=Неопределено) Экспорт
Если МассивЭлементов<>Неопределено И МассивЭлементов.Найти(ТекОбъект)<>Неопределено И НЕ ЭтоЗначениеПростогоТипа(ТекОбъект) Тогда
Возврат Строка(ТекОбъект.Метаданные().ПолноеИмя()+"^"+ТекОбъект.УникальныйИдентификатор());
ИначеЕсли МассивЭлементов = Неопределено Тогда
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить(ТекОбъект);
КонецЕсли;
МассивЭлементов.Добавить(ТекОбъект);
Если ТипЗнч(ТекОбъект) = Тип("УникальныйИдентификатор") Тогда
Возврат Строка(ТекОбъект);
ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипЗнч(ТекОбъект)) Тогда
Возврат ТекОбъект.Метаданные().ПолноеИмя()+"."+Строка(ТекОбъект);
КонецЕсли;
Соответствие = Новый Соответствие(); /// реквизиты
Для каждого Реквизит из ТекОбъект.Метаданные().Реквизиты Цикл
Если ЭтоЗначениеПростогоТипа(ТекОбъект[Реквизит.Имя])Тогда
Соответствие.Вставить(Реквизит.Имя, ТекОбъект[Реквизит.Имя]);
ИначеЕсли ТипЗнч(ТекОбъект[Реквизит.Имя]) = Тип("ХранилищеЗначения") Тогда
Соответствие.Вставить(Реквизит.Имя, XMLСтрока(ТекОбъект[Реквизит.Имя]));
Иначе
Соответствие.Вставить(Реквизит.Имя, ПолучитьСоответствиеИзОбъекта(ТекОбъект[Реквизит.Имя],МассивЭлементов));
КонецЕсли;
КонецЦикла; /// таблицы
Для Каждого ТабличнаяЧасть из ТекОбъект.Метаданные().ТабличныеЧасти Цикл
МассивСтрок = Новый Массив; ДанныеСтрокой = "";
Для Каждого ТекСтрока Из ТекОбъект[ТабличнаяЧасть.Имя] Цикл
СоответствиеСтроки = Новый Соответствие;
Для Каждого ТекКолонка Из ТекОбъект.Метаданные().ТабличныеЧасти[ТабличнаяЧасть.Имя].Реквизиты Цикл
Если ЭтоЗначениеПростогоТипа(ТекСтрока[ТекКолонка.Имя])Тогда
СоответствиеСтроки.Вставить(ТекКолонка.Имя, ТекСтрока[ТекКолонка.Имя]);
ИначеЕсли ТипЗнч(ТекСтрока[ТекКолонка.Имя]) = Тип("ХранилищеЗначения") Тогда
СоответствиеСтроки.Вставить(ТекКолонка.Имя, XMLСтрока(ТекСтрока[ТекКолонка.Имя]));
Иначе
СоответствиеСтроки.Вставить(ТекКолонка.Имя, ПолучитьСоответствиеИзОбъекта(ТекСтрока[ТекКолонка.Имя],МассивЭлементов));
КонецЕсли;
ДанныеСтрокой = ДанныеСтрокой+"~"+Строка(СоответствиеСтроки[ТекКолонка.Имя]);
КонецЦикла;
МассивСтрок.Добавить(СоответствиеСтроки);
ДанныеСтрокой = ДанныеСтрокой+Символы.ПС;
КонецЦикла;
Соответствие.Вставить(ТабличнаяЧасть.Имя,МассивСтрок);
Соответствие.Вставить(ТабличнаяЧасть.Имя+"Строкой",ДанныеСтрокой); //Содержимое таб. части для облегчения отладки
КонецЦикла;
Соответствие.Вставить("ИмяМетаданныеОбъекта",ТекОбъект.Метаданные().ПолноеИмя());
Соответствие.Вставить("УникальныйИдентификатор",Строка(ТекОбъект.УникальныйИдентификатор()));
Для Каждого стРеквизит Из ТекОбъект.Метаданные().СтандартныеРеквизиты Цикл
Если ЗначениеЗаполнено(ТекОбъект[стРеквизит.Имя]) И стРеквизит.Имя<>"Предопределенный" И стРеквизит.Имя<>"Ссылка" Тогда
Соответствие.Вставить(стРеквизит.Имя,ТекОбъект[стРеквизит.Имя]);
КонецЕсли;
КонецЦикла;
Возврат Соответствие;
КонецФункции