![]() |
|
Выгрузка справочника номенклатуры и цены | ☑ | ||
---|---|---|---|---|
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"/> Как нужно сделать, чтобы в элементе "Группа" тоже были реквизиты - наименование и код? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |