Имя: Пароль:
1C
1С v8
Определение типа в пакете 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

ТипСтрокиТЧ = Документ.Тип().Свойства.Получить("ТЧ").Тип;
пСтрокаТЧ = ФабрикаXDTO.Создать(ТипСтрокиТЧ);
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Пакета(Свойство.Тип));
        КонецЕсли;
    КонецЦикла;
    Возврат ТипЭлемента;
КонецФункции
AdBlock убивает бесплатный контент. 1Сергей