Создание файла XML на основе XSD (технология XDTO)

1. ovadia 18.10.17 22:19 Сейчас в теме
Доброго времени суток!

Нужно преобразовывать данные (значения) из таблиц Excel в данные в формате XML, определяемым XSD схемой.

Подскажите пожалуйста как это сделать, работая с XDTO?
По теме из базы знаний
Найденные решения
5. artkor 277 18.10.17 22:57 Сейчас в теме
Не совсем понимаю, что Вы хотите сделать, может как-то вот так:
	
        ТипXDTO = ФабрикаXDTO.Тип("МойПакет", "МойТипИзПакета");
	XDTOЗначение = ФабрикаXDTO.Создать(ТипXDTO);


	Excel = Новый COMОбъект("Excel.Application");
	Excel.Visible = 0;
	Excel.WorkBooks.Open(ИмяФайлаЗагрузки);
	ExcelDoc = Excel.WorkSheets(ИмяЛиста);   

	
	XDTOЗначение.ПолеШапки1 = ИмяФайлаЗагрузки;
	XDTOЗначение.ПолеШапки2 = ИмяЛиста;
	
	Для НомПП = НомерНачало по НомерКонец Цикл
		
		XDTOРасшифровка = ФабрикаXDTO.Создать(XDTOЗначение.Расшифровка.ВладеющееСвойство.Тип);
		
		XDTOРасшифровка.ПолеРасшифровки1 = СокрЛП(ExcelDoc.Cells(НомПП,1).Value);
		XDTOРасшифровка.ПолеРасшифровки2 = СокрЛП(ExcelDoc.Cells(НомПП,2).Value);
		XDTOРасшифровка.ПолеРасшифровки3 = СокрЛП(ExcelDoc.Cells(НомПП,3).Value);
		//...
		
		XDTOЗначение.Расшифровка.Добавить(XDTOРасшифровка);
		
	КонецЦикла;
	
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, XDTOЗначение);

	Возврат ЗаписьXML.Закрыть();
Показать
11. artkor 277 19.10.17 19:20 Сейчас в теме
(10)
ТипXDTO = ФабрикаXDTO.Тип("Package1", "booklist"); 
XDTOЗначение = ФабрикаXDTO.Создать(ТипXDTO); 


	XDTObook = ФабрикаXDTO.Создать(XDTOЗначение.book.ВладеющееСвойство.Тип); 
	XDTObook.category 	= "COOKING"; 
	XDTObook.title	  	= "Everyday Italian"; 
	XDTObook.author 	= "Giada De Laurentiis"; 
	XDTObook.year 		= 2005;
	XDTObook.price 		= 29.99;
	XDTOЗначение.book.Добавить(XDTObook); 

	XDTObook = ФабрикаXDTO.Создать(XDTOЗначение.book.ВладеющееСвойство.Тип); 
	XDTObook.category 	= "CHILDREN"; 
	XDTObook.title	  	= "Harry Potter"; 
	XDTObook.author 	= "J K. Rowling"; 
	XDTObook.year 		= 2005;
	XDTObook.price 		= 29.99;
	XDTOЗначение.book.Добавить(XDTObook); 
	
	XDTObook = ФабрикаXDTO.Создать(XDTOЗначение.book.ВладеющееСвойство.Тип); 
	XDTObook.category 	= "WEB"; 
	XDTObook.title	  	= "Learning XML"; 
	XDTObook.author 	= "Erik T. Ray"; 
	XDTObook.year 		= 2003;
	XDTObook.price 		= 39.95;
	XDTOЗначение.book.Добавить(XDTObook); 
	


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


Как-то так. все предельно просто
Прикрепленные файлы:
ПакетXDTO2.xsd
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Xershi 1484 18.10.17 22:26 Сейчас в теме
(1) посмотри как работает Битрикс. Наглядный пример!
Или ЭСЧФ. Они тоже через схему работают.
Принцип прочитать эксель и распихать данные по пакетам.
Хотя можно просто записать все в хмл и в конце сделать проверку на схему.
Выбирай что проще.
3. ovadia 18.10.17 22:29 Сейчас в теме
(2) Как это сделать в 1С v8.3.x? Принцип понятен, а поподробнее? Я новичок, мне пока не совсем понятно.
4. Xershi 1484 18.10.17 22:34 Сейчас в теме
(3) я же сказал качай битрикс, смотри код, копируй.
Если тебе надо готовый код, то гугли второй вариант, там уже попроще будет!
Но в любом случае для новичка это будет очень сложная задача!
5. artkor 277 18.10.17 22:57 Сейчас в теме
Не совсем понимаю, что Вы хотите сделать, может как-то вот так:
	
        ТипXDTO = ФабрикаXDTO.Тип("МойПакет", "МойТипИзПакета");
	XDTOЗначение = ФабрикаXDTO.Создать(ТипXDTO);


	Excel = Новый COMОбъект("Excel.Application");
	Excel.Visible = 0;
	Excel.WorkBooks.Open(ИмяФайлаЗагрузки);
	ExcelDoc = Excel.WorkSheets(ИмяЛиста);   

	
	XDTOЗначение.ПолеШапки1 = ИмяФайлаЗагрузки;
	XDTOЗначение.ПолеШапки2 = ИмяЛиста;
	
	Для НомПП = НомерНачало по НомерКонец Цикл
		
		XDTOРасшифровка = ФабрикаXDTO.Создать(XDTOЗначение.Расшифровка.ВладеющееСвойство.Тип);
		
		XDTOРасшифровка.ПолеРасшифровки1 = СокрЛП(ExcelDoc.Cells(НомПП,1).Value);
		XDTOРасшифровка.ПолеРасшифровки2 = СокрЛП(ExcelDoc.Cells(НомПП,2).Value);
		XDTOРасшифровка.ПолеРасшифровки3 = СокрЛП(ExcelDoc.Cells(НомПП,3).Value);
		//...
		
		XDTOЗначение.Расшифровка.Добавить(XDTOРасшифровка);
		
	КонецЦикла;
	
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, XDTOЗначение);

	Возврат ЗаписьXML.Закрыть();
Показать
7. ovadia 18.10.17 23:04 Сейчас в теме
(5)
"МойПакет", "МойТипИзПакета", ТипXDTO


Что это такое?

Спасибо!
9. ovadia 19.10.17 14:01 Сейчас в теме
(5)
ТипXDTO = ФабрикаXDTO.Тип("МойПакет", "МойТипИзПакета");
XDTOЗначение = ФабрикаXDTO.Создать(ТипXDTO);


Excel = Новый COMОбъект("Excel.Application");
Excel.Visible = 0;
Excel.WorkBooks.Open(ИмяФайлаЗагрузки);
ExcelDoc = Excel.WorkSheets(ИмяЛиста);


XDTOЗначение.ПолеШапки1 = ИмяФайлаЗагрузки;
XDTOЗначение.ПолеШапки2 = ИмяЛиста;

Для НомПП = НомерНачало по НомерКонец Цикл

XDTOРасшифровка = ФабрикаXDTO.Создать(XDTOЗначение.Расшифровка.ВладеющееСвойство.Тип);

XDTOРасшифровка.ПолеРасшифровки1 = СокрЛП(ExcelDoc.Cells(НомПП,1).Value);
XDTOРасшифровка.ПолеРасшифровки2 = СокрЛП(ExcelDoc.Cells(НомПП,2).Value);
XDTOРасшифровка.ПолеРасшифровки3 = СокрЛП(ExcelDoc.Cells(НомПП,3).Value);
//...

XDTOЗначение.Расшифровка.Добавить(XDTOРасшифровка);

КонецЦикла;


ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, XDTOЗначение);

Возврат ЗаписьXML.Закрыть();
Показать


Если я правильно понимаю, то ФабрикаXDTO использует схему из файла XSD. А как подключить XSD-файл, чтобы его увидела Фабрика?
6. ovadia 18.10.17 22:59 Сейчас в теме
Может быть это будет работать )

У меня есть два файла: XSD и ХLS. Мне нужно, используя Фабрику XDTO сформировать файл XML и заполнить его значениями ячеек из ХLS.
8. artkor 277 18.10.17 23:14 Сейчас в теме
Накидал пример XDTO-пакета согласно образцу кода - нужно импортировать его в рабочую конфу
Прикрепленные файлы:
ПакетXDTO1.xsd
10. ovadia 19.10.17 15:24 Сейчас в теме
(8) Пока что не очень понятно, например у меня есть xml файл (см. вложение). Какая для него будет правильная схема XSD, которую поймет Фабрика (я читал, что нужно создавать XSD вручную, т.к. программы или веб-сервисы криво строят схемы и их не понимает 1С).
Прикрепленные файлы:
books.xml
11. artkor 277 19.10.17 19:20 Сейчас в теме
(10)
ТипXDTO = ФабрикаXDTO.Тип("Package1", "booklist"); 
XDTOЗначение = ФабрикаXDTO.Создать(ТипXDTO); 


	XDTObook = ФабрикаXDTO.Создать(XDTOЗначение.book.ВладеющееСвойство.Тип); 
	XDTObook.category 	= "COOKING"; 
	XDTObook.title	  	= "Everyday Italian"; 
	XDTObook.author 	= "Giada De Laurentiis"; 
	XDTObook.year 		= 2005;
	XDTObook.price 		= 29.99;
	XDTOЗначение.book.Добавить(XDTObook); 

	XDTObook = ФабрикаXDTO.Создать(XDTOЗначение.book.ВладеющееСвойство.Тип); 
	XDTObook.category 	= "CHILDREN"; 
	XDTObook.title	  	= "Harry Potter"; 
	XDTObook.author 	= "J K. Rowling"; 
	XDTObook.year 		= 2005;
	XDTObook.price 		= 29.99;
	XDTOЗначение.book.Добавить(XDTObook); 
	
	XDTObook = ФабрикаXDTO.Создать(XDTOЗначение.book.ВладеющееСвойство.Тип); 
	XDTObook.category 	= "WEB"; 
	XDTObook.title	  	= "Learning XML"; 
	XDTObook.author 	= "Erik T. Ray"; 
	XDTObook.year 		= 2003;
	XDTObook.price 		= 39.95;
	XDTOЗначение.book.Добавить(XDTObook); 
	


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


Как-то так. все предельно просто
Прикрепленные файлы:
ПакетXDTO2.xsd
12. ovadia 19.10.17 20:59 Сейчас в теме
(11) Большое Вам спасибо за подробные примеры!

А если xml файлы более сложной структуры (см. вложение), то как быть? Нужно также прописывать все вручную, чтобы получить схемы XSD?

PS. У меня была идея такая:
1) построить по этим файлам схемы XSD (не знаю пока как это сделать);
2) загрузить схемы в ФабрикуXDTO для формирования на выходе XML;
3) cчитывать данные из файлов Excel и вставлять эти данные в XML.
Прикрепленные файлы:
XBRL_1027807976680_PURCB_NSO_m_2017m9.xml
XBRL_1027807976680_PURCB_NSO_m_2017m1.xml
13. artkor 277 20.10.17 00:24 Сейчас в теме
(12)
Погуглите про xdto в 1с - что такое директивы импорта, типы объектов, типы значений. Посмотрите как в той же Бух 3.0 реализованы существующие XDTO-пакеты, потом попробуйте импортировать ваши пакеты в конфу. Накладки вероятно будут, главное суметь импортировать схему хоть как-то. Работать голыми руками с XML через ЧтениеXML,ЗаписьXML - это в разы примитивнее и крайне неудобно (проверено на опыте)
14. ovadia 20.10.17 10:14 Сейчас в теме
(13) Спасибо. Но сейчас вопрос в том, как создать правильную (которую понимает Фабрика 1С) схему XSD на основе имеющегося файла XML? Можно ли это сделать автоматизированно, средствами 1С или нужно работать вручную?
15. ovadia 20.10.17 16:45 Сейчас в теме
(14) Вроде бы нашел, как создавать (из XML) файл схемы XSD.

Получилась такая схема:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:iso4217="http://www.xbrl.org/2003/iso4217" xmlns:xbrldi="http://xbrl.org/2006/xbrldi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:purcb-dic="http://www.cbr.ru/xbrl/nso/purcb/dic/purcb-dic" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.xbrl.org/2003/instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://www.xbrl.org/2003/linkbase" />
<xs:import namespace="http://www.cbr.ru/xbrl/nso/purcb/dic/purcb-dic" />
	<xs:complexType name="xbrl">
		<xs:sequence>
			<xs:element ref="link:schemaRef" />
			<xs:element maxOccurs="unbounded" name="unit">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="measure" type="xs:string" />
					</xs:sequence>
					<xs:attribute name="id" type="xs:string" use="required" />
				</xs:complexType>
			</xs:element>
			<xs:element name="context">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="entity">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="identifier">
										<xs:complexType>
											<xs:simpleContent>
												<xs:extension base="xs:string">
													<xs:attribute name="scheme" type="xs:string" use="required" />
												</xs:extension>
											</xs:simpleContent>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
						<xs:element name="period">
							<xs:complexType>
								<xs:sequence>
									<xs:element name="instant" type="xs:date" />
								</xs:sequence>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
					<xs:attribute name="id" type="xs:string" use="required" />
				</xs:complexType>
			</xs:element>
			<xs:element ref="purcb-dic:DS_Kassa" />
			<xs:element ref="purcb-dic:DS_raschet_scheta_KO" />
			<xs:element ref="purcb-dic:DS_raschet_scheta_in_bank" />
			<xs:element ref="purcb-dic:DS_klientov_Broker_pravo_isp" />
			<xs:element ref="purcb-dic:DS_klientov_Broker_bez_prava_isp" />
			<xs:element ref="purcb-dic:DSKODep_Otchit_KO" />
			<xs:element ref="purcb-dic:DSKODep_Otchit_in_bank" />
			<xs:element ref="purcb-dic:DS_Broker_dr_broker" />
			<xs:element ref="purcb-dic:DS_Broker_in_liczo" />
			<xs:element ref="purcb-dic:CZB_i_DS_IKO" />
			<xs:element ref="purcb-dic:KSU_repo" />
			<xs:element ref="purcb-dic:VLA_1_urovnya" />
			<xs:element ref="purcb-dic:CZB_VLA_1" />
			<xs:element ref="purcb-dic:CZB_VLA_1_repo" />
			<xs:element ref="purcb-dic:VLA_2_urovnya" />
			<xs:element ref="purcb-dic:CZB_VLA_2" />
			<xs:element ref="purcb-dic:CZB_VLA_2_repo" />
			<xs:element ref="purcb-dic:VLA_korrektirovka" />
			<xs:element ref="purcb-dic:VLA" />
			<xs:element ref="purcb-dic:Ottoki_vozvrat_sredstv_klientov" />
			<xs:element ref="purcb-dic:Ottoki_poluchen_zajm" />
			<xs:element ref="purcb-dic:Ottoki_kuplya_prodazha_CZB" />
			<xs:element ref="purcb-dic:Ottoki_vypushh_dolg_CZB" />
			<xs:element ref="purcb-dic:Ottoki_vozvrat_DS_pod_VLA1" />
			<xs:element ref="purcb-dic:Obyaz_PFI" />
			<xs:element ref="purcb-dic:Ottoki_vozvrat_DS_pod_VLA2" />
			<xs:element ref="purcb-dic:Ottoki_vozvrat_DS_ne_VLA1_i_ne_VLA2" />
			<xs:element ref="purcb-dic:Obyaz_obratnaya_postavka_CZB" />
			<xs:element ref="purcb-dic:Ozhid_ottok_DS" />
			<xs:element ref="purcb-dic:Prochie_obyaz_30_dnej" />
			<xs:element ref="purcb-dic:Pritoki_vydan_zajm" />
			<xs:element ref="purcb-dic:Pritoki_kuplya_prodazha_CZB" />
			<xs:element ref="purcb-dic:Pritoki_vozvrat_DS_pod_VLA1" />
			<xs:element ref="purcb-dic:Pritoki_vozvrat_DS_pod_VLA2" />
			<xs:element ref="purcb-dic:Pritoki_vozvrat_DS_ne_VLA1_i_ne_VLA2" />
			<xs:element ref="purcb-dic:Prochie_postupleniya_30_dnej" />
			<xs:element ref="purcb-dic:Ozhid_pritok_DS" />
			<xs:element ref="purcb-dic:CHOODS" />
			<xs:element ref="purcb-dic:PKL" />
			<xs:element ref="purcb-dic:OGRN_Prof_uch" />
			<xs:element ref="purcb-dic:SokrNaim_Prof_uch" />
			<xs:element ref="purcb-dic:AdresPocht_Prof_uch" />
			<xs:element ref="purcb-dic:Poln_Naim_Prof_uch" />
			<xs:element ref="purcb-dic:INN_Prof_uch" />
			<xs:element ref="purcb-dic:Kod_Okato" />
		</xs:sequence>
	</xs:complexType>
</xs:schema>
Показать


При попытке запуска в 1С выдаются ошибки:

Ошибка проверки модели XDTO: xdto-package-3.3 пакет: http://www.xbrl.org/2003/instance
Импортируемый пакет типов 'http://www.xbrl.org/2003/linkbase' не определен
Ошибка проверки модели XDTO: xdto-package-3.3 пакет: http://www.xbrl.org/2003/instance
Импортируемый пакет типов 'http://www.cbr.ru/xbrl/nso/purcb/dic/purcb-dic' не определен
Оставьте свое сообщение

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