Имя: Пароль:
1C
 
Загрузка XML через фабрику XDTO, если в базе приемнике нет XDTO пакета
0 ИС-2
 
naïve
31.01.25
11:31
Имеется формирование данных с выгрузкой по Пакету XDTO "мк_ПланВидовРасчета".

Но в базе приемника нет такого Пакета XDTO.


	Выборка = МК_ИзмененияКонфигурации.ВыполнитьЗапросПривилигировано(Запрос).Выбрать();
	МассивПланВидовРасчетаXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core , "Array"));	
	
	Пока Выборка.Следующий() Цикл
		ПланВидовРасчетаXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(Метаданные.ПакетыXDTO.мк_ПланВидовРасчета.ПространствоИмен,"мк_ПланВидовРасчета"));//Метаданные.ПакетыXDTO.мк_ПланВидовРасчета.Имя)"мк_ПланВидовРасчета"); Выборка.ПланВидаРасчета.метаданные().Имя));
		ПланВидовРасчетаXDTO.Ссылка = СериализаторXDTO.XMLСтрока(Выборка.ПланВидаРасчета);  
		ПланВидовРасчетаXDTO.ТипВУПП = Выборка.ПланВидаРасчета.Метаданные().Имя;
		ЗаполнитьЗначенияСвойств(ПланВидовРасчетаXDTO,Выборка,,"ГУИД,ТипВУПП");	
		ПланВидовРасчетаXDTO.ГУИД = Строка(Выборка.ГУИД);
		
		МассивПланВидовРасчетаXDTO.value.Добавить(ПланВидовРасчетаXDTO);
	КонецЦикла;		  
	
	ЗаписьXML = Новый ЗаписьXML();
	ЗаписьXML.УстановитьСтроку();
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, МассивПланВидовРасчетаXDTO);
	ТекстПланВидовРасчета = ЗаписьXML.Закрыть();
    

Если бы был пакет в базе приемника, то написал простую загрузку

	ЧтениеXML = Новый ЧтениеXML();
	ЧтениеXML.УстановитьСтроку(ТекстПланВидовРасчета);
	
	ТипXDTO_ПланВидовРасчета = ФабрикаXDTO.Тип(Метаданные.ПакетыXDTO.мк_ПланВидовРасчета.ПространствоИмен,"мк_ПланВидовРасчета");
	ТипXDTO_Массив = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core , "Array");
   	МассивXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипXDTO_Массив);//Метаданные.ПакетыXDTO.мк_ПланВидовРасчета.Имя)"мк_ПланВидовРасчета"); Выборка.ПланВидаРасчета.метаданные().Имя));
	
	Для Каждого Эл из МассивXDTO.value Цикл 
			
	КонецЦикла;	


Но там нет такого пакета.

1) Как можно выгрузить пакет программно
2) Как создать пакет для фабрики, если нет в конфигурации приемнике пакета. Т.е что надо написать вместо Метаданные.ПакетыXDTO.мк_ПланВидовРасчета.ПространствоИмен,"мк_ПланВидовРасчета"
ФабрикаXDTO.Тип(Метаданные.ПакетыXDTO.мк_ПланВидовРасчета.ПространствоИмен,"мк_ПланВидовРасчета");
1 Asmody
 
31.01.25
11:45
если подходящей фабрики XDTO нет, то можно создать свою.
на основе набора схем XML.

вот тут можно поизучать https://infostart.ru/1c/articles/716581/
2 ИС-2
 
naïve
31.01.25
12:16
спасибо, посмотрю. Думал в пару строк решается задача...
3 ИС-2
 
naïve
05.02.25
08:27
Вот хорошая статья

XDTO - часть 3
https://infostart.ru/1c/articles/171019/

Объясните, где искать документацию на работу с объектами XDTO.

Надо сформировать структуру с текстом фабрики  и самими данными

Вылетает с ошибкой "Несоответствие типов (параметр номер '1')". А какой должен быть параметр ? где прочитать. Примеров не нахожу


    ДанныеДляОтправки = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core" , "Structure"));    
    ДанныеДляОтправки.Property.Вставить("ФабрикаXDTO",ТекстФабрикаXDTO);
4 Asmody
 
05.02.25
09:39
(3) так не получится.
вот так сделай:

стр = Новый Структура("ФабркаXDTO", ТекстФабрикаXDTO);
данныеДляОтправки = СериализаторXDTO.ЗаписатьXDTO(стр);
5 ИС-2
 
naïve
05.02.25
09:42
туплю. Это просто списокXDTO и доступны его свойства и методы
6 Asmody
 
05.02.25
09:56
(5) судя по тому, что показывает инспектор на объекте XDTO, который получается из структуры, там в property список объектов XDTO, у которых даже тип явно не указан. Т.е., его такой, конечно, можно собрать, наверно, но зачем?
7 eddy_n
 
05.02.25
11:35
Некоторые умельцы вообще не заморачиваются с XDTO. Используют WEB-сервис чисто как транспорт по передаче текстовой инфы, разделенной разделителями.
8 Dzenn
 
05.02.25
11:42
Чтобы освоить работу с XDTO, нужно начать работу с XDTO, другого способа нет, слишком уж абстрактный механизм, чтобы всосать его только через теорию
9 Homer
 
05.02.25
11:45
10 eddy_n
 
05.02.25
12:12
От xml надо уходить. Слишком монструозно и сложно. Никто его конечно не отменит. Но зачем вся эта кухня, если есть более простые решения?
11 eddy_n
 
05.02.25
12:13
Слишком много посредников в реализации. А посредников нигде не любят.
12 Eiffil123
 
05.02.25
12:58
(0) выгрузите из базы-источника пакет xdto в текстовый файл.
И добавьте его например в макет в базе-приемнике.

// загрузка схемы
ИмяФайлаXSD = ПолучитьИмяВременногоФайла("xsd");
ПакетXSD = ПолучитьМакет("имя_макета");
ПакетXSD.Записать(ИмяФайлаXSD);
Фабрика = СоздатьФабрикуXDTO(ИмяФайлаXSD);
УдалитьФайлы(ИмяФайлаXSD);

// чтение данных через фабрику
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл("имяфайла.xml");
Данные = Фабрика.ПрочитатьXML(Чтение); // тут прочитали
Чтение.Закрыть();
13 Eiffil123
 
05.02.25
13:26
(11) про каких посредников речь? xdto/xsd - это просто правила формата обмена, не более.
14 eddy_n
 
05.02.25
13:31
(13) о какой простоте идёт речь, я не не понял? К чему все эти xsd, xdto, если уже давно можно обойтись без этих 'сущностей'
15 eddy_n
 
05.02.25
13:32
(13) Фабрики, заводы - зачем все  это?
16 Eiffil123
 
05.02.25
13:33
(14) а зачем обходиться без этих сущностей?

так то можно обходиться и без 1С, и вести бухгалтерию в экселе, или даже в текстовом блокноте.

Вы что например предлагаете? и какие преимущества предложенных вами решений интеграции?
17 Asmody
 
05.02.25
13:40
(7) ты "приедешь" со своими "разделителями" как только тебе кроме данных потребуется семантику передать. и контроль обеспечить.
json тоже задумывали как простую альтернативу xml. и чего? пришли к https://json-schema.org/
18 Asmody
 
05.02.25
13:41
(15) просто того, кто писал этот блок, в тёмном переулке покусала java