Формирование XML файла 1С

1. Az18011993 29.03.20 08:37 Сейчас в теме
Добрый день, уважаемые форумчане!
Появилась у меня задача сформировать XML файл из таблицы 1С,которая формируется на форме. Есть вопрос в оформлении XML файла(прикладываю два файла) Мне нужно,чтобы шапочка с кажой номенклатурой разворачивалась и туда записывались атрибуты...что то типо ЗаписьXML.ЗаписатьАтрибут... У меня возникли с этим трудности.
Прикрепленные файлы:
Как есть на данный момент.XML
Пример как нужно.xml
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Az18011993 29.03.20 09:12 Сейчас в теме
Просто атрибуты записываются справа, могу ли я их выводить вниз?
Прикрепленные файлы:
3. karamazoff 96 29.03.20 09:19 Сейчас в теме
рабочий пример кода, формируемый файл прикреплен, разбирайтесь, там не сложно
Запись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.ЗаписатьКонецЭлемента();

КонецЦикла;
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();

КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();

ЗаписьXML.Закрыть();
Прикрепленные файлы:
Выгрузка.xml
4. Az18011993 29.03.20 09:35 Сейчас в теме
(3)Все бы хорошо,но это не то что мне нужно,повторюсь,мне нужно реквизиты таблицы вывести вниз,если я вывожу их с помощью конструкции ЗаписатьАтрибут,они выводятся слева направо. Скрин прикрепляю. Или же это не через атрибуты делать...Вот прошу подсказать.
Прикрепленные файлы:
Как есть на данный момент.XML
9. user856012 13 29.03.20 11:29 Сейчас в теме
(4)
мне нужно реквизиты таблицы вывести вниз,если я вывожу их с помощью конструкции ЗаписатьАтрибут,они выводятся слева направо
Вопрос: зачем? Формат XML предназначен для обмена информацией между программами, а им глубоко плевать, как там расположены атрибуты -переводы строк, пробелы и отступы игнорируются. "Налогоплательщик ЮЛ" вон вообще формирует весь файл отчета в одну строку - и ничего, никому это не мешает.

Но если уж так приспичило, то как вам подсказать - что надо сделать, если вы не показываете, как вы это делаете (код)?

Поэтому пара общих советов, которые мгновенно находятся поиском:

https://forum.mista.ru/topic.php?id=258106
https://forum.infostart.ru/forum9/topic106926/

Сумеете ли вы ими воспользоваться - от меня не зависит.
5. karamazoff 96 29.03.20 10:13 Сейчас в теме
посмотрите внимательно на приложенный файл


там где у вас Страны у меня DOCLIST
где Страна Название - DOC DOCNUMBER
ТрадиционныеБлюда - DOCLINE
Блюдо Название - TOVAR CODE

все как у вас в файле как нужно - лесенкой
лишние не берите
там где нужна ступенька вниз делаете ЗаписатьНачалоЭлемента, где вправо ЗаписатьАтрибут
ЗаписьXML.ЗаписатьНачалоЭлемента("ТрадиционныеБлюда");
ЗаписьXML.ЗаписатьНачалоЭлемента("Блюдо");
ЗаписьXML.ЗаписатьАтрибут("Название", "Солянка");
ЗаписьXML.ЗаписатьАтрибут("Название", "Щи");
ЗаписьXML.ЗаписатьАтрибут("Название", "Кисель");
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();


Вот я вам уже и код ваш написал...
6. Az18011993 29.03.20 10:23 Сейчас в теме
(5)Спс конечно,но по скриншоту же видно,что я так и делаю. Я просил можно ли как то вывести...
<Товар>
Наименование
Артикул
Группа
Характеристика
</Товар>
Или нет? Атрибуты всегда выводятся слева направо?
7. karamazoff 96 29.03.20 11:11 Сейчас в теме
попробуйте так
ЗаписьXML.ЗаписатьНачалоЭлемента("Товар");
ЗаписьXML.ЗаписатьНачалоЭлемента("Наименование");
ЗаписьXML.ЗаписатьАтрибут("Значение", "Солянка");
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("Артикул");
ЗаписьXML.ЗаписатьАтрибут("Значение", "1111111");
ЗаписьXML.ЗаписатьКонецЭлемента();
,,,,
ЗаписьXML.ЗаписатьКонецЭлемента();

будет
<Товар>
Наименование Значение = ...
Артикул Значение = ...
Группа Значение = ...
Характеристика Значение = ...
</Товар>


либо
ЗаписьXML.ЗаписатьНачалоЭлемента("Товар");
ЗаписьXML.ЗаписатьНачалоЭлемента("Наименование");
ЗаписьXML.ЗаписатьТекст("Солянка");
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("Артикул");
ЗаписьXML.ЗаписатьТекст("1111111");
ЗаписьXML.ЗаписатьКонецЭлемента();
,,,,
ЗаписьXML.ЗаписатьКонецЭлемента();

будет
<Товар>
<Наименование> Солянка</Наименование>
<Артикул> 1111111</Артикул>
,,,
</Товар>
user640544_maxst22; Азверин; +2 Ответить
8. Az18011993 29.03.20 11:13 Сейчас в теме
Все, осилил, спасибо
Прикрепленные файлы:
10. burgomister 59 29.03.20 14:49 Сейчас в теме
(8) Можете написать окончательный код?
11. Az18011993 30.03.20 08:27 Сейчас в теме
(10)ну у меня тут два варианта)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	Диалог.Фильтр = "XML (*.XML)|*.XML|";
	
	
	Если Диалог.Выбрать() Тогда
		ИмяФайла = Диалог.ПолноеИмяФайла;
		ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.ОткрытьФайл(ИмяФайла);

ЗаписьXML.ЗаписатьОбъявлениеXML(); 

ЗаписьXML.ЗаписатьНачалоЭлемента("Offers");

Для Каждого ЭлементНоменклатуры Из Объект.КаталогНСИ Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Offer"); 
ЗаписьXML.ЗаписатьНачалоЭлемента("NameOffer"); 
ЗаписьXML.ЗаписатьАтрибут("NameOffer", Строка(ЭлементНоменклатуры.Наименование)); 
ЗаписьXML.ЗаписатьКонецЭлемента(); 
ЗаписьXML.ЗаписатьНачалоЭлемента("VendorCode"); 
ЗаписьXML.ЗаписатьАтрибут("VendorCode", Строка(ЭлементНоменклатуры.Артикул)); 
ЗаписьXML.ЗаписатьКонецЭлемента(); 
ЗаписьXML.ЗаписатьНачалоЭлемента("Group"); 
ЗаписьXML.ЗаписатьАтрибут("Group", Строка(ЭлементНоменклатуры.ГруппаНоменклатуры)); 
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("Characteristic"); 
ЗаписьXML.ЗаписатьАтрибут("Characteristic", Строка(ЭлементНоменклатуры.ХарактеристикаНом)); 
ЗаписьXML.ЗаписатьКонецЭлемента();
//ЗаписьXML.ЗаписатьНачалоЭлемента("NameOffer", Строка(ЭлементНоменклатуры.Наименование));
//ЗаписьXML.ЗаписатьКонецЭлемента();
//ЗаписьXML.ЗаписатьНачалоЭлемента("VendorCode",Строка(ЭлементНоменклатуры.Артикул));
//ЗаписьXML.ЗаписатьКонецЭлемента();
//ЗаписьXML.ЗаписатьНачалоЭлемента("Group",Строка(ЭлементНоменклатуры.ГруппаНоменклатуры));
//ЗаписьXML.ЗаписатьКонецЭлемента();
//ЗаписьXML.ЗаписатьНачалоЭлемента("Characteristic",Строка(ЭлементНоменклатуры.ХарактеристикаНом));
//ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();

КонецЦикла;

ЗаписьXML.ЗаписатьКонецЭлемента(); 

		
		
		ЗаписьXML.Закрыть();
		КонецЕсли;
Показать
12. burgomister 59 30.03.20 12:00 Сейчас в теме
13. meclonec 18 13.03.21 12:24 Сейчас в теме
Отличный пример, автору 5 ка!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот