|
Сериализация Хранилища Значений | ☑ | ||
---|---|---|---|---|
0
Zanzarchik
27.09.13
✎
09:38
|
Всем привет. Подскажите, пожалуйста, как перенести из одной базы в другую данные типа "ХранилищеЗначений". Пробую через xml. Сначала записываю:
ЗаписьХМЛ = Новый ЗаписьXML; ЗаписьХМЛ.ОткрытьФайл("D:\doc.xml"); ЗаписьХМЛ.ЗаписатьОбъявлениеXML(); ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Корневой"); Для Каждого Строка Из Выгрузка Цикл ЗаписьХМЛ.ЗаписатьНачалоЭлемента("Пользователь"); ЗаписьХМЛ.ЗаписатьАтрибут("Пользователь", ЗначениеВСтрокуВнутр(Строка.Пользователь)); ЗаписьХМЛ.ЗаписатьАтрибут("ИмяОбъекта",ЗначениеВСтрокуВнутр(Строка.ИмяОбъекта)); ЗаписьХМЛ.ЗаписатьАтрибут("НаименованиеНастройки",ЗначениеВСтрокуВнутр(Строка.НаименованиеНастройки)); ЗаписьХМЛ.ЗаписатьАтрибут("СохраненнаяНастройка", ЗначениеВСтрокуВнутр(Строка.СохраненнаяНастройка)); ЗаписьХМЛ.ЗаписатьАтрибут("ИспользоватьПриОткрытии", ЗначениеВСтрокуВнутр(Строка.ИспользоватьПриОткрытии)); ЗаписьХМЛ.ЗаписатьАтрибут("СохранятьАвтоматически", ЗначениеВСтрокуВнутр(Строка.СохранятьАвтоматически)); ЗаписьХМЛ.ЗаписатьКонецЭлемента(); КонецЦикла; ЗаписьХМЛ.ЗаписатьКонецЭлемента(); Потом считываю в другой базе: ЧтениеХМЛ = Новый ЧтениеXML; ЧтениеХМЛ.ОткрытьФайл("D:\doc.xml"); Пока ЧтениеХМЛ.Прочитать() Цикл Если ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Если ЧтениеХМЛ.Имя = "Корневой" Тогда Продолжить; КонецЕсли; Строка = тз.Добавить(); Строка.Пользователь = ЗначениеИзСтрокиВнутр(ЧтениеХМЛ.ПолучитьАтрибут("Пользователь")); Строка.ИмяОбъекта = ЗначениеИзСтрокиВнутр(ЧтениеХМЛ.ПолучитьАтрибут("ИмяОбъекта")); Строка.НаименованиеНастройки = ЗначениеИзСтрокиВнутр(ЧтениеХМЛ.ПолучитьАтрибут("НаименованиеНастройки")); Строка.СохраненнаяНастройка = ЗначениеИзСтрокиВнутр(ЧтениеХМЛ.ПолучитьАтрибут("СохраненнаяНастройка")); Строка.ИспользоватьПриОткрытии = ЗначениеИзСтрокиВнутр(ЧтениеХМЛ.ПолучитьАтрибут("ИспользоватьПриОткрытии")); Строка.СохранятьАвтоматически = ЗначениеИзСтрокиВнутр(ЧтениеХМЛ.ПолучитьАтрибут("СохранятьАвтоматически")); КонецЕсли; КонецЦикла; Выдает ошибку: {Форма.Форма.Форма(24)}: Ошибка при вызове метода контекста (ЗначениеИзСтрокиВнутр) Строка.СохраненнаяНастройка = ЗначениеИзСтрокиВнутр(ЧтениеХМЛ.ПолучитьАтрибут("СохраненнаяНастройка")); по причине: Ошибка преобразования по причине: Ошибка формата потока Что делать? Как перенести ХранилищеЗначений из одной базы в другую. |
|||
1
wowik
27.09.13
✎
09:48
|
запись:
ЗаписьXML.ЗаписатьНачалоЭлемента(Пользователь); ЗаписатьXML(ЗаписьXML,ЗначениеХранилища); ЗаписьXML.ЗаписатьКонецЭлемента(); чтение: Значение = ПрочитатьXML(Чтение); как то так вроде. |
|||
2
Zanzarchik
27.09.13
✎
09:49
|
Ок, спасибо (1). Сейчас попробую.
|
|||
3
Maxus43
27.09.13
✎
10:00
|
Если объект Сериализуется - не надо естественно самому ни атрибуты, ни элементы xml писать
|
|||
4
Zanzarchik
27.09.13
✎
10:11
|
(3) там идет выборка из ТаблицаЗначений. Она сериализуется. Значит, мне просто написать ЗаписатьXML(ЗаписьXML, МояТаблицаЗначений)?
|
|||
5
Zanzarchik
27.09.13
✎
10:13
|
(1) Записать - все ок, чтение:
ЧтениеХМЛ = Новый ЧтениеXML; ЧтениеХМЛ.ОткрытьФайл("D:\doc.xml"); Пока ЧтениеХМЛ.Прочитать() Цикл Значение = ПрочитатьXML(ЧтениеХМЛ); КонецЦикла; выдает ошибку: {Форма.Форма.Форма(33)}: Ошибка при вызове метода контекста (ПрочитатьXML) Значение =ПрочитатьXML(ЧтениеХМЛ); по причине: по причине: Значения данного типа не могут быть представлены в XML Что не так делаю? Подскажите, пожалуйста. |
|||
6
Serginio1
27.09.13
✎
10:26
|
СтрокаXML=XMLСтрока(ХранилищеКартинки );
Хранилище = XMLЗначение(Тип("ХранилищеЗначения"), СтрокаXML); |
|||
7
Maxus43
27.09.13
✎
10:32
|
ЕМНИП - был косяк в СП, хранилище не сериализуется может реально? или то ТЗ? не помню точно, но есть в СП очепятка
|
|||
8
Zanzarchik
27.09.13
✎
10:41
|
(6) Спасибо, сделал вот так:
Запись: ЗаписьХМЛ.ОткрытьФайл("D:\doc.xml"); Объект = СериализаторXDTO.ЗаписатьXDTO(Выгрузка); ФабрикаXDTO.ЗаписатьXML(ЗаписьХМЛ, Объект); Чтение: ЧтениеХМЛ = Новый ЧтениеXML; ЧтениеХМЛ.ОткрытьФайл("D:\doc.xml"); Выгрузка = СериализаторXDTO.ПрочитатьXML(ЧтениеХМЛ); Вот так все получается, Выгрузка - это таблица значений, в нее содержится ХранилищеЗначений. |
|||
9
Zanzarchik
27.09.13
✎
10:41
|
Спасибо Всем! Тема закрыта.
|
|||
10
Serginio1
27.09.13
✎
10:50
|
(8) Лучше сразу записывать
СериализаторXDTO.ЗаписатьXML(ЗаписьХМЛ,Выгрузка); Просто были релизы которые по разному записывали ФабрикаXDTO и СериализаторXDTO |
|||
11
Zanzarchik
27.09.13
✎
13:07
|
(10)Спасибо, учту!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |