Имя: Пароль:
1C
1С v8
Выгрузка справочника номенклатуры и цены
0 ladalk
 
18.05.16
12:49
Добрый день,
необходимо выгрузить в xml справочник Номенклатура, сохраняя иерархию, и соответствующие цены для каждого элемента.

изначально для выгрузки структуры справочника был такой код:

    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
                  |    Номенклатура.Ссылка
                  |ИЗ
                  |    Справочник.Номенклатура КАК Номенклатура
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    Номенклатура.Ссылка ИЕРАРХИЯ";



Процедура ЗаписатьВФайл (ЗаписьВыгрузкаXML, Выборка)
    
    Если Выборка.Количество () <> 0 Тогда
        
        ЗаписьВыгрузкаXML.ЗаписатьНачалоЭлемента("Группа");
        
        Пока Выборка.Следующий () Цикл
            
            ЗаписьВыгрузкаXML.ЗаписатьНачалоЭлемента("Элемент");
            
            
ЗаписьВыгрузкаXML.ЗаписатьАтрибут("Код", СокрЛП(Выборка.Ссылка.Код));
            ЗаписьВыгрузкаXML.ЗаписатьАтрибут("Наименование", СокрЛП(Выборка.Ссылка.Наименование));
            
            ЗаписьВыгрузкаXML.ЗаписатьАтрибут("Цена", СокрЛП(Выборка.Цена));
            
            ЗаписьВыгрузкаXML.ЗаписатьАтрибут("РодительКод", СокрЛП(Выборка.Ссылка.Родитель.Код));
            ЗаписьВыгрузкаXML.ЗаписатьКонецЭлемента();
            
            ВыборкаИ = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, Выборка.Группировка());             
            ЗаписатьВФайл (ЗаписьВыгрузкаXML, ВыборкаИ);            
            
        КонецЦикла;  
        ЗаписьВыгрузкаXML.ЗаписатьКонецЭлемента();
    КонецЕсли;  
    
КонецПроцедуры  


выгрузился, все хорошо. после изменения запроса:

     Запрос.Текст ="ВЫБРАТЬ
                   |    СПНоменклатура.Ссылка,
                   |    ЦеныНоменклатурыСрезПоследних.Цена
                   |ИЗ
                   |    Справочник.Номенклатура КАК СПНоменклатура
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
                   |        ПО СПНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
                   |ГДЕ
                   |    ЦеныНоменклатурыСрезПоследних.ВидЦены = &ПарамВидЦены
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    СПНоменклатура.Ссылка ИЕРАРХИЯ";


тоже выгрузилось, но уже без иерархической структуры файла.
Подскажите, как можно сделать, чтобы выгружалась иерархия вместе с ценой.
1 ladalk
 
18.05.16
13:51
а если делать так:
    Запрос.Текст ="ВЫБРАТЬ
                  |    Номенклатура.Ссылка
                  |ИЗ
                  |    Справочник.Номенклатура КАК Номенклатура
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    Номенклатура.Ссылка ИЕРАРХИЯ";


                СтруктураНом = Новый Структура;
                СтруктураНом.Вставить("Номенклатура",Выборка.Ссылка);
                СтруктураНом.Вставить("ВидЦены", Справочники.ВидыЦен.НайтиПоНаименованию("Розничные"));            
                ЦеныНом = РегистрыСведений.ЦеныНоменклатуры;
                ТекущиеЦеныНом = ЦеныНом.СрезПоследних(ТекущаяДата());
                Если ТекущиеЦеныНом.Количество()>0 Тогда
                    ЗаписьВыгрузкаXML.ЗаписатьАтрибут("Цена", СокрЛП(ТекущиеЦеныНом.Получить(ТекущиеЦеныНом.Количество()-1).Цена));     
                иначе
                    ЗаписьВыгрузкаXML.ЗаписатьАтрибут("Цена", "0,00");
                КонецЕсли;



то это около 12 часов идет выгрузка....
2 zak555
 
18.05.16
13:55
Конфа какая?
3 lodger
 
18.05.16
13:57
что-то мне подсказывает, что надо смотреть в СП описание Выборка.Группировка(). и возможно добавить группировку вокруг Ссылка.
4 ladalk
 
18.05.16
13:58
УТ 11
5 ladalk
 
18.05.16
13:59
(3) а в каком именно варианте добавлять группировку?
6 Nuobu
 
18.05.16
13:59
ВЫБРАТЬ
                   |    СПНоменклатура.Ссылка,
                   |    ЕстьNull(ЦеныНоменклатурыСрезПоследних.Цена) КАК Цена
                   |ИЗ
                   |    Справочник.Номенклатура КАК СПНоменклатура
                   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
                   |        ПО СПНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
И ЦеныНоменклатурыСрезПоследних.ВидЦены = &ПарамВидЦены
                   |    
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    СПНоменклатура.Ссылка ИЕРАРХИЯ";


Так должно полететь.
7 lodger
 
18.05.16
14:01
(5) любой, мин или макс. там все равно стоит срез последних.
потом как в (6) использовать ЕстьNULL(), но не забыть нолик в скобках дописать.
8 ladalk
 
18.05.16
14:08
(6) здорово! Работает! Спасибо!
9 ladalk
 
18.05.16
14:08
(7) спасибо!
10 ladalk
 
19.05.16
21:57
В продолжение темы.

выгружаю вот с таким кодом:

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


Процедура ЗаписатьВФайл (ЗаписьВыгрузкаXML, Выборка)
    
    Если Выборка.Количество () <> 0 Тогда
        
        ЗаписьВыгрузкаXML.ЗаписатьНачалоЭлемента("Группа");
        Пока Выборка.Следующий () Цикл
            
            Если Выборка.Ссылка.ЭтоГруппа Тогда
                
            Иначе
                ЗаписьВыгрузкаXML.ЗаписатьНачалоЭлемента("Элемент");
                
                ЗаписьВыгрузкаXML.ЗаписатьАтрибут("Цена", СокрЛП(Выборка.Цена));
                ЗаписьВыгрузкаXML.ЗаписатьАтрибут("Код", СокрЛП(Выборка.Ссылка.Код));
                ЗаписьВыгрузкаXML.ЗаписатьАтрибут("Наименование", СокрЛП(Выборка.Ссылка.Наименование));          
                ЗаписьВыгрузкаXML.ЗаписатьАтрибут("РодительКод", СокрЛП(Выборка.Ссылка.Родитель.Код));
                
                ЗаписьВыгрузкаXML.ЗаписатьКонецЭлемента();
                
            КонецЕсли;               
            
            ВыборкаИ = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, Выборка.Группировка());             
            ЗаписатьВФайл (ЗаписьВыгрузкаXML, ВыборкаИ);            
            
        КонецЦикла;  
        ЗаписьВыгрузкаXML.ЗаписатьКонецЭлемента();
    КонецЕсли;  
    
КонецПроцедуры  




выгружается вот таким образом:
-<Группа>


-<Группа>

<Элемент РодительКод="000000013" Наименование="Женские ботфорты" Код="000000018" Цена="0"/>

<Элемент РодительКод="000000013" Наименование="Ботинки женские демисезонные" Код="000000023" Цена="0"/>

<Элемент РодительКод="000000013" Наименование="Ботинки женские натуральная кожа" Код="000000022" Цена="0"/>

<Элемент РодительКод="000000013" Наименование="Женские босоножки" Код="000000032" Цена="0"/>


Как нужно сделать, чтобы в элементе "Группа" тоже были реквизиты - наименование и код?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан