Имя: Пароль:
1C
 
Простой запрос по максимуму. Вроде написал, но как-то коряво.
,
0 Галахад
 
гуру
08.04.19
10:24
Пример. Допустим нужно выбрать из табличной части документа "Номенклатуру" у которой "Сумма" самая большая.
Накропал вот так. Можно как-то улучшить?

ВЫБРАТЬ
    ЧекККМТовары.Ссылка,
    МАКСИМУМ(ЧекККМТовары.Сумма) КАК Сумма
ПОМЕСТИТЬ Т
ИЗ
    Документ.ЧекККМ.Товары КАК ЧекККМТовары
ГДЕ
    ЧекККМТовары.Ссылка = &Ссылка

СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Т.Ссылка,
    Т.Сумма,
    ЧекККМТовары.Номенклатура
ИЗ
    Т КАК Т
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары
        ПО Т.Сумма = ЧекККМТовары.Сумма
            И Т.Ссылка = ЧекККМТовары.Ссылка
1 Ёпрст
 
08.04.19
10:28
(0) в первом запросе выкинуит из селекта ссылку и группировку по ней
2 Ёпрст
 
08.04.19
10:29
во втором запросе поставить условие на ссылка
3 Fram
 
08.04.19
10:29
Все верно вроде. Что не нравится?
4 Ёпрст
 
08.04.19
10:30
и выкинуть из условия соединения условие на  ссылка
5 RomanYS
 
08.04.19
10:31
(0) Если таких строк несколько, возвращаться должна одна или все?
6 ДенисЧ
 
08.04.19
10:32
(4) А если будет несколько чеков с одинаковой суммой?
7 RomanYS
 
08.04.19
10:32
(0) Если есть условие  = &Ссылка, то лучше выбрать первые 1
8 Галахад
 
гуру
08.04.19
10:34
(2) Это пример. В реальности не будет условия по конкретной ссылке.

(3) Работать-то работает. Но может и другие варианты есть?

(5) Вообще одну. Но это пока не существенно.
9 Ёпрст
 
08.04.19
10:34
(6) он всё равно в условии в первом запросе на 1 чек
10 unregistered
 
08.04.19
10:35
Почему группировка должна работать быстрее банального ВЫБРАТЬ ПЕРВЫЕ 1 ИЗ ... УПОРЯДОЧИТЬ ПО Сумма?
11 unregistered
 
08.04.19
10:37
Или я чего-то не понял, или запрос в (0) вообще никаким боком не относится к сформулированной задаче. Но тогда почему только я это вижу?
12 Галахад
 
гуру
08.04.19
10:38
(11) Может я не четко сформулировал задачу?
13 unregistered
 
08.04.19
10:38
к (10)* "УБЫВ" забыл.
...УПОРЯДОЧИТЬ ПО Сумма УБЫВ.
14 Галахад
 
гуру
08.04.19
10:39
Убрал условие из первого запроса. Оно видимо смущает...

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


СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Т.Ссылка,
    Т.Сумма,
    ЧекККМТовары.Номенклатура
ИЗ
    Т КАК Т
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары
        ПО Т.Сумма = ЧекККМТовары.Сумма
            И Т.Ссылка = ЧекККМТовары.Ссылка
15 RomanYS
 
08.04.19
10:41
(8) >> Вообще одну. Но это пока не существенно.
Момент достаточно принципиальный, чтобы потом (когда станет существенно) это разрулить будешь костыли пристраивать.

Ещё вопрос: может ли в одном чеке быть одна номенклатура в нескольких строках?
16 unregistered
 
08.04.19
10:42
(12) Я же не знаю что именно тебе нужно. Но запрос точно не выбирает самую большую по сумме номенклатуру. Он тупо сгруппирует строки с одинаковыми номенклатурами (если такие вообще будут в чеке) оставив максимальные суммы. Ну типа если есть чек с двумя строками "Номенклатура1" но с разными суммами, то в результате этого запроса останется одна строка с "Номенклатура1" с наибольшей суммой.
17 RomanYS
 
08.04.19
10:44
(16) ненене. Перечитай. Нет там группировки по номенклатуре, только по документу.
18 Галахад
 
гуру
08.04.19
10:46
(15) Хорошо. Ответ: несколько.

(16) Спасибо, что поправил. Мне нужно в каждом документе выбрать "Номенклатуру" с максимальной "Суммой"
19 unregistered
 
08.04.19
10:46
(17) Ааааа. Увидел! Извиняюсь.
20 trad
 
08.04.19
10:48
(14)
ВЫБРАТЬ
    ЧекККМТовары.Ссылка,
    МАКСИМУМ(ЧекККМТовары.Сумма) КАК Сумма
ПОМЕСТИТЬ Т
ИЗ
    Документ.ЧекККМ.Товары КАК ЧекККМТовары


СГРУППИРОВАТЬ ПО
    ЧекККМТовары.Ссылка
;

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Т.Ссылка,
    ЧекККМТовары.Сумма,
    ЧекККМТовары.Номенклатура
ИЗ
    Т2 КАК Т
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары
        ПО Т.НомерСтроки = ЧекККМТовары.НомерСтроки
            И Т.Ссылка = ЧекККМТовары.Ссылка
21 trad
 
08.04.19
10:49
(20) если в чеке несколько максимальных сумм, то получить первую
22 _Дайвер_
 
08.04.19
10:52
(10) +
23 Галахад
 
гуру
08.04.19
10:55
Понятно. Всем спасибо.