Функция возвращает иерархию типов свойств для ТипОбъектаXDTO

SDV 34 7

Упрощает создание Объектов XDTO.

// Возвращает иерархию/дерево типов свойств для ТипОбъектаXDTO
// Упрощает создание Объектов XDTO. 
// Создание объектов XDTO без использования Иерархии свойств:
//////////////////////////////////////////////////////////////////////////////
//  ТипДата = Фабрика.Пакеты.Получить("urn://egisso-ru/msg/10.06.S/1.0.6").КорневыеСвойства.Получить("data").Тип;
//  data = Фабрика.Создать(ТипДата);
//  ТипПакет =ТипДата.Свойства.Получить("package").Тип;
//  data.package = Фабрика.Создать(ТипПакет);
//  data.package.packageId  = XMLСтрока(новый УникальныйИдентификатор);
//  ТипЭлемент = ТипПакет.Свойства.Получить("elements").Тип;
//  data.package.elements =  Фабрика.Создать(ТипЭлемент);
//  ТипФакт = ТипЭлемент.Свойства.Получить("fact").Тип;
//  data.package.elements.fact =  Фабрика.Создать(ТипФакт);
/////////////////////////////////////////////////////////////////////////////
// Создание объектов  XDTO с помощью Иерархии свойств:
/////////////////////////////////////////////////////////////////////////////
//	КорневойТип = Фабрика.Пакеты.Получить("urn://egisso-ru/msg/10.06.S/1.0.6").КорневыеСвойства.Получить("data").Тип;
//	ИерархияТипов = Новый Структура("data", ИерархияТиповXDTO(КорневойТип, 20));
//	data = Фабрика.Создать(ИерархияТипов.data.Тип);
//	data.package = Фабрика.Создать(ИерархияТипов.data.Package.Тип);
//	data.package.packageId  = XMLСтрока(новый УникальныйИдентификатор);
//	data.package.elements = Фабрика.Создать(ИерархияТипов.data.package.elements.Тип);
/////////////////////////////////////////////////////////////////////////////
// Параметры:
//  Тип -      ТипОбъектаXDTO
//  ПределРекурсии  - Число - Максимальная вложенность вызовов этой рекурсивной функции
//  Глубина  - Число -  Служебный - не заполнять. Счетчик вложенности.
//
// Возвращаемое значение:
//  Структура - Содержит Тип (ТипОбъектаXDTO) и перечень иерархий структур, соответствующий набору свойства переданного типа
//
// Пример:
//   КорневойТип = Фабрика.Пакеты.Получить("urn://egisso-ru/msg/10.06.S/1.0.6").КорневыеСвойства.Получить("data").Тип;
//   ИерархияТипов = Новый Структура("data", ИерархияТиповXDTO(КорневойТип, 20));
//   data = Фабрика.Создать(ИерархияТипов.data.Тип);
//   data.package = Фабрика.Создать(ИерархияТипов.data.Package.Тип);
Функция ИерархияТиповXDTO(Тип, ПределРекурсии = Неопределено,  Глубина = 1) Экспорт
     Если ПределРекурсии <> Неопределено Тогда
          Если Глубина > ПределРекурсии тогда
               ВызватьИсключение "Превышен предел на глубину рекурсии: Глубина = " + Глубина + "; Предел = " + ПределРекурсии;
          КонецЕсли;
     КонецЕсли;
     Результат = Новый Структура("Тип", Тип);
     Если ТипЗнч(Тип) = Тип("ТипОбъектаXDTO") Тогда
          Для каждого Свойство из Тип.Свойства Цикл
               Результат.Вставить(Свойство.ЛокальноеИмя, ИерархияТиповXDTO(Свойство.Тип, ПределРекурсии, Глубина + 1));
          КонецЦикла;
     КонецЕсли;
     Возврат Результат;
КонецФункции
Орфографическая ошибка в egisso (найдено 3): egisso
FastCode - бесплатный сервис для программистов 1С

Похожие публикации

СменитьРодителяПапок (БСП)

СписокОбъектовМетаданныхИмеющихХранилищеЗначения (БСП)

ОжидаемыеТипыСвойствОписанияПроблемы (БСП)

ЗначениеСвойства (БСП)

ЗначенияСвойств (БСП)

Модератору