Имя: Пароль:
1C
1С v8
Некорректно формируется XML документ.
,
0 Draconus
 
17.02.14
14:51
Всем доброго дня!
С XML занимаюсь последние часа 2, так что особо не разбираюсь)

Проблема следующая...
Пишу код:

    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ИмяФайла, Банк.ТипКлиентБанка.КодоваяСтраница);
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    
    ЗаписьXML.ЗаписатьНачалоЭлемента("package");
    ЗаписьXML.ЗаписатьНачалоЭлемента("table");
    ЗаписьXML.ЗаписатьАтрибут("name", "SertVOp");
    
    ЗаписьXML.ЗаписатьНачалоЭлемента("tabledesc");
    
    Для Каждого СтрокаТЗ Из ТЗ Цикл
        Если СтрокаТЗ.Обязательно Тогда
            ЗаписьXML.ЗаписатьНачалоЭлемента("fielddesc");
            ЗаписьXML.ЗаписатьАтрибут("name",   Строка(СтрокаТЗ.ПолеФайла));
            ЗаписьXML.ЗаписатьАтрибут("type",   Строка(СтрокаТЗ.ТипЗначения));
            ЗаписьXML.ЗаписатьАтрибут("length", Строка(СтрокаТЗ.Длина));
            ЗаписьXML.ЗаписатьКонецЭлемента(); //fielddesc
        КонецЕсли;
    КонецЦикла;
....

Все бы хорошо, но на выходе получается несколько не то расположение атрибутов как в коде:

<?xml version="1.0" encoding="WINDOWS-1251"?>

-<package>


-<table name="SertVOp">


-<tabledesc>

<fielddesc name="NUM" length="19" type="numeric"/>

<fielddesc name="DATE" length="10" type="date"/>

<fielddesc name="PAYER" length="255" type="string"/>

<fielddesc name="BANKPAY" length="254" type="string"/>

<fielddesc name="COUNTRY" length="3" type="string"/>

<fielddesc name="PAYACC" length="30" type="string"/>

</tabledesc>


-

Никто не подскажет что это и как исправить?
1 Jaap Vduul
 
17.02.14
14:58
По стандарту порядок аттрибутов не является существенным.
http://www.w3.org/TR/REC-xml/#sec-starttags
2 Draconus
 
17.02.14
15:07
(1) Спасибо.
Если Клиент-банк будет неправильно читать файл, придется дальше думать))
3 Jaap Vduul
 
17.02.14
15:11
(2)
В случае упёртых контрагентов помогает метод ЗаписатьБезОбработки()
4 Draconus
 
17.02.14
15:14
(3) Упертым может быть только сам банк))
Если ты про Контрагентов-Клиентов (аля франча/фриланс), то с такими закончил работать...
5 пипец
 
17.02.14
16:26
ваще то техподдержка банка обычно предоставляет для 1С шаблон выгрузки и описание формата с примерами
6 Джордж1
 
17.02.14
16:42
Мне тут один WEB-разработчик втирал, что 1С неправильно формирует файл. реквизиты не в той последовтельности
7 Draconus
 
18.02.14
08:56
(5) Так файл есть и примеры тоже есть. Согласно им я и записывал атрибуты по порядку, но расположение в самом файле не соответствует примеру. Вот я и обратился сюда)
8 Torquader
 
18.02.14
12:31
(6) Вполне может быть.
Вообще-то XML - это не стандарт записи данных - это тип файла. Причём, конкретное содержание файла оговаривается теми, кто его использует.
Например, 1С пишет данные объекта в параметры, а не в дочерние теги, как некоторые системы - так что, с точки зрения какого-то стороннего xml-парсера 1С может работать совершенно неправильно.
P.S. если кто-то хочет писать строго и правильно, то  XML-это подмножество текстовых файлов, и "запись текста" стерпит всё, что угодно.
9 Draconus
 
18.02.14
12:40
(8) То есть, как я понял могут быть коллизии при загрузке в КБ...
Отсюда нам поможет только:

Запись.ЗаписатьБезОбработки("<fruit>apple</fruit>"); //(С.П.)?
10 Torquader
 
18.02.14
15:01
(9) Да.
Просто 1С предполагает <object type="fruit" name="apple" /> вместо вашего <fruit>apple</fruit>
11 Draconus
 
18.02.14
16:02
(10) Ну логично, что можно написать так:

Запись.ЗаписатьБезОбработки("<object type=""fruit"" name=""apple"" />");

пример просто был взят из Синтакс-помощника.
12 Зойч
 
18.02.14
16:08
а может в тз не в том порядке. Вроде запист хмл последовательно пишет и с порядком не должно быть проблем
13 Torquader
 
18.02.14
16:23
(11) Просто, всё зависит от того, как будут читать на той стороне - некоторые читатели на символах пробела, например, спотыкаются, а 1С их от души вставляет.
14 Draconus
 
18.02.14
17:26
(12) Причем тут запись в ТЗ?)) Я таблицу обхожу, а записываю сам (видно в (0)).
(13) Да, надо тестировать и смотреть... Доделаю, сядем с бухгалтерами и будем пытаться в Клиент-банк грузить)))
15 Torquader
 
18.02.14
17:46
(14) Попробуй записать в явной форме и посмотреть, чем он там "давится".
Он его читает или нет ?
Просто, если читает - то нафига мы тут сидим и гадаем, чтобы было, если бы там был очередной "сферонь".
А если не читает, то он должен сказать, что он не читает.