Имя: Пароль:
1C
 
Свернуть ТЗ и оставить лучшие записи
,
0 Maniac
 
16.11.18
12:07
Есть ТЗ

Колонка1 Колонка2 Колонка3 Колонка4

Нужно свернуть по минимальной К4 и полям К1 и К2.
Но чтобы в итоговой также осталась К3, которая соответствовала К1 К2 и К4 в исходной.

Одним запросом. Как?
1 ChMikle
 
16.11.18
12:08
автор , вы точно успешный АдинЭснег ????
2 Бубка Гоп
 
16.11.18
12:08
(0) яннп
3 Maniac
 
16.11.18
12:09
(1) это как то решает задачу?)
4 Вафель
 
16.11.18
12:09
отсортируй и лишнее удали
5 ChMikle
 
16.11.18
12:09
(3) просто столько разговоров про супер-пупер мегапрайс , и тут на тебе как тз свернуть
6 Maniac
 
16.11.18
12:10
4) ну это выборка.
А как без доп выборки. Хочу запросом получить итоговую таблицу.
7 Maniac
 
16.11.18
12:10
(5) ту просто не врубился в тему.
8 Галахад
 
гуру
16.11.18
12:10
(0) Постановка задачи не верная.
По логике второе условие выполняется всегда.
9 catena
 
16.11.18
12:11
Что значит "Одним запросом"? Сгруппировать, соединить с исходной для вытаскивания К3.
10 exwill
 
16.11.18
12:11
(0) Свернуть, потом соединить, какие проблемы?
11 ptiz
 
16.11.18
12:12
(0) Надо позвать программиста.
12 Maniac
 
16.11.18
12:12
Запрос сворачивает по указанным полям. 1 и 2.
К3 при этом приходится удалять из запроса. Так как тогда не получится лучшая К4.

А нужно чтобы в итоге К3 попала та которая соответствовала К4.

К3 строка - К4 число.

Если оставить все поля и свернуть по К4 - ниуха не свернется.
13 Maniac
 
16.11.18
12:12
(10) ну только так.... думал как то проще можно.
14 Maniac
 
16.11.18
12:13
Ок так значит так.
15 Вафель
 
16.11.18
12:14
Проще чем (4) не может быть
16 Вафель
 
16.11.18
12:14
+ на сервер БД ничего не передавать
17 ptiz
 
16.11.18
12:16
ВЫБРАТЬ
    ТЗ.К1,
    ТЗ.К2,
    МАКСИМУМ(ТЗ.К3) КАК К3,
    ТЗ.К4
ИЗ
    ТЗ КАК ТЗ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ТЗ.К1 КАК К1,
            ТЗ.К2 КАК К2,
            МИНИМУМ(ТЗ.К4) КАК К4
        ИЗ
            ТЗ КАК ТЗ
        
        СГРУППИРОВАТЬ ПО
            ТЗ.К1,
            ТЗ.К2) КАК МинК4
        ПО ТЗ.К1 = МинК4.К1
            И ТЗ.К2 = МинК4.К2
            И ТЗ.К4 = МинК4.К4

СГРУППИРОВАТЬ ПО
    ТЗ.К1,
    ТЗ.К2,
    ТЗ.К4
18 Maniac
 
16.11.18
12:16
Не красиво. запросом как то гламурнее
19 exwill
 
16.11.18
12:17
(13) Ну можно еще одним циклом. Но это уже не запросом.
20 exwill
 
16.11.18
12:19
(18) И гламурнее и лишний раз напоминает: "да, я могу писать запросы".
21 Ёпрст
 
16.11.18
12:20
(18) и дольше по времени выполнения
22 Вафель
 
16.11.18
12:21
(18) тебе шашечки или чтобы ехало?
23 exwill
 
16.11.18
12:24
(21) (22) Просто вы ничего не понимаете в гламуре.
"Даааа, я могу писаать запрооосы. А циклы не могу. У меня от них голова болит."
24 Maniac
 
16.11.18
12:25
(21) не дольше. если колонок намного больше и сложнее все.
Плюс еще какие то данные из 1С прибавляются.
25 Maniac
 
16.11.18
12:25
Для примитива проще может и по тз пробегать.
26 exwill
 
16.11.18
12:36
(24) Есть простое правило: чем все сложнее, тем с большей вероятностью будет проще не использовать запрос.
27 Maniac
 
16.11.18
12:37
(26) 1С учит что единственное правильное решение - всегда использовать запрос.
28 exwill
 
16.11.18
12:45
(27) То, подмножество языка запросов SQL, которое реализовано в платформе, не является полным по Тьюрингу. Или, говоря по-простому, 1С-овскими запросами нельзя вычислить абсолютно все. В сложных случаях вы будете сперва тратить время на то, чтобы выяснить: а вычислима ли ваша функция 1С-овским запросом (а это сама по себе не тривиальная задача), а затем все равно писать циклы. Не надо все вот так сразу за чистую монету принимать.
29 Maniac
 
16.11.18
12:47
Ну тут простая вещь описана. да очень плохо что через одно место в запросах приходится выполнять.
30 Maniac
 
16.11.18
12:54
но и сортировка очень фиговая вещь в 1с. одна из худших
31 Maniac
 
16.11.18
12:55
и опять таки придется тз выгружать. чистить. бежать. еще неизвестно что тут хуже из всего
32 exwill
 
16.11.18
12:58
(30) Можно и без сортировки, одним проходом.
33 Maniac
 
16.11.18
12:59
(32) одинаковые 1 и 2 раз бросаны по всей тз
34 ptiz
 
16.11.18
12:59
(27) "всегда использовать запрос" - ерунда полная.
Ты же 2+2 запросом не делаешь.
35 Мимохожий Однако
 
16.11.18
13:01
(1) ОФФ: Он, возможно, продал свой ник или сдал в аренду ))
Или взломали?
Я тоже удивлен его последними темами
36 exwill
 
16.11.18
13:03
(33) Ну и что? Запоминай в массив и дальше беги.
37 Вафель
 
16.11.18
13:03
(32) как без сортировки и без найти?
38 exwill
 
16.11.18
13:04
(37) Без найти - я не говорил.
39 Вафель
 
16.11.18
13:05
хотя если вспомогательную таблицу юзать, то можно.
40 exwill
 
16.11.18
13:07
(39) Зачем вспомогательную? Вспомогательная не нужна. Есть исходная и резултирующая.
41 Maniac
 
16.11.18
13:10
(40) исходная - ТЧ объекта.

Ее приделся в любом случае выгружать для обработки.
Очищать.
Временную сортировать.
Потом снова заполнять.

Где тут плюсы?
Найти вместо сортировки? да нунах!!!
еще хуже.

Потом в цикле бегать еще сравнивать строки между собой - тоже.

Короче не смешите тапочки. Тут запрос.
42 ptiz
 
16.11.18
13:17
(41) Поиск в ТЗ с индексированными колоноками - почти мгновенный.
43 Maniac
 
16.11.18
13:33
Вернемся к запросу...
нифига не хочет сворачивать!!!


ТектЗапроса =
    "ВЫБРАТЬ
    |    ТаблицаНоменклатуры.Артикул КАК Артикул,
    |    ТаблицаНоменклатуры.Производитель КАК Производитель,
    |    ТаблицаНоменклатуры.Партнер КАК Партнер,
    |    ТаблицаНоменклатуры.ЦенаПоставщика КАК ЦенаПоставщика,
    |    ТаблицаНоменклатуры.ЦенаПродажи КАК ЦенаПродажи,
    |    ТаблицаНоменклатуры.ОстаткиПоставщика КАК ОстаткиПоставщика
    |ПОМЕСТИТЬ ТаблицаНоменклатуры
    |ИЗ
    |    &ТаблицаНоменклатуры КАК ТаблицаНоменклатуры
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ИтоговаяТаблица.Артикул КАК Артикул,
    |    ИтоговаяТаблица.Производитель КАК Производитель,
    |    ИтоговаяТаблица.ЦенаПродажи КАК ЦенаПродажи,
    |    ТаблицаНоменклатуры.Партнер КАК Партнер,
    |    ТаблицаНоменклатуры.ЦенаПоставщика КАК ЦенаПоставщика,
    |    ТаблицаНоменклатуры.ОстаткиПоставщика КАК ОстаткиПоставщика
    |ИЗ
    |    (ВЫБРАТЬ
    |        СвернутаяТаблица.Артикул КАК Артикул,
    |        СвернутаяТаблица.Производитель КАК Производитель,
    |        МИНИМУМ(СвернутаяТаблица.ЦенаПродажи) КАК ЦенаПродажи
    |    ИЗ
    |        ТаблицаНоменклатуры КАК СвернутаяТаблица
    |    
    |    СГРУППИРОВАТЬ ПО
    |        СвернутаяТаблица.Артикул,
    |        СвернутаяТаблица.Производитель) КАК ИтоговаяТаблица
    |        ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаНоменклатуры КАК ТаблицаНоменклатуры
    |        ПО ИтоговаяТаблица.Артикул = ТаблицаНоменклатуры.Артикул
    |            И ИтоговаяТаблица.Производитель = ТаблицаНоменклатуры.Производитель
    |
    |УПОРЯДОЧИТЬ ПО
    |    Артикул";
44 ptiz
 
16.11.18
13:35
(43) А соединение по ЦенаПродажи где?
45 Maniac
 
16.11.18
13:36
Не только не сворачивает. Но и тупо ставит минимальную цену по всем строкам
46 Maniac
 
16.11.18
13:37
(44) емае.
47 Ёпрст
 
16.11.18
13:38
и нет группировки в общем запросе
48 SeiOkami
 
16.11.18
13:45
ВЫБРАТЬ
    ТЗ.К1 КАК К1,
    ТЗ.К2 КАК К2,
    ТЗ.К3 КАК К3,
    ТЗ.К4 КАК К4
ПОМЕСТИТЬ ВТ
ИЗ
    ТЗ КАК ТЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Минимум.К1 КАК К1,
    Минимум.К2 КАК К2,
    ВТ.К3 КАК К3,
    Минимум.К4 КАК К4
ИЗ
    (ВЫБРАТЬ
        ВТ.К1 КАК К1,
        ВТ.К2 КАК К2,
        МИНИМУМ(ВТ.К4) КАК К4
    ИЗ
        ВТ КАК ВТ
    
    СГРУППИРОВАТЬ ПО
        ВТ.К1,
        ВТ.К2) КАК Минимум
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ
        ПО Минимум.К1 = ВТ.К1
            И Минимум.К2 = ВТ.К2
            И Минимум.К4 = ВТ.К4
49 Maniac
 
16.11.18
13:47
Она не нужна.
Есть сортировка в конце. этого достаточно.
Вроде работает
50 Maniac
 
16.11.18
14:04
Индексацию только добавил сразу во временную
51 Maniac
 
16.11.18
14:04
20к строк за секунду выхлопнуло и загрузило снова.
52 Maniac
 
16.11.18
14:05
10к.
53 aleks_default
 
16.11.18
14:18
Вот это каминаут!
54 АгентБезопасной Нацио
 
16.11.18
14:35
маня открывает для себя запросы..
55 GANR
 
16.11.18
15:03
(0) А можешь привести табличку с несколькими строчками до и после свертки в качестве примера? Чтоб форумчане могли проверить правильный запрос у них или нет.
56 Maniac
 
16.11.18
15:04
Тема закрыта. Вопрос решен.

(43) (44) и (50). решение вопроса.
57 Вафель
 
16.11.18
15:19
(56) циклы не осилил?
58 Maniac
 
16.11.18
15:21
(57) продолжай работать циклами.