helpf.pro
Регистрация

v8.3: Выгрузка в XML дерева значений

Legachi26
25.07.2016 10:47Прочитано: 5057

Здравствуйте Евгений! Подскажите пожалуйста, есть запрос 

Код 1C v 8.х
 
"ВЫБРАТЬ
        |    эсУчебныеКурсы.Код КАК Код,
        |    эсУчебныеКурсы.Наименование КАК Наименование,
        |    эсУчебныеКурсы.Описание КАК Описание
        |ИЗ
        |    Справочник.эсУчебныеКурсы КАК эсУчебныеКурсы
        |ГДЕ
        |    эсУчебныеКурсы.ЭтоГруппа = ЛОЖЬ
        |
        |УПОРЯДОЧИТЬ ПО
        |    эсУчебныеКурсы.ЭтоГруппа УБЫВ
        |ИТОГИ ПО
        |    эсУчебныеКурсы.Ссылка ТОЛЬКО ИЕРАРХИЯ"

Запрос выводит по сути дерево элементов с разбивкой по группам, как вот теперь можно сохраняя это дерево сделать выгрузку в xml? Не могу сообразить так как не хватает опыта, прошу Вас подскажите.

Yandex
Возможно, вас также заинтересует
Реклама на портале
all4cf
26.07.2016 00:32Ответ № 1

В дерево значений: Выгрузить результат запроса в Дерево Значений, Дерево Значений на форме

В XML: Создание XML файла выгрузки Работников организации с Группировкой по Подразделению

Код 1C v 8.х
 Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | ЛицевыеСчетаРаботниковОрганизации.НомерЛицевогоСчета,
    | ЛицевыеСчетаРаботниковОрганизации.ФизЛицо.Наименование
    |ИЗ
    | РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчетаРаботниковОрганизации
    |ГДЕ
    | ЛицевыеСчетаРаботниковОрганизации.ФизЛицо.Наименование =Сотрудник";
 
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
    Выборка = Запрос.Выполнить().Выбрать();
    
    ПутьКФайлу = "D:\7763____z.xml"; 
    Запись = Новый ЗаписьXML;
    Запись.ОткрытьФайл(ПутьКФайлу, "windows-1251");
    Запись.ЗаписатьОбъявлениеXML(); //<?xml version="1.0" encoding="windows-1251"?>
    
    Пока Выборка.Следующий() Цикл 
        Запись.ЗаписатьНачалоЭлемента("Ф.И.О.");
        Запись.ЗаписатьТекст(Выборка.Наименование);
        Запись.ЗаписатьКонецЭлемента();
    КонецЦикла;
 
    Запись.Закрыть();
Код 1C v 8.х
 Процедура ВыгрузитьНомНажатие(Элемент)
   ПутьБУ = "";
   Режим = РежимДиалогаВыбораФайла.Открытие; 
   ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); 
   ДиалогОткрытияФайла.Заголовок = "Выберите файл"; 
   ДиалогОткрытияФайла.ПолноеИмяФайла = ""; 
   ДиалогОткрытияФайла.МножественныйВыбор = Ложь; 
   ДиалогОткрытияФайла.Фильтр = "(*.XML)|*.XML"; 
   Если ДиалогОткрытияФайла.Выбрать() Тогда 
       ПутьБУ = ДиалогОткрытияФайла.ПолноеИмяФайла; 
   иначе
       Возврат
   КонецЕсли;
   
   Если не ЗначениеЗаполнено(ПутьБУ) тогда
       Возврат
   КонецЕсли;


   Запрос = Новый Запрос;
   Запрос.Текст = 
   "ВЫБРАТЬ
   |    Номенклатура.Ссылка как Номенклатура
   |ИЗ
   |    Справочник.Номенклатура КАК Номенклатура
   |ГДЕ
   |    ВЫБОР
   |            КОГДАОборНоменклатуры = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
   |                ТОГДА ИСТИНА
   |            ИНАЧЕ Номенклатура.Ссылка В ИЕРАРХИИ (&ОборНоменклатуры)
   |        КОНЕЦ
   |    И НЕ Номенклатура.ЭтоГруппа";
   
   Запрос.УстановитьПараметр("ОборНоменклатуры", ОборНоменклатуры);
   
   Результат = Запрос.Выполнить();
   
   ВыборкаДетальныеЗаписи = Результат.Выбрать();
   
   Запись = новый ЗаписьXML;
   Запись.ОткрытьФайл(ПутьБУ);    
   Запись.ЗаписатьОбъявлениеXML();
   Запись.ЗаписатьНачалоЭлемента("ROOT");
   
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       Запись.ЗаписатьНачалоЭлемента("STR");
       
       Запись.ЗаписатьАтрибут("КодНоменклатуры", XMLСтрока(ВыборкаДетальныеЗаписи.Номенклатура.Код));
       Запись.ЗаписатьАтрибут("НаименованиеНоменклатуры", XMLСтрока(ВыборкаДетальныеЗаписи.Номенклатура.Наименование));
       
       Запись.ЗаписатьКонецЭлемента();
   КонецЦикла;
   Запись.ЗаписатьКонецЭлемента();
   Запись.Закрыть();   
   
КонецПроцедуры


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