Имя: Пароль:
1C
1С v8
Выгрузка XML Соответствие Пространства Имен
,
0 morale
 
30.11.15
20:46
Ребята помогите разобраться.
Есть Схема XDTO, импортирвоал в конфигурацию, дали из банка, пытаюсь выгрузить в XML. Проблема в установке Соответствие Пространства Имен, точнее я вообщеине понимаю как можно соответствия уставноить руками.

Код выгрузки такой:

ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Истина);
    ИмяФайла = "e-arve_"+Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy_hh.mm.ss")+".xml";
    
    ПолноеИмяФайла = КаталогВременныхФайлов()+ИмяФайла;
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ПолноеИмяФайла, ПараметрыЗаписиXML);
    
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    
    URIПространстваИмен = "http://www.w3.org/2001/XMLSchema-instance";;
    
    Фабрика = Новый ФабрикаXDTO(,ФабрикаXDTO.Пакеты);
    
    Пакет = Фабрика.Пакеты.Получить(URIПространстваИмен);
    
    ОбъектEInvoce = ПолучитьОбъектXDTO(Фабрика, Пакет, "E_Invoice");
        
    // <-- Header
    ОбъектHeader = ПолучитьОбъектXDTO(Фабрика, Пакет, "Header");
    //ОбъектHeader.Test = "YES";

******* Далее все как надо, заполленям все свойства пакета ****
******* в конце такой код *******

Фабрика.ЗаписатьXML(ЗаписьXML, ОбъектEInvoce, "E_Invoice", URIПространстваИмен);

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

В итоге файл выйгрзки выглядет так:
<?xml version="1.0" encoding="UTF-8"?>

-<E_Invoice xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns="http://www.w3.org/2001/XMLSchema-instance">;

-<Header>
<Date>2015-11-30</Date>
итд.....


Как изменить Соответствия, там надо отставить только
<E_Invoice xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;

ТОЛЬКО xsi=..

Иначе банк не принимает.
Спасибо кто откликнется.
1 DrShad
 
30.11.15
21:09
О да, в банках тот еще бардак при чтении XML
2 morale
 
30.11.15
21:16
(1) Да любые типовые берешь, нормально формирует Соответствия. Не могу понять в чем проблема.
3 morale
 
30.11.15
21:47
Пока выкрутился таким способом

ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.Прочитать(ПолноеИмяФайла);
ТекстовыйДокумент.ЗаменитьСтроку(2,"<E_Invoice xmlns:xsi=""http://www.w3.org/2001/XMLSchema"">";);
ТекстовыйДокумент.Записать(ПолноеИмяФайла);

Но вопрос все равно открытый.) КАК WTF?
4 Записьдампа
 
30.11.15
21:57
(3) Вы на пару с банком хотите очень странного.

1) Ты импортируешь схему в которой тип E_Invoice определен в пространстве "http://www.w3.org/2001/XMLSchema-instance"; (что само по себе весьма интересно) При выгрузке 1С честно делает тебе xml в котором в качестве пространства имен по умолчанию указано то, что ты просил - xmlns="http://www.w3.org/2001/XMLSchema-instance";. И почему оно должно использовать префикс xsi?
2) Это соответствие только для чтения. Оно дает тебе возможность понять что у тебя определено на текущем уровне xml

Подозреваю, что тебе нужен невалидный xml. Единственный способ его получить - ручная обработка текста.
5 Записьдампа
 
30.11.15
21:59
И вдогонку:

Фабрика = Новый ФабрикаXDTO(,ФабрикаXDTO.Пакеты);
Пакет = Фабрика.Пакеты.Получить(URIПространстваИмен);

Это зачем? Особенно первая строка?
6 DrShad
 
30.11.15
23:31
(3) самое прикольное, что в таком варианте 1С добавляет еще 3 байта к файлу :)))
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший