|   |   | 
| 
 | Ошибка преобразования данных 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); КонецЦикла; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |