1С 8.3 Выгрузка запроса в XML в виде иерархии
Данные > Примеры кода 1С > 1С 8.3 Запросы
Перейти в раздел примеры кода 1С 8.3:
Преобразование запроса с иерархией в xml в 1С 8.3:
&НаСервере
Процедура Выгрузка_запроса_в_XML_с_иерархией(ГруппаМатериалы)
XML = Новый ЗаписьXML;
XML.ОткрытьФайл("D:\vygruzka_zaprosa.xml", "UTF-8");
XML.ЗаписатьОбъявлениеXML();
XML.ЗаписатьНачалоЭлемента("ОстаткиМатериалов");
Запрос = Новый Запрос("ВЫБРАТЬ
| МатериалыНаСкладах.Период КАК Период,
| МатериалыНаСкладах.Регистратор КАК Регистратор,
| МатериалыНаСкладах.Материалы КАК Материалы,
| МатериалыНаСкладах.Количество КАК Количество
|ИЗ
| РегистрНакопления.МатериалыНаСкладах КАК МатериалыНаСкладах
|ГДЕ
| МатериалыНаСкладах.Период МЕЖДУ &НачДата И &КонДата
| И МатериалыНаСкладах.Материалы В ИЕРАРХИИ(&ГруппаМатериалы)
|ИТОГИ ПО
| Регистратор");
Результат = Запрос.Выполнить();
ИерархияДерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ОбходУровней(ИерархияДерево.СтрокиРезультатаЗапроса, XML);
XML.ЗаписатьКонецЭлемента();
XML.Закрыть();
КонецПроцедуры
&НаСервере
Процедура ОбходУровней(СтрокиРезультатаЗапроса, XML)
Для Каждого Строка Из СтрокиРезультатаЗапроса Цикл
Если ПустаяСтрока(Строка(Строка.Материалы)) Тогда //Итог если истина
XML.ЗаписатьНачалоЭлемента("Уровень");
XML.ЗаписатьАтрибут("Период", Строка(Строка.Период));
XML.ЗаписатьАтрибут("Регистратор", Строка(Строка.Регистратор));
XML.ЗаписатьАтрибут("Количество", Строка(Строка.Количество));
ОбходУровней(Строка.СтрокиРезультатаЗапроса, XML); //рекурсия
XML.ЗаписатьКонецЭлемента();
Иначе
XML.ЗаписатьНачалоЭлемента("Уровни");
XML.ЗаписатьАтрибут("Период", Строка(Строка.Период));
XML.ЗаписатьАтрибут("Регистратор", Строка(Строка.Регистратор));
XML.ЗаписатьАтрибут("Материалы", Строка(Строка.Материалы));
XML.ЗаписатьАтрибут("Количество", Строка(Строка.Количество));
ОбходУровней(Строка.СтрокиРезультатаЗапроса, XML); //рекурсия
XML.ЗаписатьКонецЭлемента();
КонецЕсли
КонецЦикла;
КонецПроцедуры
Процедура Выгрузка_запроса_в_XML_с_иерархией(ГруппаМатериалы)
XML = Новый ЗаписьXML;
XML.ОткрытьФайл("D:\vygruzka_zaprosa.xml", "UTF-8");
XML.ЗаписатьОбъявлениеXML();
XML.ЗаписатьНачалоЭлемента("ОстаткиМатериалов");
Запрос = Новый Запрос("ВЫБРАТЬ
| МатериалыНаСкладах.Период КАК Период,
| МатериалыНаСкладах.Регистратор КАК Регистратор,
| МатериалыНаСкладах.Материалы КАК Материалы,
| МатериалыНаСкладах.Количество КАК Количество
|ИЗ
| РегистрНакопления.МатериалыНаСкладах КАК МатериалыНаСкладах
|ГДЕ
| МатериалыНаСкладах.Период МЕЖДУ &НачДата И &КонДата
| И МатериалыНаСкладах.Материалы В ИЕРАРХИИ(&ГруппаМатериалы)
|ИТОГИ ПО
| Регистратор");
Результат = Запрос.Выполнить();
ИерархияДерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ОбходУровней(ИерархияДерево.СтрокиРезультатаЗапроса, XML);
XML.ЗаписатьКонецЭлемента();
XML.Закрыть();
КонецПроцедуры
&НаСервере
Процедура ОбходУровней(СтрокиРезультатаЗапроса, XML)
Для Каждого Строка Из СтрокиРезультатаЗапроса Цикл
Если ПустаяСтрока(Строка(Строка.Материалы)) Тогда //Итог если истина
XML.ЗаписатьНачалоЭлемента("Уровень");
XML.ЗаписатьАтрибут("Период", Строка(Строка.Период));
XML.ЗаписатьАтрибут("Регистратор", Строка(Строка.Регистратор));
XML.ЗаписатьАтрибут("Количество", Строка(Строка.Количество));
ОбходУровней(Строка.СтрокиРезультатаЗапроса, XML); //рекурсия
XML.ЗаписатьКонецЭлемента();
Иначе
XML.ЗаписатьНачалоЭлемента("Уровни");
XML.ЗаписатьАтрибут("Период", Строка(Строка.Период));
XML.ЗаписатьАтрибут("Регистратор", Строка(Строка.Регистратор));
XML.ЗаписатьАтрибут("Материалы", Строка(Строка.Материалы));
XML.ЗаписатьАтрибут("Количество", Строка(Строка.Количество));
ОбходУровней(Строка.СтрокиРезультатаЗапроса, XML); //рекурсия
XML.ЗаписатьКонецЭлемента();
КонецЕсли
КонецЦикла;
КонецПроцедуры
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник