|
Определение типа в пакете XDTO | ☑ | ||
---|---|---|---|---|
0
pupurum
08.06.18
✎
08:51
|
Здравствуйте! Столкнулся со следующей проблемой - не могу заполнить вложенные свойства в объекте XDTO. Тип в пакете выглядит приблизительно следующим образом:
ОбъектXDTO: insurer_id_t СвойствоXDTO: InsurerId ОбъектXDTO: Определение типа СвойствоXDTO: CmbndId ОбъектXDTO: Определение типа СвойствоXDTO: ClrSysMmbId ОбъектXDTO: Определение типа СвойствоXDTO: Id В XML это выглядит так: <xs:complexType name="insurer_id_t"> <xs:all> <xs:element name="InsurerId"> <xs:complexType> <xs:all> <xs:element name="CmbndId"> <xs:complexType> <xs:all> <xs:element name="ClrSysMmbId"> <xs:complexType> <xs:all> <xs:element name="Id" type="tns:idd_t"/> </xs:all> </xs:complexType> </xs:element> </xs:all> </xs:complexType> </xs:element> </xs:all> </xs:complexType> </xs:element> </xs:all> </xs:complexType> Вот заполнить мне нужно именно тег ID, не могу понять как к нему подобраться. |
|||
1
RomaH
naïve
08.06.18
✎
09:04
|
ну ... код-то где?
|
|||
2
pupurum
08.06.18
✎
10:14
|
Да какой там код-то...
ЛокальноеПространствоИмен = "ЛокальноеПространствоИмен"; ТипXDTO = ФабрикаXDTO.Тип(ЛокальноеПространствоИмен, "insurer_id_t"); ОбъектXDTO = ФабрикаXDTO.Создать(ТипXDTO); Собственно и весь код. К свойству ОбъектXDTO.InsurerId еще есть доступ, а вот как добраться до Определений типа и их свойствам - не пойму. |
|||
3
Жан Пердежон
08.06.18
✎
10:43
|
1С не может в объявления типов по месту использования; пару лет назад вроде писал уже об этом на партнерке, но воз и ныне там.
|
|||
4
Вафель
08.06.18
✎
10:45
|
(3) может
|
|||
5
Вафель
08.06.18
✎
10:46
|
(4) нужно получить свойство объекта, у него тип, и по типу создать новый обхект
|
|||
6
Вафель
08.06.18
✎
10:51
|
|
|||
7
pupurum
08.06.18
✎
11:33
|
Спасибо, действительно помогло. Правда я не совсем понял, что за код Вы написали. Применительно к описанной проблеме, у меня получилось так, в продолжение к предыдущему коду:
СвойствоInsurerId = ОбъектXDTO.Свойства().Получить("InsurerId"); InsurerId = ФабрикаXDTO.Создать(СвойствоInsurerId.Тип); СвойствоCmbndId = InsurerId.Свойства().Получить("CmbndId"); CmbndId = ФабрикаXDTO.Создать(СвойствоCmbndId.Тип); СвойствоClrSysMmbId = CmbndId.Свойства().Получить("ClrSysMmbId"); ClrSysMmbId = ФабрикаXDTO.Создать(СвойствоClrSysMmbId.Тип); ClrSysMmbId.Id = "ТребуемоеЗначение"; CmbndId.ClrSysMmbId = ClrSysMmbId; InsurerId.CmbndId = CmbndId; ОбъектXDTO.InsurerId = InsurerId; |
|||
8
Жан Пердежон
08.06.18
✎
11:37
|
(4) не всегда
|
|||
9
RomaH
naïve
08.06.18
✎
11:53
|
(8) ну и рекурсией в дерево
|
|||
10
RomaH
naïve
08.06.18
✎
11:53
|
// Возвращает структуру со всеми типами:
// каждое имя структуры содержит обязательное поле Тип // и необязательное поле с подчинённой структурой следующего типа // например: package.Тип - тип корневого элемента // package.body - подчинённый элемент // package.body.Тип - тип элемента body // package.body.bill - подчинённый элемент // package.body.bill.Тип - тип элемента bill Функция ПолучитьСтруктуруТиповXDTOПакета(ТекущийЭлемент) ТипЭлемента = Новый Структура("Тип", ТекущийЭлемент); Для каждого Свойство из ТекущийЭлемент.Свойства Цикл Если Свойство.Форма = ФормаXML.Элемент Тогда ТипЭлемента.Вставить(Свойство.Имя, ПолучитьСтруктуруТиповXDTOПакета(Свойство.Тип)); КонецЕсли; КонецЦикла; Возврат ТипЭлемента; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |