Имя: Пароль:
1C
1С v8
Отобрать максимальное из количеств в запросе
0 dkonakov
 
18.10.13
13:43
Есть такой запрос:
ВЫБРАТЬ
ДоговорыКонтрагентов.ОсновнойМенеджерПокупателя КАК Менеджер,
КОЛИЧЕСТВО(ДоговорыКонтрагентов.ОсновнойМенеджерПокупателя) КАК Количество
    ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.ОсновнойМенеджерПокупателя.Ссылка <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
И ДоговорыКонтрагентов.Владелец.Ссылка = &Ссылка
И ДоговорыКонтрагентов.ВидДоговора.Ссылка = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем)        И ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ    
    СГРУППИРОВАТЬ ПО
        ДоговорыКонтрагентов.ОсновнойМенеджерПокупателя


Как-то можно отобрать максимальное количество и вывести только его.
Если максимальных значений 2, выводить оба.
?
1 Maxus43
 
18.10.13
13:46
разве может быть 2 основных вобще?
2 Tateossian
 
18.10.13
13:47
(0) Не разыменовывай по полю .ссылка - это не оптимально
3 dkonakov
 
18.10.13
13:48
(1) у меня переписанная УТ. У меня основнойМенеджерКонтрагента - это поле договора. Не спрашивайте почему, специфика организации.
4 pessok
 
18.10.13
13:48
делай пакет: 3 запроса
первый - получаешь количество договоров по менеджеру
второй - выбираешь из результата первого запроса первый элемент с сортировкой количества по убыванию
третий - снова перебираешь первый, с условием, где количество = твоему максимальному количеству

как-то пятнично получилось
5 dkonakov
 
18.10.13
13:48
(2) Спасибо за совет. А как выбрать максимальное не знаете?
6 exwill
 
18.10.13
13:49
(0) Два максимальных количества - это круто.
Одно максимальное, а другое еще максимальнее. Так что ли?
7 pessok
 
18.10.13
13:50
+(4) но, вообще, (0) попахивает бредом
8 pessok
 
18.10.13
13:51
(6) вангую, что имелось ввиду
6 - вася
6 - петя
9 dk
 
18.10.13
13:51
Вложенный запрос поверх твоего
Выбрать
   МАКСИМУМ(Количество) Количество
ИЗ
(<тут твой текст запроса>)
10 dkonakov
 
18.10.13
13:51
(6) Нет, они равны, значит они оба попадают в группу максимального числа.
11 dkonakov
 
18.10.13
13:53
(9) Делал, выводит тот же самый результат.
12 MKZM
 
18.10.13
13:53
имеющие having
13 exwill
 
18.10.13
13:53
(10) Т.е тебе надо вывести два одинаковых максимальных числа?
А зачем? Они же равны. Чем одно не устраивает?
14 MKZM
 
18.10.13
13:54
имеющие МАКСИМУМ(Количество)
15 exwill
 
18.10.13
13:56
(14)  МАКСИМУМ(Количество)=чему?
16 dk
 
18.10.13
13:57
(11) так не бывает
17 dkonakov
 
18.10.13
13:57
Я поясню для чего мне это. Я отбираю максимальные количества договоров менеджеров, если их равное количество, то есть количество строк в запросе > 1 то перехожу к следующему контрагенту.
Если у меня 1 максимальное значение, то я выполняю определенное действие с контрагентом.
18 mrDSide
 
18.10.13
13:57
(0) делаешь так:
ВЫБРАТЬ
ДоговорыКонтрагентов.ОсновнойМенеджерПокупателя КАК Менеджер,
КОЛИЧЕСТВО(ДоговорыКонтрагентов.ОсновнойМенеджерПокупателя) КАК Количество
ПОМЕСТИТЬ врТаб
    ИЗ
Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
ДоговорыКонтрагентов.ОсновнойМенеджерПокупателя.Ссылка <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
И ДоговорыКонтрагентов.Владелец.Ссылка = &Ссылка
И ДоговорыКонтрагентов.ВидДоговора.Ссылка = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем)        И ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ    
    СГРУППИРОВАТЬ ПО
        ДоговорыКонтрагентов.ОсновнойМенеджерПокупателя;

ВЫБРАТЬ 1, МАКСИМУМ(врТаб.Количество) ИЗ врТаб КАК врТаб СГРУППИРОВАТЬ ПО 1
19 mrDSide
 
18.10.13
13:58
(17) ВЫБРАТЬ Менеджер, МАКСИМУМ(врТаб.Количество) ИЗ врТаб КАК врТаб СГРУППИРОВАТЬ ПО Менеджер
20 dkonakov
 
18.10.13
13:59
(16) Вы правы, прощу прощения, группировку не убрал. Сейчас проверю на другом контрагенте.
21 dk
 
18.10.13
13:59
(18) для максимума группировка не обязательна
22 exwill
 
18.10.13
13:59
(17) СОЕДИНЕНИЕ тебе поможет.
23 pessok
 
18.10.13
13:59
(17) противоречит (0), блджад!
если (0), то (4), если (17), то (9)
24 dkonakov
 
18.10.13
14:02
(21) да, работает, но если я буду отображать в запросе поле Менеджера, то максимум не сработает, увы.
ВЫБРАТЬ
МАКСИМУМ(ВложенныйЗапрос.Количество) КАК Количество,
ВложенныйЗапрос.Менеджер
ИЗ

Выведет всех.

ВЫБРАТЬ
МАКСИМУМ(ВложенныйЗапрос.Количество) КАК Количество2,
ИЗ

Выведет только максимальное значение.
25 mrDSide
 
18.10.13
14:03
(0) + (17) на 100% решает (4)
26 dk
 
18.10.13
14:06
(24) а теперь надо поместить твой запрос во временную а потом сделать
Выбрать
   Менеджер
   , Количество
Из
  <Временая>
ИМЕЮЩИЕ или ГДЕ
  Количество = МАКСИМУМ(КОЛИЧЕСТВО)
27 MKZM
 
18.10.13
14:07
(15) Что-то вроде этого
ВЫБРАТЬ
    ВложенныйЗапрос.Документ,
    ВложенныйЗапрос.КоличествоСтрок
ИЗ
    (ВЫБРАТЬ
        ЗаказПокупателяТовары.Ссылка КАК Документ,
        КОЛИЧЕСТВО(ЗаказПокупателяТовары.НомерСтроки) КАК КоличествоСтрок
    ИЗ
        Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
    
    СГРУППИРОВАТЬ ПО
        ЗаказПокупателяТовары.Ссылка) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.Документ,
    ВложенныйЗапрос.КоличествоСтрок

ИМЕЮЩИЕ
    ВложенныйЗапрос.КоличествоСтрок = МАКСИМУМ(ВложенныйЗапрос.КоличествоСтрок)
28 dkonakov
 
18.10.13
14:07
(26) Хорошая мысль, спасибо, сейчас попробую.
29 pessok
 
18.10.13
14:09
(28) супер! :) когда пишут текстом - молчок, когда тоже самое готовым кодом - радость :) Вы таки так ничему не научитесь
30 dkonakov
 
18.10.13
14:11
(27) нет, так не получится, только что проверял.
31 User_Agronom
 
18.10.13
14:14
(0) Из того что вижу: ты сворачиваешь по основному менеджеру. Поэтому в результате каждый менеджер будет один раз.
Если нужно максимальное - попробуй упорядочить и взять первую строку.
32 dkonakov
 
18.10.13
14:17
(29) я посмотрел на предложенное Вами решение (4). Давайте подискутируем, что вы имели ввиду.

1. Оставляем по сути мой первый запрос.
2. Выбрать ПЕРВЫЕ 1 менеджер, количество из РезультатЗапроса Сортировка по убыванию.
3. Выбрать из 1 тоже самое, но с условием что количество равно  количеству из 2.
Верно вас понял?
33 pessok
 
18.10.13
14:19
(32) верно. только не из результата запроса, а из временной таблицы
34 dkonakov
 
18.10.13
14:24
(33) То есть я помещаю результат запроса в ВТ. Ок. Сейчас изображу и продемонстрирую :)
35 dkonakov
 
18.10.13
15:00
(33)
А если вот так?

ВЫБРАТЬ
    ДоговорыКонтрагентов.ОсновнойМенеджерПокупателя КАК Менеджер,
    КОЛИЧЕСТВО(ДоговорыКонтрагентов.ОсновнойМенеджерПокупателя) КАК Количество
ПОМЕСТИТЬ ВРЕМЕННАЯ
ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
    ДоговорыКонтрагентов.ОсновнойМенеджерПокупателя.Ссылка <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
    И ДоговорыКонтрагентов.Владелец.Ссылка = &Ссылка
    И ДоговорыКонтрагентов.ВидДоговора.Ссылка = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем)
    И ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ

СГРУППИРОВАТЬ ПО
    ДоговорыКонтрагентов.ОсновнойМенеджерПокупателя;        

ВЫБРАТЬ Менеджер, Количество ИЗ ВРЕМЕННАЯ ГДЕ Количество В (ВЫБРАТЬ ПЕРВЫЕ 1 КОЛИЧЕСТВО из ВРЕМЕННАЯ УПОРЯДОЧИТЬ ПО КОЛИЧЕСТВО УБЫВ);
36 dkonakov
 
18.10.13
15:57
Хочется всех от души поблагодарить за оказанное содействие, всё у меня получилось, как задумывалось!
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший