Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
20 Июл 2017, 17:37
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Сериализация XML в XDTO  (Прочитано 1445 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ромашев Алексей

  • *
  • Сообщений: 33
  • РЕПУТАЦИЯ: -1
  • Регистрация: 2015-06-18
  • Сайт: 
  • Профессия: Ученик 1С
Поскольку предыдущий мой вопрос был либо слишком сложным, либо очень запутанным я решил его перефразировать. Допустим есть переменная с типом строка, в ней содержится текст XML. Вот пример:
ТекстXML = "<?xml version="1.0"?>
<xs:schema xmlns:tns="http://www.livtorg.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.livtorg.org" attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xs:complexType name="Договор">
        <xs:sequence>
            <xs:element name="УИд" type="xs:string"/>
            <xs:element name="Код" type="xs:string"/>
            <xs:element name="Наименование" type="xs:string" nillable="true"/>
            <xs:element name="Родитель" type="xs:string"/>
            <xs:element name="СуммаЗадолженности" type="xs:decimal" nillable="true"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Заказ">
        <xs:sequence>
            <xs:element name="НомерДок" type="xs:string"/>
            <xs:element name="ДатаДок" type="xs:dateTime"/>
            <xs:element name="КодКонтрагента" type="xs:string"/>
            <xs:element name="КодДоговора" type="xs:string"/>
            <xs:element name="ТабТовары" type="tns:ЗаказТовары" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="ЗаказТовары">
        <xs:sequence>
            <xs:element name="КодНоменклатуры" type="xs:string"/>
            <xs:element name="Количество" type="xs:decimal"/>
            <xs:element name="Цена" type="xs:decimal"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Заказы">
        <xs:sequence>
            <xs:element name="СписокЗаказов" type="tns:Заказ" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Контрагент">
        <xs:sequence>
            <xs:element name="УИд" type="xs:string"/>
            <xs:element name="Код" type="xs:string"/>
            <xs:element name="Наименование" type="xs:string" nillable="true"/>
            <xs:element name="СписокДоговоров" type="tns:Договор" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Номенклатура">
        <xs:sequence>
            <xs:element name="УИд" type="xs:string"/>
            <xs:element name="Код" type="xs:string"/>
            <xs:element name="Наименование" type="xs:string" nillable="true"/>
            <xs:element name="Родитель" type="xs:string" nillable="true"/>
            <xs:element name="ЭтоГруппа" type="xs:boolean"/>
            <xs:element name="ЕдиницаДляОтчетов" type="xs:string" nillable="true"/>
            <xs:element name="КоэффициентЕДО" type="xs:decimal" nillable="true"/>
            <xs:element name="ЕдиницаХраненияОстатков" type="xs:string" nillable="true"/>
            <xs:element name="КоэффициентЕХО" type="xs:decimal" nillable="true"/>
            <xs:element name="Цена" type="xs:decimal" nillable="true"/>
            <xs:element name="Остатки" type="xs:decimal" nillable="true"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="СписокКонтрагентов">
        <xs:sequence>
            <xs:element name="Контрагенты" type="tns:Контрагент" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="СписокТоваров">
        <xs:sequence>
            <xs:element name="Номенклатура" type="tns:Номенклатура" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>";
Можно ли из неё получить XDTO пакет, объект или что угодно?)


Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
Только в том случае, если объекты присутствуют как метаданные в вашей конфигурации. В противном случае разбирать как обычный xml.

Оффлайн Ромашев Алексей

  • *
  • Сообщений: 33
  • РЕПУТАЦИЯ: -1
  • Регистрация: 2015-06-18
  • Сайт: 
  • Профессия: Ученик 1С
Только в том случае, если объекты присутствуют как метаданные в вашей конфигурации. В противном случае разбирать как обычный xml.
Можете скинуть ссылку на пример? я видел как разбирают файлы XML, но как разобрать строку не знаю(

Оффлайн Rasty

  • *****
  • Сообщений: 976
  • РЕПУТАЦИЯ: 137
  • КПД: 14%
  • Регистрация: 2015-03-25
    • Skype: alex1cbit
  • Сайт: 
  • Профессия: Программист 1С
Только в том случае, если объекты присутствуют как метаданные в вашей конфигурации. В противном случае разбирать как обычный xml.
вчитайтесь
Добавлено: 20 Янв 2016, 10:28

а если вы хотите разобрать , то тут вы писали
    НаборСхемXML = ФабрикаXDTO.ЭкспортСхемыXML("http://www.livtorg.org");
     Для Счетчик = 0 по НаборСхемXML.Количество() - 1 Цикл
            Схема = НаборСхемXML.Получить(Счетчик);
            Схема.ОбновитьЭлементDOM();
            ЗаписьDOM = Новый ЗаписьDOM;
            ЗаписьXMLСтрока = Новый ЗаписьXML;
            ЗаписьXMLСтрока.УстановитьСтроку();
            ЗаписьXMLФайл = Новый ЗаписьXML;
            ЗаписьDOM.Записать(Схема.ДокументDOM, ЗаписьXMLСтрока);
            ЗаписьXMLФайл.УстановитьСтроку();
            ЗаписьXMLФайл.ЗаписатьБезОбработки(ЗаписьXMLСтрока.Закрыть());
           
        КонецЦикла;
        ЧТ= ЗаписьXMLФайл.Закрыть() ;
        ЧТХЗ= Новый ХранилищеЗначения(ЧТ, Новый СжатиеДанных(9));
    Возврат ЧТХЗ;
Цитировать
Который возвращает Хранилище значений, в котором находится XML
по идеи вопросы должны отпадать
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

Оффлайн Ромашев Алексей

  • *
  • Сообщений: 33
  • РЕПУТАЦИЯ: -1
  • Регистрация: 2015-06-18
  • Сайт: 
  • Профессия: Ученик 1С
Только в том случае, если объекты присутствуют как метаданные в вашей конфигурации. В противном случае разбирать как обычный xml.
вчитайтесь
Добавлено: 20 Янв 2016, 10:28

а если вы хотите разобрать , то тут вы писали
    НаборСхемXML = ФабрикаXDTO.ЭкспортСхемыXML("http://www.livtorg.org");
     Для Счетчик = 0 по НаборСхемXML.Количество() - 1 Цикл
            Схема = НаборСхемXML.Получить(Счетчик);
            Схема.ОбновитьЭлементDOM();
            ЗаписьDOM = Новый ЗаписьDOM;
            ЗаписьXMLСтрока = Новый ЗаписьXML;
            ЗаписьXMLСтрока.УстановитьСтроку();
            ЗаписьXMLФайл = Новый ЗаписьXML;
            ЗаписьDOM.Записать(Схема.ДокументDOM, ЗаписьXMLСтрока);
            ЗаписьXMLФайл.УстановитьСтроку();
            ЗаписьXMLФайл.ЗаписатьБезОбработки(ЗаписьXMLСтрока.Закрыть());
           
        КонецЦикла;
        ЧТ= ЗаписьXMLФайл.Закрыть() ;
        ЧТХЗ= Новый ХранилищеЗначения(ЧТ, Новый СжатиеДанных(9));
    Возврат ЧТХЗ;
Цитировать
Который возвращает Хранилище значений, в котором находится XML
по идеи вопросы должны отпадать
Это был исходник другого программиста. Я вроде как разобрался, только теперь возникла проблема. При исполнении этого кода:
	ЧтениеXMLСхемы = Новый ЧтениеXML;
СтрокаXSD = ПолучитьСтрокуЗаказа();
ЧтениеXMLСхемы.УстановитьСтроку(СтрокаXSD);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXMLСхемы);
ПостроительСхемXML = Новый ПостроительСхемXML;
СхемаXML = ПостроительСхемXML.СоздатьСхемуXML(ДокументDOM);
НаборСхемXML = Новый НаборСхемXML;
НаборСхемXML.Добавить(СхемаXML);

СвояФабрикаXDTO = Новый ФабрикаXDTO(НаборСхемXML);
ТипЗаказXDTO =  СвояФабрикаXDTO.Тип("http://www.livtorg.org","Заказы");
ЗаказыXDTO = СвояФабрикаXDTO.ПрочитатьXML(ЧтениеXMLСхемы,ТипЗаказXDTO);
Вылетает ошибка:
{Документ.Заказы.Форма.ФормаСписка.Форма(45)}: Ошибка при вызове метода контекста (ПрочитатьXML)
   ЗаказыXDTO = СвояФабрикаXDTO.ПрочитатьXML(ЧтениеXMLСхемы,ТипЗаказXDTO);
по причине:
Ошибка структуры данных XDTO

Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
Ошибка структуры данных XDTO
Структура заказа в xml файле, не совпадает со структурой заказа в вашей конфигурации, поэтому получаете ошибку при автопреобразовании. Разгребайте как обычный xml. Строка отлично записывается в файл с любым расширением.


 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

oleg-x
140 Сообщений
alex0402
112 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
73 Сообщений
ilyay ilyay
51 Сообщений
Golickoff Golickoff
49 Сообщений
AIFrame
42 Сообщений
wise wise
40 Сообщений
ab30ru
38 Сообщений
Амал
35 Сообщений
Dethmontt Dethmontt
25 Сообщений

* Кто онлайн

  • Точка Гостей: 605
  • Точка Скрытых: 0
  • Точка Пользователей: 15
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal