ФабрикаXDTO не позволяет вырезать ветки из xsd-схем, одновременно протягивая все ссылки по зависимым элементам. Ниже приведен код на примере большой xsd-схемы EnterpriseData, на других сложных схемах могут требоваться правки, на более простых схемах скорее всего отработает.

В результате работы формируется массив структур c простыми типами для дальнейшей простой сериализации в JSON.
Можно код взять за основу и реализовать с небольшими правками создание xsd-схемы
&НаСервере
Функция СоставитьСписокРеквизитовХозОперации(ВидХозОперации)
ВерсияED = "1.20";
СписокТиповED = ФабрикаXDTO.Пакеты.Получить("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/" + ВерсияED);
ИтоговаяСтруктура = новый Структура("Имя, Тип, Свойства");
ТаблицаТипов = Новый ТаблицаЗначений;
ТаблицаТипов.Колонки.Добавить("Имя");
ТаблицаТипов.Колонки.Добавить("Тип");
ТаблицаТипов.Колонки.Добавить("Свойства");
БылаНайденаОперация = Ложь;
Для Каждого ОписаниеТипа ИЗ СписокТиповED Цикл
Если СтрНайти(ОписаниеТипа.Имя, "Документ." + ВидХозОперации) <> 0 Тогда
ЗаполнитьРекурсивноСписокСвойствОбъектаXDTO(ОписаниеТипа, ТаблицаТипов, ИтоговаяСтруктура);
БылаНайденаОперация = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ БылаНайденаОперация Тогда
//TODO обработать ошибку
КонецЕсли;
Возврат ИтоговаяСтруктура;
КонецФункции
&НаСервере
Процедура ЗаполнитьРекурсивноСписокСвойствОбъектаXDTO(ТипОбъектаXDTO, ТаблицаТипов, СтруктураОбъекта)
ПростойТип = "{http://www.w3.org/2001/XMLSchema}";
ВерсияED = "1.20";
ТипОбъект = "{http://v8.1c.ru/edi/edi_stnd/EnterpriseData/" + ВерсияED + "}";
СтруктураОбъекта.Имя = ТипОбъектаXDTO.Имя;
СтруктураОбъекта.Тип = Строка(ТипОбъектаXDTO);
МассивСвойств = новый Массив();
Для Каждого ДочернееСвойство Из ТипОбъектаXDTO.Свойства Цикл
СтруктураСвойства = новый Структура("Имя, Тип, Свойства");
Если ТипЗнч(ДочернееСвойство.Тип) = Тип("ТипОбъектаXDTO")
И СтрНайти(ДочернееСвойство.Тип, ПростойТип) = 0
И НЕ СтрНачинаетсяС(ДочернееСвойство.Тип.Имя, "Ссылка") Тогда // в ключевые свойства мы приходим по типу, поэтому обработки ссылки - это гарантированное зацикливание
нТип = ТаблицаТипов.Найти(ДочернееСвойство.Имя,"Имя");//антизацикливание
Если нТип = Неопределено Тогда
нов = ТаблицаТипов.Добавить();
нов.Имя = ДочернееСвойство.Имя;
нов.Тип = ДочернееСвойство.Тип;
ЗаполнитьРекурсивноСписокСвойствОбъектаXDTO(ДочернееСвойство.Тип, ТаблицаТипов, СтруктураСвойства);
нов.Свойства = СтруктураСвойства.Свойства;
Иначе
СтруктураСвойства.Имя = нТип.Имя;
СтруктураСвойства.Тип = Строка(нТип.Тип);
СтруктураСвойства.Свойства = нТип.Свойства;
КонецЕсли;
Иначе
СтруктураСвойства.Имя = ДочернееСвойство.Имя;
СтруктураСвойства.Тип = Строка(ДочернееСвойство.Тип);
Если СтрНачинаетсяС(СтрЗаменить(СтруктураСвойства.Тип, ТипОбъект, ""), "Тип") Тогда // это ссылки на класс ТипыЗначений
СтруктураСвойства.Тип = Строка(ДочернееСвойство.Тип.БазовыйТип);
КонецЕсли;
КонецЕсли;
МассивСвойств.Добавить(СтруктураСвойства);
КонецЦикла;
СтруктураОбъекта.Свойства = МассивСвойств;
КонецПроцедуры
Вступайте в нашу телеграмм-группу Инфостарт
