Имя: Пароль:
1C
1С v8
Нужно по каждому заказчику отобрать три последних заказа по дате.
🠗 (Волшебник 27.06.2017 17:39)
0 Ivan_495
 
27.06.17
15:58
Есть документы заказ с датами, в них есть заказчики. Нужно по каждому заказчику отобрать три последних заказа по дате.
1 Волшебник
 
модератор
27.06.17
15:59
Тебе нужно, ты и делай.

Не ставьте "общих" вопросов. Если Вы даже не знаете, как подступиться к задаче, все равно скажите, какие у Вас есть идеи.
2 Ivan_495
 
27.06.17
15:59
есть запрос
ВЫБРАТЬ ПЕРВЫЕ 10
    ЗаказТураУчастники.Участник,
    трипосл.Дата,
    трипосл.Ссылка
ИЗ
    Документ.ЗаказТура.Участники КАК ЗаказТураУчастники
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ЗаказТураУчастники.Ссылка.Дата КАК Дата,
            ЗаказТураУчастники.Ссылка.Ссылка КАК Ссылка,
            ЗаказТураУчастники.Участник КАК Участник
        ИЗ
            Документ.ЗаказТура.Участники КАК ЗаказТураУчастники
        ГДЕ
            ЗаказТураУчастники.Ссылка.Проведен = ИСТИНА
            И ЗаказТураУчастники.Ссылка.Аннулирован = ЛОЖЬ
            И ЗаказТураУчастники.Ссылка.ПометкаУдаления = ЛОЖЬ
        
        СГРУППИРОВАТЬ ПО
            ЗаказТураУчастники.Ссылка.Ссылка,
            ЗаказТураУчастники.Ссылка.Дата,
            ЗаказТураУчастники.Участник) КАК трипосл
        ПО ЗаказТураУчастники.Участник = трипосл.Участник
ГДЕ
    ЗаказТураУчастники.Ссылка.Проведен = ИСТИНА
    И ЗаказТураУчастники.Ссылка.Аннулирован = ЛОЖЬ
    И ЗаказТураУчастники.Ссылка.ПометкаУдаления = ЛОЖЬ
3 Ivan_495
 
27.06.17
16:00
не пойму как при соединении указать, чтобы отбиралось только три документа
4 Волшебник
 
модератор
27.06.17
16:02
ВЫБРАТЬ ПЕРВЫЕ 3
...
УПОРЯДОЧИТЬ ПО Дата УБЫВ
5 Ivan_495
 
27.06.17
16:04
ВЫБРАТЬ
    ЗаказТураУчастники.Участник,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказТураУчастники.Ссылка) КАК Ссылка
ПОМЕСТИТЬ табл
ИЗ
    Документ.ЗаказТура.Участники КАК ЗаказТураУчастники

СГРУППИРОВАТЬ ПО
    ЗаказТураУчастники.Участник
6 Адинэснег
 
27.06.17
16:05
япать каша
7 Адинэснег
 
27.06.17
16:05
а если в ТЧ 0-2 участника?
8 Адинэснег
 
27.06.17
16:06
как определить "последнесть" участника? по номеру строки?
УПОРЯДОЧИТЬ ПО НомерСтроки УБЫВ
9 Ivan_495
 
27.06.17
16:07
ВЫБРАТЬ
    ЗаказТураУчастники.Участник,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказТураУчастники.Ссылка) КАК КолДок
ПОМЕСТИТЬ табл
ИЗ
    Документ.ЗаказТура.Участники КАК ЗаказТураУчастники

СГРУППИРОВАТЬ ПО
    ЗаказТураУчастники.Участник

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказТураУчастники.Ссылка) <= 3
10 Адинэснег
 
27.06.17
16:08
аа, тьфу на проектировщика/архитектора вашей системы
11 Адинэснег
 
27.06.17
16:14
сделай группировку и обходи с группировками
12 Ivan_495
 
27.06.17
16:18
да having должен быть
13 Адинэснег
 
27.06.17
16:19
ПоследниеТуры = Новый Соответствие;
    
    Запрос = НОвый Запрос("ВЫБРАТЬ
                          |    ЗаказТураУчастники.Ссылка КАК Ссылка,
                          |    ЗаказТураУчастники.Участник КАК Участник,
                          |    ЗаказТураУчастники.Ссылка.Дата КАК Дата
                          |ИЗ
                          |    Документ.ЗаказТура.Участники КАК ЗаказТураУчастники
                          |ГДЕ
                          |    ЗаказТураУчастники.Ссылка.Проведен
                          |    И НЕ ЗаказТураУчастники.Ссылка.Аннулирован
                          |
                          |УПОРЯДОЧИТЬ ПО
                          |    ЗаказТураУчастники.Ссылка.Дата УБЫВ
                          |ИТОГИ
                          |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Ссылка)
                          |ПО
                          |    Участник");
    ВыборкаУчастников = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаУчастников.Следующий() Цикл
        МассивТуров = Новый Массив;
        
        ВыборкаТуров = ВыборкаУчастников.Выбрать();
        
        Пока ВыборкаТуров.Следующий() Цикл
             МассивТуров.Добавить(ВыборкаТуров.Ссылка);
             Если МассивТуров.Количество()=3 Тогда Прервать; КонецЕсли;
        КонецЦикла;
        
        ПоследниеТуры.Вставить(ВыборкаУчастников.Участник, ПоследниеТуры);
    КонецЦикла;
14 Ivan_495
 
27.06.17
16:21
(13) да в скд нужно. иначе бы не спрашивал. запрос нужон.
15 Адинэснег
 
27.06.17
16:22
пардон в последне строке
ПоследниеТуры.Вставить(ВыборкаУчастников.Участник, МассивТуров);
16 Адинэснег
 
27.06.17
16:22
заполни таблицу, передай как внешнийисточник)
17 zladenuw
 
27.06.17
16:25
через объединение наборов в скд. и там (4)
18 Ivan_495
 
27.06.17
16:26
ВЫБРАТЬ ПЕРВЫЕ 50
    ЗаказТураУчастники.Участник,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказТураУчастники.Ссылка) КАК Ссылка
ИЗ
    Документ.ЗаказТура.Участники КАК ЗаказТураУчастники

СГРУППИРОВАТЬ ПО
    ЗаказТураУчастники.Участник

ИМЕЮЩИЕ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЗаказТураУчастники.Ссылка) <= 3
19 Ivan_495
 
27.06.17
16:27
вот такой запрос отрабатывает, но не могу получить ссылку на документы
20 Fragster
 
гуру
27.06.17
16:30
похоже на вопрос с собеседования. ответ гуглится за 5 минут,
21 Ivan_495
 
27.06.17
16:34
(20) нагугли
22 Адинэснег
 
27.06.17
16:39
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗаказТураУчастники.Участник КАК Участник
ПОМЕСТИТЬ Участники
ИЗ
    Документ.ЗаказТура.Участники КАК ЗаказТураУчастники
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    Участники.Участник КАК Участник,
    ЗаказТураУчастники.Ссылка КАК Ссылка
ИЗ
    Участники КАК Участники
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказТура.Участники КАК ЗаказТураУчастники
        ПО (ЗаказТураУчастники.Ссылка В
                (ВЫБРАТЬ ПЕРВЫЕ 3
                    ЗаказТураУчастникиУ.Ссылка
                ИЗ
                    Документ.ЗаказТура.Участники КАК ЗаказТураУчастникиУ
                ГДЕ
                    ЗаказТураУчастникиУ.Участник = Участники.Участник
                УПОРЯДОЧИТЬ ПО
                    ЗаказТураУчастникиУ.Ссылка.Дата УБЫВ))
23 Адинэснег
 
27.06.17
16:39
ну и условия на ложи
24 Адинэснег
 
27.06.17
16:40
наложи
25 Адинэснег
 
27.06.17
16:41
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗаказТураУчастники.Участник КАК Участник
ПОМЕСТИТЬ Участники
ИЗ
    Документ.ЗаказТура.Участники КАК ЗаказТураУчастники
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    Участники.Участник КАК Участник,
    ЗаказТураУчастники.Ссылка КАК Ссылка
ИЗ
    Участники КАК Участники
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказТура.Участники КАК ЗаказТураУчастники
        ПО (ЗаказТураУчастники.Ссылка В
                (ВЫБРАТЬ ПЕРВЫЕ 3
                    ЗаказТураУчастникиУ.Ссылка
                ИЗ
                    Документ.ЗаказТура.Участники КАК ЗаказТураУчастникиУ
                ГДЕ
                    ЗаказТураУчастникиУ.Участник = Участники.Участник
                    И ЗаказТураУчастникиУ.Ссылка.Проведен
                    И НЕ ЗаказТураУчастникиУ.Ссылка.Аннулирован
                УПОРЯДОЧИТЬ ПО
                    ЗаказТураУчастникиУ.Ссылка.Дата УБЫВ))
26 Ivan_495
 
27.06.17
16:41
(25) круто. спасибо
27 Адинэснег
 
27.06.17
16:43
(26) привет СУБД передавай :-D
28 Волшебник
 
модератор
27.06.17
16:44
Что вы тут делаете? Ответ был в (4)
29 Fragster
 
гуру
27.06.17
16:45
(27) как ни странно, при правильных индексах это не медленнее трех соединений с самим собой с временными таблицами
30 Ivan_495
 
27.06.17
17:12
да тормозит мощно
31 ColonelAp4u
 
27.06.17
17:36
(30) Почему не хочешь сделать так как описали в 4? и быстро и то что тебе нужно
32 Ivan_495
 
27.06.17
17:38
(31) да вроде пробовал просто левым связать. вроде не те данные
33 kumena
 
27.06.17
17:42
> Что вы тут делаете? Ответ был в (4)

читай
Нужно по КАЖДОМУ заказчику отобрать три последних заказа по дате.
34 kumena
 
27.06.17
17:44
> Почему не хочешь сделать так как описали в 4? и быстро и то что тебе нужно

кто еще хочет хочет цикла?
35 kumena
 
27.06.17
17:50
нужно выбрать все заказы,
сгруппировать по контрагентам,
пронумеровать эти заказы назад по времени (или в какой последовательности они должны быть 1,2,3)
потом отобрать все эти документы с нужными номерами.

это все можно сделать одним запросом
36 kumena
 
27.06.17
17:51
ну или поставить запрос из 4 в цикл.
37 Ivan_495
 
27.06.17
17:58
(35) пронумеровать в запросе
38 Ivan_495
 
27.06.17
18:09
хотелось бы увидеть этот запрос
39 Адинэснег
 
28.06.17
07:17
(30) добавь индекс
40 Адинэснег
 
28.06.17
07:45
ветку утопил, так и не поняв что его решение - не решение
форум пословиц и поговорок
41 Ivan_495
 
28.06.17
09:38
(39) индекс по участнику добавил скорость не увеличилась

ВЫБРАТЬ РАЗЛИЧНЫЕ
    ЗаказТураУчастники.Участник КАК Участник
ПОМЕСТИТЬ Участники
ИЗ
    Документ.ЗаказТура.Участники КАК ЗаказТураУчастники
ИНДЕКСИРОВАТЬ ПО
    Участник

;
42 Ivan_495
 
28.06.17
09:48
(40) сорри ваш запрос работает нормально по скорости.
43 Ivan_495
 
28.06.17
10:15
оказывается тормоза появляются когда к запросу добавляешь условия
ГДЕ
    ЗаказТураУчастники.Ссылка.Проведен = ИСТИНА
    И ЗаказТураУчастники.Ссылка.Аннулирован = ЛОЖЬ
    И ЗаказТураУчастники.Ссылка.ПометкаУдаления = ЛОЖЬ
44 kumena
 
28.06.17
14:38
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn