Имя: Пароль:
1C
 
XDTO таблица значений в XML и обратно в 1С
0 AugustBlack
 
16.09.15
13:54
Привет, осваиваю XDTO,возможно ли выгрузить таблицу значений в XML и загрузить обратно в 1с данным способом?

Я выгрузил таблицу значений в XML с помощью XDTO.
Не получается загрузить обратно в 1С..
(1) Код выгрузки работает успешно, в файле
(2) Код загрузки не понимаю, как загрузить таблицу значений, в данном случае выходит ошибка в (3) как ее исправить, что не так, помогите плз разобраться.

1. Код выгрузки:
Процедура ВыгрузитьНастройкиНажатие(Элемент)
                Режим = РежимДиалогаВыбораФайла.Сохранение;
                ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(Режим);
                ДиалогСохраненияФайла.ПолноеИмяФайла = "РезервноеКопированиеНастроек_"+Формат(ТекущаяДата(),"ДФ=dd_MM_yyyy");
                Фильтр = "Текст(*.XML)|*.XML";                
                ДиалогСохраненияФайла.Фильтр = Фильтр;
                ДиалогСохраненияФайла.МножественныйВыбор = Ложь;
                ДиалогСохраненияФайла.Заголовок = "Выберите файл";
                Если ДиалогСохраненияФайла.Выбрать() Тогда
                               ПутьКФайлу = ДиалогСохраненияФайла.ПолноеИмяФайла;
                               Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
                               XML = Новый ЗаписьXML;
                               XML.ОткрытьФайл(ПутьКФайлу);
                               Данные = НастройкиСтрок.Выгрузить();
                               Сериализатор.ЗаписатьXML(XML,Данные);
                КонецЕсли;
КонецПроцедуры

2. Код загрузки:
Процедура ЗагрузитьНастройкиНажатие(Элемент)
                ФлагИзменения = Истина;
                Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
                //Выбор файла
                Режим = РежимДиалогаВыбораФайла.Открытие;
                ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
                ДиалогОткрытияФайла.ПолноеИмяФайла = "";
                Фильтр = "Текст(*.XML)|*.XML";
                ДиалогОткрытияФайла.Фильтр = Фильтр;
                ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
                ДиалогОткрытияФайла.Заголовок = "Выберите файл для загрузки";
                Если ДиалогОткрытияФайла.Выбрать() Тогда
                               ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
                               ЧтениеXML = Новый ЧтениеXML;
                               ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
                               ЧтениеXML.ПерейтиКСодержимому();
                               ЧтениеXML.Прочитать();
                               Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Цикл
                                               ТЗ = Сериализатор.ПрочитатьXML(ЧтениеXML);
                               КонецЦикла;
                КонецЕсли;
КонецПроцедуры
            

3. Ошибка:    
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/core}column          Форма: Элемент            Тип: {http://www.w3.org/2001/XMLSchema}anyType
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/core}Name             Форма: Элемент            Тип: {http://www.w3.org/2001/XMLSchema}string
1 AugustBlack
 
16.09.15
13:56
ТЗ = Сериализатор.ПрочитатьXML(ЧтениеXML); - конкретно не ясна данная часть, не понимаю как читается из XML сериализатором
2 Serginio1
 
16.09.15
14:10
Если ты выгрузил как в 1 то тебе не нужно
ЧтениеXML.Прочитать();
                               Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Цикл

Это  делается когда выгружается несколько объектов и прописывается корневой элемент
3 ssh-2013
 
16.09.15
14:18
Пример передача ТЗ через xml

    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТЗИсточник);
    СтрокаXML = ЗаписьXML.Закрыть();
    
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(СтрокаXML);
    ТЗПриемник = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
    ЧтениеXML.Закрыть();
4 AugustBlack
 
16.09.15
14:28
(2) (3) спасибо разобрался, вот код кому пригодится может:
Процедура ЗагрузитьНастройкиНажатие(Элемент)
                ФлагИзменения = Истина;
                //Выбор файла
                Режим = РежимДиалогаВыбораФайла.Открытие;
                ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
                ДиалогОткрытияФайла.ПолноеИмяФайла = "";
                Фильтр = "Текст(*.XML)|*.XML";
                ДиалогОткрытияФайла.Фильтр = Фильтр;
                ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
                ДиалогОткрытияФайла.Заголовок = "Выберите файл для загрузки";
                Если ДиалогОткрытияФайла.Выбрать() Тогда
                               ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
                               ЧтениеXML = Новый ЧтениеXML;
                               ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
                               Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
                               ТЗ = Сериализатор.ПрочитатьXML(ЧтениеXML,Тип("ТаблицаЗначений"));
                               ЧтениеXML.Закрыть();
                КонецЕсли;
                
                НастройкиСтрок.Очистить();
                НастройкиСтрок.Загрузить(ТЗ);
КонецПроцедуры
5 Живой Ископаемый
 
16.09.15
14:31
типовыеОтчеты.СериализоватьОбъектXDTO(тзБуф);
тзБуф = типовыеОтчеты.ПрочитатьОбъектXDTO (строкаХМЛпрочитаннаяизфайла);
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан