Имя: Пароль:
1C
1С v8
запись XML 1С
,
0 makkut
 
27.07.18
10:59
пытаюсь заполнить циклом файл XML. В Итоге 1С ругается на Ошибочный порядок записи XML
Хочу получить вот так. КТо объяснит как обойти ошибку?
<СведТов НомСтр="1" НаимТов="товар1" ОКЕИ_Тов="796 " КолТов="1 000" ЦенаТов="203,39" СтТовБезНДС="203 389,83" НалСт="18%" СтТовУчНал="240 000,00"/>
<СведТов НомСтр="2" НаимТов="товар2" ОКЕИ_Тов="796 " КолТов="5" ЦенаТов="50,00" СтТовБезНДС="250,00" НалСт="18%" СтТовУчНал="295,00"/>

Для каждого СтрДанных Из ЭкземплярДанныхДляПечати.ТабличнаяЧасть Цикл
            НомерСтроки = НомерСтроки  + 1;
            Файл.ЗаписатьНачалоЭлемента("СведТов");
            Файл.ЗаписатьАтрибут("НомСтр",         Строка(НомерСтроки));
            Файл.ЗаписатьАтрибут("НаимТов",     Строка(СтрДанных.Товар));
             Файл.ЗаписатьАтрибут("ОКЕИ_Тов",    Строка(СтрДанных.ЕдиницаИзмеренияКод));
             Файл.ЗаписатьАтрибут("КолТов",         Строка(СтрДанных.Количество));
             Файл.ЗаписатьАтрибут("ЦенаТов",     Строка(Формат(СтрДанных.Цена, "ЧДЦ=2")));
             Файл.ЗаписатьАтрибут("СтТовБезНДС", Строка(Формат(СтрДанных.Сумма, "ЧДЦ=2")));
             Файл.ЗаписатьАтрибут("НалСт",         Строка(Формат(СтрДанных.СтавкаНДС,"ЧДЦ=2")));
             Файл.ЗаписатьАтрибут("СтТовУчНал",     Строка(Формат(СтрДанных.СуммаНДС + СтрДанных.Сумма,"ЧДЦ=2")));
            Файл.ЗаписатьКонецЭлемента() ;
            Файл.ЗаписатьКонецЭлемента() ;
        КонецЦикла;



{ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(368)}: Ошибка при вызове метода контекста (ЗаписатьКонецЭлемента)
      Файл.ЗаписатьКонецЭлемента() ;    
по причине:
Ошибочный порядок записи XML
1 sechs
 
27.07.18
11:03
А какого результата ты хочешь добится, записывая одно начало элемента и два конца?
2 makkut
 
27.07.18
11:21
(1) там опечатался , одиф фиг ругается
3 sechs
 
27.07.18
11:24
(2) >  одиф фиг
Отсюжу ен фидно
4 Ботаник Гарден Меран
 
27.07.18
11:27
Добавь корневой элемент.
5 makkut
 
27.07.18
11:33
(4) корневой элемент есть выше не скопировал его просто сюда
Файл.ЗаписатьНачалоЭлемента("ТаблСчФакт");
6 Ботаник Гарден Меран
 
27.07.18
11:36
Сколько еще кусочков не "скопировано сюда" ?
7 makkut
 
27.07.18
11:38
(6) когда отдельно корень и элементы вывожу всё норм, походу с остальными перемудрил ....
8 makkut
 
27.07.18
11:40
все нашёл причину лишняя строчка была в коде Файл.ЗаписатьКонецЭлемента() (не в самом цикле)
9 echo77
 
27.07.18
15:18
Если нужно просто писануть объект в XML, то вот самое простое:

// Процедура выполняет сериализацию переданного объекта в указанный XML-файл
//
// Параметры:
//  ОбъектСериализации    - Произвольный - произвольный объект, который может быть сериализован
//                          например Массив, СписокЗначений(читать справку)
//  ИмяФайла            - Строка - полное имя файла, в который будет записан
//                          сериализованный объект
//
Процедура СериализоватьОбъектВXML(ОбъектСериализации, ИмяФайла)
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ИмяФайла);
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    
    СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ОбъектСериализации);
    
    ЗаписьXML.Закрыть();
    
КонецПроцедуры
10 Вафель
 
27.07.18
15:19
(9) у объекта может быть слишком много реквизитов, чтоб их все выгружать