ОбъектXDTO Ошибка преобразования данных

1. ketr 128 09.12.21 15:53 Сейчас в теме
Бьюсь второй день, не могу понять что не так. Вот такой простенький код:

Запись = Новый ЗаписьXML;            
Запись.УстановитьСтроку("UTF-8");
Запись.ЗаписатьНачалоЭлемента("TicketSeats");
Запись.ЗаписатьСоответствиеПространстваИмен("", "http://www.unistation.ru/xdto");
Запись.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema");
Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
			
Запись.ЗаписатьАтрибут("type", "http://www.w3.org/2001/XMLSchema-instance", "TicketSeats");
			
Запись.ЗаписатьНачалоЭлемента("Elements");
			
			
Запись.ЗаписатьНачалоЭлемента("SeatNum");
Запись.ЗаписатьТекст(Билеты[0].Место);  
Запись.ЗаписатьКонецЭлемента(); //SeatNum 
 									 
Запись.ЗаписатьКонецЭлемента(); //Elements
Запись.ЗаписатьКонецЭлемента(); //TicketSeats	
			
СтрокаXML = Запись.Закрыть();
			
ЧтениеXMLСхемы.УстановитьСтроку(СтрокаXML);

ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXMLСхемы);
Показать


Выдает ошибку:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.unistation.ru/xdto}TicketSeats - [5,3]
Проверка дополнительного свойства:
форма: Элемент
имя: {http://www.unistation.ru/xdto}Elements
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://www.unistation.ru/xdto}TicketSeats


Если убираю строку
Запись.ЗаписатьАтрибут("type", "http://www.w3.org/2001/XMLSchema-instance", "TicketSeats");
То всё норм, ошибки нет.

Но дело в том, что мне нужна эта строка
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
15. Sashares 35 09.12.21 17:54 Сейчас в теме +0.5 $m
(14)Вероятно с тем, что у вас есть пакет xdto в метаданных с типом "TicketSeats".
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. Sashares 35 09.12.21 16:08 Сейчас в теме
(1)А в схеме xdto что написано?
Если у вас есть схема, зачем использовать ЗаписьXML, может сразу через фабрику и записывать?

Если убираю строку
Запись.ЗаписатьАтрибут("type", "http://www.w3.org/2001/XMLSchema-instance", "TicketSeats");
То всё норм, ошибки нет.

Но дело в том, что мне нужна эта строка


А зачем вам эта строка?
5. ketr 128 09.12.21 16:12 Сейчас в теме
(4) в том то и дело что схемы нет, надо получить на выходе объект XDTO такого содержания:

< TicketSeats xmlns= "http://www.unistation.ru/xdto"
xmlns:xs= "http://www.w3.org/2001/XMLSchema"
xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:type= "TicketSeats" >
< Elements >
< SeatNum >0</ SeatNum >
</ Elements >
</ TicketSeats >

я не придумал ничего другого кроме как выше описал
6. ketr 128 09.12.21 16:14 Сейчас в теме
(5)
xsi:type= "TicketSeats"


Если бы не вот этот кусок
xsi:type= "TicketSeats"

то всё было бы супер - без него работает
7. Sashares 35 09.12.21 16:15 Сейчас в теме
(5) И все таки, зачем вам строка xsi:type= "TicketSeats"?
Для нормальной работы xml достаточно атрибута xmlns= "http://www.unistation.ru/xdto", остальные атрибуты не нужны.
8. ketr 128 09.12.21 16:19 Сейчас в теме
(7) Если убираю, то с объектом XDTO всё ок

но тогда получаю другую ошибку при его передаче:

Несоответствие типов XDTO:
Свойство является списковым
Код ошибки: Client
Техническая информация:
<detail xmlns:soap="http://schemas.xmlsoap.org/soap/envelope">
9. Sashares 35 09.12.21 16:24 Сейчас в теме
(8) Если вы используете ws-ссылку то из нее можно получить фабрику и создать объект нужного типа.
10. ketr 128 09.12.21 16:38 Сейчас в теме
(9) я в этом не очень силен, но попробую) отпишусь
11. Sashares 35 09.12.21 16:40 Сейчас в теме
17. ketr 128 10.12.21 12:18 Сейчас в теме
(9) Как же вы были правы. Всё делается намного проще
Я какой-то велосипед изобретал

вот весь код в итоге:
ТипWSПараметраTicketSeats 
 = СозданиеПрокси.Результат.ФабрикаXDTO.Пакеты.Получить("http://www.unistation.ru/xdto").Получить("TicketSeats"); 
			
ТипWSПараметраTicketSeat = СозданиеПрокси.Результат.ФабрикаXDTO.Пакеты.Получить("http://www.unistation.ru/xdto").Получить("TicketSeat");
			
WSПараметрTicketSeats  = СозданиеПрокси.Результат.ФабрикаXDTO.Создать(ТипWSПараметраTicketSeats);			
WSПараметрTicketSeat =  СозданиеПрокси.Результат.ФабрикаXDTO.Создать(ТипWSПараметраTicketSeat);
			
WSПараметрTicketSeat.ParentTicketSeatNum = "0";
WSПараметрTicketSeats.Elements.добавить(WSПараметрTicketSeat);
Показать


и передача СозданиеПрокси.Результат.AddTickets(WSПараметрTicketSeats);
18. пользователь 10.12.21 12:58
Сообщение было скрыто модератором.
...
2. Азбука Морзе 106 09.12.21 15:56 Сейчас в теме
Убери
Запись.ЗаписатьКонецЭлемента(); //TicketSeats
3. ketr 128 09.12.21 16:01 Сейчас в теме
(2) ещё хуже стало)
теперь такая ошибка:

Ошибка разбора XML: - [4,13]
Фатальная ошибка:
Extra content at the end of the document
12. ElGatoGris 09.12.21 16:58 Сейчас в теме
Используйте фабрику XDTO.
ПакетXDTO = ФабрикаXDTO.Пакеты.Получить("http://www.unistation.ru/xdto")

Далее из пакета получается тип объекта XDTO, а фабрика создаёт экземпляр объекта XDTO.
Тип = ПакетCML.Получить("ИмяТипа");
Объект= ФабрикаXDTO.Создать(Тип );


На мой взгляд здесь неплохо описано https://infostart.ru/1c/articles/167459/
13. slavutich2 20 09.12.21 17:29 Сейчас в теме +0.5 $m
Очень странно. Попробовал прогнать ваш код. У меня все работает. Создается XTDO объект.
Единственное дописал строчку
ЧтениеXMLСхемы = новый ЧтениеXML;
перед ЧтениеXMLСхемы.УстановитьСтроку(СтрокаXML);
14. ketr 128 09.12.21 17:52 Сейчас в теме
(13)
Действительно, интересно!
Попробовал на базе УПП и Документооборот - ошибки действительно нет!
А в базе Управление автотранспортом, редакция 1.0 - есть!

Есть мысли с чем это может быть связано?
15. Sashares 35 09.12.21 17:54 Сейчас в теме +0.5 $m
(14)Вероятно с тем, что у вас есть пакет xdto в метаданных с типом "TicketSeats".
16. ketr 128 09.12.21 18:01 Сейчас в теме
(15)
TicketSeats

Елки палки, точно! вот где собака зарыта!

Спасибо вам обоим за помощь!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот