Выгрузка данных XML (XDTO). Обмен XML.

1. Grubly 25.07.18 00:30 Сейчас в теме
Товарищи, доброго дня.

Только начинаю постигать работу с XML в 1С. Изучаю пакеты XDTO.

Прошу вашей помощи, столкнулся со следующей проблемой:

Нужно выгрузить все реквизиты документа в файл XML для обработки программистом сторонней информационной системы с целью дальнейшего обмена между базами.

Для начала я прочитал, что можно сделать выгрузку XML-Схемы (Экспорт XML-Схемы данных конфигурации), но ему она не подошла. Он попросил выгрузить данные в виде XML-файла с данными. Прочитав про возможности СериализаторXDTO, написал следующий код:

Функция СериализоватьОбъект(Ссылка) Экспорт
	Значение = Ссылка.ПолучитьОбъект();	
	ЗаписьXML = Новый ЗаписьXML();
	ЗаписьXML.УстановитьСтроку();
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение);
	СтрокаXML = ЗаписьXML.Закрыть();

	Возврат СтрокаXML;
	
КонецФункции 
Показать


Функция возвращает XML-файл следующего вида:

<DocumentObject.СчетНаОплатуПокупателю xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<Ref>b8e93499-0153-11e6-bdd5-00306758cebf</Ref>
	<DeletionMark>false</DeletionMark>
	<Date>2016-04-13T13:00:19</Date>
	<Number>ПК00-000001</Number>
	<Posted>true</Posted>
	<Организация>a2028b2c-c124-11e1-886b-001e5848397d</Организация>
	<Склад>a2028b32-c124-11e1-886b-001e5848397d</Склад>
	<ПодразделениеОрганизации>00000000-0000-0000-0000-000000000000</ПодразделениеОрганизации>
	<Контрагент>b8e93494-0153-11e6-bdd5-00306758cebf</Контрагент>
	<ДоговорКонтрагента>b8e93495-0153-11e6-bdd5-00306758cebf</ДоговорКонтрагента>
	<АдресДоставки>196158, г. Санкт-Петербург, Московское ш., дом № 28, литера А, помещение 1Н</АдресДоставки>
	<ОрганизацияПолучатель>a2028b2c-c124-11e1-886b-001e5848397d</ОрганизацияПолучатель>
	<СтруктурнаяЕдиница>a58e6af7-7925-11e3-a577-00306758cebf</СтруктурнаяЕдиница>
	<Ответственный>aa00559e-ad84-4494-88fd-f0826edc46f0</Ответственный>
	<Комментарий/>
	<ВалютаДокумента>9c00bd3d-c124-11e1-886b-001e5848397d</ВалютаДокумента>
	<КратностьВзаиморасчетов>1</КратностьВзаиморасчетов>
	<СуммаСкидки>0</СуммаСкидки>
	<КурсВзаиморасчетов>1</КурсВзаиморасчетов>
	<СуммаВключаетНДС>true</СуммаВключаетНДС>
	<СуммаДокумента>40000</СуммаДокумента>
	<ТипЦен>00000000-0000-0000-0000-000000000000</ТипЦен>
	<УдалитьУчитыватьНДС>false</УдалитьУчитыватьНДС>
	<УдалитьСтатусОплаты/>
	<Руководитель>a58e6afb-7925-11e3-a577-00306758cebf</Руководитель>
	<ГлавныйБухгалтер>a58e6afb-7925-11e3-a577-00306758cebf</ГлавныйБухгалтер>
	<УдалитьЗаРуководителяПоПриказу/>
	<УдалитьЗаГлавногоБухгалтераПоПриказу/>
	<ДокументБезНДС>false</ДокументБезНДС>
	<ДополнительныеУсловия>bd299647-dc5b-11e4-88f9-00306758cebf</ДополнительныеУсловия>
	<ЗаГлавногоБухгалтераНаОсновании>00000000-0000-0000-0000-000000000000</ЗаГлавногоБухгалтераНаОсновании>
	<ЗаРуководителяНаОсновании>00000000-0000-0000-0000-000000000000</ЗаРуководителяНаОсновании>
	<Товары>
		<Номенклатура>b8e93498-0153-11e6-bdd5-00306758cebf</Номенклатура>
		<Содержание/>
		<Количество>2</Количество>
		<Цена>20000</Цена>
		<Сумма>40000</Сумма>
		<ПроцентСкидки>0</ПроцентСкидки>
		<СуммаСкидки>0</СуммаСкидки>
		<СтавкаНДС>НДС18</СтавкаНДС>
		<СуммаНДС>6101.69</СуммаНДС>
	</Товары>
</DocumentObject.СчетНаОплатуПокупателю>
Показать


На что меня попросили указывать теги на английском языке.

Так как конфигурация базовая и не имеет возможности редактирования, я создал расширение, выгрузил из основной конфигурации XML-схему (Экспорт XML-Схемы данных конфигурации) и загрузил данную схему в новый пакетXDTO в созданном расширении.
В данном пакете я переименовал объект, чтобы изменить название тега "АдресДоставки" заменил на "AdressDostavki"


Далее в коде я использовал ФабрикаXDTO:
Функция ФабрикаОбъект(Ссылка) Экспорт
	
	
	МойXML = Новый ЗаписьXML;
	ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь);
	МойXML.ОткрытьФайл("C:\Users\811776\Desktop\ВыгрузкаСчетов",  ПараметрыЗаписиXML);
	МойXML.ЗаписатьОбъявлениеXML();
	
	
	
	ТипОбъекта = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config","DocumentObject.СчетНаОплатуПокупателю");
	
	МойXML.Закрыть();

	
КонецФункции

Показать


Но в "ТипОбъекта" осталось старое значение "АдресДоставки" вместо "AdressDostavki"

Я подумал что проблема в пространстве имен и попробовал изменить пространство имен в моём пакетеXDTO в расширении, но при переименовании 1С выдает ошибку^
Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: DocumentObject.ПередачаОСВАренду пакет: http://KTK-v8.1c.ru/8.1/data/enterprise/current-config
Тип '{http://KTKv8.1c.ru/8.1/data/enterprise/current-config}DocumentRef.ПередачаОСВАренду' свойства 'Ref' не определен
Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: DocumentObject.ПередачаОСВАренду пакет: http://KTK-v8.1c.ru/8.1/data/enterprise/current-config
Тип '{http://KTKv8.1c.ru/8.1/data/enterprise/current-config}CatalogRef.Контрагенты' свойства 'Контрагент' не определен
Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: DocumentObject.ПередачаОСВАренду пакет: http://KTK-v8.1c.ru/8.1/data/enterprise/current-config
Тип '{http://KTKv8.1c.ru/8.1/data/enterprise/current-config}CatalogRef.ДоговорыКонтрагентов' свойства 'ДоговорКонтрагента' не определен
Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: DocumentObject.ПередачаОСВАренду пакет: http://KTK-v8.1c.ru/8.1/data/enterprise/current-config
Тип '{http://KTKv8.1c.ru/8.1/data/enterprise/current-config}CatalogRef.Организации' свойства 'Организация' не определен
Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: DocumentObject.ПередачаОСВАренду пакет: http://KTK-v8.1c.ru/8.1/data/enterprise/current-config
Тип '{http://KTKv8.1c.ru/8.1/data/enterprise/current-config}CatalogRef.Пользователи' свойства 'Ответственный' не определен
Ошибка проверки модели XDTO: xdto-objectType-3.2.1 тип: DocumentObject.ПередачаОСВАренду пакет: http://KTK-v8.1c.ru/8.1/data/enter

.....и т.д.


Знающие люди, подскажите, что это за ошибка и как с ней бороться?
Подразумеваю что это из-за переименования стандартно пространства имен
"http://v8.1c.ru/8.1/data/enterprise/current-config"




____________________________________________________________­_________
Конфигурация "Бухгалтерия предприятия (базовая), редакция 3.0 (3.0.53.39)",
Платформа 1С:Предприятие 8.3 (8.3.12.1529)
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ZOMI 450 25.07.18 16:32 Сейчас в теме
Оспади... Согласуете все реквизиты, которые нужны и за 1 час делается внешняя обрботка/печформа с выгрузкой

в виде

	ЗаписьXML = Новый ЗаписьXML;
		
		
		ЗаписьXML.ОткрытьФайл(ПутьККаталогу+"\"+НазваниеФайла, "windows-1251"); //Открываем файл из переменной «Путь», указанной на форме обработки
		ЗаписьXML.ЗаписатьОбъявлениеXML(); // Так как мы создаем документ-XML ,а не фрагмент, то необходимо в начало его поместить объявление	
		
		ЗаписьXML.ЗаписатьНачалоЭлемента("Файл"); //записываем первый элемент
		
		ЗаписьXML.ЗаписатьНачалоЭлемента("СвУчДокОбор");
		ЗаписьXML.ЗаписатьАтрибут("ИдПол", ИдКонтрагента);
		ЗаписьXML.ЗаписатьНачалоЭлемента("СвОЭДОтпр");
		ЗаписьXML.ЗаписатьАтрибут("ИННЮЛ", ИНН");
		ЗаписьXML.ЗаписатьАтрибут("ИдЭДО", ИдЭДО);
		
		ЗаписьXML.ЗаписатьКонецЭлемента();
		ЗаписьXML.ЗаписатьКонецЭлемента();/
		
		ЗаписьXML.ЗаписатьНачалоЭлемента("Документ");
Показать


и т.д.

В чем необходимость XDTO в вашем случае?
LomayaZakat; +1 Ответить
3. Grubly 25.07.18 17:06 Сейчас в теме
(2) Ну я посчитал, что так будет проще в дальнейшем изменять и дополнять существующую структуру. По итогу ведь 1С будет принимать файлы из сторонней ИС, поэтому в дальнейшем потребуется загрузка XML в соответствии с тем, что я вышлю. А загрузка XML с помощью пакетов XDTO вроде как самая быстрая и удобная из возможных.

Поэтому и выбрал XDTO, чтобы создать структуру, выгрузить для сторонней ИС и в дальнейшем загружать файлы XML исходя из исходной структуры XDTO.

Про Ваш способ записи я читал, но мне показалось неудобным выгружать XML без пакетаXDTO, а загружать с пакетомXDTO

Если я неправ, прошу меня поправить )
Оставьте свое сообщение

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