Имя: Пароль:
1C
1С v8
Как преобразовать выборку (дерево) в XML?
0 ИС-2
 
naïve
02.04.14
07:18
Вопрос для меня, новый. Пока ответа не нашел. Ручками описывать XML файл не хочу.

Есть иерархическая выборка. Как из нее быстро получить XML?
1 ДенисЧ
 
02.04.14
07:20
herfvb
2 ДенисЧ
 
02.04.14
07:20
в смысле руками
3 Рэйв
 
02.04.14
07:22
ЗаписьXML=Новый ЗаписьXML();
ЗаписьXML.ОткрытьФайл("c:\doc.xml");
ЗаписьXML.ЗаписатьНачалоЭлемента("Root");

ЗаписатьXML(ЗаписьXML,Выборка);

ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();
4 Рэйв
 
02.04.14
07:22
это если быстро
5 ИС-2
 
naïve
02.04.14
07:28
(3) спс, попробую
6 ИС-2
 
naïve
02.04.14
07:32
а СКД можно так вывести?
7 Рэйв
 
02.04.14
07:35
не пробовал
8 ИС-2
 
naïve
02.04.14
08:11
(4) ошибка

Значения данного типа не могут быть представлены в XML

в справке выборку вообще нельзя записать этим методом
9 ИС-2
 
naïve
02.04.14
08:47
ап
10 mzelensky
 
02.04.14
09:02
(0) Уже бы руками описал. Делов то...
11 mehfk
 
02.04.14
09:06
(9) Ты еще ждешь, что кто-то просто так за тебя напишет?
12 ИС-2
 
naïve
02.04.14
09:21
(10) лень двигатель прогресса

задачу можно сформулировать по другому:
надо сериализовать выборку
13 mehfk
 
02.04.14
09:24
Дерево значений сериализуй
14 ИС-2
 
naïve
02.04.14
09:52
(13) попробую. Но в ЗаписатьXML нет поддержки этого типа.

Как еще можно сериализовать?
15 mehfk
 
02.04.14
09:59
Зато есть в СериализаторXDTO
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам));
16 ИС-2
 
naïve
03.04.14
13:30
а теперь обратная задача - есть XML файл, как быстро получить его структуру в виде дерева или подобного...
17 Лефмихалыч
 
03.04.14
13:38
(0) Вот не оптимальный метод. Доработай напильником

Процедура ЗаписатьСтроку(СтрокаДерева, ЗаписьXML, КолонкиДерева)
  Для каждого Строка из СтрокиДерева.Строки Цикл
    ЗаписьXML.ЗаписатьНачалоЭлемента("СтрокаДерева");
    Для каждого Колонка из КолонкиДерева Цикл
      ЗаписьXML.ЗаписатьАтрибут(Колонка.Имя, Строка[Колонка.Имя]);
    КонецЦикла;
    Если Строка.Строки.Количество() > 0 Тогда
      ЗаписатьСтроку(Строка, ЗаписьXML, КолонкиДерева);
    КонецЕсли;
    ЗаписьXML.ЗаписатьКонецЭлемента();
КонецПроцедуры

Для каждого Строка из Дерево.Строки Цикл
   ЗаписатьСтроку(Строка, ЗаписьXML, Дерево.Колонки);
18 Serginio1
 
03.04.14
13:42
19 ИС-2
 
naïve
03.04.14
14:00
(18) слишком серьезно...

Кажись через  COMОбъект(Msxml2.DOMDocument.3.0) можно обратиться к любому элементу. Для моей задачи подхиодит, хоть и избыточно
20 m-serg74
 
03.04.14
14:07
(19) а СериализаторXDTO.ПрочитатьXML(ЧтениеXML); чем не подходит?
Ошибка? Это не ошибка, это системная функция.