Имя: Пароль:
1C
1С v8
Сохранить объект XDTO
0 temrmal
 
08.08.22
11:40
Добрый день!
Необходимо сохранить объектXDTO в реквизит документа, для того чтобы потом его можно было восстановить.
Проблема - после сериализации в XML, потом обратно в XDTO слетают типы значений как я понял. И при попытке добавить данный "объектXDTO" в определенный "пакетXDTO", потомком которого изначальный XDTO являлся, программа ругается что тип восстановленного из XML строки XDTO не подходит.

1. СОХРАНЯЮ (ДанныеXDTO)

ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку();
ПараметрыОбмена.МояФабрикаXDTO.ЗаписатьXML(ЗаписьXML,ДанныеXDTO,,ПараметрыОбмена.ПространствоИмен,,НазначениеТипаXML.Явное);
ЗначениеXML = ЗаписьXML.Закрыть();

2. ЧИТАЮ

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ТекДокумент.Объект.РеквизитыОплаты.Получить(),); - это строку XML получаю
ТипДокументXDTO = ПараметрыОбмена.МояФабрикаXDTO.Тип(ПараметрыОбмена.ПространствоИмен,"Документ");
XDTOДокумент = ПараметрыОбмена.МояФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

XDTOКонтейнер.Документ.Добавить(XDTOДокумент); - ВОТ ТУТ ОШИБКА

Несоответствие типов XDTO:
Тип '{http://www.w3.org/2001/XMLSchema}anyType' не соответствует типу '{urn:1C.ru:commerceml_3}Документ'
Тип свойства не соответствует типу значения

Как записать XML с правильной типизацией. Вроде и пространство имен указал при записиXML
1 Жан Пердежон
 
08.08.22
13:59
XDTOДокумент.Тип() - ?
2 Жан Пердежон
 
08.08.22
14:12
ну и какой ДанныеXDTO.Тип()
3 temrmal
 
10.08.22
16:13
При чтении Тип  "XDTOДокумент" получается такой '{http://www.w3.org/2001/XMLSchema}anyType' . Я так понимаю при записи XML файла из Типа '{urn:1C.ru:commerceml_3}Документ' превращается '{http://www.w3.org/2001/XMLSchema}anyType'. Хотя через фабрику записываю и указываю пространство имен.

Если в чтении пишу так:
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ТекДокумент.Объект.РеквизитыОплаты.Получить(),); - это строку XML получаю

ТипДокументXDTO = ПараметрыОбмена.МояФабрикаXDTO.Тип(ПараметрыОбмена.ПространствоИмен,"Документ"); - тут тип нужный получается

XDTOДокумент = ПараметрыОбмена.МояФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипДокументXDTO); - вот тут явно тип указываю, с надеждой преобразования автоматически, то ошибку дает тоже

Как типизацию при записи XML сохранить?
4 rsv
 
10.08.22
20:23
(0) может просто тип реквизита строка - и записать туды строку xml?
5 temrmal
 
10.08.22
21:51
Нет, мне нужно чтобы
XDTOДокумент = ПараметрыОбмена.МояФабрикаXDTO.ПрочитатьXML(ЧтениеXML); был с типом {urn:1C.ru:commerceml_3}Документ, какой он бывает перед преобразованием в XML. а после обратного преобразования из XML XDTOДокумент имеет те же свойства, что и у XDTO с типом {urn:1C.ru:commerceml_3}Документ, но вот тип становится '{http://www.w3.org/2001/XMLSchema}anyType'.

Либо как то преобразовать обойдя все свойства.

Мне кажется при записи XDTO теряется тип

Вот что получается после записи в XML из XDTO нужного типа

<anyType xmlns="urn:1C.ru:commerceml_3" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:anyType">
    <Ид xmlns="">3</Ид>
    <Номер xmlns="">3</Номер>
    <Дата xmlns="">2022-08-08</Дата>
    <ХозОперация xmlns="">Выплата безналичных денег</ХозОперация>
    <Роль xmlns="">Продавец</Роль>
    <Валюта xmlns="">руб</Валюта>
    <Курс xmlns="">1</Курс>
    <Сумма xmlns="">607.0000</Сумма>
    <НомерВерсии xmlns="">15</НомерВерсии>
    <Основание xmlns="">70</Основание>
    <Контрагенты xmlns="">
        <Контрагент>
            <Ид>3#anonymous_xF8UlP67A# Розничный покупат</Ид>
6 Жан Пердежон
 
11.08.22
15:31
(5) ответь на вопрос в (2)