Имя: Пароль:
1C
1С v8
Агрегатная функция в запросе по произведению
, ,
0 roofus
 
03.06.14
20:03
Собственно задача состоит в том, что нужно выбрать максимальные цены по номенклатуре с приведением их к единой валюте. Т.к. храняться они и в рублях и в у.е.
А в результате выдать цену и валюту в которой она храниться.
Этот результат дальше будет присоединяться к другом запросе к другим данным.

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

СГРУППИРОВАТЬ ПО
НовыеЦены.Номенклатура,
НовыеЦены.Цена,
НовыеЦены.Валюта) КАК НовыеЦены

СГРУППИРОВАТЬ ПО
НовыеЦены.Номенклатура,
НовыеЦены.ЦенаРуб,
НовыеЦены.Цена,
НовыеЦены.Валюта
1 Fragster
 
гуру
03.06.14
20:09
нужно сначала получить максимум независимо от валюты, а потом к этому значению прилепить валюту.
2 Fragster
 
гуру
03.06.14
20:10
для особых извращенцев - можно фигануть через коррелированный запрос :)
3 roofus
 
03.06.14
20:11
не понял?
Это как?
4 roofus
 
03.06.14
20:12
мне нужен максимум как раз от произведения. Просто без валюты естественно попадут только рублевые варианты
5 ilya_i
 
03.06.14
20:35
и что выдает (0) ?
6 rendez-vous
 
03.06.14
20:38
(0) Группировку по по полю НовыеЦены.Цена нужно убрать.
7 ilya_i
 
03.06.14
20:44
Получить запрос где будет Номенклатура, ЦенаРуб, Валюта, запомнить, получить макс цены, соединить с запомненным, получить валюту
8 Fragster
 
гуру
03.06.14
20:51
(4) у тебя получается максимум и в разрезе валюты тоже. тебе нужно получить рублевый максимум, а потом к нему подцепить валюту.
9 roofus
 
04.06.14
03:45
(8) Не понял как получить рублевый максимум без валюты? Мне нужно не последнюю цену получить , а именно максимальную в рублях. т.е. для примера курс сегодня 35р
товар цена валюта
ведро 10   доллар
ведро 300  рублей
Сейчас мне запрос выдает 300 р максимум
а мне нужно чтобы результатом было 10 долларов.
потому как если сравнить в рублях, то 10 дол бует больше.
я вот подумал, что может быть создавать таблицу с ценой и ценой в руб, потом сортировать и оборачивать в запрос выбрать первые 1?
10 Ненавижу 1С
 
гуру
04.06.14
06:50
(9)
ведро 10   доллар (курс 35)
ведро 70   юаней  (курс 5)

какую строку запрос должен вернуть?
11 Fragster
 
гуру
04.06.14
07:52
(9) твайу мать! третий раз! получи таблицу с максимумом рублевой цены для каждой номенклатуры. к ней присоедини исходную таблицу по номенклатуре и рублевой цене. для верности результирующую таблицу сгруппируй по цене и номенклатуре и максимуму по валюте, на случай, если в нескольких валютах максимальная цена.
12 ILM
 
гуру
04.06.14
07:55
(11) [ твайу мать! третий раз! получи таблицу с максимумом рублевой цены для каждой номенклатуры. к ней присоедини исходную таблицу по номенклатуре и рублевой цене. для верности результирующую таблицу сгруппируй по цене и номенклатуре и максимуму по валюте, на случай, если в нескольких валютах максимальная цена.]

Выглядит как ответ синтаксис-чеккера от SQL Servera )))
13 Fragster
 
гуру
04.06.14
08:33
(12) шо, автор хочет готовый запрос? не дождется!
14 roofus
 
04.06.14
13:32
Вот что в итоге получилось
Выдает вроде то, что нужно.
Просто как-то коряво написал :(
ВЫБРАТЬ
    МаксЦеныРуб.Номенклатура КАК Номенклатура,
    МаксЦеныРуб.Поле1,
    ИсхТабл.Цена,
    ИсхТабл.Валюта
ИЗ
    (ВЫБРАТЬ
        Цены.Номенклатура КАК Номенклатура,
        МАКСИМУМ(Курсы.Курс * Цены.Цена) КАК Поле1
    ИЗ
        РегистрСведений.мегапрайсЦеныНоменклатурыПоставщиков.СрезПоследних(, ) КАК Цены
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК Курсы
            ПО Цены.Валюта = Курсы.Валюта
    ГДЕ
        Цены.Номенклатура В ИЕРАРХИИ(&Номенклатура)
        И Цены.ПрайсПартнера.Партнер В ИЕРАРХИИ(&Партнер)
        И Цены.Регистратор.Дата >= &НачПериод
    
    СГРУППИРОВАТЬ ПО
        Цены.Номенклатура) КАК МаксЦеныРуб
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            мегапрайсЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура КАК Номенклатура,
            мегапрайсЦеныНоменклатурыПоставщиковСрезПоследних.Цена * КурсыВалютСрезПоследних.Курс КАК Поле1,
            мегапрайсЦеныНоменклатурыПоставщиковСрезПоследних.Цена КАК Цена,
            мегапрайсЦеныНоменклатурыПоставщиковСрезПоследних.Валюта КАК Валюта
        ИЗ
            РегистрСведений.мегапрайсЦеныНоменклатурыПоставщиков.СрезПоследних КАК мегапрайсЦеныНоменклатурыПоставщиковСрезПоследних
                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних
                ПО мегапрайсЦеныНоменклатурыПоставщиковСрезПоследних.Валюта = КурсыВалютСрезПоследних.Валюта
        ГДЕ
            мегапрайсЦеныНоменклатурыПоставщиковСрезПоследних.Номенклатура В ИЕРАРХИИ(&Номенклатура)
            И мегапрайсЦеныНоменклатурыПоставщиковСрезПоследних.ПрайсПартнера.Партнер В ИЕРАРХИИ(&Партнер)
            И мегапрайсЦеныНоменклатурыПоставщиковСрезПоследних.Регистратор.Дата >= &НачПериод) КАК ИсхТабл
        ПО МаксЦеныРуб.Номенклатура = ИсхТабл.Номенклатура
            И МаксЦеныРуб.Поле1 = ИсхТабл.Поле1

УПОРЯДОЧИТЬ ПО
    Номенклатура
15 Fragster
 
гуру
04.06.14
14:24
(14) теперь можно избавиться от множественного обращения к одним и тем же данным через использование временных таблиц - и будет норм.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан