Имя: Пароль:
1C
 
Получить максимальную цену и виды цены этой максимальной цены
,
0 Maniac
 
10.08.19
19:59
Ребя после моря) Настроение не сильно рабочее.

Короче говоря динамический список номенклатуры. Получаем максимальную цену из всех цен. Но еще нужно также вывести вид цены, соответствующий этой максимальной.

МАКСИМУМ(ЦеныНоменклатуры.Цена) - тут все гуд.
А Вид цены если запрашиваю то уже все равно все цены выгребаются.
1 Maniac
 
10.08.19
20:00
Короче как к максимальной цене получить вид цены так чтобы она не стала группировкой. иначе все цены .
Нужна всего 1 запись.
2 МихаилМ
 
10.08.19
20:06
3 PuhUfa
 
10.08.19
20:10
(0) а если 2 вида цены с максимальной ценой?
4 Garykom
 
гуру
10.08.19
20:10
ВЫБРАТЬ ПЕРВЫЕ 1 а перед этим отсортировать по убыванию выбранной цены
5 Maniac
 
10.08.19
20:11
Это не в тему.

Как я писал выше есть динамический список номенклатуры. к нему левым соединением цены.
Максимальную получить ерунда. но нужно еще вид этой максимальной цены.

Если строку с видом цены она становится группировокой. соответственно записей становится много.
6 Maniac
 
10.08.19
20:11
(3) пофиг. любой из них. такого не будет
7 Maniac
 
10.08.19
20:12
(4) выбрать первые 1 это если ты пишешь запрос штучный. ЧИТАЙТЕ что я пишу. это динамический список номенклатуры с левым соединением цен.
8 Garykom
 
гуру
10.08.19
20:12
(7) Даже запросы не научился писать за столько лет?
9 PuhUfa
 
10.08.19
20:15
(6) ну сделай соединение по самой цене
10 Garykom
 
гуру
10.08.19
20:17
(9) Если для одной номенклатуры две одинаковые максимальные цены разных видов ?
11 PuhUfa
 
10.08.19
20:18
(10) тогда смотри (6)
12 Maniac
 
10.08.19
20:19
(8) ну судя по тому что от тебя как то ответа правильного нет, то и ты тоже
13 Маленький Вопросик
 
10.08.19
20:21
если я тебя правильно понял, то вот как-то так?

ВЫБРАТЬ
    Номенклатура.Ссылка КАК НоменклатураСсылка1
ПОМЕСТИТЬ ВТ_ГруппаНоменклатуры
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ЭтоГруппа = ЛОЖЬ
    И Номенклатура.ПометкаУдаления = ЛОЖЬ
    И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)

ИНДЕКСИРОВАТЬ ПО
    НоменклатураСсылка1
;

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

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

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТ_ГруппаНоменклатуры
14 Маленький Вопросик
 
10.08.19
20:26
вот так, наверное, ближе будет к твоим хотелкам

ВЫБРАТЬ
    Номенклатура.Ссылка КАК НоменклатураСсылка1
ПОМЕСТИТЬ ВТ_ГруппаНоменклатуры
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ЭтоГруппа = ЛОЖЬ
    И Номенклатура.ПометкаУдаления = ЛОЖЬ
    И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)

ИНДЕКСИРОВАТЬ ПО
    НоменклатураСсылка1
;

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

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

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    ТипЦен
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТ_ГруппаНоменклатуры
;

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

СГРУППИРОВАТЬ ПО
    ВТ_СТипамиЦен.Номенклатура
15 Maniac
 
10.08.19
20:27
Вы видимо не читаете. Динамический список.....
16 Maniac
 
10.08.19
20:27
никаких временных таблиц. тупо список формы справочника номенклатуры. где должны быть еще колонки Цена (максимальная из всех видов цен) и  вид цены который соответствует этой максимальной из всех.
17 Maniac
 
10.08.19
20:29
те нужна какая то агрегатная функция на вид цены или выбор. хз что.
я помню уже когда то писал и делал что то подобное, но забыл. из головы вылетело где я это применял уже с чем то.
18 Маленький Вопросик
 
10.08.19
20:33
(17) это простейший запрос "получающий максимальную цену по всем типам цен" - дальше крути сам
19 Маленький Вопросик
 
10.08.19
20:33
одну запись!
20 Маленький Вопросик
 
10.08.19
20:36
если ты делал "срезом последних" - то регистры сведений устроены так, что на каждое из условий измерений - ты получаешь срез последних - поэтому у тебя вываливается куча всего в запросе!
21 Maniac
 
10.08.19
20:36
(18) ..... все короче иди отдыхать. вы не помощники сегодня.
22 Garykom
 
гуру
10.08.19
20:37
(15) Динамический список это такая хрень куда данные попадают запросом
23 Maniac
 
10.08.19
20:38
(20) если ты ставишь максимум для получения 1 записи то все измерения урезаются. их нет.
24 Маленький Вопросик
 
10.08.19
20:39
(23) тебе запрос написали - смотри дальше сам!
25 Maniac
 
10.08.19
20:41
(24) фигню написали не в тему вообще
26 Maniac
 
10.08.19
20:42
ВЫБРАТЬ
    МАКСИМУМ(ЦеныНоменклатуры.Цена) КАК Цена,
    ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
    ЦеныНоменклатуры.ТипЦен КАК ТипЦен


вот это выгребет ВСЕ ЦЕНЫ А НЕ ОДНУ максимальную
27 Maniac
 
10.08.19
20:43
у тебя две группировки. значит будут получены все цены и максимальная В ПРЕДЕЛАХ ВИДА ЦЕНЫ.

а я уже час пишу что нужно получить ОДНУ МАКИСМАЛЬНУЮ из всех записей регистра по каждой номенклатуре НО отобразить вид цены к которому эта максимальная принадлежит.
28 Maniac
 
10.08.19
20:44
если не понимаете то лучше вообще ничего не пишите, отдыхайте.
29 Garykom
 
гуру
10.08.19
20:47
Это ты не понимаешь.

Сделай сначала табличку
Номенклатура|Макс(Цена)

Затем соедини ее с табличкой
Номенклатура|ТипЦены|Цена

По полям Номенклатура и Цена
30 Maniac
 
10.08.19
20:50
(29) НЕ ПОЛУЧИТСЯ. потому что это ДИНАМИЧЕСКИЙ СПИСОК. он ругается если несколько записей с номенклатурой в любом соединении.
Так как там стоит ссылка обязательным элементом. любое попадание нескольких записей номенклатуры сразу выдает ошибку списка.
31 Maniac
 
10.08.19
20:53
(29) Все да получилось. все верно. два запроса правда к регистру цен. но сработало. пока что не ругнулось и вроде бы как верно показывает.
Буду тестировать
32 Маленький Вопросик
 
10.08.19
20:55
ВЫБРАТЬ
    Номенклатура.Ссылка КАК НоменклатураСсылка1
ПОМЕСТИТЬ ВТ_ГруппаНоменклатуры
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ЭтоГруппа = ЛОЖЬ
    И Номенклатура.ПометкаУдаления = ЛОЖЬ
    И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)

ИНДЕКСИРОВАТЬ ПО
    НоменклатураСсылка1
;

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

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

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    ТипЦен
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТ_ГруппаНоменклатуры
;

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

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

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

СГРУППИРОВАТЬ ПО
    ВТ_МаксЦены.Цена,
    ВТ_МаксЦены.Номенклатура
33 Маленький Вопросик
 
10.08.19
20:57
(29) ты забыл добавить ему МАКСИМУМ по типу цены, иначе у него задвоятся строки если есть 2 одинаковые цены на типы цен.
34 Maniac
 
10.08.19
21:02
все уже. сработало. как нужно.


ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Ссылка,
    СправочникНоменклатура.Код КАК Код,
    СправочникНоменклатура.Артикул КАК Артикул,
    СправочникНоменклатура.Наименование КАК Наименование,
    СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    СправочникНоменклатура.Производитель КАК Производитель,
    СправочникНоменклатура.Родитель КАК Родитель,
    ЕСТЬNULL(ЦеныНоменклатуры.Цена * КурсВалютыВидЦен.Курс * КурсВалютыДокумента.Кратность / (КурсВалютыДокумента.Курс * КурсВалютыВидЦен.Кратность), 0) КАК Цена,
    ЦеныНоменклатуры2.ВидЦен КАК ВидЦен
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
            МИНИМУМ(ЦеныНоменклатуры.ВидЦен) КАК ВидЦен,
            МАКСИМУМ(ЦеныНоменклатуры.Цена) КАК Цена
        ИЗ
            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ВидЦен = &ВидЦеныНоменклатуры)}) КАК ЦеныНоменклатуры
        
        СГРУППИРОВАТЬ ПО
            ЦеныНоменклатуры.Номенклатура) КАК ЦеныНоменклатуры
        ПО (ЦеныНоменклатуры.Номенклатура = СправочникНоменклатура.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ВидЦен = &ВидЦеныНоменклатуры)}) КАК ЦеныНоменклатуры2
        ПО (ЦеныНоменклатуры2.Номенклатура = ЦеныНоменклатуры.Номенклатура)
            И (ЦеныНоменклатуры2.Цена = ЦеныНоменклатуры.Цена)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(, ) КАК КурсВалютыВидЦен
        ПО (КурсВалютыВидЦен.Валюта = ЦеныНоменклатуры.ВидЦен.ВалютаЦены),
    РегистрСведений.КурсыВалют.СрезПоследних(, {(Валюта = &Валюта)}) КАК КурсВалютыДокумента
ГДЕ
    СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ
35 Maniac
 
10.08.19
21:03
опс немного там криво и лишнее есть. уберу уже у себя
36 Maniac
 
10.08.19
21:04
ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Ссылка,
    СправочникНоменклатура.Код КАК Код,
    СправочникНоменклатура.Артикул КАК Артикул,
    СправочникНоменклатура.Наименование КАК Наименование,
    СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    СправочникНоменклатура.Производитель КАК Производитель,
    СправочникНоменклатура.Родитель КАК Родитель,
    ЕСТЬNULL(ЦеныНоменклатуры.Цена * КурсВалютыВидЦен.Курс * КурсВалютыДокумента.Кратность / (КурсВалютыДокумента.Курс * КурсВалютыВидЦен.Кратность), 0) КАК Цена,
    ЦеныНоменклатуры2.ВидЦен КАК ВидЦен
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЦеныНоменклатуры.Номенклатура КАК Номенклатура,
            МАКСИМУМ(ЦеныНоменклатуры.Цена) КАК Цена
        ИЗ
            РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ВидЦен = &ВидЦеныНоменклатуры)}) КАК ЦеныНоменклатуры
        
        СГРУППИРОВАТЬ ПО
            ЦеныНоменклатуры.Номенклатура) КАК ЦеныНоменклатуры
        ПО (ЦеныНоменклатуры.Номенклатура = СправочникНоменклатура.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, {(ВидЦен = &ВидЦеныНоменклатуры)}) КАК ЦеныНоменклатуры2
        ПО (ЦеныНоменклатуры2.Номенклатура = ЦеныНоменклатуры.Номенклатура)
            И (ЦеныНоменклатуры2.Цена = ЦеныНоменклатуры.Цена)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(, ) КАК КурсВалютыВидЦен
        ПО (КурсВалютыВидЦен.Валюта = ЦеныНоменклатуры2.ВидЦен.ВалютаЦены),
    РегистрСведений.КурсыВалют.СрезПоследних(, {(Валюта = &Валюта)}) КАК КурсВалютыДокумента
ГДЕ
    СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ
37 Maniac
 
10.08.19
21:05
как правильно сработает будет видно у клиента на базе.
38 Маленький Вопросик
 
10.08.19
21:14
твой запрос не будет отражать корректную информацию -  если ты используешь срез последних - используй Дату, во-первых, иначе он возьмет самый последний срез хоть от 2100 года - если кто-то поставит туда цену....

во-вторых - что за конфигурация - РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦен - ???????????????
39 Maniac
 
10.08.19
21:17
(38) нормально все. УНФ
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс