Имя: Пароль:
1C
 
XDTO по схеме XSD
0 WhiteCroW
 
23.09.15
16:02
Добрый день!
Помогите пожалуйста разобраться c XDTO. Есть задача выгрузить отчет по схеме XSD и загрузить его в стороннюю программу. В итоге запнулась на самом старте =(
Вот код:
    СхемыXSD = Новый Массив;
    СхемыXSD.Добавить(ПутьКОбработке + "ОКУД0420001.xsd");
    МояФабрикаXDTO = СоздатьФабрикуXDTO(СхемыXSD);
    ОТЧЕТType = МояФабрикаXDTO.Тип("http://www.it.ru/Schemas/Avior/ПУРЦБ";, "ОКУД0420001_ОКУД0420001");
    ОтчтеностьType = ОТЧЕТType.Свойства.Получить("отчетность").тип;
    ОтчетностьГодПредставленияType = ОтчтеностьType.Свойства.Получить("ГодПредставления").тип;
    СопроводительноеПисьмоType = ОТЧЕТType.Свойства.Получить("СопроводительноеПисьмо").тип;
    СопПисьмоОКАТОType = СопроводительноеПисьмоType.Свойства.Получить("ОКАТО").тип;
    ОТЧЕТType_ОбъектXDTO = МояФабрикаXDTO.Создать(ОТЧЕТType);
    ОТЧЕТType_ОбъектXDTO.отчетность = МояФабрикаXDTO.Создать(ОтчтеностьType);
    ОТЧЕТType_ОбъектXDTO.отчетность.ГодПредставления = МояФабрикаXDTO.Создать(ОтчетностьГодПредставленияType,"2015");
    ОТЧЕТType_ОбъектXDTO.СопроводительноеПисьмо = МояФабрикаXDTO.Создать(СопроводительноеПисьмоType);
    ОТЧЕТType_ОбъектXDTO.СопроводительноеПисьмо.ОКАТО = МояФабрикаXDTO.Создать(СопПисьмоОКАТОType,"123123");
    ИмяФайла = "" + ПутьКОбработке + объект.СсылкаНаРеализацию.Номер + ".xml";
    ФайлXML = Новый ЗаписьXML();
    ФайлXML.ОткрытьФайл(ИмяФайла);
    ФайлXML.ЗаписатьОбъявлениеXML();
    МояФабрикаXDTO.ЗаписатьXML(ФайлXML, ОТЧЕТType_ОбъектXDTO);
    ФайлXML.Закрыть();

получается вот так:
<?xml version="1.0" encoding="UTF-8"?>
<ОКУД0420001_ОКУД0420001 xmlns="http://www.it.ru/Schemas/Avior/ПУРЦБ"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;
    <Отчетность>
        <ГодПредставления>2015</ГодПредставления>
    </Отчетность>
    <СопроводительноеПисьмо>
        <ОКАТО>123123</ОКАТО>
    </СопроводительноеПисьмо>
</ОКУД0420001_ОКУД0420001>

а должно быть вот так:
<?xml version="1.0" encoding="UTF-8"?>
<av:ОКУД0420001 appVersion="2.16.3" xmlns:xserializer="http://www.it.ru/Schemas/Avior/XSerializer"; externalId="c51a2277-81fb-40da-9c56-08c4f9359ed2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:av="http://www.it.ru/Schemas/Avior/ПУРЦБ"; xsi:schemaLocation="http://www.it.ru/Schemas/Avior/ПУРЦБ ПУРЦБ.xsd">
    <av:Отчетность>
        <av:ГодПредставления>2015</av:ГодПредставления>
    </av:Отчетность>
    <av:СопроводительноеПисьмо>
        <av:ОКАТО>123123</av:ОКАТО>
    </av:СопроводительноеПисьмо>
</av:ОКУД0420001>

даже понять не могу, в какую сторону капнуть =(
1 H A D G E H O G s
 
23.09.15
17:00
В сторону
ЗаписатьСоответствиеПространстваИмен()
2 Fragster
 
гуру
23.09.15
17:05
(1) а я про это забыл :(
3 Serginio1
 
23.09.15
18:08
(1) Да вот только он записывает через фабрику
Записывает соответствие префикса и URI пространства имен. Данный метод должен вызываться после обращения к методу ЗаписьXML.ЗаписатьНачалоЭлемента и до записи вложенных элементов и текста элемента. Соответствие действует в рамках текущего элемента и всех вложенных.


Запись.ЗаписатьНачалоЭлемента("apple");
Запись.ЗаписатьСоответствиеПространстваИмен("nsp", "http://metrics.org";);
Запись.ЗаписатьАтрибут("weight", "http://metrics.org";, "12.5");
Запись.ЗаписатьКонецЭлемента();
4 Serginio1
 
23.09.15
18:12
Хотя можно открыть Файл ЧтениеXML и добавить через ЗаписьXML
5 Serginio1
 
23.09.15
18:35
Можно попробовать

Стр=ЗаписьXML.Закрыть();

ЧтениеXML= новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(стр);

ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.УстановитьСтроку();
   Пока ЧтениеXML.Прочитать() Цикл
        ЗаписьXML.ЗаписатьТекущий(ЧтениеXML);

  Если ЧтениеXML.имя="ОКУД0420001" и ЧтениеXml.ТипУзла=ТипУзлаXML.НачалоЭлемента Тогда
      
      ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance";);
      ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema";);
      
      ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("av", "http://www.it.ru/Schemas/Avior/ПУРЦБ";);
      ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xserializer", "http://www.it.ru/Schemas/Avior/XSerializer";);
      
      ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("schemaLocation", "http://www.it.ru/Schemas/Avior/ПУРЦБ ПУРЦБ.xsd");
      
   КонецЕсли;
         КонецЦикла;
   СтрокаXML = ЗаписьXML.Закрыть();