Имя: Пароль:
1C
1С v8
Не читается XML созданный 1С
0 DES
 
28.12.15
22:49
сделал выгрузку документа в ОбработкеПроведения в файл
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьXML, ДокументОбъект);
ТекстФайл.Записать(ЗаписьXML.Закрыть());
ТекстФайл.Закрыть();

получил:
<DocumentObject.Check>
<Ref>73390000-ad3a-0000-bbc5-f46d047a0000</Ref>
<DeletionMark>false</DeletionMark>
<Date>2015-02-28T10:00:00</Date>
<Number>000050</Number>
<Posted>true</Posted>
<Пользователь>25755e4d-11b0-11e0-a43f-001fc68dc552</Пользователь>
<Итого>267</Итого>
<Документы>
<Row>
<Сумма>40.95</Сумма>
<ДокСсылка xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:type="DocumentRef.Детали">70000fb5-ad3a-11e5-bbc5-f46d047a0000</ДокСсылка>
</Row>
</Документы>
</DocumentObject.Check>

читаю файл, дает ошибку преобразования:

Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.w3.org/2001/XMLSchema}anyType - Проверка дополнительного свойства:
    форма: Элемент
    имя: Документы
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.w3.org/2001/XMLSchema}anyType - Проверка дополнительного свойства:
    форма: Элемент
    имя: Row

если удалить строку в файле XML
<ДокСсылка xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:type="DocumentRef.Детали">70000fb5-ad3a-11e5-bbc5-f46d047a0000</ДокСсылка>
то читается и преобразовывается как надо.

Как победить ?
(корябать файл нежелательно)
1 Записьдампа
 
28.12.15
23:44
"{http://www.w3.org/2001/XMLSchema}anyType"; - ни на что не намекает? Укажи тип при чтении.

И да, шрайбить файл можно?
2 DES
 
29.12.15
12:51
(1) поясни , как указать тип?
3 Serginio1
 
29.12.15
13:38
ЧтениеXML= новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(стр);
    ЧтениеXML.ПерейтиКСодержимому();
    Объект=Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
4 DES
 
30.12.15
12:40
Сделал

ИмяФайла = "D:\ТЕСТ.xml";
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла);
//ЧтениеXML.УстановитьСтроку(стр);
ЧтениеXML.ПерейтиКСодержимому();
Фабрика = Новый ФабрикаXDTO;
Объект = Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
    
не работает
поясните, в чем проблема, то что тип нужно указать понятно, не понятно тип чего.
5 Записьдампа
 
30.12.15
14:59
Тип элемента данных XDTO, который ты читаешь.
6 Serginio1
 
30.12.15
15:14
Зачем ты используешь ТекстФайл? У ЗаписьXML есть
ОткрытьФайл(<ИмяФайлаXML>, <ТипКодировки>)
7 DES
 
30.12.15
15:21
(5) А какой у меня тип элемента, если я не читаю поэлиментно?
я же создал XML из документа одной командой встроенного языка, по идее я могу прочитать XML также одной командой.
(оно так и происходит), только вот если попадается сложный элемент (ссылка на на другой документ) то сбоит.
По смыслу же в XML (внутри) уже есть описание этого сложного элемента, как его еще раз описать снаружи ?
<ДокСсылка xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";; xsi:type="DocumentRef.Детали">70000fb5-ad3a-11e5-bbc5-f46d047a0000</ДокСсылка>
8 DES
 
30.12.15
15:29
(6) так вроде и использую ЧтениеXML.ОткрытьФайл(ИмяФайла);
где ты видишь что текстовый ?
9 Записьдампа
 
30.12.15
15:47
(7) А я-то откуда знаю?

>я же создал XML из документа одной командой встроенного
>языка, по идее я могу прочитать XML также одной командой.

Можешь конечно, никто не запрещает. Вот только есть один момент - 1С не знает, что то, что ты хочешь прочитать, сформировано той же 1С. Файл для нее ничем не отличается от результата работы пляски маньяка на клавиатуре в блокноте. Поэтому надо или указывать в XML полностью квалицифированный тип, или указывать тип при чтении.

(8)
ТекстФайл.Записать(ЗаписьXML.Закрыть());
ТекстФайл.Закрыть();

Этачо?
10 DES
 
30.12.15
16:11
(9) по (8)Это запись XML в файл на диске.
(9)
>Поэтому надо или указывать в XML полностью квалицифированный тип, или указывать тип при чтении.
Как указать? не получается.
11 Serginio1
 
30.12.15
16:15
(10) Зачем ТекстФайл если
ЗаписьXML.ОткрытьФайл
ЗаписатьXML(ЗаписьXML, ДокументОбъект);
ЗаписьXML.Записать
12 Serginio1
 
30.12.15
16:17
Но лучше использовать СериализаторXDTO для чтения и записи
13 Записьдампа
 
30.12.15
16:31
(10) Что указать - квалифицированный тип при записи или тип при чтении? Что не получается-то?

Квалифицированный тип при записи у тебя не указывается, потому что ты пишешь его через не то что надо.
Квалифицированный тип при чтении надо указать для того объекта, который ты читаешь. Его кроме тебя никто не знает.

Может тебе стоит отвлечься и почитать сначала теорию?
14 Serginio1
 
30.12.15
16:40
Кстати Merge есть и в postgresql
https://wiki.postgresql.org/wiki/MergeTestExamples
15 Записьдампа
 
30.12.15
16:41
(14) Вот ты сейчас ТС вообще наповал убил =)
16 Serginio1
 
30.12.15
16:46
(15) Прошу прощения. Промахнулся
17 Serginio1
 
30.12.15
17:25
18 Записьдампа
 
30.12.15
17:26
(17) (16) Ну, с Наступающим! Наливай! =)
19 Serginio1
 
30.12.15
19:10
(18) И тебя с тем же. Пусть этот год будетсамым худшим из последующих!
К сожалению, пью только неспиртное.
20 DES
 
30.12.15
20:04
(13) >Квалифицированный тип при записи у тебя не указывается, потому что ты пишешь его через не то что надо.
А как нужно правильно ?
21 Записьдампа
 
30.12.15
20:35
(20) По схеме в (11). И при записи надо указать явное назначение типа - там параметр есть.
22 Serginio1
 
30.12.15
20:43
(21) Через сериализатор не обязательно.

<НазначениеТипа> (необязательный)

Тип: НазначениеТипаXML.
Определяет необходимость назначения типа элементу XML.
Значение по умолчанию: Неявное.
<Форма> (необязательный)

Тип: ФормаXML.
Форма записи элемента данных в XML.
Описание варианта метода:

Записывает значения в формате XML без указания имени элемента. В качестве имени элемента будет использован тип значения.
23 Serginio1
 
30.12.15
20:45
Просто лучше явно использовать СериализаторXDTO
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ДокументОбъект);
24 DES
 
30.12.15
20:46
(21) записал по (11)
ДокументСсылка = ВыбрДок;
ИмяФайла = "D:\"+ДокументСсылка.Номер+".xml";
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайла);
ЗаписатьXML(ЗаписьXML, ДокументСсылка.ПолучитьОбъект());
ЗаписьXML.Закрыть();

XML не отличается от первоначального
25 DES
 
30.12.15
20:49
а вот через
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ДокументОбъект);
отличается
26 Записьдампа
 
30.12.15
20:50
(24) Извиняюсь за настойчивость, но в (21) и (22) таки про параметр назначения типа что-нибудь говорилось?
27 DES
 
30.12.15
21:02
(26)  искузми, как он должен выглядеть ?
28 DES
 
30.12.15
21:06
29 Записьдампа
 
30.12.15
21:13
(28) Если читаешь в той же конфигурации, что и записывает, то полдела ты сделал - в пространство имён попал.
Теперь попробуй прочитать.
30 DES
 
30.12.15
21:19
(29) так как указать параметр ?
31 Serginio1
 
30.12.15
21:21
(24) Для начала прочитай через СериализаторXDTO

Если не получится
ЗаписатьXML(ЗаписьXML, ДокументСсылка.ПолучитьОбъект(),НазначениеТипаXML.Явное);
32 Serginio1
 
30.12.15
21:22
Тьфу
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ДокументСсылка.ПолучитьОбъект(),НазначениеТипаXML.Явное);
33 Записьдампа
 
30.12.15
21:22
(30) ээээ.... Указав нужное число запятых, нет?
34 Serginio1
 
30.12.15
21:23
Обычно не нужно указывать НазначениеТипа
35 DES
 
30.12.15
21:24
(31) Через СериализаторXDTO  получилось, спасибо
36 DES
 
30.12.15
21:28
(35)+ а по старому, не пойму принцип указания параметра
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший