Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

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

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

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

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

  • *
  • Сообщений: 31
  • РЕПУТАЦИЯ: -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.

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

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

Оффлайн Rasty

  • *****
  • Сообщений: 963
  • РЕПУТАЦИЯ: 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
по идеи вопросы должны отпадать
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

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

  • *
  • Сообщений: 31
  • РЕПУТАЦИЯ: -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. Строка отлично записывается в файл с любым расширением.


 


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

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

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


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

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

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

* Реклама

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

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

Геннадий ОбьГЭС Геннадий ОбьГЭС
158 Сообщений
alex0402
125 Сообщений
MuI_I_Ika MuI_I_Ika
54 Сообщений
Norfolk
52 Сообщений
LexaK
47 Сообщений
друган
20 Сообщений
alexandr_ll
20 Сообщений
Константин5825
18 Сообщений
AsadRoman
18 Сообщений
MrLvovsky MrLvovsky
16 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 

Dellos Catering - выездной ресторан кейтеринг по всему Миру
SimplePortal 2.3.5 © 2008-2012, SimplePortal