Имя: Пароль:
1C
1С v8
Ошибка преобразования данных XML
0 Staffa
 
17.01.13
10:19
Коллеги, есть XML файл, в котором содержится один документ.
При попытке из него восстановить объект БД, вылетает сабжевая ошибка.
Восстанавливаю таким кодом:

Чтение = Новый ЧтениеXML();
Чтение.УстановитьСтроку(ТекстXML);
Объект = ПрочитатьXML(Чтение, Тип(ПолучитьXMLТип(Чтение).ИмяТипа));

Рушится на ПрочитатьXML. Ошибку выдает где-то в середине файла, причем посередине тега... о_О

Что на данный момент испробовано:
1. Сравнил структуру файла с текстом XML сериализованного документа этого же типа - все одинаковое, порядок, наличие и т.п. реквизитов;
2. Пробовал прочитать с явным указанием типа - неработает;
3. Проверил пореквизитно типы - все совпадает.

Куда еще посмотреть? Хелп ми, плз!
1 Staffa
 
17.01.13
10:29
хм... сериализованный документ этого типа (начисление ЗП сотрудникам организации) обратному восстановлению не поддается...

Такое бывает?
2 Maxus43
 
17.01.13
10:39
заново запиши его в xml, или повторяется каждый раз?
3 Maxus43
 
17.01.13
10:39
клиент-сервер? платформа какая?
4 Serginio1
 
17.01.13
10:42
Попробуй выгружать через фабрику загружаемой конфигурации и объектыXDTO. Только для этого типа документа.
5 Staffa
 
17.01.13
10:45
(2) я этот документ уже руками переписывал ))
(3) клиент-сервер, 8.2.14.519

(4) спасибо, попробую
6 Serginio1
 
17.01.13
10:52
Я делаю так
ФабрикаДляКомплексной = СоздатьФабрикуXDTO("ПутьКСхеме.xsd");
       ТипNull=ФабрикаДляКомплексной.Тип("http://www.w3.org/2001/XMLSchema","anySimpleType");
       СсылкаNull=ФабрикаДляКомплексной.Создать(ТипNull);


ПространствоИмен="http://v8.1c.ru/8.1/data/enterprise/current-config";
Имя="DocumentObject.ПлатежныйОрдерПоступлениеДенежныхСредств";
Объект = Фабрика.Создать(Фабрика.Тип(ПространствоИмен, Имя));
ТипРеал=ФабрикаXDTO.Тип(ПространствоИмен,Имя);
ТекОбъект=  СериализаторXDTO.ЗаписатьXDTO(Док);
ЗаполнитьЗначенияСвойств(Объект,ТекОбъект,,"РасчетныйДокумент,ДокументОснование");


ПространствоИмен="http://v8.1c.ru/8.1/data/enterprise/current-config";
Имя="DocumentTabularSectionRow.ПлатежныйОрдерПоступлениеДенежныхСредств.РеквизитыКонтрагента";
ТипСтр = Фабрика.Тип(ПространствоИмен, Имя);

Для каждого Текстр из ТекРеквизитыКонтрагента Цикл
   Стр=Фабрика.Создать(ТипСтр);
ЗаполнитьЗначенияСвойств(Стр,ТекСтр);

   РеквизитыКонтрагента.Добавить(Стр);
КонецЦикла;    
Фабрика.ЗаписатьXML(ЗаписьXML, Объект);


ТипNULL нужен для реквизитов с множественным типом, у которых реквизит не установлен.
ЗаполнитьЗначенияСвойств работает для реквизитов только с
одним типом. Для них нужно отдельно прописывать

Если Стр.Проект<>Неопределено Тогда
Тип=СериализаторXDTO.XMLТипЗнч(Текстр.Проект);
Стр.Проект=Фабрика.Создать(Фабрика.Тип(Тип.URIПространстваИмен, Тип.ИмяТипа),XMLСтрока(Текстр.Проект));
Иначе
Стр.Проект=СсылкаNull
КонецЕсли;
7 Serg_1960
 
17.01.13
10:55
(0) "Ошибку выдает где-то в середине файла" - в тексте сообщения не "где-то по середине" надеюсь, а конкретная строка и позиция указаны. Есть такое дело?
8 Staffa
 
17.01.13
10:59
(7) естессно, я по этим координатам и смотрел, выдает ошибку на букве "р" в теге <Сотрудник>

Короче, проблема решилась перезагрузкой сеанса...
Так и не понял что это было? Кэш?
9 Serginio1
 
17.01.13
11:24
(8) Скорее всего.