Имя: Пароль:
1C
 
Запрос по табличной части. Функция Максимум(Цена). Сбивает порядок строк
🠗 (Волшебник 02.09.2022 08:37)
,
0 Eugeneer
 
02.09.22
07:16
Короче в запрос передается ТЧ. Эта ТЧ во временной таблице запроса (там нельзя применять функции).

Потом идет запрос в помещенной таблице и там применяется Максимум. В таблице есть дубли. Чтобы убрать дубли использую Максимум - чтобы в результате не было их.

Все нормально работает. Но в результате все строки как попало ВООБЩЕ.

А нужно чтобы сохранялось сортировка по номеру строки. Но если я номер строки использую в запросе - то максимум не сработает. Единственный вариант это еще использовать Максимум(НомерСтроки)... работает. но тогда запрос в 4 раза почему то сразу медленней.
1 Eugeneer
 
02.09.22
07:17
А с сортировкой бред какой то совсем.

Причем я не понимаю, потому что я передаю ТЧ - она нормальная. По порядку.
2 Eugeneer
 
02.09.22
07:18
Короче как из ТЧ убрать дубли, но сохранить про этом порядок строк который там.
3 Ryzeman
 
02.09.22
07:29
ВЫБРАТЬ
МИНИМУМ(ТабЧасть.НомерСтроки) КАК НомерСтроки,
ТабЧасть.Номенклатура КАК Номенклатура
ИЗ
ТабЧасть КАК ТабЧасть
СГРУППИРОВАТЬ ПО
ТабЧасть.Номенклатура
УПОРЯДОЧИТЬ ПО
МИНИМУМ(ТабЧасть.НомерСтроки) ВОЗР

P.S. не проснулся? Или знание SQL - ненужное?)
4 НафНаф
 
02.09.22
07:30
>>там нельзя применять функции

конкретнее можно?
5 AneJIbcuH
 
02.09.22
07:31
(3) Так пишет же, что применил Максимум(НомерСтроки). Но производительность падает
6 Eugeneer
 
02.09.22
07:31
(3) я про то и пишу) но тогда запрос медленнее) ладно фиг с ним.э лишних пара секунд на 10к позиций.
7 Ryzeman
 
02.09.22
07:32
(6) Ты не про то пишешь. На кой чёрт ты максимум от номенклатуры берёшь, когда по ней надо группировать?
8 Ryzeman
 
02.09.22
07:33
(5) с 0.000000001 мс до 0.000000004?
Если у него там по 100к строк, пусть индексирует и правильно по индексу выбирает...
9 Eugeneer
 
02.09.22
07:34
тут еще больше вопрос

|    МАКСИМУМ(ВременнаяДанныеПоиска.Поле_ЦенаЗакупки) КАК ЦенаЗакупки,
|    МАКСИМУМ(ВременнаяДанныеПоиска.НомерСтроки) КАК НомерСтроки,


тут еще больше вопрос к результату. Не получится ли что вернется цена максимум минимальной строки. (если вдруг цена больше оказалось у номера строки меньше).
10 Eugeneer
 
02.09.22
07:35
(7) максимум по цене.
11 НафНаф
 
02.09.22
07:35
(9) а ты еще и SQL не знаешь, браво
12 RomanYS
 
02.09.22
07:36
(9) глупейший вопрос
13 Eugeneer
 
02.09.22
07:37
))) я понял что вернется и максимум цены и максимум номера из дублей.

А хотелось бы чтобы вернулся номер строки именно той где был максимум.  Короче 1С видимо не может так.
14 Eugeneer
 
02.09.22
07:37
либо придется делать несколько соединений.... но ради номера строки как то не комильфо.
15 AneJIbcuH
 
02.09.22
07:40
(14) Одно соединение
16 Eugeneer
 
02.09.22
07:42
ну что одно. номер строки не соответствует максимальной цене.
17 Ryzeman
 
02.09.22
07:44
(13) >>Короче 1С видимо не может так

При чём тут 1с, если речь про запрос - читай чистая задачка на SQL...
Сгруппируй по номеру строки и сделай внутреннее с номенклатурой. Это тривиальная задача
18 СеменовСемен
 
02.09.22
07:45
Если тз по номенклатуре отсортирована, то в 1 проход без запросов это можно вычислить.
Будет существенно быстрее
19 Eugeneer
 
02.09.22
07:45
его только можно будет достать если еще раз соедить с ТЧ по группировке и Цена = Максимум(Цена)
20 Ryzeman
 
02.09.22
07:46
(17) Ерунду написал. Наоборот - сгруппируй по номенклатуре и привяжи номер. Останется только решить что делать когда у тебя в 100 строках одинаковая номенклатура и цена, какую брать
21 Eugeneer
 
02.09.22
07:49
1С не может выбирать поля которые не сгруппированы.

на номер строки только функцию приходится накладывать. а это значит что по она покажет не реальную строку с МАКС ценой, а максимальную строку из нескольких дублей.
22 НафНаф
 
02.09.22
07:50
(21) это SQL, а не 1С
23 Eugeneer
 
02.09.22
07:51
ну ок . ладно. понятно. будет работать как может
24 RomanYS
 
02.09.22
08:17
(23) всё решаемо. Подобные задачи регулярно здесь мелькают как тестовые. Вот например
Получение последних контрагентов на каждый день продаж
Кстати там кажется интересовались зачем такие задачи могут понадобиться)
25 Eugeneer
 
02.09.22
08:20
(24) я знаю что решаемо. если еще добавить еще раз соединение с таблицей. А я этого не хочу.
26 RomanYS
 
02.09.22
08:22
27 Eugeneer
 
02.09.22
08:22
там задача проще. поэтому можно соединений добавлять сколько влезет.

у меня огромная таблица. если я ее буду много раз использовать. то это все замедление
28 RomanYS
 
02.09.22
08:23
(25) странная постановка, тебе это или нужно или нет
29 Eugeneer
 
02.09.22
08:34
(28) забудь)))

у меня не решаемая задача))) Я только что понял что она не решится вообще никак.

)) Потому что у меня там 3 цены. разных колонок. И везде максимум используется.

Это значит что среди одинаковых строк может быть максимум этих трех цен совершенно хаотично. Поэтому и номер строки вообще безсмыслен.

Другое дело это сортировка.
30 Eugeneer
 
02.09.22
08:36
разве что можно сделать красиво так это отсортировать по номенклатуре.

а потом использовать МИНИМУМ(НомерСтроки) и МАКСИМУМ (номер строки). и в отчет вывести что то типа номера строки с какой по какую (мин-макс)
31 Гений 1С
 
гуру
02.09.22
08:37
(2) в ТЧ есть номер строки, диядя.
32 Eugeneer
 
02.09.22
08:38
Я не уверен что там больше двух дублей вообще будет. ъотя может быть. Вижу идеальням вариантом это и мин и макс задействовать.
33 СеменовСемен
 
02.09.22
08:42
у тебя есть таблица. прошелся по ней, пометил те строки которые с максимумом, выгрузил их в отдельную таблицу и ее уже в запрос для дальнейшей обработки
34 Eugeneer
 
02.09.22
08:45
Как всегда я гениально нахожу КРАСИВОЕ РЕШЕНИЕ.

Мало того что убиваются дубли и я не просто вывожу таблицу бюез дублей.

Теперь у меня в отчете видно -

если не было дублей - то просто номер строки.
А если были дубли - то я сделал вывод Мин-Макс диапазона в котором эхти дубли)))


КРАСОТА. теперь юзер будет сразу видеть нормальные строки, и если не нормальные - то знать где они))
35 НафНаф
 
02.09.22
08:53
(34) как это решает твое "номер строки не соответствует максимальной цене"?
36 forforumandspam
 
02.09.22
08:57
Хоть бы раз текст запроса показал
37 Eugeneer
 
02.09.22
09:00
(35) как раз решает. мало того еще говорит юзеру диапазон строк с дублями
38 Eugeneer
 
02.09.22
09:02
мне больше нужна была даже сортировка (чтобы осталась таже). Потому что без номеров строк вообще бред выводился - вся номенклатура хаотично. при этом мне не нужна была сортировка по номенклатуре.
39 НафНаф
 
02.09.22
09:10
(37) ну да, для одного товара, Мин = 1, Макс = 10000, количество строк этого товара 4, а максимальная цена в 7423 строке )))
40 Eugeneer
 
02.09.22
09:12
(39) да пофиг. главное сам факт отобразить (подсветить).
Ну и сортировка.
41 Eugeneer
 
02.09.22
09:13
если чо там можно и Количество различные в запросе задействовать
42 НафНаф
 
02.09.22
09:17
(40) на лету меняешь условие, ага
43 mikecool
 
02.09.22
10:07
лавры Гения не дают спокойно спать Евгению
стих получился
44 Eugeneer
 
02.09.22
10:15
(42) как раз на то и программист чтобы на лету находить лучшие решения
45 НафНаф
 
02.09.22
11:06
(44) опять подмена терминов "условия" и "решения"