![]() |
|
Ошибка преобразования данных XML | ☑ | ||
---|---|---|---|---|
0
Xamio
06.11.14
✎
15:08
|
Пытаюсь получить Объект первой версии документа, сохранённой в справочнике ВерсииОбъектов
код следующий: ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВерсииОбъектов.Объект КАК Документ, | ВерсииОбъектов.ВерсияОбъекта, | ВерсииОбъектов.АвторВерсии |ИЗ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов |ГДЕ | ВерсииОбъектов.Объект = &Ссылка | И ВерсииОбъектов.НомерВерсии = 1"; Запрос.УстановитьПараметр("Ссылка", Документ); // где Документ имеет тип ДокументСсылка.РеализацияТоваровУслуг Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл ВерсияОбъекта = Результат.ВерсияОбъекта.Получить(); ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); ВерсияОбъекта.Записать(ИмяВременногоФайла); ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ИмяВременногоФайла, КодировкаТекста.UTF8); СтрокаXML = ТекстовыйДокумент.ПолучитьТекст(); УдалитьФайлы(ИмяВременногоФайла); ИскОбъект = ПолучитьОбъектИзXML(СтрокаXML); КонецЦикла; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// при выполнении последней строки "ИскОбъект = ПолучитьОбъектИзXML(СтрокаXML)" вылетает ошибка: {Форма.Форма.Форма(626)}: Ошибка при вызове метода контекста (ПрочитатьXML) Объект = ПрочитатьXML(ЧтениеXML); по причине: Ошибка преобразования данных XML: [32,64] Странность в том, что уже после выполнения строки "ВерсияОбъекта.Записать(ИмяВременногоФайла);" для разных документов, в переменную "ИмяВременногоФайла" записывается разная структура документа, а именно меняются местами несколько реквизитов. Всего вариаций две, одна из которых обрабатывается нормально и создаётся объект, а другая отличающаяся от первой порядком следования пары реквизитов - выдаёт ошибку. Выгрузил xsd файл конфигурации, в которой присутствует структура документа РеализацияТоваровУслуг именно та, которая читается. Т.е. метод ПрочитатьXML читает по схеме правильно, но тогда вопрос, почему строка "ВерсияОбъекта.Записать(ИмяВременногоФайла);" записывает в "ИмяВременногоФайла" иногда какую-то левую структуру документа, откуда она берётся? кто может пояснить? |
|||
1
olegves
06.11.14
✎
15:10
|
поменялась структура твоего объекта (убрали реквизиты или поменяли типы)
|
|||
2
Maxus43
06.11.14
✎
15:11
|
когда-то меняли структуру документа, в версия старая хранится, которая уже не сериализуется
|
|||
3
Xamio
06.11.14
✎
15:16
|
кусок структуры которая не читается:
<Сделка xsi:type="DocumentRef.ЗаказПокупателя">d65b47ad-506b-11e4-b8dd-0025908683b4</Сделка> <СуммаДокумента>6388.26</СуммаДокумента> <СуммаВключаетНДС>true</СуммаВключаетНДС> <Склад>5a6de8df-e106-11df-bfc8-7071bc0bad3d</Склад> <СчетУчетаДоходовПоТареБУ>00000000-0000-0000-0000-000000000000</СчетУчетаДоходовПоТареБУ> кусок структуры которая читается: <Сделка xsi:type="DocumentRef.ЗаказПокупателя">cd0d94ad-5f64-11e4-8627-0025908683b4</Сделка> <Склад>5a6de8df-e106-11df-bfc8-7071bc0bad3d</Склад> <СуммаВключаетНДС>true</СуммаВключаетНДС> <СуммаДокумента>9809.14</СуммаДокумента> <СчетУчетаДоходовПоТареБУ>00000000-0000-0000-0000-000000000000</СчетУчетаДоходовПоТареБУ> как можно исправить это? писать костыль который будет менять местами строки в СтрокаXML? или может где старую структуру подправить можно? |
|||
4
Xamio
06.11.14
✎
15:20
|
(2) как то странно она хранится только... от 12.10.2014 версия не сериализуется, от 30.10.2014 сериализуется и от 01.11.2014 опять не сериализуется
|
|||
5
Xamio
06.11.14
✎
15:24
|
в процессе отладки менял местами эти три строчки местами, продолжал выполнение и все сериализовалось..
|
|||
6
13_Mult
06.11.14
✎
15:41
|
(3) Это же разные документы, нет?
|
|||
7
Xamio
06.11.14
✎
15:42
|
(6) да, документы разные
|
|||
8
13_Mult
06.11.14
✎
15:45
|
(7) Там дело не в порядке реквизитов, а скорее в guid
|
|||
9
Xamio
06.11.14
✎
15:47
|
<СчетУчетаДоходовПоТареБУ>00000000-0000-0000-0000-000000000000</СчетУчетаДоходовПоТареБУ>
тут? |
|||
10
13_Mult
06.11.14
✎
15:47
|
(9) DocumentRef.ЗаказПокупателя">d65b47ad-506b-11e4-b8dd-0025908683b4
|
|||
11
13_Mult
06.11.14
✎
15:51
|
(10) Не уверен, но попробуй у той структуры что читается поменять местами реквизиты и прочитать.
|
|||
12
13_Mult
06.11.14
✎
15:53
|
(11) Вообще по "Свойству" должно искать
|
|||
13
Xamio
06.11.14
✎
15:53
|
нет, очень много документов, которые не сериализуются, к примеру этот:
<Сделка xsi:type="DocumentRef.ЗаказПокупателя">4930f239-4243-11e4-a8a1-0025908683b4</Сделка> <СуммаДокумента>10308</СуммаДокумента> <СуммаВключаетНДС>true</СуммаВключаетНДС> <Склад>5a6de8df-e106-11df-bfc8-7071bc0bad3d</Склад> сделка везде разная. дело в том что я в процессе отладки, при обработке реализации с "косячной" структурой, поставил точку останова после строки "ВерсияОбъекта.Записать(ИмяВременногоФайла);" и во временном файле поменял местами строки касающиеся реквизитов СуммаДокумента, СуммаВключаетНДС и Склад. Поменял по аналогии с "рабочей" структурой, продолжил выполнение и нормально получил объект. |
|||
14
13_Mult
06.11.14
✎
16:02
|
(13) может не находит объекта по guid, а механизма создания нового у тебя нет.
|
|||
15
Xamio
06.11.14
✎
16:05
|
(14) у меня есть обработка по поиску объекта по ГУИД, она нормально находит ЗаказПокупателя по гуид
|
|||
16
Xamio
06.11.14
✎
16:47
|
В итоге ничего умнее не придумал как тупо поменять местами косячные строки в ТекстовомФайле. Работает, но если будут более изящные мысли было бы очень любопытно.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////// Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВерсииОбъектов.Объект КАК Документ, | ВерсииОбъектов.ВерсияОбъекта, | ВерсииОбъектов.АвторВерсии |ИЗ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов |ГДЕ | ВерсииОбъектов.Объект = &Ссылка | И ВерсииОбъектов.НомерВерсии = 1"; Запрос.УстановитьПараметр("Ссылка", Документ); // где Документ имеет тип ДокументСсылка.РеализацияТоваровУслуг Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл ВерсияОбъекта = Результат.ВерсияОбъекта.Получить(); ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); ВерсияОбъекта.Записать(ИмяВременногоФайла); ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ИмяВременногоФайла, КодировкаТекста.UTF8); **************** Стр = ТекстовыйДокумент.ПолучитьСтроку(29); Если Найти(Стр, "<СуммаДокумента>") Тогда ТекстовыйДокумент.ЗаменитьСтроку(29, ТекстовыйДокумент.ПолучитьСтроку(31)); ТекстовыйДокумент.ЗаменитьСтроку(31, Стр); КонецЕсли; **************** СтрокаXML = ТекстовыйДокумент.ПолучитьТекст(); УдалитьФайлы(ИмяВременногоФайла); ИскОбъект = ПолучитьОбъектИзXML(СтрокаXML); КонецЦикла; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |