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

1С:Предприятие :: 1С:Предприятие 8 общая

А можно как то создать XML из XDTO не мучаясь?

А можно как то создать XML из XDTO не мучаясь?
Я
   DES
 
23.02.18 - 11:47
Делаю так:

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("windows-1250");
НаборСхемXML = ФабрикаXDTO.ЭкспортСхемыXML(Имя_XDTO_пакета); 
Фабрика = Новый ФабрикаXDTO(НаборСхемXML);
Пакет = Фабрика.Пакеты.Получить(Имя_XDTO_пакета);
КорневоеСвойство = Пакет.КорневыеСвойства;
Documents_Свойство        = КорневоеСвойство.Получить("Documents");
Documents_Тип            = Documents_Свойство.Тип;
XML_Documents    = Фабрика.Создать(Documents_Тип);

но мне кажется что можно все это сделать гораздо проще, типа:
XML_Documents = ХитраяФункцияОт1С(Имя_XDTO_пакета);

или я слишком хорошо думаю об 1С?
 
 
   RomaH
 
1 - 23.02.18 - 12:48
ЗаписьXML = Новый ЗаписьXML;
        
        ЗаписьXML.УстановитьСтроку("windows-1251");
        ЗаписьXML.ЗаписатьОбъявлениеXML();
        ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, КорневойРаздел);
        
        ТекстВыгрузки = ЗаписьXML.Закрыть();
   DES
 
2 - 23.02.18 - 13:25
что такое "КорневойРаздел"?
   DES
 
3 - 23.02.18 - 13:51
(1) А понял.
Я не спрашиваю что дальше делать, я спрашиваю что вместо этого делать.
Все выводится, все работает, только муторно это все собирать.
Ведь вся инфа есть в xdto, и система ее знает, зачем мне порхаться с 
Documents_Свойство = КорневоеСвойство.Получить("Documents");
Documents_Тип = Documents_Свойство.Тип;
и т.д. для каждого элемента.
   RomaH
 
4 - 23.02.18 - 15:34
тебе XML с описаниями нужен что-ли?


я выгружаю итоговый документ - что в корневой передашь - то и выгрузит в текст
у меня - самый верхний ОбъектXDTO

и получаю:
<?xml version="1.0" encoding="windows-1251"?>
<anyType xmlns="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; name="87 Простые и сложные медицинские услуги">
    <sms xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"; code="A01.01.001" name="Сбор анамнеза и жалоб в дерматологии" smp="0" stomat="0" tube_type="0" label_transfer="0" label_vizit="0"/>
    <sms xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"; code="A01.01.001.001" name="Сбор анамнеза и жалоб при термических, химических и электрических ожогах" smp="0" stomat="0" tube_type="0" label_transfer="0" label_vizit="0"/>
   DES
 
5 - 23.02.18 - 15:41
У меня в конфигураторе импортирована схема.
Нужно создать файл xml
Для этого приходиться описывать каждый элемент, перед заполнением, вручную.
т.е. создавать ОбъектXDTO.
Это муторно, строк кода до сотни.
Я же говорю, в конфиге вся инфа есть об объекте, почему бы разработчики 1С не сделали команду СоздатьXDTOизСхемы(ТутУказываетсяСхема)
   RomaH
 
6 - 23.02.18 - 15:50
короче держи - разбирайся

там порядка 5 процедур тебе надо будет
https://yadi.sk/i/r8t3Irsf3Shx7Q
   hawksib
 
7 - 25.02.18 - 02:28
(5) я создаю только первый объект, а потом его заполняю в рекурсии, а в соответствии указываю, какое значение должно какому полю присваиваться, если при заполнении нет списка или список в виде одного элемента только у последнего объекта, рекурсия отлично всё заполняет, код как вызываю процедуру и сама процедура вот -
вызов:

VetDocumentStatusChangeDO = ФабрикаXD.Создать("http://api.vetrf.ru/schema/cdm/mercury/vet-document/v2";, "VetDocumentStatusChange");    //Сведения об установлении статуса ветеринарного документа.
    VetDocumentStatusChangePM = Новый Соответствие;
    VetDocumentStatusChangePM.Вставить("specifiedPerson/fio", confirmedBy_fio);//ФИО врача, оформившего ВСД.

    VetDocumentStatusChangePM.Вставить("specifiedPerson/post", confirmedBy_post)//Должность врача, оформившего ВСД.

    VetDocumentStatusChangePM.Вставить("status", "CONFIRMED");
    ЗаполнитьСвойстваОбъектаXDTOрек(VetDocumentStatusChangeDO, VetDocumentStatusChangePM);

процедура:

Процедура ЗаполнитьСвойстваОбъектаXDTOрек(ОбъектXDTO, тСоответствие)
    Для Каждого Эл Из тСоответствие Цикл
        ЛевоеИмяПоля = ?(Найти(Эл.Ключ, "/") <> 0, Лев(Эл.Ключ, Найти(Эл.Ключ, "/")-1), Эл.Ключ);
        ПравыеИменаПолей = Прав(Эл.Ключ, СтрДлина(Эл.Ключ) - Найти(Эл.Ключ, "/"));
        Если ЛевоеИмяПоля = ПравыеИменаПолей Тогда
            Если ТипЗнч(ОбъектXDTO[ЛевоеИмяПоля]) = Тип("СписокXDTO") Тогда
                ОбъектXDTO[ЛевоеИмяПоля].Добавить(Эл.Значение);
            Иначе
                ОбъектXDTO[ЛевоеИмяПоля] = Эл.Значение;
            КонецЕсли;
        Иначе
            Если ОбъектXDTO[ЛевоеИмяПоля] = Неопределено Тогда
                ОбъектXDTO[ЛевоеИмяПоля] = ФабрикаXD.Создать(ОбъектXDTO.Тип().Свойства.Получить(ЛевоеИмяПоля).Тип.URIПространстваИмен, ОбъектXDTO.Тип().Свойства.Получить(ЛевоеИмяПоля).Тип.Имя);
            КонецЕсли;
            ИменаПолей = Новый Соответствие;
            ИменаПолей.Вставить(ПравыеИменаПолей, Эл.Значение);
            ЗаполнитьСвойстваОбъектаXDTOрек(ОбъектXDTO[ЛевоеИмяПоля], ИменаПолей);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры// ЗаполнитьСвойстваОбъектаXDTOрек

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