|
УПП при попытке восстановить объект из истории сыпется ошибка при "ПрочитатьXML" | ☑ | ||
---|---|---|---|---|
0
Бешеный заяц
08.01.21
✎
10:06
|
в регистре "ВерсииОбъектов" храниться xml с версией объекта, при попытке восстановиться из неё возникает ошибка, скорее всего связано с тем что состав реквизитов поменялся, подскажите, есть ли возможность принудительно
восстановить по принципу что есть то восстанавливаем, ошибки игнорируем? ниже процедура восстановления для наглядности. Процедура КоманднаяПанель1ВосстановитьВерисию(Кнопка) Если ЭлементыФормы.СписокВерсий.ТекущиеДанные = Неопределено Тогда Предупреждение("Необходимо выбрать версию обьъекта!"); Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Объект",СсылкаНаОбъект); Запрос.УстановитьПараметр("НомерВерсии", Число(ЭлементыФормы.СписокВерсий.ТекущиеДанные.НомерВерсии)); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ВерсииОбъектов.Объект, | ВерсииОбъектов.НомерВерсии, | ВерсииОбъектов.ВерсияОбъекта |ИЗ | РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов |ГДЕ | ВерсииОбъектов.Объект = &Объект | И ВерсииОбъектов.НомерВерсии = &НомерВерсии"; Результат = Запрос.Выполнить().Выгрузить(); ХранилищеДокумента= Результат[0].ВерсияОбъекта; ДвоичныеДанные=ХранилищеДокумента.Получить(); ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); ДвоичныеДанные.Записать(ИмяВременногоФайла); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ИмяВременногоФайла); Объектик = ПрочитатьXML(ЧтениеXML); ЧтениеXML.Закрыть(); Объектик.Записать(); УдалитьФайлы(ИмяВременногоФайла); КонецПроцедуры |
|||
1
ДенисЧ
08.01.21
✎
10:11
|
Объектик = ПрочитатьXML(ЧтениеXML);
Это замени на ручной парсер |
|||
2
Бешеный заяц
08.01.21
✎
10:12
|
(1) в ручную каждый реквизит обрабатывать?
|
|||
3
Бешеный заяц
08.01.21
✎
10:15
|
хотя можно цикл по метаданным устроить + по имени метаданных пытаться значение получать
|
|||
4
Вафель
08.01.21
✎
10:19
|
в типовой бсп как раз таки ручной обход
|
|||
5
Бешеный заяц
08.01.21
✎
10:22
|
(4) где это можно найти? может мне имеет смысл его использовать? в УПП шной бсп уже было такое?
|
|||
6
Вафель
08.01.21
✎
10:24
|
в уппшной наверное нет.
скачай прследнюю бсп и посмотри |
|||
7
RomanYS
08.01.21
✎
10:27
|
(0) >>скорее всего связано с тем что состав реквизитов поменялся
сомнительное предположение, вроде в версии не пишется объект целиком. Может метаданные переименовали ("Удалить..."). Посмотрел бы глазами XML для начала |
|||
8
Вафель
08.01.21
✎
10:32
|
(7) а смысл смотреть?
хмл все равно не начнет читаться |
|||
9
RomanYS
08.01.21
✎
10:38
|
(8) может там и не XML совсем, а ты время тратишь на парсинг.
(7) посмотрел УПП, реально объект пишется :( ЗаписатьXML(ЗаписьXML, Источник, НазначениеТипаXML.Явное); |
|||
10
Бешеный заяц
08.01.21
✎
10:47
|
(6) не нашел ручного в БСП, вот каким способом восстановление идет, правда используют "ЧтениеFastInfoSet" с ним не работал не знаю что за зверь
Функция ВосстановитьОбъектПоXML(ДанныеОбъекта, ТекстСообщенияОбОшибке = "") УстановитьПривилегированныйРежим(Истина); ДвоичныеДанные = ДанныеОбъекта; Если ТипЗнч(ДанныеОбъекта) = Тип("Структура") Тогда ДвоичныеДанные = ДанныеОбъекта.Объект; КонецЕсли; ЧтениеFastInfoSet = Новый ЧтениеFastInfoSet; ЧтениеFastInfoSet.УстановитьДвоичныеДанные(ДвоичныеДанные); Попытка Объект = ПрочитатьXML(ЧтениеFastInfoSet); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Версионирование'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ТекстСообщенияОбОшибке = НСтр("ru = 'Не удалось перейти на выбранную версию. |Возможная причина: версия объекта была записана в другой версии программы. |Техническая информация об ошибке: %1'"); ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Неопределено; КонецПопытки; Возврат Объект; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |