|
Загрузка 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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |