Имя: Пароль:
1C
1С v8
Как более изящнее можно решить следующую задачу?
0 Kaukass
 
19.02.15
16:36
В результате ниже приведенного текста запроса, по каждой номенклатуре отображается по две повторяющихся строчки.

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

Подтесал это дело топором - сгруппировал:

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

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

Что так с первым запросом, почему по две повтряющихся строчки  отображает?
1 Ёпрст
 
19.02.15
16:37
где поменять на И, это для начала
2 vhl
 
19.02.15
16:37
в РегистрСведений.ЦеныНоменклатуры есть еще одно измерение
3 Ёпрст
 
19.02.15
16:38
условия из где запихать унутрь СрезПоследних
4 D_E_S_131
 
19.02.15
17:02
Если цель показать какие цены были установлены на номенклатуру конкретным документом "Установка цен", то можно обойтись и без "Среза последних". ИМХО это будет еще более изящным.
5 Kaukass
 
19.02.15
19:15
Благодарю.
6 Kaukass
 
19.02.15
19:16
Буду разбирать ваши советы
7 Крошка Ру
 
19.02.15
19:31
(0) 1. Такое условие к полю правой таблицы автоматически превращает соединение во ВНУТРЕННЕЕ.
2. Вытаскиваются поля только правой таблицы, а соединение левое. WTF??
3. Условие "ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен" реально лучше запихнуть в параметры среза, рядом с периодом.
4. Если при левом соединении вытаскиваются поля правой таблицы, не надо забывать, что там может быть NULL, поэтому лучше использовать конструкцию ЕстьNULL().
5. Задваиваются строки скорее всего из-за того, что соединяешь только по номенклатуре, а скорее всего есть ещё одно измерение.(кстати в условии соединения "Номенклатура.Ссылка" лучше заменить на "Номенклатура"
6. Last but not least. Начать надо с осознания - для чего же этот запрос нужен, а уже потом его писать(ну или переписывать)
8 Kaukass
 
19.02.15
23:01
Действительно - "двоилось" из-за того, что забыл связать еще и по полю ТипЦен.
9 MSOliver
 
19.02.15
23:57
"ВЫБРАТЬ
|    ЦеныНоменклатуры.Номенклатура,
|    ЦеныНоменклатуры.Цена
|ИЗ
|    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|ГДЕ
|    ЦеныНоменклатуры.Регистратор = &Регистратор
|    И ЦеныНоменклатуры.ТипЦен = &ТипЦен"
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший