Работа с ФабрикойXDTO без ПакетовXDTO

16.02.23

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Как можно использовать ФабрикуXDTO при невозможности создавать необходимые ПакетыXDTO в конфигурации.

Приходится работать с текстами XML. Обменами сейчас только ленивый не занимается. Вроде бы инструментария, применительно к XML-обмену, хватает. Есть ДокументDOM, поиск языком XPath, и конечно ФабрикаXDTO вкупе с ПакетамиXDTO. Знаем, пользуемся - все понятно, отлажено и предсказуемо.

Возникло обстоятельство со следующими вводными: работа с обменом XML-содержимым, но во внешней обработке, без всякой возможности куда-либо вмонтировать ПакетыXDTO. Фабрика без Пакетов считается банкротом) Да, я знаю, что можно загнать файл шаблона (XSD) в макет внешней обработки и доставать его оттуда для создания схемы. Но вопрос-то оставался нерешенным, есть объект языка, который не работает,  ведь - должен! В моем случае шаблоны XML-обмена были не самыми простыми. Почти все элементы снабжались фасетами проверок, структура шаблона тоже была не фиксированной. Файлы XML, в зависимости от результатов обмена, могли приходить с разным составом элементов. Было еще много чего, что делало применение ФабрикиXDTO очень желательным.

Как бы, метод создания ФабрикиXDTO по НаборуСхемXML есть, Берешь СхемыXML, наполняешь ими соответствующий НаборСхемXML, по которому и должна создаваться так необходимая ФабрикаXDTO.

Так и поступил.... Не работает! Без оговорок - не работает, от слова - совсем! 

Известный метод - кинулся на форумы. При попытке набрать "СхемаXML" в поисковике выдавалось несколько строк на разных форумах, где вопросы были, а ответов под ними было достаточно мало. Наполнять СхемуXML  содержимым получилось достаточно быстро. Очень рекомендую, при заполнении данного объекта содержимым, представлять в воображении именно ПакетXDTO. Мне так оказалось нагляднее. Я наполнил свою схему простыми и составными типами, корневыми элементами. Завожу получившуюся СхемуXML в НаборСхемXML. Запускаю метод создания ФабрикиXDTO, на выходе - ошибка.

Бился, до обидного, долго и безрезультатно. Вроде бы и разбираться было не в чем, методы простые как арифметика!

Уже и не помню, каким образом дошел до решения. Простой объект СхемаXML оказался с "двойным дном". Есть у этого объекта такое свойство <ДокументDOM>. И вот какую процедуру мне пришлось выполнить. Прежде всего выполняем метод объекта:

СхемаXML.ОбновитьЭлементDOM();


В этот момент все, что было занесено в СхемуXML фиксируется в объект вида ДокументDOM и заносится в одноименное свойство схемы. Именно в ДокументеDOM оказывается необходимое нам содержимое.

Имея заполненный ДокументDOM, заново создаем СхемуXML на его основе.

ПостроительСхемы = Новый ПостроительСхемXML;
НоваяСхемаXML = ПостроительСхемы.СоздатьСхемуXML(ДокументDOM);     


И вот эта вновь пересозданная схема вносится в набор схем, на базе которого успешно создаётся полноценная фабрика, с которой комфортно и удобно работать. 

Вот такая многоходовка. Не знаю, как это задумывалось разработчиками и как должно было бы работать в проекте, но по факту у меня заработало только так! этот механизм я успешно использую уже какое-то время, достаточное чтобы убедиться в полной работоспособности выстраданной мною технологии. Вполне допускаю, что до подобного решения кто-то уже додумывался (был Бойл, но был и Мариотт!), но за месяц безуспешного лазанья по интернету я не нашел ничего, хоть как-то оказавшегося мне полезным. У меня осталось ощущение, что СхемаXML один из самых мало раскрытых объектов. Я очень мало нашел ссылок на работу с данным объектом. Буду рад, если мой опыт окажется коллегам полезным.

Пример кода:


Функция СоздатьПустуюСхемуXML()
	ДокументDOM = Новый ДокументDOM("http://www.w3.org/2001/XMLSchema", "xs:schema");
	ДокументDOM.ЭлементДокумента.УстановитьСоответствиеПространстваИмен("tns", "http://schemas.xmlsoap.org/soap/envelope/");
	ДокументDOM.ЭлементДокумента.УстановитьАтрибут("targetNamespace", "http://schemas.xmlsoap.org/soap/envelope/");
	ДокументDOM.ЭлементДокумента.УстановитьАтрибут("attributeFormDefault", "unqualified");
	ДокументDOM.ЭлементДокумента.УстановитьАтрибут("elementFormDefault", "qualified");
	Построитель = Новый ПостроительСхемXML;    
	СхемаXML = Построитель.СоздатьСхемуXML(ДокументDOM); 
	Возврат СхемаXML;
КонецФункции

// Для получения заполненной схемы я обращаюсь к функции, её (схему) создающей 
// Если коллеги заметят знакомые имена элементов, то таки - да!
// это описывается шаблон XSD который предлагается ФНС для работы с API сервиса прослеживаемости (РНПТ)
// Исходный шаблон я немного доработал, я - художник, я так вижу!)) 

Функция СоздатьСхемуXMLЗапросыОтветыHTTP() 	

// Прежде всего, создается пустая СхемаxML
// я создаю её через ДокументDOM, т.к. мне нужен не просто текст XML
// а законченный документ

	СхемаXML = СоздатьПустуюСхемуXML();  

// Если я предполагаю использование простых типов с заранее настроенными свойствами, я эти типы создаю и заношу в схему
// чтобы обращаться к простым типам из составных типов и элементов уже по именам

#Область СозданиеПростыхТиповСхемы
	
	// простой тип DATE
	ЗанестиПростойТипXSвСхемуXML(СхемаXML.Содержимое, "DATE", "http://www.w3.org/2001/XMLSchema", "date");
	
	// простой тип OKPD2
	СтруктураФасет = Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS, ФасетОбразцаXS"
										, 3, 12, "\d{2}((\.\d{2}\.\d{2}(\.\d{3})?)|(\.\d{2}(\.\d)?)|((\.\d{1})?))");
	ЗанестиПростойТипXSвСхемуXML(СхемаXML.Содержимое
								, "OKPD2"
								, "http://www.w3.org/2001/XMLSchema"
								, "string"
								, СтруктураФасет
								, ВариантПростогоТипаXS.Атомарная);
	
	// простой тип t1000
	СтруктураФасет = Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS", 0, 1000);
	ЗанестиПростойТипXSвСхемуXML(СхемаXML.Содержимое
								, "t1000"
								, "http://www.w3.org/2001/XMLSchema"
								, "string"
								, СтруктураФасет
								, ВариантПростогоТипаXS.Атомарная);
	
	// простой тип UNIT_CODE
	СтруктураФасет = Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS", 3, 4);
	ЗанестиПростойТипXSвСхемуXML(СхемаXML.Содержимое
								, "UNIT_CODE"
								, "http://www.w3.org/2001/XMLSchema"
								, "string"
								, СтруктураФасет
								, ВариантПростогоТипаXS.Атомарная);

	// простой тип TNVED
	СтруктураФасет = Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS, ФасетОбразцаXS"
										, 4, 10, "\d{4,10}");
	ЗанестиПростойТипXSвСхемуXML(СхемаXML.Содержимое
								, "TNVED"
								, "http://www.w3.org/2001/XMLSchema"
								, "string"
								, СтруктураФасет
								, ВариантПростогоТипаXS.Атомарная);
	
	// простой тип STATUS
	СтруктураФасет = Новый Структура("ФасетМинимальногоВключающегоЗначенияXS, ФасетМаксимальногоВключающегоЗначенияXS, ФасетОбщегоКоличестваРазрядовXS"
										, 1, 2, 1);
	ЗанестиПростойТипXSвСхемуXML(СхемаXML.Содержимое
								, "STATUS"
								, "http://www.w3.org/2001/XMLSchema"
								, "integer"
								, СтруктураФасет
								, ВариантПростогоТипаXS.Атомарная);
	
 	// простой тип tINN
	СтруктураФасет = Новый Структура("ФасетОбразцаXS", "\d{10}|\d{12}");
	ЗанестиПростойТипXSвСхемуXML(СхемаXML.Содержимое
								, "tINN"
								, "http://www.w3.org/2001/XMLSchema"
								, "string"
								, СтруктураФасет
								, ВариантПростогоТипаXS.Атомарная);

 	// простой тип ТипРНПТ
	СтруктураФасет = Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS, ФасетОбразцаXS"
										, 25, 29, "(\d{8})/(\d{6})/(([A-ZА-Я0-9]){7,9})/(\d{1,3})");

	ЗанестиПростойТипXSвСхемуXML(СхемаXML.Содержимое
								, "ТипРНПТ"
								, "http://www.w3.org/2001/XMLSchema"
								, "string"
								, СтруктураФасет
								, ВариантПростогоТипаXS.Атомарная);

	// простой тип ТипКоличество
	СтруктураФасет = Новый Структура("ФасетОбщегоКоличестваРазрядовXS, ФасетКоличестваРазрядовДробнойЧастиXS", 26, 11);

	ЗанестиПростойТипXSвСхемуXML(СхемаXML.Содержимое
								, "ТипКоличество"
								, "http://www.w3.org/2001/XMLSchema"
								, "decimal"
								, СтруктураФасет
								, ВариантПростогоТипаXS.Атомарная);
								
		// простой тип Строка50
	СтруктураФасет = Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS", 0, 50);
	ЗанестиПростойТипXSвСхемуXML(СхемаXML.Содержимое
								, "Строка50"
								, "http://www.w3.org/2001/XMLSchema"
								, "string"
								, СтруктураФасет
								, ВариантПростогоТипаXS.Атомарная);

			// простой тип Строка100
	СтруктураФасет = Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS", 0, 100);
	ЗанестиПростойТипXSвСхемуXML(СхемаXML.Содержимое
								, "Строка100"
								, "http://www.w3.org/2001/XMLSchema"
								, "string"
								, СтруктураФасет
								, ВариантПростогоТипаXS.Атомарная);


			// простой тип tDT_NUMBER
	СтруктураФасет = Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS", 23, 25);
	ЗанестиПростойТипXSвСхемуXML(СхемаXML.Содержимое
								, "tDT_NUMBER"
								, "http://www.w3.org/2001/XMLSchema"
								, "string"
								, СтруктураФасет
								, ВариантПростогоТипаXS.Атомарная);
								
#КонецОбласти

#Область СозданиеСоставныхТиповСхемы	

	// Составной тип tFAULT  
	СоставнойТипXS = СоздатьСоставнойТипСхемыXML("tFAULT");
	РабочиеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;

		// Элемент ERR_CODE
	ЭлементXS = СоздатьЭлементСхемыXML("ERR_CODE", "integer", "http://www.w3.org/2001/XMLSchema", Новый Структура("ФасетОбразцаXS", "\d{1,3}"));
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент ERR_NAME
	ЭлементXS = СоздатьЭлементСхемыXML("ERR_NAME", "t1000");
	РабочиеФрагменты.Добавить(ЭлементXS);
																		
	СхемаXML.Содержимое.Добавить(СоставнойТипXS);
	////////////////////////////////////////////////////
	
	// Составной тип tOKPD2  
	СоставнойТипXS = СоздатьСоставнойТипСхемыXML("tOKPD2");
	РабочиеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;

    	// Элемент CODE_OKPD2
	ЭлементXS = СоздатьЭлементСхемыXML("CODE_OKPD2", "tOKPD2");
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент NAME_OKPD2
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_OKPD2", "t1000");
	РабочиеФрагменты.Добавить(ЭлементXS);

	СхемаXML.Содержимое.Добавить(СоставнойТипXS);
	///////////////////////////////////////////////////////
	
	// Составной тип tTNVED
	СоставнойТипXS = СоздатьСоставнойТипСхемыXML("tTNVED");
	РабочиеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
    	// Элемент CODE_TNVED
	ЭлементXS = СоздатьЭлементСхемыXML("CODE_TNVED", "tTNVED");
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент NAME_TNVED
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_TNVED", "t1000");
	РабочиеФрагменты.Добавить(ЭлементXS);

	СхемаXML.Содержимое.Добавить(СоставнойТипXS); 
	////////////////////////////////////////////////////////

	// Составной тип tTNVEDDict
	СоставнойТипXS = СоздатьСоставнойТипСхемыXML("tTNVEDDict");
	СоставнойТипXS.ИмяБазовогоТипа = Новый РасширенноеИмяXML("urn://x-artefacts-gnivc-ru/ais3/TRC/ServicesTraceability/types/1.0", "tTNVED");
	СоставнойТипXS.МодельСодержимого = МодельСодержимогоXS.Составная;
	СоставнойТипXS.МетодНаследования = МетодНаследованияXS.Расширение;
	РабочиеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
	//	// Элемент UNIT_CODE
	ЭлементXS = СоздатьЭлементСхемыXML("UNIT_CODE", "UNIT_CODE");
	РабочиеФрагменты.Добавить(ЭлементXS);

	//	// Элемент MARK_CODE
	ЭлементXS = СоздатьЭлементСхемыXML("MARK_CODE", "Строка50");
	РабочиеФрагменты.Добавить(ЭлементXS);

	//	// Элемент NAME_UNIT_CODE
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_UNIT_CODE", "Строка100");
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент STATUS_GOODS
	ЭлементXS = СоздатьЭлементСхемыXML("STATUS_GOODS", "boolean", "http://www.w3.org/2001/XMLSchema");
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент CODE_CO
	ЭлементXS = СоздатьЭлементСхемыXML("CODE_CO", "string", "http://www.w3.org/2001/XMLSchema", Новый Структура("ФасетДлиныXS", 3));            
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент NAME_CODE_CO
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_CODE_CO", "Строка100");            
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент FOUND_ADD
	ЭлементXS = СоздатьЭлементСхемыXML("FOUND_ADD", "t1000");
	РабочиеФрагменты.Добавить(ЭлементXS);

		// Элемент DATE_ADD
	ЭлементXS = СоздатьЭлементСхемыXML("DATE_ADD", "DATE");
	РабочиеФрагменты.Добавить(ЭлементXS);

	СхемаXML.Содержимое.Добавить(СоставнойТипXS); 
	////////////////////////////////////////////////////////////////////
	
	// Составной тип tResultTNVED
	СоставнойТипXS = СоздатьСоставнойТипСхемыXML("tResultTNVED");
	СоставнойТипXS.ИмяБазовогоТипа = Новый РасширенноеИмяXML("urn://x-artefacts-gnivc-ru/ais3/TRC/ServicesTraceability/types/1.0", "tTNVEDDict");
	СоставнойТипXS.МодельСодержимого = МодельСодержимогоXS.Составная;
	СоставнойТипXS.МетодНаследования = МетодНаследованияXS.Расширение;
	РабочиеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент TNVED
	ЭлементXS = СоздатьЭлементСхемыXML("TNVED", "tTNVEDDict"); 
	ВнестиЭлементXSчерезФрагментXS(ЭлементXS, РабочиеФрагменты, , -1);

	СхемаXML.Содержимое.Добавить(СоставнойТипXS); 
	////////////////////////////////////////////////////////////////////
	
	// Составной тип tResultOKPD2
	СоставнойТипXS = СоздатьСоставнойТипСхемыXML("tResultOKPD2");
	СоставнойТипXS.ИмяБазовогоТипа = Новый РасширенноеИмяXML("urn://x-artefacts-gnivc-ru/ais3/TRC/ServicesTraceability/types/1.0", "OKPD2");
	СоставнойТипXS.МодельСодержимого = МодельСодержимогоXS.Составная;
	СоставнойТипXS.МетодНаследования = МетодНаследованияXS.Расширение;
	РабочиеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент OKPD2
	ЭлементXS = СоздатьЭлементСхемыXML("OKPD2", "tOKPD2"); 
	ВнестиЭлементXSчерезФрагментXS(ЭлементXS, РабочиеФрагменты, , -1);

	СхемаXML.Содержимое.Добавить(СоставнойТипXS); 
	////////////////////////////////////////////////////////////////////
	
	// Составной тип tResultProduct
	СоставнойТипXS = СоздатьСоставнойТипСхемыXML("tResultProduct");
	СоставнойТипXS.ИмяБазовогоТипа = Новый РасширенноеИмяXML("urn://x-artefacts-gnivc-ru/ais3/TRC/ServicesTraceability/types/1.0", "tResultTNVED");
	СоставнойТипXS.МодельСодержимого = МодельСодержимогоXS.Составная;
	СоставнойТипXS.МетодНаследования = МетодНаследованияXS.Расширение;
	РабочиеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент NAME_GOODS
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_GOODS", "t1000");            
	РабочиеФрагменты.Добавить(ЭлементXS);
	
	СхемаXML.Содержимое.Добавить(СоставнойТипXS);
	
#КонецОбласти

#Область СозданиеКорневыхЭлементовСхемы

	// Корневой элемент CheckSTATUSNOTICE_Request
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckSTATUSNOTICE_Request");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    РабочиеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент INN
	ЭлементXS = СоздатьЭлементСхемыXML("INN", "tINN");
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент NOTICE_NO
	ЭлементXS = СоздатьЭлементСхемыXML("NOTICE_NO", "string", "http://www.w3.org/2001/XMLSchema", Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS", 1, 255));
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент NOTICE_DATE
	ЭлементXS = СоздатьЭлементСхемыXML("NOTICE_DATE", "DATE");
	ВнестиЭлементXSчерезФрагментXS(ЭлементXS, РабочиеФрагменты, 1);

	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////
	
	// Корневой элемент CheckSTATUSNOTICE_Response
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckSTATUSNOTICE_Response");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элементы STATUS_CODE + FAULT + RESULT
	РабочиеФрагменты = ВнестиЭлементXSдляSTATUS_CODE(КорневыеФрагменты, , 1);	
	
			// Элемент PROC_DATE
	ЭлементXS = СоздатьЭлементСхемыXML("PROC_DATE", "DATE");
    РабочиеФрагменты.Добавить(ЭлементXS);

			// Элемент PROC_STATUS
	ЭлементXS = СоздатьЭлементСхемыXML("PROC_STATUS", "Строка50");
    РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент NOTICE
	ЭлементXS = СоздатьЭлементСхемыXML("NOTICE");
    ЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = ЭлементXS.ОпределениеТипа();
	ВнестиЭлементXSчерезФрагментXS(ЭлементXS, РабочиеФрагменты, , -1);	
    РабочиеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
			// Элемент NAME_GOODS
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_GOODS", "t1000");
    РабочиеФрагменты.Добавить(ЭлементXS);

			// Элемент RNPT
	ЭлементXS = СоздатьЭлементСхемыXML("RNPT", "RNPT");
    РабочиеФрагменты.Добавить(ЭлементXS);
	
			// Элемент CODE_TNVED
	ЭлементXS = СоздатьЭлементСхемыXML("CODE_TNVED", "TNVED");
    РабочиеФрагменты.Добавить(ЭлементXS);
	
			// Элемент QUANT_GOODS
	ЭлементXS = СоздатьЭлементСхемыXML("QUANT_GOODS", "ТипКоличество");
    РабочиеФрагменты.Добавить(ЭлементXS);

			// Элемент UNIT_CODE
	ЭлементXS = СоздатьЭлементСхемыXML("UNIT_CODE", "UNIT_CODE");
    РабочиеФрагменты.Добавить(ЭлементXS);
																		
			// Элемент NAME_UNIT_CODE
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_UNIT_CODE", "Строка100");
    РабочиеФрагменты.Добавить(ЭлементXS);

			// Элемент STATUS_DESC
	ЭлементXS = СоздатьЭлементСхемыXML("STATUS_DESC", "t1000");
    РабочиеФрагменты.Добавить(ЭлементXS);

	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////
	
	// Корневой элемент CheckTRCRNPT_Request
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCRNPT_Request");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    РабочиеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
			// Элемент RNPT
	ЭлементXS = СоздатьЭлементСхемыXML("RNPT", "RNPT");
	РабочиеФрагменты.Добавить(ЭлементXS); 
	
	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////
	
	// Корневой элемент CheckTRCRNPT_Response
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCRNPT_Response");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент STATUS_CODE + FAULT + RESULT
	РабочиеФрагменты = ВнестиЭлементXSдляSTATUS_CODE(КорневыеФрагменты, , 1);	

		// Элемент CODE_TNVED
	ЭлементXS = СоздатьЭлементСхемыXML("CODE_TNVED", "TNVED");
	РабочиеФрагменты.Добавить(ЭлементXS);	
	
			// Элемент NAME_GOODS
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_GOODS", "t1000");
    РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент CODE_CO_PROD
	ЭлементXS = СоздатьЭлементСхемыXML("CODE_CO_PROD", "string", "http://www.w3.org/2001/XMLSchema", Новый Структура("ФасетДлиныXS", 3));
	ВнестиЭлементXSчерезФрагментXS(ЭлементXS, РабочиеФрагменты, 0);	
	
		// Элемент NAME_CO_PROD
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_CO_PROD", "string", "http://www.w3.org/2001/XMLSchema", Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS", 1, 500));
	ВнестиЭлементXSчерезФрагментXS(ЭлементXS, РабочиеФрагменты, 0);	
	
				// Элемент DATE_PROD
	ЭлементXS = СоздатьЭлементСхемыXML("DATE_PROD", "DATE");
    РабочиеФрагменты.Добавить(ЭлементXS);

    			// Элемент UNIT_CODE
	ЭлементXS = СоздатьЭлементСхемыXML("UNIT_CODE", "UNIT_CODE");
    РабочиеФрагменты.Добавить(ЭлементXS);

			// Элемент NAME_UNIT_CODE
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_UNIT_CODE", "Строка100");
    РабочиеФрагменты.Добавить(ЭлементXS);
	
				// Элемент QUANT_INPUT_GOODS
	ЭлементXS = СоздатьЭлементСхемыXML("QUANT_INPUT_GOODS", "ТипКоличество");
    РабочиеФрагменты.Добавить(ЭлементXS);
	
				// Элемент QUANT_OUTPUT_GOODS
	ЭлементXS = СоздатьЭлементСхемыXML("QUANT_OUTPUT_GOODS", "ТипКоличество");
    РабочиеФрагменты.Добавить(ЭлементXS);
	
				// Элемент QUANT_CIRCUL_GOODS
	ЭлементXS = СоздатьЭлементСхемыXML("QUANT_CIRCUL_GOODS", "ТипКоличество");
    РабочиеФрагменты.Добавить(ЭлементXS);
	
				// Элемент DATE_UPDATED
	ЭлементXS = СоздатьЭлементСхемыXML("DATE_UPDATED", "DATE");
    РабочиеФрагменты.Добавить(ЭлементXS);

	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////
	
	// Корневой элемент CheckTRCRNPT_List_Request
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCRNPT_List_Request");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
			// Элемент RNPT
	ЭлементXS = СоздатьЭлементСхемыXML("RNPT", "RNPT");
	ВнестиЭлементXSчерезФрагментXS(ЭлементXS, КорневыеФрагменты, , 100);	

	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////
	
	// Корневой элемент CheckTRCRNPT_List_Response
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCRNPT_List_Response");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент STATUS_CODE + FAULT + RESULT 
	РабочиеФрагменты = ВнестиЭлементXSдляSTATUS_CODE(КорневыеФрагменты, , 100);	
	
			// Элемент RNPT
	ЭлементXS = СоздатьЭлементСхемыXML("RNPT", "RNPT");
	РабочиеФрагменты.Добавить(ЭлементXS); 
	
			// Элемент CODE_TNVED
	ЭлементXS = СоздатьЭлементСхемыXML("CODE_TNVED", "TNVED"); 
	ВнестиЭлементXSчерезФрагментXS(ЭлементXS, РабочиеФрагменты, 0);	

			// Элемент TRACEABLE
	ЭлементXS = СоздатьЭлементСхемыXML("TRACEABLE", "string", "http://www.w3.org/2001/XMLSchema", Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS", 1, 2));
	РабочиеФрагменты.Добавить(ЭлементXS); 
	
	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////
	
	// Корневой элемент CheckTRCTNVED_Request
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCTNVED_Request");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
			// Элемент CODE_TNVED
	ЭлементXS = СоздатьЭлементСхемыXML("CODE_TNVED", "TNVED");
	КорневыеФрагменты.Добавить(ЭлементXS);   
	
			// Элемент CURR_DATE
	ЭлементXS = СоздатьЭлементСхемыXML("CURR_DATE", "DATE");
	КорневыеФрагменты.Добавить(ЭлементXS);   
	
	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////

	// Корневой элемент CheckTRCTNVED_Response
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCTNVED_Response");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент STATUS_CODE + FAULT + RESULT 
	РабочиеФрагменты = ВнестиЭлементXSдляSTATUS_CODE(КорневыеФрагменты, , 1, "tResultTNVED");	
	
	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////
	
	// Корневой элемент CheckTRCOKPD2_Request
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCOKPD2_Request");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;   
	
			// Элемент CODE_OKPD2
	ЭлементXS = СоздатьЭлементСхемыXML("CODE_OKPD2", "OKPD2");
	КорневыеФрагменты.Добавить(ЭлементXS);   
 	
			// Элемент CURR_DATE
	ЭлементXS = СоздатьЭлементСхемыXML("CURR_DATE", "DATE");
	КорневыеФрагменты.Добавить(ЭлементXS);   
	
	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////

	// Корневой элемент CheckTRCOKPD2_Response
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCOKPD2_Response");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент STATUS_CODE + FAULT + RESULT 
		
	РабочиеФрагменты = ВнестиЭлементXSдляSTATUS_CODE(КорневыеФрагменты, , 1, "tResultOKPD2");	
	
	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////

	// Корневой элемент CheckTRCProduct_Request	
	
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCProduct_Request");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;   
	
		//	// Элемент NAME_GOODS
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_GOODS", "t1000");            
	КорневыеФрагменты.Добавить(ЭлементXS);

			// Элемент CURR_DATE
	ЭлементXS = СоздатьЭлементСхемыXML("CURR_DATE", "DATE");
	КорневыеФрагменты.Добавить(ЭлементXS);   
	
	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////

	// Корневой элемент CheckTRCProduct_Response
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCProduct_Response");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент STATUS_CODE + FAULT + RESULT 
		
	РабочиеФрагменты = ВнестиЭлементXSдляSTATUS_CODE(КорневыеФрагменты, , 1, "tResultProduct");	
	
	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////
	
	// Корневой элемент CheckTRCProduct_Response
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCDT_Request");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент DT_NUMBER
	ЭлементXS = СоздатьЭлементСхемыXML("DT_NUMBER", "tDT_NUMBER");
	КорневыеФрагменты.Добавить(ЭлементXS);

	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////
	
	// Корневой элемент CheckTRCDT_Response
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCDT_Response");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент STATUS_CODE + FAULT + RESULT 
	РабочиеФрагменты = ВнестиЭлементXSдляSTATUS_CODE(КорневыеФрагменты, , 1);	

    	// Элемент CODE_TNVED
	ЭлементXS = СоздатьЭлементСхемыXML("CODE_TNVED", "tTNVED");
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент NAME_GOODS
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_GOODS", "t1000");            
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент POSIT_NUM
	ЭлементXS = СоздатьЭлементСхемыXML("POSIT_NUM", "string", "http://www.w3.org/2001/XMLSchema", Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS", 0, 3));           
	РабочиеФрагменты.Добавить(ЭлементXS);

		// Элемент STATUS_GOODS
	ЭлементXS = СоздатьЭлементСхемыXML("STATUS_GOODS", "boolean", "http://www.w3.org/2001/XMLSchema");
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент CODE_CO
	ЭлементXS = СоздатьЭлементСхемыXML("CODE_CO", "string", "http://www.w3.org/2001/XMLSchema", Новый Структура("ФасетДлиныXS", 3));            
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент NAME_CODE_CO
	ЭлементXS = СоздатьЭлементСхемыXML("NAME_CODE_CO", "Строка100");            
	РабочиеФрагменты.Добавить(ЭлементXS);

		// Элемент FOUND_ADD
	ЭлементXS = СоздатьЭлементСхемыXML("FOUND_ADD", "t1000");            
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент DATE_ADD
	ЭлементXS = СоздатьЭлементСхемыXML("DATE_ADD", "DATE");
	РабочиеФрагменты.Добавить(ЭлементXS);
	
	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////

	// Корневой элемент CheckTRCDT_List_Request
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCDT_List_Request");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент DT_NUMBER
	ЭлементXS = СоздатьЭлементСхемыXML("DT_NUMBER", "tDT_NUMBER");
	ВнестиЭлементXSчерезФрагментXS(ЭлементXS, КорневыеФрагменты, , 50);
	
	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////
	
	// Корневой элемент CheckTRCDT_List_Response
	КорневойЭлементXS = СоздатьЭлементСхемыXML("CheckTRCDT_List_Response");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент STATUS_CODE + FAULT + RESULT 
	РабочиеФрагменты = ВнестиЭлементXSдляSTATUS_CODE(КорневыеФрагменты, , 50);

		// Элемент DT_NUMBER
	ЭлементXS = СоздатьЭлементСхемыXML("DT_NUMBER", "tDT_NUMBER");
	РабочиеФрагменты.Добавить(ЭлементXS);
	
		// Элемент TRACEABLE
	ЭлементXS = СоздатьЭлементСхемыXML("TRACEABLE", "string", "http://www.w3.org/2001/XMLSchema", Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS", 1, 2));
	РабочиеФрагменты.Добавить(ЭлементXS); 

		// Элемент ROW
	ЭлементXS = СоздатьЭлементСхемыXML("ROW");
	ЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML(, , 1);
	СоставнойТипXS = ЭлементXS.ОпределениеТипа();
	ВнестиЭлементXSчерезФрагментXS(ЭлементXS, РабочиеФрагменты, 0, -1);
    РабочиеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;

		// Элемент POSIT_NUM
	ЭлементXS = СоздатьЭлементСхемыXML("POSIT_NUM", "string", "http://www.w3.org/2001/XMLSchema", Новый Структура("ФасетМинимальнойДлиныXS, ФасетМаксимальнойДлиныXS", 0, 3));
	РабочиеФрагменты.Добавить(ЭлементXS); 
	
    	// Элемент CODE_TNVED
	ЭлементXS = СоздатьЭлементСхемыXML("CODE_TNVED", "TNVED");
	РабочиеФрагменты.Добавить(ЭлементXS);

		// Элемент DATE_ADD
	ЭлементXS = СоздатьЭлементСхемыXML("DATE_ADD", "DATE");
	РабочиеФрагменты.Добавить(ЭлементXS);

	СхемаXML.Содержимое.Добавить(КорневойЭлементXS); 
	////////////////////////////////////////////////////////////////////

		// Корневой элемент GetTRCList_Request
	КорневойЭлементXS = СоздатьЭлементСхемыXML("GetTRCList_Request");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;

			// Элемент CURR_DATE
	ЭлементXS = СоздатьЭлементСхемыXML("CURR_DATE", "DATE");
	КорневыеФрагменты.Добавить(ЭлементXS);   
	
	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////
	
	// Корневой элемент GetTRCList_Response
	КорневойЭлементXS = СоздатьЭлементСхемыXML("GetTRCList_Response");
    КорневойЭлементXS.АнонимноеОпределениеТипа = СоздатьСоставнойТипСхемыXML();
	СоставнойТипXS = КорневойЭлементXS.ОпределениеТипа();
    КорневыеФрагменты = СоставнойТипXS.Содержимое.Часть.Фрагменты;
	
		// Элемент STATUS_CODE + FAULT + RESULT 
	РабочиеФрагменты = ВнестиЭлементXSдляSTATUS_CODE(КорневыеФрагменты, , -1, "tResultTNVED");	
	
	СхемаXML.Содержимое.Добавить(КорневойЭлементXS);
	////////////////////////////////////////////////
	
#КонецОбласти

// По итогу заполнения схемы обязательно выполняется вот этот метод!
// в результате исполнения которого в реквизит объекта ДокументDOM СхемаXML
// как раз и будут занесены все те типы и элементы, которые накануне внесли в содержимое схему!
	СхемаXML.ОбновитьЭлементDOM();
	СхемаXML = ПересоздатьСхемуXML(СхемаXML.ДокументDOM);

	Возврат	СхемаXML;

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

// Итоговым процессом становится вот эта функция, об алгоритме которой я и написал в статье
// это пересоздание схемы на основе её свойства ДокументDOM
Функция ПересоздатьСхемуXML(ДокументDOM)

	ПостроительСхемы = Новый ПостроительСхемXML;
	НоваяСхемаXML = ПостроительСхемы.СоздатьСхемуXML(ДокументDOM);	

//И вот эту новую схему мы возвращаем для занесения в набор и создания Фабрики.
// на этом - всё
	Возврат НоваяСхемаXML;
КонецФункции	

СхемаXML ПакетXDTO ФабрикаXDTO

См. также

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141466    798    297    

419

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.234.x) и БП 3.0 (3.0.161.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    23985    169    51    

127

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    51189    228    69    

185

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    36568    94    66    

89

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171155    303    257    

378

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186855    589    509    

526

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    194950    150    243    

280

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в УПП 1.3 | из КА 2 в КА 1.1 | из КА 2 в УПП 1.3 | из КА 2 в УТ 10.3 | из ERP в КА 1.1 | из ERP в УТ 10.3 | из УТ 11 в УТ 10.3 | из УТ 11 в УПП 1.3 | из УТ 11 в КА 1.1 | Можно переносить только новые объекты, найденные в приемнике перезаписываться не будут | Есть фильтр по организации при выгрузке данных | Оперативно обновляем на новые релизы 1С

53111 47800 руб.

28.11.2015    83235    32    125    

64
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AllexSoft 16.02.23 19:21 Сейчас в теме
Эта фабрика плоха тем что там никакой обработки исключений при десериализации XML -> объектная модель нет... и вот там как что не так, так сразу исключение и ничего не прочитается. Сделали бы лучше какой то обработчик восстановления значений и вызывали бы его в случае чего. А для записи XML через схемы и фабрику - отличная вещь.
По программному созданию схем действительно мало материала.
cleaner_it; +1 Ответить
2. Aphanas 92 17.02.23 04:48 Сейчас в теме
Через модель XDTO еще можно
yurazyuraz; starik-2005; +2 Ответить
3. DemetrKlim 179 17.02.23 06:28 Сейчас в теме
(2) Моделирование производится в пределах существующих пакетов. Нет пакета - нет модели. Кажется так.
4. Aphanas 92 17.02.23 06:49 Сейчас в теме
(3) Там можно делать с нуля всё. Она для этого и нужна, эта модель. Как раз для того, чтобы не заморачиваться с DOM, когда нет XSD. Это самый прямой и естественный путь.
5. Aphanas 92 17.02.23 06:59 Сейчас в теме
Модель = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/xdto","Model"));

Пакет = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/xdto","Package"));
Пакет.targetNamespace = URIПространстваИмен;

ТипМоделиXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/xdto","ObjectType"));
ТипМоделиXDTO.name = ИмяТипа;

Свойство = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/xdto","Property"));
Свойство.name = Псевдоним;

Свойство.lowerBound = 0;
Свойство.upperBound = -1;
Свойство.type = Новый РасширенноеИмяXML(Пакет.targetNamespace,ИмяТипа+Псевдоним);

ТипМоделиXDTO.property.Добавить(Свойство);

Модель.package.Добавить(Пакет);

Фабрика = Новый ФабрикаXDTO(Модель);

Как-то так.
См. также здесь: https://infostart.ru/public/540068/
JohnyDeath; VVi3ard; triviumfan; cleaner_it; Светлый ум; starik-2005; DemetrKlim; gzharkoj; +8 Ответить
6. DemetrKlim 179 17.02.23 07:10 Сейчас в теме
(5)Да, интересно. Спасибо большое! Я бы сказал, что Вашим вариантом было бы проще пользоваться.
Светлый ум; +1 Ответить
21. DemetrKlim 179 15.03.23 20:41 Сейчас в теме
(5)Потратил некое время. Не скрою, сначала вариант с Моделью мне понравилась. Я подразумевал, что она имеет такой же богатый функционал, как и СхемаXML. Пробовал реализовать свое решение через Модель - не понравилось. Описать сложную модель оказалось затруднительным. Так и не понял, как создавать безымянный тип под которым можно дальше ветвить свойства. Как я понял, тип без имени вообще никак не может быть использован?
Пока вернулся к Схеме.
22. Aphanas 92 16.03.23 06:19 Сейчас в теме
(21)
Не исключаю, что модель имеет ограниченные возможности. Не припомню сейчас в точности, можно ли вообще там создать тип без имени. Но помню, что тип без имени удавалось использовать, если он уже создан и присутствует в фабрике. Можно было создать объект, вроде бы.
Также, помню были какие-то проблемы со схемами, в которых не указано пространство имен.

Кстати, есть еще объект "СхемаXML". Как думаете, можно его использовать?
23. DemetrKlim 179 16.03.23 06:48 Сейчас в теме
(22) Именно объект СхемаXML я и использую. В этом объекте можно описать любую конструкцию XML любой сложности. В Модели у меня много вопросов возникло, не все еще попробовал, например - фасеты. Но так и не смог сделать многоуровневое ветвление. Получаются совсем простые конструкции "в один этаж" тип-свойства.Если присвоить свойству безымянный тип, то подключение нижестоящих по ветке свойств я так и не смог организовать.
24. Aphanas 92 16.03.23 07:35 Сейчас в теме
(23)
А можно обойтись без DOM? У объекта СхемаXML есть какие-то свойства/методы. У Вас, если я правильно понимаю схема делается через DOM?
Прикрепленные файлы:
25. DemetrKlim 179 16.03.23 07:45 Сейчас в теме
(24)СхемаXML это вполне самодостаточный объект. Я не использую ДокументDOM, как объект. Речь идет о свойстве (реквизите) объекта СхемаXML - с именем ДокументDOM. Это свойство аккумулирует все содержимое схемы. Это происходит без какого-либо дополнительного вмешательства со стороны пользователя. По результату заполнения Схемы я получаю готовый ДокументDOM. Нюанс состоит лишь в том, что схему после заполнения надо "пересоздать" на основе значения, накопленного в свойстве ДокументDOM.
27. Aphanas 92 16.03.23 07:55 Сейчас в теме
(25)
Да, я понял. Я просто не совсем знаю, за что отвечают остальные свойства/методы объекта "СхемаXML". Я думал, с помощью них можно полностью определить всю схему. Хотя, не исключаю, что в этом случае возможны различные ограничения. Бывает 1С не всё нюансы реализует.
Чтобы формировать схему, используя ДокументDOM, надо хорошо знать, как делается схема в терминах XML. Думал, есть ли способ проще.
28. DemetrKlim 179 16.03.23 08:52 Сейчас в теме
(27) А простые способы не дадут возможность поддерживать все многообразие XML. Например, условное ветвление, когда в зависимости от каких-то значений у элемента меняется тип и развитие ветки идет по альтернативному шаблону. Для меня самым хлопотным было прийти к пониманию - что такое "часть", что такое "фрагмент". Понимание приходит методом "тыка")
Насчет подозрений , что "1С не все реализует". Наверное, и такое возможно. Но мне кажется, что тут сами эсники ничего не придумывали, а взяли какой-то готовый (чужой) конструкт (библиотеку) и вморозили это в свою платформу. Я когда упирался в некоторые тупички, тоже сначала думал, что эсники что-то "укоротили в чертежах", а потом находилось решение, просто решение оказывалось витиеватым и неожиданным)
7. quazare 3800 17.02.23 14:26 Сейчас в теме
Могу сказать по собственному практическому опыту - в тех случаях, где возможно, я полностью отказался от использования XML в пользу JSON
ritminform; cleaner_it; Lok`Tar; ixijixi; dsdred; +5 Ответить
8. DemetrKlim 179 17.02.23 15:08 Сейчас в теме
(7) И какое преимущество при этом возникает?
9. dsdred 3593 17.02.23 15:45 Сейчас в теме
(8)как минимум уменьшается размер сообщения
10. DemetrKlim 179 17.02.23 15:54 Сейчас в теме
(9) Как бы... удовольствие от размера не зависит. Для JSON какой парсер доступен в 1С? Допустим, одну и ту же информацию загнали в XML и JSON. Последний файл получился в три раза меньше. Но прочитать его придется - весь, сортируя каждое прочитанное по условиям "надо - не надо". А более массивный XML я хотя бы XPath-ем опрошу и сразу получу несколько нужных мне объектов с заранее оговоренными значениями. Это как с автомобильным движением. Получается быстрее доезжать, не там, где короче, а где дорога обустроена лучше.
11. dsdred 3593 17.02.23 16:08 Сейчас в теме
(10) JSON появился в платформе начиная с версии 8.3.6, сейчас там масса возможностей работать с ним.

На счет XPath, честно скажу не использовал.
С другой стороны все есть текст и регуляки для чего-то подвезли.
12. DemetrKlim 179 17.02.23 16:13 Сейчас в теме
(11) XPath очень рекомендую! Это как язык запросов для XML Если доведется работать с большими текстами XML со сложной структурой, то там без парсера просто делать будет нечего. Я XPath использую в подавляющем большинстве случаев работы с XML.
Может быть, следующую статью про это и напишу. Там есть особенности работы такого объекта, как РазыменовательПространствИмен.
13. skif47 350 17.02.23 19:50 Сейчас в теме
(8) в Json массив - это всегда массив
14. DemetrKlim 179 17.02.23 20:53 Сейчас в теме
(13)Ну... как бэ-э.. да. В тексте есть 5 тысяч массивов. Надо выбрать из них только те, где есть раки, или крупные по 5, или мелкие, но по 3. В XML это делается влегкую, встроенными средствами платформы (парсером). По JSON-у какие будут предложения. Вполне могу чего-то не знать. Но что бы Вы предложили? С таблицами баз данных тоже можно работать по несложному принципу - встаешь в BOF и листаешь до донышка. А когда люди задолбались это делать, они придумали SQL.
Пока мне кажется, что все эти сравнения XML и JSON условно интересны применительно к "килобайтным" файлам. При получении текстов, размером в десятки мегабайт уже неважен будет стандарт (XML, JSON и т.п.), будет гораздо важнее ощущать в руках какой-то инструментарий, для работы с этим "тюком" информации.
Сейчас многие сталкиваются с таким понятием, как "маркировка". Предприятия, производящие маркированную продукцию, "расходуют" миллионы кодов маркировки за сутки. Серверы технологического оборудования за одну смену десятками "выплевывают" XML - файлы размером 2-5 мегабайт. И вдруг надо из всех этих XML-текстов выбрать коды с определенной серией продукции. Без парсера как-то тоскливо это выглядит, даже при меньшем размере таких файлов, созданных в ином формате, для которого не будет парсера.
Aphanas; cleaner_it; +2 Ответить
15. Aphanas 92 21.02.23 07:32 Сейчас в теме
К сожалению, XDTO криво сериализуется в JSON. Приходится много работать напильником.
16. DemetrKlim 179 21.02.23 07:56 Сейчас в теме
(15) А есть какая-то жесткая необходимость в использовании JSON? Понятно, что чем примитивней язык, тем он более универсален и "межплатформеннен". Жестами людей даже собаки понимают) Что дает JSON, кроме меньшего размера полученного файла? Это я применительно к 1С спросил. Может, разработчики 1С потому и слепили наспех хоть какой-то инструментарий (подвесили в XDTO хоть какие-то методы для JSON) по обслуживанию JSON-стандарта, потому что любой стандарт, не обеспеченный инструментарием, мало кому пригодиться.
19. skif47 350 24.02.23 21:19 Сейчас в теме
(16) де-факто это стандарт в большинстве веб-сервисов на сегодня.
20. DemetrKlim 179 24.02.23 21:55 Сейчас в теме
(19)Вот есть крестовая отвертка. Она стандартна в пределах своего применения, т.е. для конкретного размера шлица на шляпке винта или самореза.
JSON это инструмент, как и вышеупомянутая отвертка. И слово "стандарт" не синонимично слову "уникальность". JSON - не единственный, а один - из.
Перед тем, как доставать инструмент из ящика, я знакомлюсь с тем - где и для чего (для какой работы) мне нужен инструмент. Применять инструмент по принципу "ой, какая у него ручка - классная, сейчас все с такой ходят!" - странно. Не надо путать конъюнктуру (моду) и стандарт, это разные вещи.
Размер файла это всего лишь один критерий. Меньший размер файла (JSON) может, тем не менее, обрабатываться дольше, чем вроде бы более массивный XML. По очень простой причине - XML не нужна функция восстановления данных, а JSON в маленьком файле передает исключительно простейшие типы, все остальное придется прогонять через восстановление, что при некоторой степени сложности информации будет требовать сложной обработки восстановления.
XML чаще казался бы более предпочтительным вот в каком случае. Он очень хорош там, где информация - упорядочена. Допустим, есть сфера такая ЖКХ. И кто-то очень умный и хорошо подготовленный создает такое пространство имен, например
"http://КоммунальноеХозяйствоРФ.ру/" с кучей подразделов и для каждого подраздела расписывает все используемые там термины и обозначения (имена возможных применяемых элементов), сразу задает им типы значений и т.п. И этот стандарт нормативно утвердить, сделать его стандартом обмена в указанной отрасли.
Для чего это нужно? А это как раз приведет к очень ощутимому уменьшению размеров файлов XML. Не придется при любом обмене передавать большое число сопроводительных данных. У нас же большинство обменов - это попытка научить смежный компьютер читать. Основной объем обменов это не сами значения, а их описание - что это за цифра (буква и т.д.) Обмен неупорядоченной информацией - это всегда более "жирный" траффик.
XML не лучше и не хуже JSON, это просто разные отвертки, с прямым шлицем и с крестообразным. Обычно, в инструментальном ящике лежат и те, и другие....
26. Aphanas 92 16.03.23 07:49 Сейчас в теме
(16)
Делал обмен с биржей Binance, там есть вариант использовать JSON. Можно и без него, кстати. Сделал без него. Думал, если он сериализуется из XDTO - оперировать XDTO, потом сериализовать в JSON. Но получается не очень. При сериализации используется тот же СериализаторXDTO - так написано. Он добавляет в JSON кое-что лишнее.
17. Shaker84 23.02.23 17:00 Сейчас в теме
Может я чего то не пойму, как вы уже упомянули, можно схемы положить в макеты и из макетов создавать фабрику. Почему этот вариант вам не подходит?
18. DemetrKlim 179 23.02.23 18:36 Сейчас в теме
Ну... прежде всего, был здоровый азарт - заставить работать объект СхемаxML. А то объект есть, методов у него - куча, а как он должен работать - узнать было негде.
То, что я счел юы основным "выгодоприобретением", так это - следующее. В макет я должен закачать шаблон... или много шаблонов. И эти шаблоны будут неизменны. А СхемуXML я могу верстать взависимости от каких-то условий. То есть, можно собирать именно ту схему объекта, которая нужна в каждый момент применительно к конкретным данным или условиям.
Ну и из чего-то невероятного. Это будет работать независимо от наличия у пользователя прав на доступ к каталогам или дискам, где база 1С будет размещать временные файлы. Сам не представляю такой ситуации, но - вдруг??)
Вцелом, я постарался дать информацию о той части языка, описание которой никак не мог найти для себя.
Оставьте свое сообщение