Каталог решений - Работа с ФабрикойXDTO без ПакетовXDTO

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

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

В наличии

Как можно использовать Фабрику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;
КонецФункции	
has been added to your cart:
Оформление заказа