Добрый день, уважаемые форумчане!
Появилась у меня задача сформировать XML файл из таблицы 1С,которая формируется на форме. Есть вопрос в оформлении XML файла(прикладываю два файла) Мне нужно,чтобы шапочка с кажой номенклатурой разворачивалась и туда записывались атрибуты...что то типо ЗаписьXML.ЗаписатьАтрибут... У меня возникли с этим трудности.
рабочий пример кода, формируемый файл прикреплен, разбирайтесь, там не сложно
ЗаписьXML = Новый ЗаписьXML;
//ЗаписьXML.УстановитьСтроку("windows-1251");
ЗаписьXML.ОткрытьФайл(ИмяФайла);
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("DOCLIST");
Для каждого стр из табл цикл
док = стр.ссылка;
ЗаписьXML.ЗаписатьНачалоЭлемента("DOC"); //новый документ
ЗаписьXML.ЗаписатьАтрибут("DOCNUMBER",СокрЛП(строка(Док.Номер)));
ЗаписьXML.ЗаписатьАтрибут("DOCDATE", СокрЛП(Формат(Док.Дата,"ДФ=""гггг-ММ-дд""")));
ЗаписьXML.ЗаписатьАтрибут("DOCTOTAL", Формат(Док.СуммаДокумента, "ЧДЦ=2;ЧРД=.;ЧГ=0"));
ЗаписьXML.ЗаписатьНачалоЭлемента("KONTRAGENT"); //контрагент с реквизитами
ЗаписьXML.ЗаписатьАтрибут("NAME", (Док.Контрагент.Наименование));
ЗаписьXML.ЗаписатьАтрибут("INN", СокрЛП(строка(Док.Контрагент.ИНН)));
ЗаписьXML.ЗаписатьАтрибут("KPP", СокрЛП(строка(Док.Контрагент.КПП)));
ЗаписьXML.ЗаписатьКонецЭлемента();
Для каждого Док1 из Док.ДокументыОснования цикл
Для каждого товар из Док1.ДокументОснование.Товары цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("DOCLINE"); //табличная часть
ЗаписьXML.ЗаписатьАтрибут("QUANTITY", Формат(Товар.Количество, "ЧДЦ=3;ЧРД=.;ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("SUMMA", Формат(Товар.Сумма, "ЧДЦ=2;ЧРД=.;ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("PRICE_NO_NDS", Формат(Товар.Цена, "ЧДЦ=2;ЧРД=.;ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("NDSRATE", ОбрНДС(СокрЛП(строка(Товар.СтавкаНДС))));
ЗаписьXML.ЗаписатьАтрибут("NDSSUM", Формат(Товар.СуммаНДС, "ЧДЦ=2;ЧРД=.;ЧГ=0"));
Если Док1.ДокументОснование.СуммаВключаетНДС тогда
ЗаписьXML.ЗаписатьАтрибут("TOTAL",Формат(Товар.Сумма, "ЧДЦ=2;ЧРД=.;ЧГ=0"));
иначе
ЗаписьXML.ЗаписатьАтрибут("TOTAL",Формат(Товар.Сумма+Товар.СуммаНДС, "ЧДЦ=2;ЧРД=.;ЧГ=0"));
КонецЕсли;
ЗаписьXML.ЗаписатьНачалоЭлемента("TOVAR"); //номенклатура
ЗаписьXML.ЗаписатьАтрибут("CODE", СокрЛП(строка(Товар.Номенклатура.Код)));
ЗаписьXML.ЗаписатьАтрибут("NAME", СокрЛП(строка(Товар.Номенклатура.Наименование)));
ЗаписьXML.ЗаписатьАтрибут("UNITNAME", СокрЛП(строка(Товар.ЕдиницаИзмерения.Наименование)));
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
Для каждого товар из Док1.ДокументОснование.Услуги цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("DOCLINE"); //табличная часть
ЗаписьXML.ЗаписатьАтрибут("QUANTITY", Формат(Товар.Количество, "ЧДЦ=3;ЧРД=.;ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("SUMMA", Формат(Товар.Сумма, "ЧДЦ=2;ЧРД=.;ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("PRICE_NO_NDS", Формат(Товар.Цена, "ЧДЦ=2;ЧРД=.;ЧГ=0"));
ЗаписьXML.ЗаписатьАтрибут("NDSRATE", ОбрНДС(СокрЛП(строка(Товар.СтавкаНДС))));
ЗаписьXML.ЗаписатьАтрибут("NDSSUM", Формат(Товар.СуммаНДС, "ЧДЦ=2;ЧРД=.;ЧГ=0"));
Если Док1.ДокументОснование.СуммаВключаетНДС тогда
ЗаписьXML.ЗаписатьАтрибут("TOTAL",Формат(Товар.Сумма, "ЧДЦ=2;ЧРД=.;ЧГ=0"));
иначе
ЗаписьXML.ЗаписатьАтрибут("TOTAL",Формат(Товар.Сумма+Товар.СуммаНДС, "ЧДЦ=2;ЧРД=.;ЧГ=0"));
КонецЕсли;
ЗаписьXML.ЗаписатьНачалоЭлемента("TOVAR"); //номенклатура
ЗаписьXML.ЗаписатьАтрибут("CODE", СокрЛП(строка(Товар.Номенклатура.Код)));
//ЗаписьXML.ЗаписатьАтрибут("NAME", СокрЛП(строка(Товар.Номенклатура.Наименование)));
ЗаписьXML.ЗаписатьАтрибут("NAME", СокрЛП(строка(Товар.Содержание)));
ЗаписьXML.ЗаписатьАтрибут("UNITNAME", СокрЛП(строка(Товар.Номенклатура.ЕдиницаИзмерения.Наименование)));
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
(3)Все бы хорошо,но это не то что мне нужно,повторюсь,мне нужно реквизиты таблицы вывести вниз,если я вывожу их с помощью конструкции ЗаписатьАтрибут,они выводятся слева направо. Скрин прикрепляю. Или же это не через атрибуты делать...Вот прошу подсказать.
мне нужно реквизиты таблицы вывести вниз,если я вывожу их с помощью конструкции ЗаписатьАтрибут,они выводятся слева направо
Вопрос: зачем? Формат XML предназначен для обмена информацией между программами, а им глубоко плевать, как там расположены атрибуты -переводы строк, пробелы и отступы игнорируются. "Налогоплательщик ЮЛ" вон вообще формирует весь файл отчета в одну строку - и ничего, никому это не мешает.
Но если уж так приспичило, то как вам подсказать - что надо сделать, если вы не показываете, как вы это делаете (код)?
Поэтому пара общих советов, которые мгновенно находятся поиском:
там где у вас Страны у меня DOCLIST
где Страна Название - DOC DOCNUMBER
ТрадиционныеБлюда - DOCLINE
Блюдо Название - TOVAR CODE
все как у вас в файле как нужно - лесенкой
лишние не берите
там где нужна ступенька вниз делаете ЗаписатьНачалоЭлемента, где вправо ЗаписатьАтрибут
ЗаписьXML.ЗаписатьНачалоЭлемента("ТрадиционныеБлюда");
ЗаписьXML.ЗаписатьНачалоЭлемента("Блюдо");
ЗаписьXML.ЗаписатьАтрибут("Название", "Солянка");
ЗаписьXML.ЗаписатьАтрибут("Название", "Щи");
ЗаписьXML.ЗаписатьАтрибут("Название", "Кисель");
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
(5)Спс конечно,но по скриншоту же видно,что я так и делаю. Я просил можно ли как то вывести...
<Товар>
Наименование
Артикул
Группа
Характеристика
</Товар>
Или нет? Атрибуты всегда выводятся слева направо?