| 
    
        
     
     | 
    
    
  | 
Определение типа в пакете 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Пакета(Свойство.Тип)); КонецЕсли; КонецЦикла; Возврат ТипЭлемента; КонецФункции  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |