|
| ||
Бешеный заяц 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 | в уппшной наверное нет. скачай прследнюю бсп и посмотри | ||
RomanYS 7 - 08.01.21 - 10:27 | (0) >>скорее всего связано с тем что состав реквизитов поменялся
сомнительное предположение, вроде в версии не пишется объект целиком. Может метаданные переименовали ("Удалить..."). Посмотрел бы глазами XML для начала | ||
Вафель 8 - 08.01.21 - 10:32 | |||
RomanYS 9 - 08.01.21 - 10:38 | |||
Бешеный заяц 10 - 08.01.21 - 10:47 | (6) не нашел ручного в БСП, вот каким способом восстановление идет, правда используют "ЧтениеFastInfoSet" с ним не работал не знаю что за зверь
Функция ВосстановитьОбъектПоXML(ДанныеОбъекта, ТекстСообщенияОбОшибке = "") УстановитьПривилегированныйРежим(Истина); ДвоичныеДанные = ДанныеОбъекта; Если ТипЗнч(ДанныеОбъекта) = Тип("Структура") Тогда ДвоичныеДанные = ДанныеОбъекта.Объект; КонецЕсли; ЧтениеFastInfoSet = Новый ЧтениеFastInfoSet; ЧтениеFastInfoSet.УстановитьДвоичныеДанные(ДвоичныеДанные); Попытка Объект = ПрочитатьXML(ЧтениеFastInfoSet); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Версионирование'", ОбщегоНазначения.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ТекстСообщенияОбОшибке = НСтр("ru = 'Не удалось перейти на выбранную версию. |Возможная причина: версия объекта была записана в другой версии программы. |Техническая информация об ошибке: %1'"); ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Неопределено; КонецПопытки; Возврат Объект; КонецФункции |
|
Список тем форума |