Имя: Пароль:
1C
 
Свернуть два типы цен в запросе
,
0 myr4ik07
 
02.02.15
18:11
Привет. Конструктор запросов.
Имею запрос

ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
    ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
            ,
            ТипЦен В (&ТипЦен1, &ТипЦен2)
                И Номенклатура.Родитель В ИЕРАРХИИ (&Родитель)) КАК ЦеныНоменклатурыСрезПоследних

ТипЦен1 = Закупочная(грн)
ТипЦен2 = Закупочная(дол)

в одной номенклатуры может быть две закупочные цены как ТипЦен1 так ТипЦен2, хотелось бы видеть в такой номенклатуры только одну цену
1 ShoGUN
 
02.02.15
18:14
(0) Какую из двух?
2 myr4ik07
 
02.02.15
18:19
(1) не принципиально, хотя давайте ТипЦен1
3 Лодырь
 
02.02.15
18:23
я бы сделал два разных запроса по типам цен и соединение между ними по номенклатуре.
4 myr4ik07
 
02.02.15
18:24
(3) типа с соединением ПОЛНОЕ?
5 DirecTwiX
 
02.02.15
18:33
Чего-то бредом попахивает..

ТипЦен В (&ТипЦен1, &ТипЦен2)
->
ТипЦен = &ТипЦен1
?
6 DGorgoN
 
02.02.15
18:34
Сделай через ВЫБОР КОГДА ТОГДА..
7 Лодырь
 
02.02.15
18:36
(4) типа да
8 ShoGUN
 
02.02.15
19:14
(2) Я охреневаю с вас. Непринципиально ему. У какой-то из двух цен должен быть приоритет, иначе эта задачка лучше рандомайзером решается.
Я бы левое соединение справочника с регистром сделал дважды(для двух типов цен), и ВЫБОР КОГДА ТОГДА.
9 myr4ik07
 
02.02.15
20:20
(5) не понял вашего сарказма
10 myr4ik07
 
02.02.15
20:21
(8) мне не важно какая цена, мне всеровно одну из цен придеться на курс умножать или делить, я же не просто так написал что "непринципиально".
11 myr4ik07
 
02.02.15
20:26
(8) не могу придумать как с выбор когда тогда реализовать, что вы имеете ввиду?
12 ShoGUN
 
02.02.15
21:13
ВЫБРАТЬ
    ВЫБОР
        КОГДА ЦеныНоменклатурыВВалюте.Цена ЕСТЬ NULL
            ТОГДА ЦеныНоменклатуры.Цена
        ИНАЧЕ ЦеныНоменклатурыВВалюте.Цена
    КОНЕЦ КАК Цена,
    ВЫБОР
        КОГДА ЦеныНоменклатурыВВалюте.Цена ЕСТЬ NULL
            ТОГДА ЦеныНоменклатуры.ТипЦен
        ИНАЧЕ ЦеныНоменклатурыВВалюте.ТипЦен
    КОНЕЦ КАК ТипЦен,
    Номенклатура.Ссылка КАК Номенклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦенДоллары) КАК ЦеныНоменклатурыВВалюте
        ПО Номенклатура.Ссылка = ЦеныНоменклатурыВВалюте.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦенГривны) КАК ЦеныНоменклатуры
        ПО Номенклатура.Ссылка = ЦеныНоменклатуры.Номенклатура
ГДЕ
    Номенклатура.Ссылка В ИЕРАРХИИ(&Родитель)


Как-то так. Этот запрос, правда, покажет всю номенклатуру(даже ту, у которой цен нет вообще). Если такие строчки не нужны - надо условие на ЕСТЬ NULL добавить. Ну и есть другой минус - соединений столько, сколько типов цен. Зато предсказуемо и приоритеты можно расставить(что в каком случае выводить, в ВЫБОР). В данном случае если есть цена в долларах - выводится она, если нет - выводится в гривнах. Можно наоборот сделать.
13 myr4ik07
 
02.02.15
22:27
(12) дякую
14 roman52
 
02.02.15
22:28
в запросах "непринципиально" = МАКСИМУМ(ТипЦены)
потом по полученному полю внутреннее соединение...
15 Крошка Ру
 
02.02.15
22:31
16 ktvladimir
 
02.02.15
23:52
(0) ты вернулся чтоб нас мучать. сгинь сгинь
17 myr4ik07
 
03.02.15
09:34
(16) :D (15) :D у меня плохая память, я забываю и глядел на пред. вариант и шо то ничего не понял ) простите меня.
18 myr4ik07
 
03.02.15
09:36
Я в итоге сделал, не знаю оптимально ли но вышло вот что

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

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстатки.Склад,
    ТоварыНаСкладахОстатки.Номенклатура,
    ЦеныНоменклатурыВГривне.Цена,
    ЦеныНоменклатурыВГривне.ТипЦен,
    ЦеныНоменклатурыВДолларах.Цена,
    ЦеныНоменклатурыВДолларах.ТипЦен

УПОРЯДОЧИТЬ ПО
    Склад,
    Остаток УБЫВ
19 myr4ik07
 
03.02.15
09:37
(16) (15) в итоге ж я гарантировано получу все остатки, а уже по остаткам получу цены?! пока не могу понять тот вариант, которые рекомендовали мне в пред. ветке, поэтому и забыл как его правильно делать (((
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн