Имя: Пароль:
1C
1С v8
Как записать в табличную часть XML?
,
0 breezee
 
10.03.16
16:34
Вот так я записываю реквизиты справочника
ЗаписьXML.ЗаписатьНачалоЭлемента("CatalogObject");
    // Ссылка
    ЗаписатьXML(ЗаписьXML, Контрагенты.Ссылка, "Ref", НазначениеТипаXML.Явное);
    // Код
    ЗаписатьXML(ЗаписьXML, Контрагенты.Код, "Code", НазначениеТипаXML.Явное);
    // Наименование
    ЗаписатьXML(ЗаписьXML, Контрагенты.Наименование, "Description", НазначениеТипаXML.Явное);
    ЗаписьXML.ЗаписатьКонецЭлемента();
    КонецЕсли;

Читаю так же, т.е. я уже знаю сколько реквизитов будет и как их читать. В табличной части я не знаю сколько будет строк. Как их записать? Как их прочитать? При том что при чтении до прочтения XML я не знаю сколько у меня строк в табличной части
1 breezee
 
10.03.16
16:35
Прошу прощения. Некорректный вопрос. Хотел спросить "Как записать табличную часть документа в XML" Платформа 8.3.7
2 breezee
 
10.03.16
16:37
В принципе я придумал как знать количество - я могу его в шапку положить, хотя этот вариант мне думается - рабочий. Но все же, может можно сделать как-то более нормально? Может у кого-то есть пример?
3 breezee
 
10.03.16
16:37
(2) как знать количество строк в табличной части* Еще раз прошу прощения. Уже 19:30 я немного устал
4 lubitelxml
 
10.03.16
16:43
я не совсем понял что ты хочешь, но вот пример, выгрузка в xml:
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку("UTF-8");

    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ЗаписьXML.ЗаписатьНачалоЭлемента("Items");
    
    ЗаписьXML.ЗаписатьАтрибут("Description", "PriceList");
    ЗаписьXML.ЗаписатьАтрибут("Columns", "guid,period,priceType,price");
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        ЗаписьXML.ЗаписатьНачалоЭлемента("Item");
        
        ЗаписьXML.ЗаписатьАтрибут("guid",         Строка(ВыборкаДетальныеЗаписи.Номенклатура.УникальныйИдентификатор()));
        ЗаписьXML.ЗаписатьАтрибут("period",     Формат(ВыборкаДетальныеЗаписи.Период, "ДФ=yyyyMMdd"));
        ЗаписьXML.ЗаписатьАтрибут("priceType",     Строка(ВыборкаДетальныеЗаписи.ТипЦен));
        ЗаписьXML.ЗаписатьАтрибут("price",         Формат(ВыборкаДетальныеЗаписи.Цена, "ЧГ=0"));
            
        ЗаписьXML.ЗаписатьКонецЭлемента();
        
    КонецЦикла;
    
    ЗаписьXML.ЗаписатьКонецЭлемента();



Читаю его так:
    РезультатСтруктура = ОбщегоНазначения.ПрочитатьXMLВТаблицу(Результат);
    
    РезультатТЗ = РезультатСтруктура.Данные;
    
    Для каждого Строка из РезультатТЗ Цикл
5 breezee
 
10.03.16
16:48
(4) Спасибо. Ты пишешь реквизиты документа, а потом саму табличную часть документа? А в какой конфе? У меня нетиповая и в ней точно нет метода ПрочитатьXMLВТаблицу. Мне надо узнать как узнать количество строк в табличной части
6 lubitelxml
 
10.03.16
16:50
самописка тоже, я через веб-сервисы обмениваюсь с упп. ОбщегоНазначения.ПрочитатьXMLВТаблицу - взято из БСП, то есть должно быть и в ут 11, и в бп 3.0
7 hhhh
 
10.03.16
16:52
(5) а зачем количество строк? добавляй себе строки пока не упрешься в конец xml.
8 lubitelxml
 
10.03.16
16:53
+(7) можешь еще номер дока в тз запихнуть, чтоб знать в какой док, если несколько выгружаешь
9 lubitelxml
 
10.03.16
16:54
запоминаешь предыдующий номер, с начале цикла сравниваешь старый и новый номер, если одинаковые - добавляешь в ТЧ дока, если нет, получаешь по номеру док и добавляешь туда
10 breezee
 
10.03.16
17:03
(7) (8) Да, у меня несколько доков. Тоже обмен через веб-сервис. (9) Я босюсь что нечаянно буду читать конец документа и у меня цикл не обнулиться - что-нибудь не то запишет. Вообще я наверное остановлюсь на идее на прямую писать количество строк для прочтения в документ. Мне кажется тогда я точно буду знать сколько строк мне писать. Спасибо за функцию "ОбщегоНазначения.ПрочитатьXMLВТаблицу" - завтра посмотрю что она делает. Дома нет под рукой типовых