|
Версонифицирование объектов 🠗 (Волшебник 03.07.2020 12:41) | ☑ | ||
---|---|---|---|---|
0
lamme
03.07.20
✎
11:51
|
УТ11.1
версонифицирование - урезанное.или в зачаточном состоянии если в документ добавляется реквизит - то восстановится на версиб\ю объекта ДО ввода этого реквизита - уже не реально. падает тут ЧтениеFastInfoSet.УстановитьДвоичныеДанные(ДвоичныеДанные); Попытка Объект = ПрочитатьXML(ЧтениеFastInfoSet); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Версионирование'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ТекстСообщенияОбОшибке = НСтр("ru = 'Не удалось перейти на выбранную версию. |Возможная причина: версия объекта была записана в другой версии программы. |Техническая информация об ошибке: %1'"); ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат Неопределено; КонецПопытки; Я понимаю = что ДвоичныеДанные в данному случае - это хмл кто-ниб делал переделку этого вот штатного метода в обработку через ЧтениеХМЛ или иное ? те есть версия документа. ввели реквизит в документ а вернуть не получается |
|||
1
PLUT
03.07.20
✎
12:02
|
Знакомая фигня. При изменении метаданных объекта "ломается" платформенное чтение "предыдущей до изменений" версии объекта из двоичных данных.
Переделывал механизьм в УТ10 на чтение/запись сжатого xml. по размерам версия в пожатом xml чуть больше места занимает, чем FastInfoSet, но зато не валится при добавлении/изменении реквизитов метаданных объекта. |
|||
2
lamme
03.07.20
✎
12:04
|
есть пример как вытащить информацию из таких данных ?
|
|||
3
PLUT
03.07.20
✎
12:05
|
(2) канешн есть
|
|||
4
lamme
03.07.20
✎
12:06
|
Если не критчино - поделись
|
|||
5
lamme
03.07.20
✎
12:06
|
*если не критично
|
|||
6
PLUT
03.07.20
✎
12:12
|
давно это было... поищу, поделюсь
|
|||
7
lamme
03.07.20
✎
12:41
|
ждать или нет ?
|
|||
8
Волшебник
модератор
03.07.20
✎
12:41
|
нет такого слова "версонифицирование"
|
|||
9
PLUT
22.07.20
✎
17:29
|
(7) для УТ10.3 лет пять назад
общий модуль ВерсионированиеОбъектов, добавил попытку не пытку: Функция ВосстановитьОбъектПоXML() УстановитьПривилегированныйРежим(Истина); ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище); ЧтениеFastInfoSet = Новый ЧтениеFastInfoSet; Попытка ЧтениеFastInfoSet.УстановитьДвоичныеДанные(ДвоичныеДанные); ЧтениеFastInfoSet.Прочитать(); ЧтениеFastInfoSet.УстановитьДвоичныеДанные(ДвоичныеДанные); Исключение ИмяЗИП = КаталогВременныхФайлов() + Лев(Новый УникальныйИдентификатор(), 8) + ".zip"; ДвоичныеДанные.Записать(ИмяЗИП); ФайлАрхива = Новый ЧтениеZIPФайла(ИмяЗИП); ИмяФайлаXML = КаталогВременныхФайлов() + ФайлАрхива.Элементы[0].ПолноеИмя; ФайлАрхива.Извлечь(ФайлАрхива.Элементы[0], КаталогВременныхФайлов(), РежимВосстановленияПутейФайловZIP.НеВосстанавливать); ФайлАрхива.Закрыть(); Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ИмяФайлаXML); ЧтениеFastInfoSet = Новый ЧтениеXML; ЧтениеFastInfoSet.УстановитьСтроку(Текст.ПолучитьТекст()); Текст = ""; УдалитьФайлы(ИмяФайлаXML); УдалитьФайлы(ИмяЗИП); КонецПопытки; ФлагИсключение = Ложь; Попытка Объект = ПрочитатьXML(ЧтениеFastInfoSet); Исключение ФлагИсключение = Истина; КонецПопытки; Если ФлагИсключение Тогда ФлагИсключение = Ложь; Попытка Результат = РазборПредставленияОбъектаXML(ДвоичныеДанные, Ссылка); Объект=Ссылка.ПолучитьОбъект(); //Шапка Для Каждого Реквизит из Результат.Реквизиты Цикл ИмяРеквизита = Реквизит.НаименованиеРеквизита; Если ИмяРеквизита = "Ref" Тогда Продолжить; КонецЕсли; Если ИмяРеквизита = "DeletionMark" Тогда Объект.ПометкаУдаления = Реквизит.ЗначениеРеквизита; КонецЕсли; Если ИмяРеквизита = "Date" Тогда Объект.Дата = Реквизит.ЗначениеРеквизита; КонецЕсли; Если ИмяРеквизита = "Number" Тогда Объект.Номер = Реквизит.ЗначениеРеквизита; КонецЕсли; Если ИмяРеквизита = "Posted" Тогда Объект.Проведен = Реквизит.ЗначениеРеквизита; КонецЕсли; Если Объект.Метаданные().Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда Иначе Объект[ИмяРеквизита] = Реквизит.ЗначениеРеквизита; КонецЕсли; КонецЦикла; //ТабличныеЧасти Для Каждого ТабЧастьСоответствие Из Результат.ТабличныеЧасти Цикл ИмяТЧ = ТабЧастьСоответствие.Ключ; ТЗ = ТабЧастьСоответствие.Значение; Если ТЗ <> Неопределено и ТЗ.Количество() > 0 Тогда Если ОбщегоНазначения.ЕстьТабЧастьДокумента(ИмяТЧ, Объект.Метаданные()) Тогда Объект[ИмяТЧ].Очистить(); Для Каждого СтрокаТЗ Из ТЗ Цикл НоваяСтрока = Объект[ИмяТЧ].Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЗ); КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; Исключение ФлагИсключение = Истина; КонецПопытки; КонецЕсли; Если ФлагИсключение Тогда ТекстСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат Неопределено; КонецЕсли; Возврат Объект; КонецФункции Функция РазборПредставленияОбъектаXML() // содержит имя метаданного измененного объекта Перем ИмяОбъекта; // Содержит положение маркера в дереве XML. // Требуется для идентификации текущего элемента. Перем УровеньЧтения; // Содержат значения реквизитов справочников / документов ЗначенияРеквизитов = Новый ТаблицаЗначений; ЗначенияРеквизитов.Колонки.Добавить("НаименованиеРеквизита"); ЗначенияРеквизитов.Колонки.Добавить("ЗначениеРеквизита"); ЗначенияРеквизитов.Колонки.Добавить("ТипРеквизита"); ЗначенияРеквизитов.Колонки.Добавить("Тип"); ТабличныеЧасти = Новый Соответствие; ЧтениеXML = Новый ЧтениеFastInfoSet; Попытка ЧтениеXML.УстановитьДвоичныеДанные(ДвоичныеДанные); ЧтениеXML.Прочитать(); ЧтениеXML.УстановитьДвоичныеДанные(ДвоичныеДанные); Исключение ИмяЗИП = КаталогВременныхФайлов() + Лев(Новый УникальныйИдентификатор(), 8) + ".zip"; ДвоичныеДанные.Записать(ИмяЗИП); ФайлАрхива = Новый ЧтениеZIPФайла(ИмяЗИП); ИмяФайлаXML = КаталогВременныхФайлов() + ФайлАрхива.Элементы[0].ПолноеИмя; ФайлАрхива.Извлечь(ФайлАрхива.Элементы[0], КаталогВременныхФайлов(), РежимВосстановленияПутейФайловZIP.НеВосстанавливать); ФайлАрхива.Закрыть(); Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ИмяФайлаXML); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(Текст.ПолучитьТекст()); Текст = ""; УдалитьФайлы(ИмяФайлаXML); УдалитьФайлы(ИмяЗИП); КонецПопытки; // уровень позиции маркера в иерархии XML: // 0 - уровень не задан // 1 - первый элемент (имя объекта) // 2 - описание реквизита или табличной части // 3 - описание строки табличной части // 4 - описание поля строки табличной части УровеньЧтения = 0; ... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |