Имя: Пароль:
1C
Админ
Помогите с запросом
0 prorokk
 
12.08.13
13:09
Нужно Выбрать запросом цены номенклатуры и получить такой вид:
Номенклатура - ЦенаЗакуп - ЦенаОпт - ЦенаРозничная
товар             10        12          15

У меня получается
Номенклатура - ЦенаЗакуп - ЦенаОпт - ЦенаРозничная
товар             10        NULL        NULL
товар             NULL       12         NULL
товар             NULL       NULL        15

Как их Объединить?
1 Fragster
 
модератор
12.08.13
13:09
Сгруппировать по Номенклатура
2 Maxus43
 
12.08.13
13:11
ну и ЕСТЬNULL(ЦенаЗакуп,0) на поля с нулл накладывай конечно
3 prorokk
 
12.08.13
13:15
ВЫБОР
    КОГДА ЕстьNULL(ЦеныНоменклатурыСрезПоследних.Цена,0)
            И (ЦеныНоменклатурыСрезПоследних.ВидЦены.Наименование = "Оптовая")
        ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
КОНЕЦ

Как правильно это оформить?
ну или как вывести цены в колонки? кроме Выбор КОГДА
4 Maxus43
 
12.08.13
13:18
ВЫБОР
    КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидОптовая Тогда ЕстьNULL(ЦеныНоменклатурыСрезПоследних.Цена,0) Иначе 0 Конец
5 palpetrovich
 
12.08.13
13:20
(3) может лучше?
Выбрать
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.ВидЦены,
ЦеныНоменклатурыСрезПоследних.Цена
6 prorokk
 
12.08.13
13:21
(5) такой даст в цены в столбик
7 mzelensky
 
12.08.13
13:22
(0) Самое просто сгруппировать по номенклатуре функцией "СРЕДНЕЕ" (это если NULL в 0 не преобразовывать), а если преобразовывать, то через "Максимум"
8 Fragster
 
модератор
12.08.13
13:22
(6) цены "в колонку" получаются при выводе
9 prorokk
 
12.08.13
13:26
(8) все цены в одну колонку а мне в разные нужно
10 Fragster
 
модератор
12.08.13
13:28
(9) я-то понял, а вот понял ли ты (8)?
11 prorokk
 
12.08.13
13:29
(10) да будет
товар 10 закуп
товар 12 опт и т.д.
12 prorokk
 
12.08.13
13:29
(4) теперь 0 выводит вместо NULL
Весь запрос:
ВЫБРАТЬ
    ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
    ПоступлениеТоваровУслугТовары.Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
    ПоступлениеТоваровУслугТовары.Количество КАК КоличествоПриход,
    ПоступлениеТоваровУслугТовары.Цена КАК ЦенаПоступления,
    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток,
    0 КАК Наценка,
    0 КАК ЦенаПродажи,
    0 КАК НаценкаОптовой,
    0 КАК ЦенаОптовая,
    ВЫБОР
        КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &Оптовая
            ТОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
        ИНАЧЕ 0
    КОНЕЦ КАК ЦенаОптоваяДоПрихода,
    ВЫБОР
        КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &Розничная
            ТОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
        ИНАЧЕ 0
    КОНЕЦ КАК ЦенаДоПрихода,
    ВЫБОР
        КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &Закупочная
            ТОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0)
        ИНАЧЕ 0
    КОНЕЦ КАК Закупочная
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, ) КАК ТоварыНаСкладахОстатки
        ПО ПоступлениеТоваровУслугТовары.Номенклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
        ПО ПоступлениеТоваровУслугТовары.Номенклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка
ГДЕ
    ПоступлениеТоваровУслугТовары.Ссылка = &Документ
ИТОГИ ПО
    Номенклатура ТОЛЬКО ИЕРАРХИЯ
13 prorokk
 
12.08.13
13:30
Если ставлю Группировку результат тот же
14 Maxus43
 
12.08.13
13:31
что у тебя в &Оптовая?
15 prorokk
 
12.08.13
13:32
(14) Справочник.ВидЦены.НайтиПоКоду("001")
16 mzelensky
 
12.08.13
13:32
(13) чего ты мозги паришь? возьми запрос, который тебе выдает это

"У меня получается
Номенклатура - ЦенаЗакуп - ЦенаОпт - ЦенаРозничная
товар             10        NULL        NULL
товар             NULL       12         NULL
товар             NULL       NULL        15
"

Засовываешь все это в еще один вложенный запрос и группируешь (без всякиз преобразований NULL к 0)
17 lapinio
 
12.08.13
13:32
1)Объединение внутри объединения три запроса
18 lapinio
 
12.08.13
13:34
(16) как вариант
19 Peltzer
 
12.08.13
13:37
ВЫБРАТЬ
    ISNULL(ISNULL(Цена1.Номенклатура,Цена2.Номенклатура),Цена3.Номенклатура),
    Цена1.Цена КАК Цена1,
    Цена2.Цена КАК Цена2,
    Цена3.Цена КАК Цена3
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ТипЦен = &ТипПервыхЦен) КАК Цена1
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ТипЦен = &ТипТретихЦен) КАК Цена3
        ПО Цена1.Номенклатура = Цена3.Номенклатура
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ТипЦен = &ТипВторыхЦен) КАК Цена2
        ПО Цена1.Номенклатура = Цена2.Номенклатура
20 lapinio
 
12.08.13
13:38
Почему полное соединение
21 prorokk
 
12.08.13
13:39
(12) Думал над таким...
22 Peltzer
 
12.08.13
13:39
Чтобы попала номенклатура у которой нет цены по первому типу
23 prorokk
 
12.08.13
13:39
с вложенным результат тот же

ВЫБРАТЬ
    ВложенныйЗапрос.Номенклатура КАК Номенклатура,
    ВложенныйЗапрос.ЭтоГруппа,
    ВложенныйЗапрос.КоличествоПриход,
    ВложенныйЗапрос.ЦенаПоступления,
    ВложенныйЗапрос.Остаток,
    ВложенныйЗапрос.Наценка,
    ВложенныйЗапрос.ЦенаПродажи,
    ВложенныйЗапрос.НаценкаОптовой,
    ВложенныйЗапрос.ЦенаОптовая,
    ВложенныйЗапрос.ЦенаОптоваяДоПрихода,
    ВложенныйЗапрос.ЦенаДоПрихода,
    ВложенныйЗапрос.Закупочная
ИЗ
    (ВЫБРАТЬ
        ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
        ПоступлениеТоваровУслугТовары.Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
        ПоступлениеТоваровУслугТовары.Количество КАК КоличествоПриход,
        ПоступлениеТоваровУслугТовары.Цена КАК ЦенаПоступления,
        ТоварыНаСкладахОстатки.ВНаличииОстаток КАК Остаток,
        0 КАК Наценка,
        0 КАК ЦенаПродажи,
        0 КАК НаценкаОптовой,
        0 КАК ЦенаОптовая,
        ВЫБОР
            КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &Оптовая
                ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
        КОНЕЦ КАК ЦенаОптоваяДоПрихода,
        ВЫБОР
            КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &Розничная
                ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
        КОНЕЦ КАК ЦенаДоПрихода,
        ВЫБОР
            КОГДА ЦеныНоменклатурыСрезПоследних.ВидЦены = &Закупочная
                ТОГДА ЦеныНоменклатурыСрезПоследних.Цена
        КОНЕЦ КАК Закупочная
    ИЗ
        Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, ) КАК ТоварыНаСкладахОстатки
            ПО ПоступлениеТоваровУслугТовары.Номенклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура.Ссылка,
        РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
    ГДЕ
        ПоступлениеТоваровУслугТовары.Ссылка = &Документ) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Номенклатура,
    ВложенныйЗапрос.ЭтоГруппа,
    ВложенныйЗапрос.КоличествоПриход,
    ВложенныйЗапрос.ЦенаПоступления,
    ВложенныйЗапрос.Остаток,
    ВложенныйЗапрос.Наценка,
    ВложенныйЗапрос.ЦенаПродажи,
    ВложенныйЗапрос.НаценкаОптовой,
    ВложенныйЗапрос.ЦенаОптовая,
    ВложенныйЗапрос.ЦенаОптоваяДоПрихода,
    ВложенныйЗапрос.ЦенаДоПрихода,
    ВложенныйЗапрос.Закупочная
ИТОГИ ПО
    Номенклатура ТОЛЬКО ИЕРАРХИЯ
24 Peltzer
 
12.08.13
13:39
Хотя нужно просто левое соединение, если за основу взять Справочники.Номенклатура
25 mzelensky
 
12.08.13
13:40
(23) ты сам понял .что ты сгруппировал?
26 lapinio
 
12.08.13
13:41
Примерный запрос на объединение

ВЫБРАТЬ
    ПродажаИЗакупка.Документ КАК Документ
ПОМЕСТИТЬ Продажи
ИЗ
    &ПродажаИЗакупка КАК ПродажаИЗакупка
ГДЕ
    ВЫРАЗИТЬ(ПродажаИЗакупка.Документ КАК Документ.РасходнаяНакладная) ССЫЛКА Документ.РасходнаяНакладная

ИНДЕКСИРОВАТЬ ПО
    Документ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ПродажаИЗакупка.Документ КАК Документ
ПОМЕСТИТЬ Закупки
ИЗ
    &ПродажаИЗакупка КАК ПродажаИЗакупка
ГДЕ
    ВЫРАЗИТЬ(ПродажаИЗакупка.Документ КАК Документ.ПриходнаяНакладная) ССЫЛКА Документ.ПриходнаяНакладная

ИНДЕКСИРОВАТЬ ПО
    Документ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.РасходнаяНакладная).Номер КАК doc_number,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.РасходнаяНакладная).Фирма.Код КАК whcode,
    МИНИМУМ(0) КАК oper_type,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.РасходнаяНакладная).Дата КАК doc_date,
    "" КАК doc_parent,
    "" КАК order_date,
    "" КАК deliv_date,
    МИНИМУМ(0) КАК order_stat,
    МИНИМУМ(1) КАК deliv_type,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.РасходнаяНакладная).Контрагент.Код КАК clientcode,
    МИНИМУМ(ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.РасходнаяНакладная).Грузоотправитель.Код) КАК spcode,
    ПартииНоменклатуры.ТорговыйПредставитель.Код КАК tpcode,
    &manfid
ИЗ
    РегистрНакопления.ПартииНоменклатуры КАК ПартииНоменклатуры
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Продажи КАК Продажи
        ПО ((ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.РасходнаяНакладная)) = Продажи.Документ)

СГРУППИРОВАТЬ ПО
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.РасходнаяНакладная).Номер,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.РасходнаяНакладная).Фирма.Код,
    ПартииНоменклатуры.ТорговыйПредставитель.Код,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.РасходнаяНакладная).Контрагент.Код,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.РасходнаяНакладная).Дата

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.ПриходнаяНакладная).Номер,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.ПриходнаяНакладная).Фирма.Код,
    2,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.ПриходнаяНакладная).Дата,
    "",
    "",
    "",
    0,
    1,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.ПриходнаяНакладная).Контрагент.Код,
    "",
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор.Договор КАК Документ.ДоговорСПоставщиком).ОтветственныйСотрудник.Код,
    &manfid
ИЗ
    РегистрНакопления.ПартииНоменклатуры КАК ПартииНоменклатуры
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Закупки КАК Закупки
        ПО ((ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.ПриходнаяНакладная)) = Закупки.Документ)

СГРУППИРОВАТЬ ПО
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.ПриходнаяНакладная).Номер,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.ПриходнаяНакладная).Дата,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.ПриходнаяНакладная).Контрагент.Код,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор КАК Документ.ПриходнаяНакладная).Фирма.Код,
    ВЫРАЗИТЬ(ПартииНоменклатуры.Регистратор.Договор КАК Документ.ДоговорСПоставщиком).ОтветственныйСотрудник.Код

УПОРЯДОЧИТЬ ПО
    doc_number
27 palpetrovich
 
12.08.13
13:45
" ПоступлениеТоваровУслугТовары.Номенклатура.ЭтоГруппа КАК ЭтоГруппа," а что, в ТЧ может быть Группа?
28 palpetrovich
 
12.08.13
13:53
ниче не понимаю, разве вот такое не решает все?
ВЫБРАТЬ
    ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
    ПоступлениеТоваровУслугТовары.Количество,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихЗакупочная.Цена, 0) КАК ЦенаЗакупки,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихПродажная.Цена, 0) КАК ЦенаПродажи
ИЗ
    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСреза, ТипЦен = &ТипыЦенЗакупочная) КАК ЦеныНоменклатурыСрезПоследнихЗакупочная
        ПО ПоступлениеТоваровУслугТовары.Номенклатура = ЦеныНоменклатурыСрезПоследнихЗакупочная.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСреза, ТипЦен = &ТипыЦенПродажная) КАК ЦеныНоменклатурыСрезПоследнихПродажная
        ПО ПоступлениеТоваровУслугТовары.Номенклатура = ЦеныНоменклатурыСрезПоследнихПродажная.Номенклатура
ГДЕ
    ПоступлениеТоваровУслугТовары.Ссылка = &Документ
29 prorokk
 
12.08.13
13:55
(28) Спасибо!, простите за МОЙ большой тупизм....
Закон Брукера: Даже маленькая практика стоит большой теории.