Имя: Пароль:
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) опять подмена терминов "условия" и "решения"
Независимо от того, куда вы едете — это в гору и против ветра!