1. user1200515 10.06.19 11:59 Сейчас в теме

Выгрузить документ в xml

Добрый день, создала внешнюю обработку чтобы выгрузить документ в xml, хочу задать структуру выгрузки, то есть какие реквизиты выгружать, а какие нет
//ЗаписатьXML(ЗаписьXML,Выборка.ПолучитьОбъект(), НазначениеТипаXML.Явное)- эта строка работала, весь документ выгружала, но построчно выгрузить не получается
&НаСервере
Процедура ЗаписатьДанные()
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл("D:\126.xml");
    ЗаписьXML.ЗаписатьОбъявлениеXML();
	ЗаписьXML.ЗаписатьНачалоЭлемента("Документы");  
	
    ЗаписьXML.ЗаписатьНачалоЭлемента("Документ");
	Выборка=Документы.ПриходнаяНакладная.Выбрать().ПолучитьОбъект();
	Пока Выборка.Следующий() Цикл
	ЗаписьXML.ЗаписатьАтрибут("Номер",Выборка.Номер);
	ЗаписьXML.ЗаписатьАтрибут("Дата",Выборка.Дата);
	ЗаписьXML.ЗаписатьАтрибут("СуммаДокумента",Выборка.СуммаПоДокументу);
	//ЗаписатьXML(ЗаписьXML,Выборка.ПолучитьОбъект(), НазначениеТипаXML.Явное)
КонецЦикла;
	ЗаписьXML.ЗаписатьНачалоЭлемента("СписокНоменклатуры");
	Выборка=Документы.ПриходнаяНакладная.Выбрать();
	Пока Выборка.Следующий() Цикл
	ЗаписьXML.ЗаписатьАтрибут("НоменклатураКод",Выборка.СписокНоменклатуры.Код);
	ЗаписьXML.ЗаписатьАтрибут("НоменклатураНаим",Выборка.СписокНоменклатуры.Номенклатура);
    ЗаписьXML.ЗаписатьАтрибут("Количество",Выборка.СписокНоменклатуры.Количество);
	ЗаписьXML.ЗаписатьАтрибут("Цена",Выборка.СписокНоменклатуры.Цена);
    ЗаписьXML.ЗаписатьАтрибут("Сумма",Выборка.СписокНоменклатуры.Сумма);
	//ЗаписатьXML(ЗаписьXML,Выборка.ПолучитьОбъект(), НазначениеТипаXML.Явное);
КонецЦикла;
    ЗаписьXML.ЗаписатьКонецЭлемента();  //СписокНоменклатуры
    ЗаписьXML.ЗаписатьКонецЭлемента(); //Документ             
	ЗаписьXML.ЗаписатьКонецЭлемента(); //Документы
	ЗаписьXML.Закрыть();
КонецПроцедуры
Показать

Выборка не работает, появляется ошибка "Несоответствие параметров 2"
Да и таб часть так не получить
Ответы
Избранное Подписка Сортировка: Древо
2. tvm 10.06.19 12:03 Сейчас в теме
(0) где цикл по строкам документа тогда? Почитайте про XDTO, возможно проще будет
3. Isa816 43 10.06.19 12:15 Сейчас в теме
Ну во первых что бы обратиться к документу не нужно использовать Выборка=Документы.ПриходнаяНакладная.Выбрать().ПолучитьОбъект();
Достаточно просто выбрать и перебирать ссылки.
Выборка=Документы.ПриходнаяНакладная.Выбрать();
    Пока Выборка.Следующий() Цикл
    ЗаписьXML.ЗаписатьАтрибут("Номер",Выборка.Номер);
    ЗаписьXML.ЗаписатьАтрибут("Дата",Выборка.Дата);
    ЗаписьXML.ЗаписатьАтрибут("СуммаДокумента",Выборка.СуммаПоДокументу);
    //ЗаписатьXML(ЗаписьXML,Выборка.ПолучитьОбъект(), НазначениеТипаXML.Явное)
КонецЦикла;

Вот так.
Второе было бы удобней весь этот код перенести в запрос с наложением условий, не знаю конечную цель задачи но думаю не проведенные документы, а так же документы помеченные на удаления не нужны.
Так же когда перебираете циклом "СписокНоменклатуры" нужно делать немного по другому.

Выборка=Документы.ПриходнаяНакладная.Выбрать();
    Пока Выборка.Следующий() Цикл
    //Вот тут нужно обратиться к табличной части
 Для каждого стр из Выборка.Товары цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура").   
 ЗаписьXML.ЗаписатьАтрибут("НоменклатураКод",стр.Номенклатура.Код);
    ЗаписьXML.ЗаписатьАтрибут("НоменклатураНаим",стр.Номенклатура);
    ЗаписьXML.ЗаписатьАтрибут("Количество",стр.Количество);
    ЗаписьXML.ЗаписатьАтрибут("Цена",стр.Цена);
    ЗаписьXML.ЗаписатьАтрибут("Сумма",стр.Сумма);
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
КонецЦикла;
Показать
5. user1200515 10.06.19 12:28 Сейчас в теме
(3)Сделала вот так, если писать Документы.ПриходнаяНакладная.Выбрать() и пытаться записать в в атрибут, то все равно ошибка параметров
Выборка=Документы.ПриходнаяНакладная.Выбрать();
	Пока Выборка.Следующий() Цикл
	ЗаписьXML.ЗаписатьНачалоЭлемента("Номер");	
	ЗаписьXML.ЗаписатьТекст(Строка(Выборка.Номер));
	 ЗаписьXML.ЗаписатьКонецЭлемента();
	 ЗаписьXML.ЗаписатьНачалоЭлемента("Дата");
	ЗаписьXML.ЗаписатьТекст(Строка(Выборка.Дата));
	 ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("СуммаДокумента");
	ЗаписьXML.ЗаписатьТекст(Строка(Выборка.СуммаПоДокументу));
	 ЗаписьXML.ЗаписатьКонецЭлемента();
	КонецЦикла;
	ЗаписьXML.ЗаписатьНачалоЭлемента("СписокНоменклатуры");
	Выборка= Документы.ПриходнаяНакладная.Выбрать();
	Пока Выборка.Следующий() Цикл
		Для каждого стр из Выборка.СписокНоменклатуры цикл
		ЗаписьXML.ЗаписатьНачалоЭлемента("Код");	
	ЗаписьXML.ЗаписатьТекст(Строка(стр.Номенклатура.Код));
	   ЗаписьXML.ЗаписатьКонецЭлемента();
	     ЗаписьXML.ЗаписатьНачалоЭлемента("НоменклатураНаим");
	ЗаписьXML.ЗаписатьТекст(Строка(стр.Номенклатура));
	     ЗаписьXML.ЗаписатьКонецЭлемента();
		  ЗаписьXML.ЗаписатьНачалоЭлемента("Количество");
    ЗаписьXML.ЗаписатьТекст(Строка(стр.Количество));
	       ЗаписьXML.ЗаписатьКонецЭлемента();
		   ЗаписьXML.ЗаписатьНачалоЭлемента("Цена");
	ЗаписьXML.ЗаписатьТекст(Строка(стр.Цена));
	     ЗаписьXML.ЗаписатьКонецЭлемента();
		   ЗаписьXML.ЗаписатьНачалоЭлемента("Сумма");
    ЗаписьXML.ЗаписатьТекст(Строка(стр.Сумма));
	      ЗаписьXML.ЗаписатьКонецЭлемента();
	//ЗаписатьXML(ЗаписьXML,Выборка.ПолучитьОбъект(), НазначениеТипаXML.Явное);
КонецЦикла;
КонецЦикла;
    ЗаписьXML.ЗаписатьКонецЭлемента();  //СписокНоменклатуры
    ЗаписьXML.ЗаписатьКонецЭлемента(); //Документ  
Показать
6. Isa816 43 10.06.19 12:42 Сейчас в теме
(5) Теперь кривая структура файла, нужно оставить атрибуты как были и не надо начинать элемент для каждого реквизиты.
4. denic73 10.06.19 12:17 Сейчас в теме
Для каждого строки табличной части (номенклатуры) создайте ЭЛЕМЕНТ - ЗаписьXML.ЗаписатьНачалоЭлемента("ЭлементНоменклатуры"). А в этот элемент записывайте уже атрибуты той самой номенклатуры. А у Вас получается что в один элемент Вы пишите несколько одинаковых атрибутов.
7. x_x 3 10.06.19 14:12 Сейчас в теме
здесь необходимо понимание что такое ЗаписатьНачалоЭлемента, ЗаписатьКонецЭлемента,ЗаписатьАтрибут, ЗаписатьXML и все у васполучится.
вот вам ниже пример рабочий.


  ПолноеИмяФайла                           = "\\HRANILSHE\store\UATKeyEx\KEY_HAND"+СтрЗАменить(Формат(ТекущаяДата(),"ДФ=""ггггММддЧЧммсс"""),".","")+ ".xml";
		  ФайлСчФ                                  = Новый Файл(ПолноеИмяФайла);
		  ЗаписьXML                                = Новый ЗаписьXML;
		  ЗаписьXML.ОткрытьФайл( ПолноеИмяФайла, "UTF-8");
		  ЗаписьXML.ЗаписатьОбъявлениеXML();
		  ЗаписьXML.ЗаписатьНачалоЭлемента( "KEY" );
		             ЗаписатьXML(ЗаписьXML,Формат(ДатаДляОтправки,"ДФ=""yyyy-MM-dd"""),"Date");
		             ////////////////////////////////////////////////////////////­///////////////////
		             Если ТаблицаДляОтправки.Количество() > 0 Тогда
		                  НомерСтроки = 0;
						  Для каждого стр из ТаблицаДляОтправки Цикл
							         Если ЗначениеЗаполнено(Стр.DRIVERCODE) Тогда
		                             НомерСтроки = НомерСтроки +1;
									  
		    	                     ЗаписьXML.ЗаписатьНачалоЭлемента( "POSITION" );
									           ЗаписатьXML(ЗаписьXML,                                        НомерСтроки               ,"POSITIONNUMBER");
											   ЗаписатьXML(ЗаписьXML,                                    Стр.AUTONUMBER                ,"AUTONUMBER"    );
											   ЗаписатьXML(ЗаписьXML,?(ЗначениеЗаполнено(Стр.DRIVERCODE),Стр.DRIVERCODE,"НЕОПРЕДЕЛЕНО"),"DRIVERCODE"    );
											   ЗаписатьXML(ЗаписьXML,                                    Стр.FIRSTNAME                 ,"FIRSTNAME"     );
											   ЗаписатьXML(ЗаписьXML,                                    Стр.MIDDLENAME                ,"MIDDLENAME"    );
											   ЗаписатьXML(ЗаписьXML,                                    Стр.SURNAME                   ,"SURNAME"       );
		    			             ЗаписьXML.ЗаписатьКонецЭлемента();
									 КонецЕсли;
		                  КонецЦикла;
		  //    
		             КонецЕсли;
		  ЗаписьXML.ЗаписатьКонецЭлемента();
		  ЗаписьXML.Закрыть();
Показать
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день

Программист 1С
Краснодар
зарплата от 80 000 руб. до 160 000 руб.
Полный день

Консультант 1 С
Краснодар
зарплата от 50 000 руб. до 150 000 руб.
Полный день

Консультант-методолог 1С
Краснодар
зарплата от 110 000 руб.
Полный день