Работа с Фабрикой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! 10%

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    138008    759    292    

404

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

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

45650 руб.

15.04.2019    70309    173    146    

116

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

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

28000 руб.

15.12.2021    21743    144    40    

104

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

Переход и перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:ERP Управление предприятием 2.5 и 1С:Комплексную автоматизацию 2.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.227.x), ERP 2.5 (2.5.16.x), КА 2.5 (2.5.16.x) .

28000 руб.

24.06.2020    62310    50    27    

80

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

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

28000 руб.

23.07.2020    48365    208    64    

170

Перенос данных 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, почту.

14580 руб.

18.02.2016    184464    572    509    

516

SALE! %

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

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

45650 27000 руб.

24.04.2015    192357    140    241    

272

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

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

45650 руб.

10.07.2018    69101    46    126    

49
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 159 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 159 17.02.23 07:10 Сейчас в теме
(5)Да, интересно. Спасибо большое! Я бы сказал, что Вашим вариантом было бы проще пользоваться.
Светлый ум; +1 Ответить
21. DemetrKlim 159 15.03.23 20:41 Сейчас в теме
(5)Потратил некое время. Не скрою, сначала вариант с Моделью мне понравилась. Я подразумевал, что она имеет такой же богатый функционал, как и СхемаXML. Пробовал реализовать свое решение через Модель - не понравилось. Описать сложную модель оказалось затруднительным. Так и не понял, как создавать безымянный тип под которым можно дальше ветвить свойства. Как я понял, тип без имени вообще никак не может быть использован?
Пока вернулся к Схеме.
22. Aphanas 92 16.03.23 06:19 Сейчас в теме
(21)
Не исключаю, что модель имеет ограниченные возможности. Не припомню сейчас в точности, можно ли вообще там создать тип без имени. Но помню, что тип без имени удавалось использовать, если он уже создан и присутствует в фабрике. Можно было создать объект, вроде бы.
Также, помню были какие-то проблемы со схемами, в которых не указано пространство имен.

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

На счет XPath, честно скажу не использовал.
С другой стороны все есть текст и регуляки для чего-то подвезли.
12. DemetrKlim 159 17.02.23 16:13 Сейчас в теме
(11) XPath очень рекомендую! Это как язык запросов для XML Если доведется работать с большими текстами XML со сложной структурой, то там без парсера просто делать будет нечего. Я XPath использую в подавляющем большинстве случаев работы с XML.
Может быть, следующую статью про это и напишу. Там есть особенности работы такого объекта, как РазыменовательПространствИмен.
13. skif47 350 17.02.23 19:50 Сейчас в теме
(8) в Json массив - это всегда массив
14. DemetrKlim 159 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 159 21.02.23 07:56 Сейчас в теме
(15) А есть какая-то жесткая необходимость в использовании JSON? Понятно, что чем примитивней язык, тем он более универсален и "межплатформеннен". Жестами людей даже собаки понимают) Что дает JSON, кроме меньшего размера полученного файла? Это я применительно к 1С спросил. Может, разработчики 1С потому и слепили наспех хоть какой-то инструментарий (подвесили в XDTO хоть какие-то методы для JSON) по обслуживанию JSON-стандарта, потому что любой стандарт, не обеспеченный инструментарием, мало кому пригодиться.
19. skif47 350 24.02.23 21:19 Сейчас в теме
(16) де-факто это стандарт в большинстве веб-сервисов на сегодня.
20. DemetrKlim 159 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 159 23.02.23 18:36 Сейчас в теме
Ну... прежде всего, был здоровый азарт - заставить работать объект СхемаxML. А то объект есть, методов у него - куча, а как он должен работать - узнать было негде.
То, что я счел юы основным "выгодоприобретением", так это - следующее. В макет я должен закачать шаблон... или много шаблонов. И эти шаблоны будут неизменны. А СхемуXML я могу верстать взависимости от каких-то условий. То есть, можно собирать именно ту схему объекта, которая нужна в каждый момент применительно к конкретным данным или условиям.
Ну и из чего-то невероятного. Это будет работать независимо от наличия у пользователя прав на доступ к каталогам или дискам, где база 1С будет размещать временные файлы. Сам не представляю такой ситуации, но - вдруг??)
Вцелом, я постарался дать информацию о той части языка, описание которой никак не мог найти для себя.
Оставьте свое сообщение