Имя: Пароль:
1C
1С v8
Выбор минимальных значений с ресурсами запросом
0 vladimir80
 
23.09.14
13:37
Приветствую! Подскажите, как лучше составить запрос.
Переодический РегистрСведений со следующей структурой:

Номенклатура - Поставщик - Цена

Номенклатура - элемент справочника Номенклатура.
Поставщик - элемент справочника с доп.реквизитом Приоритет.

Необходимо выбрать все последние цены номенклатуры поставщиков, причем если номенклатура есть у различных поставщиков - то взять цену поставщика с минимальным приоритетом.
1 DirecTwiX
 
23.09.14
13:38
Срез последних + группировка
2 DirecTwiX
 
23.09.14
13:39
Плюс внутреннее соединение по поставщику и номенклатуре
3 kosts
 
23.09.14
13:39
А если и приоритет одинаковый?
4 vladimir80
 
23.09.14
13:41
Срез последних - это понятно. А вот группировка - тут не могу разобраться.

Приоритет не одинаковый - поставщиков товара слишком мало.
5 kosts
 
23.09.14
13:43
(4) На ввод одинаковых приоритетов стоит запрет?
6 vladimir80
 
23.09.14
13:44
(5) поставщиков 7 и ситуация не изменится. На них изначально стоит приоритет. В противном случае можно при одинаковом приоритете выбирать минимальную цену.
7 DirecTwiX
 
23.09.14
13:45
Вроде так:

ВЫБРАТЬ
    Цены.КурсОбучения КАК Номенклатура,
    Цены.Физлицо КАК ПриоритетПоставщика,
    Цены.НомерДокумента КАК Цена
ПОМЕСТИТЬ ВТ
ИЗ
    РегистрСведений.ПройденныеУчебныеКурсы.СрезПоследних КАК Цены
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Номенклатура,
    МИНИМУМ(ВТ.ПриоритетПоставщика) КАК ПриоритетПоставщика
ПОМЕСТИТЬ ВТ2
ИЗ
    ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
    ВТ.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Номенклатура,
    ВТ.ПриоритетПоставщика,
    ВТ.Цена
ИЗ
    ВТ КАК ВТ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
        ПО ВТ.Номенклатура = ВТ2.Номенклатура
            И ВТ.ПриоритетПоставщика = ВТ2.ПриоритетПоставщика
8 vladimir80
 
23.09.14
14:00
(7)Спасибо, отличное решение!
Итоговый запрос:

ВЫБРАТЬ
    ЦеныПоставщиковСрезПоследних.Номенклатура,
    ЦеныПоставщиковСрезПоследних.Поставщик.ПриоритетПоставщика КАК ПоставщикПриоритетПоставщика,
    ЦеныПоставщиковСрезПоследних.Цена
ПОМЕСТИТЬ ВТ
ИЗ
    РегистрСведений.ЦеныПоставщиков.СрезПоследних КАК ЦеныПоставщиковСрезПоследних
ГДЕ
    ЦеныПоставщиковСрезПоследних.ЕстьВПрайсе = ИСТИНА
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Номенклатура,
    МИНИМУМ(ВТ.ПоставщикПриоритетПоставщика) КАК ПоставщикПриоритетПоставщика
ПОМЕСТИТЬ ВТ2
ИЗ
    ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
    ВТ.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Номенклатура,
    ВТ.ПоставщикПриоритетПоставщика,
    МИНИМУМ(ВТ.Цена) КАК Цена
ИЗ
    ВТ КАК ВТ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ2 КАК ВТ2
        ПО ВТ.Номенклатура = ВТ2.Номенклатура
            И ВТ.ПоставщикПриоритетПоставщика = ВТ2.ПоставщикПриоритетПоставщика

СГРУППИРОВАТЬ ПО
    ВТ.Номенклатура,
    ВТ.ПоставщикПриоритетПоставщика