Вход | Регистрация

1С:Предприятие ::

Метки: 

Определение типа в пакете XDTO

Я
   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, не могу понять как к нему подобраться.
 
  Рекламное место пустует
   RomaH
 
1 - 08.06.18 - 09:04
ну ... код-то где?
   pupurum
 
2 - 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.Создать(ТипСтрокиТЧ);

   pupurum
 
7 - 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) не всегда
   RomaH
 
9 - 08.06.18 - 11:53
(8) ну и рекурсией в дерево
   RomaH
 
10 - 08.06.18 - 11:53
// Возвращает структуру со всеми типами:

// каждое имя структуры содержит обязательное поле Тип
// и необязательное поле с подчинённой структурой следующего типа

// например: package.Тип - тип корневого элемента
// package.body - подчинённый элемент

// package.body.Тип - тип элемента body
// package.body.bill - подчинённый элемент

// package.body.bill.Тип - тип элемента bill
Функция     ПолучитьСтруктуруТиповXDTOПакета(ТекущийЭлемент)
    ТипЭлемента = Новый Структура("Тип", ТекущийЭлемент);
    Для каждого Свойство из ТекущийЭлемент.Свойства Цикл
        Если Свойство.Форма = ФормаXML.Элемент Тогда
            ТипЭлемента.Вставить(Свойство.Имя, ПолучитьСтруктуруТиповXDTOПакета(Свойство.Тип));
        КонецЕсли;
    КонецЦикла;
    Возврат ТипЭлемента; 
КонецФункции
 
 


Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует