|
Гуру-тест: как отсортировать набор записей? 🠗 (Волшебник 10.09.2020 20:29) | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
04.09.20
✎
18:06
|
Отсчет пошел, досрочные ответы приветствуются! ;-)
НЗ = РегистрыСведений.ХХХ.СоздатьНаборЗаписей(); ... |
|||
1
Полован
04.09.20
✎
18:11
|
(0) Товарисч форумный клоун, ты какие вещества принимаешь, что тебя так штырит?
|
|||
2
H A D G E H O G s
04.09.20
✎
18:12
|
(0) Это все грибы, Сережа.
|
|||
3
Гений 1С
гуру
04.09.20
✎
18:14
|
(2) ответ "грибы" не засчитывается.
|
|||
4
Ненавижу 1С
гуру
04.09.20
✎
18:18
|
В данный момент набор записей пустой
|
|||
5
Гений 1С
гуру
04.09.20
✎
18:19
|
(4) к черту детали.
|
|||
6
Гений 1С
гуру
04.09.20
✎
18:19
|
есть НЗ, как его отсортировать. Можно без кода, просто идея.
|
|||
7
Полован
04.09.20
✎
18:20
|
(6) Зачем его сортировать, болезный?
|
|||
8
Ненавижу 1С
гуру
04.09.20
✎
18:21
|
Зачем? Сама по себе сортировка набора записей не имеет ценности
|
|||
9
H A D G E H O G s
04.09.20
✎
18:22
|
Единственный вариант - это отсортировать по номеру строки, если у тебя РС подчиненный регистратору. Но, Сергей, скорее всего ты даже этого и не поймешь.
|
|||
10
H A D G E H O G s
04.09.20
✎
18:23
|
(9) Единственный вариант -> Единственный практический смысл
|
|||
11
Гений 1С
гуру
04.09.20
✎
18:23
|
(8) надо. в некоторых прикладных задачах, например, чтобы вывести его на дерево в форму.
|
|||
12
VladZ
04.09.20
✎
18:23
|
(0) Ткнуться на нужную колонку в режиме предприятия. Готово!
|
|||
13
Гений 1С
гуру
04.09.20
✎
18:24
|
(12) программно, бро, программно.
(10) мы тут не о смыслах говорим. А о технике. Не ломайся, скажи уже как. |
|||
14
VladZ
04.09.20
✎
18:24
|
(11) Выполни запрос, выгрузи в дерево.
К чему вопрос в сабже - не понятно. |
|||
15
Гений 1С
гуру
04.09.20
✎
18:26
|
(14) сложно, есть метод проще. Вопрос на знание ассортимента методик.
|
|||
16
Конструктор1С
04.09.20
✎
18:28
|
(0) накуа?
|
|||
17
Гений 1С
гуру
04.09.20
✎
18:29
|
(16) вопрос в (0) как а не зачем.
|
|||
18
Полован
04.09.20
✎
18:30
|
(17) Один дурак может задать столько вопросов, что и 1000 мудрецов не ответят.
|
|||
19
Конструктор1С
04.09.20
✎
18:31
|
(17) ну ладно. Тогда по каким полям отсортировать?
|
|||
20
Ненавижу 1С
гуру
04.09.20
✎
18:31
|
(11) для этого набор записей не нужен. Запрос
|
|||
21
Гений 1С
гуру
04.09.20
✎
18:45
|
(19) по полю Номенклатура.
|
|||
22
Гений 1С
гуру
04.09.20
✎
18:45
|
(20) Надеюсь, не твои товарищи сидят во Фреше, ггг, иначе заставят меня этот код переписать.
|
|||
23
Гений 1С
гуру
04.09.20
✎
18:46
|
а уаще подход мне нравится. Задан конкретный вопрос на смекалку, на который нужно дать конкретный ответ. Но вместо смекалки демонстрируется отрицание задачи.
|
|||
24
ДенисЧ
04.09.20
✎
18:47
|
Выгрузи в ТЗ, отсортируй, загрузи обратно.
А потом съезди в Одесу, на привоз. И купи там гУся. |
|||
25
Гений 1С
гуру
04.09.20
✎
18:57
|
(24) ну наконец-то, 24 поста понадобилося. ;-) молодец
|
|||
26
ДенисЧ
04.09.20
✎
19:00
|
(25) Ну я же не гений... Мне можно.
|
|||
27
ДенисЧ
04.09.20
✎
19:00
|
Да, а на Привоз таки съезди
|
|||
28
Полован
04.09.20
✎
19:04
|
(23) Задан идиотский вопрос в надежде что все подорвутся его решать. Агащазблин.
|
|||
29
rphosts
04.09.20
✎
19:05
|
если (11) то вместо создатьНабор должно быть.... Прочитать();
И тогда уж через ТЗ - не торт |
|||
30
Мимохожий Однако
04.09.20
✎
19:07
|
Когда коту делать не х...
|
|||
31
2S
04.09.20
✎
19:07
|
Гифка с хлопанием по лбу
|
|||
32
Ненавижу 1С
гуру
04.09.20
✎
19:09
|
(25) да уж... Это первое что пришло в голову. Надеялся на какой-то этакий трюк
|
|||
33
Ёпрст
04.09.20
✎
19:14
|
(0) на вот тебе еще.."гениального г-кода"
|
|||
34
H A D G E H O G s
04.09.20
✎
19:18
|
Я не сомневался в Сереже.
|
|||
35
H A D G E H O G s
04.09.20
✎
19:19
|
Посмотрел список тем Сергея. Такое ощущение, что к нему присовокупился ЛивингСтар.
|
|||
36
Гений 1С
гуру
04.09.20
✎
19:31
|
(35) Не знаю такого
|
|||
37
fyn
04.09.20
✎
19:58
|
(36) Дед, иди к себе в бложек. Не отвлекай нормальных людей
|
|||
38
Новиков
04.09.20
✎
20:40
|
(23) >> Задан конкретный вопрос на смекалку, на который нужно дать конкретный ответ. Но вместо смекалки демонстрируется отрицание задачи.
Так сказали же - сделай запросом, нарисуй какое-хочешь там дерево и уже его отображай на форме. В чем проблема с этим? |
|||
39
Сияющий в темноте
05.09.20
✎
00:04
|
когда мы читаем записи из базы данных,то они должны быть уже отсортированы в силу того,что для таблицы регистра используется кластерный индекс.
если же мы в этот набор что-то записали сами,то сортировать нужно до момента записи в регистр. |
|||
40
Ненавижу 1С
гуру
05.09.20
✎
00:18
|
(39) >>когда мы читаем записи из базы данных,то они должны быть уже отсортированы в силу того,что для таблицы регистра используется кластерный индекс
Я бы не стал полагаться на это А вообще сортировать в наборе записей бессмысленно. Не для этого оно |
|||
41
Гений 1С
гуру
05.09.20
✎
09:03
|
(38) это сложный вариант, правильный ответ дали в (24)
|
|||
42
Гений 1С
гуру
05.09.20
✎
09:04
|
(40) да ладно? Я из набора записей отрисоываю в дерево формы. МНе важен порядок, ибо само дерево сортировать сложнее, чем НЗ
|
|||
43
Волшебник
05.09.20
✎
09:08
|
Мой Гений дарит вам сортировку набора записей регистра сведений....
|
|||
44
Ненавижу 1С
гуру
05.09.20
✎
10:21
|
(42) ну вот хорошо. Передал в ТЗ. Отсортировал. Зачем обратно в НЗ загонять то?
|
|||
45
Гений 1С
гуру
05.09.20
✎
11:06
|
(44) Потому что код написан под НЗ и менять его под ТЗ дороже, чем выгрузить обратно в НЗ?
|
|||
46
Волшебник
05.09.20
✎
11:29
|
Интересно, что Гений 1С хранит в регистре с именем ХХХ? ;)
|
|||
47
Гений 1С
гуру
05.09.20
✎
11:33
|
(46) Строки документа маркировки, как ни странно.
|
|||
48
dangerouscoder
05.09.20
✎
20:17
|
(42) а что мешает дерево преобразовать в ТЗ и в запросе отсортировать что нужно?
Я просто уже за таким "гением" переписываю вторую конфигурацию - юзеры рады что работать стало быстрее.. |
|||
49
palsergeich
05.09.20
✎
23:12
|
(48) Он получает 1800 в час, а ты нет.
Ты просто завидуешь |
|||
50
acht
05.09.20
✎
23:28
|
(48) > а что мешает дерево преобразовать
28 баксов на бирже сами себя не заработают |
|||
51
trdm
06.09.20
✎
10:25
|
(3) > ответ "грибы" не засчитывается.
это аворит народного голососования :) |
|||
52
Гений 1С
гуру
07.09.20
✎
09:38
|
(48) ну наверное сложнее дерево в ТЗ преобразовать, чем НЗ в ТЗ, тебе не думается? Бракоделы всегда гению завидуют, не удивительно.
(49) не за красивые глаза и громкое имя, кстати. ;-) |
|||
53
s111
07.09.20
✎
09:58
|
(49) и я завидую!
|
|||
54
Tatitutu
07.09.20
✎
11:01
|
а запросы уже не в моде ?
|
|||
55
Asmody
09.09.20
✎
14:47
|
(0) Гений, ты лучше расскажи нам, как минимальными усилиями проверить - отсортированы записи в наборе / строки в таблице или нет?
|
|||
56
Вафель
09.09.20
✎
15:14
|
(55) так циклом пройтись и а[i] > a[i-1]
|
|||
57
Ёпрст
09.09.20
✎
15:30
|
(56) а если сортировка в другом направлении?
%) |
|||
58
Волшебник
09.09.20
✎
15:32
|
(56) лучше запросом в цикле
|
|||
59
МихаилМ
09.09.20
✎
15:51
|
(55) медиана ?
|
|||
60
Asmody
09.09.20
✎
15:55
|
(59) А что медиана? Если там ссылочное значение, какая у него медиана?
|
|||
61
vit-alx
09.09.20
✎
16:27
|
(55) в запрос, сджойнить саму с собой по номеру строки+1 и условию сортировки, нулл последний отбрасываем и смотрим количество в результате запроса
|
|||
62
Волшебник
09.09.20
✎
17:02
|
(61) Слабенько... Нет изящества. Это же гуру-тест
|
|||
63
vit-alx
09.09.20
✎
17:05
|
Зато быстро и понятно
|
|||
64
polosov
09.09.20
✎
17:29
|
(21) За сортировку по ссылочному полю вообще бить принято.
|
|||
65
Вафель
09.09.20
✎
17:30
|
(64) почему бы и нет? не обязательно же по представлению
|
|||
66
polosov
09.09.20
✎
17:33
|
(65) Практического смысла мало. В (9) было уже разъяснено.
|
|||
67
lodger
09.09.20
✎
17:40
|
(65) а надо шоб Арбузы шли перед Дынями!
|
|||
68
Ёпрст
09.09.20
✎
17:41
|
(66) почему мало ? Хотя бы с одним ид будут рядом
|
|||
69
ДедМорроз
09.09.20
✎
18:40
|
Дерево в таблицу преобразуется с хвоста и без всякой рекурсии,только со стеклом,где хранится предыдущее,но для него можно массив
|
|||
70
vit-alx
09.09.20
✎
18:44
|
(62) можно запросом в вт, во вторую вт отсортировать первую, сджойнить их внутренним по номеру строки и не условию сортировки. если запрос пустой значит отсортирована
|
|||
71
vit-alx
09.09.20
✎
18:46
|
+(70) забыл во второй вт добавить автонумерацию
|
|||
72
vit-alx
09.09.20
✎
20:11
|
Можно еще вывалить тз в xml, отсортировать тз и вывалить во второй xml и тупо сравнить два текста
|
|||
73
vit-alx
09.09.20
✎
20:20
|
Либо через СравнениеЗначений попробовать сравнить тз и отсортированную копию тз, но не уверен что сработает
Будет уже озвучено гениальное решение? |
|||
74
Web00001
10.09.20
✎
04:11
|
(17)В данном конкретном случаем вопрос "как" имеет смысл только, когда известен ответ на вопрос "зачем". Потому, что если важен порядок значит тебе в результате нужен не набор записей(то есть ты не собираешься писать в регистр именно в таком порядке), а набор записей это просто источник данных. Вопрос зачем тебе задали верный, потому, что от него зависит ответ. Все ответы которые могут быть это выгрузка этого набора в какую либо коллекцию, либо в объект который может сортировку(не надо так) и загрузка обратно.
|
|||
75
Злопчинский
10.09.20
✎
04:26
|
(64) А почему-это?
вот например два разных договора. с одинаковым наименованием. сортировка по наименованию/представлению даст в алгоритме жопу. приходится сортировать по внутреннему представлению/ссылке. |
|||
76
ASU_Diamond
10.09.20
✎
07:37
|
(25) я такую схему ещё в году 2008 ил 2009 использовал. Только я это использовал, чтобы находу решить задачу, не было времени придумывать правильный подход.
|
|||
77
Повелитель
10.09.20
✎
08:04
|
(33) Пока флудили нормального ответа не заметили.
Мне нравится. |
|||
78
lodger
10.09.20
✎
09:48
|
еще один рецепт придумал.
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(ССылка); НаборЗаписей.Прочитать(); Для каждого ЗаписьРС из НаборЗаписей Цикл ПроцедураНайтиМестоИвставить(ЗаписьРС,КоллекцияПриёмник); КонецЦикла; Процедура ПроцедураНайтиМестоИвставить(ЗаписьРС,КоллекцияПриёмник) Если КоллекцияПриёмник.Количество() > 0 Тогда СравнениеЗначений = новый СравнениеЗначений(); МестоВставки = -1; Для каждого ЭлементКоллекции из КоллекцияПриёмник Цикл Если СравнениеЗначений.Сравнить(ЗаписьРС.Номенклатура,ЭлементКоллекции.Номенклатура) < 0 Тогда МестоВставки = КоллекцияПриёмник.Индекс(ЭлементКоллекции); Прервать; конецесли; конеццикла; Если МестоВставки >=0 Тогда заполнитьзначениясвойств(КоллекцияПриёмник.Вставить(МестоВставки),ЗаписьРС); Иначе заполнитьзначениясвойств(КоллекцияПриёмник.Добавить(),ЗаписьРС); КонецЕсли Иначе заполнитьзначениясвойств(КоллекцияПриёмник.Добавить(),ЗаписьРС); конецЕсли; конецпроцедуры тюнинх полнейший, кастомность 146%. |
|||
79
Повелитель
10.09.20
✎
12:01
|
(78) Проще уж запросом
|
|||
80
ДедМорроз
10.09.20
✎
18:32
|
Алгоритмов сортировки много и у каждого есть свои области применения.
Опять же,О(N*N) нужно бояться,когда у вас уж очень много строк,так как всякие переносы и т.п.съедят время. И перестановка отсортированного-это отдельная интересная задача. |
|||
81
lodger
10.09.20
✎
19:55
|
(80) в силу специфики, у 1с с alloc'ом памяти у коллекций значений по мере роста всегда было туго. а у операции простой сортировки всегда известен выходящий размер.
поэтому разумно сразу выделять ТЗ\массив\назови сам\ целевого размера. а дальше не добавлением\вставкой оперировать, а заполнением\очищением значений в элементах коллекции. |
|||
82
Волшебник
10.09.20
✎
20:30
|
Хватит разврата
|
|||
83
МихаилМ
10.09.20
✎
20:46
|
(55) (Asmody)
поделитесь идеей. |
|||
84
etc
11.09.20
✎
09:37
|
(0) любым из 3-х методов сортировки. 1-курс МИЭМ.
|
|||
85
МихаилМ
12.09.20
✎
12:57
|
Asmody
дайте решение Вашей задачи из (55). |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |