Имя: Пароль:
1C
1С v8
Привет! Туплю с запросом. Помогите.
🠗 (Волшебник 08.03.2014 12:02)
0 Boudybuilder
 
06.03.14
23:26
ВЫБРАТЬ
    ЦеныКонтр.Номенклатура КАК Номенклатура,
    ЦеныКонтр.ХарактеристикаНоменклатуры,
    МИНИМУМ(ЦеныКонтр.Цена * КурсыВал.Курс / КурсыВал.Кратность) КАК Цена,
    ЦеныКонтр.ТипЦен.Владелец КАК Контрагент
ИЗ
    РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, Период >= &Дата) КАК ЦеныКонтр
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВал
        ПО ЦеныКонтр.Валюта = КурсыВал.Валюта

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



Получить минимальную цену из этого запроса по каждой номенклатуре легко  , но мне надо и характеристику по этой минимальной цене , кто поможе? Контрагент не важен.
1 Tateossian
 
07.03.14
00:38
У тебя правильный запрос. Условие в параметре у тебя только какое-то хитрое:3
2 Boudybuilder
 
07.03.14
00:41
(1) Да потому что мне надо только на определенную дату установку цен.
3 Franchiser
 
гуру
07.03.14
00:48
Это что за чудо в параметрах виртуальной таблицы: Период >= &Дата ?
4 Franchiser
 
гуру
07.03.14
00:53
если нужно минимальную цену с характеристикой, то срезпоследних не поможет, соединяй реальную таблицы регистра саму к себе. И в чем смысл брать курсы валют на текущий момент?
5 Boudybuilder
 
07.03.14
16:18
(4) Можно поподробнее? На примере каком то.
6 Ненавижу 1С
 
гуру
07.03.14
16:21
СрезПоследних(&Дата,)
7 Franchiser
 
гуру
07.03.14
17:45
(5) примерно так на примере регистра цены номенклатуры бухгалтерии, не тестировал, но идею думаю понятно.
ВЫБРАТЬ
    ВложенныйЗапрос1.Номенклатура,
    МАКСИМУМ(ВложенныйЗапрос1.Цена) КАК Цена,
    МАКСИМУМ(ВложенныйЗапрос.ТипЦен) КАК ТипЦен
ИЗ
    (ВЫБРАТЬ
        ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
        ЦеныНоменклатуры.ТипЦен КАК ТипЦен,
        ЦеныНоменклатуры.Цена КАК Цена
    ИЗ
        РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    ГДЕ
        ЦеныНоменклатуры.Период <= &Дата) КАК ВложенныйЗапрос
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЦеныНоменклатурыСрезПервых.Номенклатура КАК Номенклатура,
            МИНИМУМ(ЦеныНоменклатурыСрезПервых.Цена) КАК Цена
        ИЗ
            РегистрСведений.ЦеныНоменклатуры.СрезПервых КАК ЦеныНоменклатурыСрезПервых
        
        СГРУППИРОВАТЬ ПО
            ЦеныНоменклатурыСрезПервых.Номенклатура) КАК ВложенныйЗапрос1
        ПО ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос1.Номенклатура
            И ВложенныйЗапрос.Цена = ВложенныйЗапрос1.Цена

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос1.Номенклатура
8 Franchiser
 
гуру
07.03.14
17:50
не совсем верно написал: нужно не к реальной таблице подсоединять а к виртуально срезу последних. Короче смысл: делаешь 2 вложенных запроса. В первом выбираешь номенклатуру и цену, в другом номенклатуру ,цену и характеристику. Группируешь первый запрос получаешь номенклатуру и минимальную цену. Группируешь второй запрос получаешь номеклатуру, характеристику и цену. дальше соединяешь запросы по номенклатуре и цене. Группируешь полученный запрос и там в группировке ставишь у цены функцию максимум или минимум все равно а у характеристики тоже максимум или минимум.
9 Boudybuilder
 
07.03.14
22:55
(8) Спасибо.
Пробую.

Вроде так ок


ВЫБРАТЬ
    В_Номенклатура.ХарактеристикаНоменклатуры,
    В_Номенклатура.Номенклатура КАК Номенклатура,
    В_Номенклатура.Цена КАК Цена
ПОМЕСТИТЬ ВТ_НомМинимум
ИЗ
    &Номенклатура КАК В_Номенклатура
ГДЕ
    В_Номенклатура.Номенклатура В ИЕРАРХИИ(&ГруппаНом)
;

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

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

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

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

УПОРЯДОЧИТЬ ПО
    Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
10 Ненавижу 1С
 
гуру
08.03.14
07:58
(9) и что за бред на выходе? случайная характеристика?
11 echo77
 
08.03.14
08:16
(10) На выходе одна из характеристик для Номенклатуры с минимальной ценой. Поскольку записей с минимальной ценой может быть несколько делается так :-)
12 Ненавижу 1С
 
гуру
08.03.14
10:09
(11) но эта характеристика в общем случае не будет иметь минимальную цену
13 Boudybuilder
 
08.03.14
12:01
(11) Поддерживаю.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.