Имя: Пароль:
1C
1С v8
Вопрос по выгрузке в XML
0 aranadan
 
10.12.14
14:31
Можно ли сделать группировку по сотруднику, то есть объединить все элементы номенклатуры связанные с этим сотрудником? Если да то как?  
ЗаписьXML = Новый ЗаписьXML;
    
    ЗаписьXML.ОткрытьФайл("\\admin2\!_install\it.xml", "UTF-8");          
    
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    
    ЗаписьXML.ЗаписатьНачалоЭлемента("REPORT");
    
    ЗаписьXML.ЗаписатьТекст(Формат(ТекущаяДата()));
    
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |    АрендаСрезПоследних.Сотрудники.Наименование КАК Сотрудники,
    |    АрендаСрезПоследних.Номенклатура.Наименование КАК Номенклатура,
    |    АрендаСрезПоследних.Период КАК Период
    |ИЗ
    |    РегистрСведений.Аренда.СрезПоследних КАК АрендаСрезПоследних
    |
    |УПОРЯДОЧИТЬ ПО
    |    Сотрудники,
    |    Номенклатура,
    |    Период"
    );
    Результат = Запрос.Выполнить();
    
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл;
        
        //Если Не Выборка.Номенклатура.ЭтоГруппа Тогда    
            
            ЗаписьXML.ЗаписатьНачалоЭлемента("ITEM");
            
            //Запись Сотрудника
            ЗаписьXML.ЗаписатьНачалоЭлемента("user");
            ЗаписьXML.ЗаписатьТекст(Выборка.Сотрудники);
            ЗаписьXML.ЗаписатьКонецЭлемента();
            
            //Запись Номенклатуры
            ЗаписьXML.ЗаписатьНачалоЭлемента("device");
             ЗаписьXML.ЗаписатьТекст(Выборка.Номенклатура);
            ЗаписьXML.ЗаписатьКонецЭлемента();
            
            //Запись Периода
            ЗаписьXML.ЗаписатьНачалоЭлемента("from");
             ЗаписьXML.ЗаписатьТекст(Формат(Выборка.Период,"ДФ=yyyy-MM-dd"));
            ЗаписьXML.ЗаписатьКонецЭлемента();
            
            ЗаписьXML.ЗаписатьКонецЭлемента();
        //КонецЕсли;
        
    КонецЦикла;
    
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
    ЗаписьXML.Закрыть();
1 Кир Пластелинин
 
10.12.14
14:39
объединить где? в запроса? в xml?
2 aranadan
 
10.12.14
14:42
(1) в XML.
3 Кир Пластелинин
 
10.12.14
14:42
узлы добавить
4 palpetrovich
 
10.12.14
14:48
ну, наверное так примерно: в запрос добавить итоги, в выборке:

ВыборкаСотр = Результат.Выбрать();
Пока ВыборкаСотр.Следующий() Цикл;
    ЗаписьXML.ЗаписатьНачалоЭлемента("user");
    ЗаписьXML.ЗаписатьТекст(Выборка.Сотрудники);
    //Запись Номенклатуры
    ВыборкаНоменклатура = ВыборкаСотр.Выбрать();
    Пока ВыборкаНоменклатура.Следующий() Цикл;
        ЗаписьXML.ЗаписатьНачалоЭлемента("device");
        ЗаписьXML.ЗаписатьТекст(Выборка.Номенклатура);
        ЗаписьXML.ЗаписатьКонецЭлемента();
    КонецЦикла;
КонецЦикла;    
ЗаписьXML.ЗаписатьКонецЭлемента(); // "user"
5 13_Mult
 
10.12.14
14:54
Можно.
ЗаписьXML.ЗаписатьНачалоЭлемента("Сотрудники");
ЗаписьXML.ЗаписатьАтрибут("Сотрудник", Выборка.Сотрудник);
ЗаписьXML.ЗаписатьАтрибут("Номенклатура", бла бла);
ЗаписьXML.ЗаписатьАтрибут("Период", бла бла);
ЗаписьXML.ЗаписатьКонецЭлемента();
6 aranadan
 
10.12.14
15:01
(4) получился сотрудник в сотруднике и без номенклатуры =)
7 Живой Ископаемый
 
10.12.14
15:02
Можно выгрузить в ТЗ, и ее сериализовать.
8 aranadan
 
10.12.14
15:07
(5),(7) спасибо, попробую.
9 aranadan
 
10.12.14
15:24
(3) можно подробнее?
10 Кир Пластелинин
 
10.12.14
15:32
(9) более яснее выражено в (5)
только бы сделал так

ЗаписьXML.ЗаписатьНачалоЭлемента("Сотрудник");
ЗаписьXML.ЗаписатьАтрибут("Сотрудник", Выборка.Сотрудник);
   ЗаписьXML.ЗаписатьНачалоЭлемента("Данные");
   ЗаписьXML.ЗаписатьАтрибут("Номенклатура", бла бла);
   ЗаписьXML.ЗаписатьАтрибут("Период", бла бла);
   ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();

но тут уж зависит от того - подойдет ли такая структура на выходе и дальнейшей обработки
11 aranadan
 
10.12.14
15:44
(10)     ЗаписьXML.ЗаписатьНачалоЭлемента("ITEM");
            
            //Запись Сотрудника
            
             ЗаписьXML.ЗаписатьНачалоЭлемента("user");
             ЗаписьXML.ЗаписатьАтрибут("user",Выборка.Сотрудники);
              ЗаписьXML.ЗаписатьНачалоЭлемента("device");
              ЗаписьXML.ЗаписатьАтрибут("device",Выборка.Номенклатура);
              ЗаписьXML.ЗаписатьКонецЭлемента();
             ЗаписьXML.ЗаписатьКонецЭлемента();

            
            
          //  ЗаписьXML.ЗаписатьНачалоЭлемента("device");
          //ЗаписьXML.ЗаписатьТекст(Выборка.Номенклатура);
          //  ЗаписьXML.ЗаписатьКонецЭлемента();    
          //  
          //  ЗаписьXML.ЗаписатьНачалоЭлемента("from");
          //ЗаписьXML.ЗаписатьТекст(Формат(Выборка.Период,"ДФ=yyyy-MM-dd"));
          //  ЗаписьXML.ЗаписатьКонецЭлемента();
            
            
            ЗаписьXML.ЗаписатьКонецЭлемента();
        //КонецЕсли;
и получаеться :
<ITEM>
        <user user="ИТ-ОТДЕЛ">
            <device device="GOCLEVER TAB M713G"/>
        </user>
    </ITEM>
    <ITEM>
        <user user="ИТ-ОТДЕЛ">
            <device device="GOCLEVER TAB M713G"/>
        </user>
    </ITEM>
    <ITEM>
        <user user="ИТ-ОТДЕЛ">
            <device device="Lenovo G580 (20157)"/>
        </user>
    </ITEM>
    <ITEM>
        <user user="ИТ-ОТДЕЛ">
            <device device="Lenovo Idea Tab A3000"/>
        </user>
    </ITEM>
    <ITEM>
        <user user="ИТ-ОТДЕЛ">
            <device device="MI-FI 2200"/>
        </user>
    </ITEM>
    <ITEM>
        <user user="ИТ-ОТДЕЛ">
            <device device="MI-FI 2200"/>
        </user>
    </ITEM>
    <ITEM>
        <user user="ИТ-ОТДЕЛ">
            <device device="NOKIA ASHA 200"/>
        </user>
    </ITEM>
    <ITEM>
        <user user="ИТ-ОТДЕЛ">
            <device device="Pixus Play Three"/>
        </user>
    </ITEM>
12 aranadan
 
10.12.14
15:45
хочу объединить номенклатуру.
13 Кир Пластелинин
 
10.12.14
15:51
(12) мм. замечательно. а итоги в запросе кто будет делать?
14 palpetrovich
 
10.12.14
15:57
(6) хм, итоги добавил? ...в бщем код:

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


результат:

<Items>
<Item Name=" Карандаш">
<Ed>
шт.
</Ed>
<Ed>
л
</Ed>
</Item>
<Item Name=" Авторучка">
<Ed>
шт.
</Ed>
<Ed>
кг.
</Ed>
<Ed>
100 шт.
</Ed>
</Item>
</Items>
15 aranadan
 
10.12.14
16:17
(14) супер, то что надо! Спасибо огромное!!!!
16 palpetrovich
 
10.12.14
16:20
(15) хм, не за что :)