|
|
|
У кого есть функция разложения массива на пачки размером по N? | ☑ | ||
|---|---|---|---|---|
|
0
Гений 1С
17.03.23
✎
14:48
|
собственно
|
|||
|
1
Гений 1С
17.03.23
✎
14:48
|
Нашел такое v8: Работа с массивом но там функцию так и не родили.
|
|||
|
2
Волшебник
17.03.23
✎
14:51
|
Я решу эту задачку в 3 строки
|
|||
|
3
Fish
17.03.23
✎
14:51
|
(1) В смысле не родили? Там ответ в (1) дан.
|
|||
|
4
vicof
17.03.23
✎
14:52
|
Ждем гениального решения
|
|||
|
5
bolobol
17.03.23
✎
14:53
|
Да уж.. массив массивов не заполнить...
|
|||
|
6
bolobol
17.03.23
✎
14:54
|
Ты новичок, что ли? Лабу решаешь?
|
|||
|
7
Garykom
17.03.23
✎
14:56
|
(0) Запросом?
|
|||
|
8
BeerHelpsMeWin
17.03.23
✎
15:01
|
(7) Нет бы предложить микросервис на Го...
|
|||
|
9
KJlag
17.03.23
✎
15:02
|
до статьи на хабре еще далеко?
|
|||
|
10
H A D G E H O G s
17.03.23
✎
15:08
|
(0) Готов продать за 4500
|
|||
|
11
ASU_Diamond
17.03.23
✎
15:08
|
4499
|
|||
|
12
bolobol
17.03.23
✎
15:10
|
7500 но с гарантией!
|
|||
|
13
Гений 1С
17.03.23
✎
15:12
|
(6) у меня есть 500.000 позиций номенклатуры в результате запроса.
Хочу обрабатывать пачками по 2.000 позиций. Вопросы, юноша? |
|||
|
14
Гений 1С
17.03.23
✎
15:13
|
(10) (11) (12) Отлично, а то я не знаю куда девать средства со счета ZLP
|
|||
|
15
Fish
17.03.23
✎
15:13
|
Похоже, Гений уже не тот. Раньше было бы "Мой Гений дарит вам...", а теперь лишь жалкое "Напишите за меня функцию разложения массива".
|
|||
|
16
Fish
17.03.23
✎
15:14
|
(13) А в чём проблема то? Не умеешь обрабатывать пачками по N штук?
|
|||
|
17
CepeLLlka
17.03.23
✎
15:14
|
||||
|
18
lodger
17.03.23
✎
15:15
|
(16) если бы умел - поста бы не было.
|
|||
|
19
Гений 1С
17.03.23
✎
15:17
|
|
|||
|
20
Гена
17.03.23
✎
15:18
|
(2) в три строки не получится, ведь сначала надо ввести РазмерПодмассива, КоличествоПодмассивов как Целое от деления КоличествоИсходныхДанных на РазмерПодмассива... Потом цикл... строчек 20 не меньше
|
|||
|
21
Гений 1С
17.03.23
✎
15:19
|
(20) если рекурсивно. у меня нет остатка от деления.
|
|||
|
22
bolobol
17.03.23
✎
15:21
|
(13) Да, есть! Один. Какая связь результата запроса и массива подразумевается?
|
|||
|
23
Гений 1С
17.03.23
✎
15:22
|
(22) буду пачками обрабатывать номенклатур. каждый элемент массива - это пачка из 2000 позиций номенклатуры из исходного запроса.
|
|||
|
24
bolobol
17.03.23
✎
15:22
|
Так-то, обработка больших данных с обновлением информации для пользователя - в секундах измеряли всегда, а не в пачках по N... Чтобы и сервант не нагружать, и пользователь в теме был, да и прервать мог
|
|||
|
25
Fish
17.03.23
✎
15:23
|
(22) Гениальная! :)
|
|||
|
26
KJlag
17.03.23
✎
15:23
|
(15) "Мой гений позволяет вам.."?
|
|||
|
27
vicof
17.03.23
✎
15:24
|
(25) генитальная скорей
|
|||
|
28
Fish
17.03.23
✎
15:24
|
(23) Тут тебе массив на кучу массивов не нужно делить.
|
|||
|
29
bolobol
17.03.23
✎
15:24
|
(23) Ну так и пропихуй, раз так надо, по 2000 в массив
|
|||
|
30
Fish
17.03.23
✎
15:25
|
(23) Для этого тебе не надо массив на кучу массивов делить.
|
|||
|
31
ASU_Diamond
17.03.23
✎
15:25
|
(23) т.е. ты сначала результат запроса перекидываешь в массив, а потом обрабатываешь массив?
|
|||
|
32
Гений 1С
17.03.23
✎
15:25
|
(29) дык искал готовую функцию.
(31) ага. |
|||
|
33
ASU_Diamond
17.03.23
✎
15:26
|
(32) а для чего тут вообще массив? Сразу обрабатывать результат запроса почему нельзя?
|
|||
|
34
bolobol
17.03.23
✎
15:27
|
(33) Гениальность - её проявить нужно, просто так её не видно!
|
|||
|
35
mikecool
17.03.23
✎
15:28
|
сегодня пятница и Серега! ))
|
|||
|
36
Fish
17.03.23
✎
15:28
|
(33) Я вот тоже после (13) не понял, зачем тут массив.
|
|||
|
37
ASU_Diamond
17.03.23
✎
15:29
|
(32) А сколько времени ты потратил на поиск функции? Только в этой теме 30 минут
|
|||
|
38
VladZ
17.03.23
✎
15:29
|
(0) АВТОНОМЕРЗАПИСИ() в запросе разделить на 2000 и взять целую часть. Вот и будет у тебя номер пакета в самом запросе.
|
|||
|
39
mikecool
17.03.23
✎
15:29
|
чего вы накинулись на автора? он идет к успеху и ваяет чистый код!
|
|||
|
40
BeerHelpsMeWin
17.03.23
✎
15:31
|
(33) Может он получает удовольствие от одновременного хранения в памяти выборки запроса на 500к элементов, массива на 500к элементов и еще 250 массивов по 2к элементов?
|
|||
|
41
НафНаф
17.03.23
✎
15:31
|
Функция ПорционироватьКоллекцию(Коллекция,РазмерПорции) Экспорт
Результат = Новый Массив; Счетчик = 0; Для каждого Эл Из Коллекция Цикл Если Счетчик%РазмерПорции=0 Тогда ТекПорция = Новый Массив; Результат.Добавить(ТекПорция); КонецЕсли; ТекПорция.Добавить(Эл); Счетчик = Счетчик+1; КонецЦикла; Возврат Результат; КонецФункции |
|||
|
42
Гений 1С
17.03.23
✎
15:32
|
(36) ну вот я запускаю для 500.000 поиск ссылок. Виснет, сукко.
А для 2000 не виснет. Вот я и хочу передавать массивом по 2000 по всей номенклатуре поиск ссылок. Результат - список номенклатуры, которую можно удалить (нет критичных ссылок). йо? |
|||
|
43
mistеr
17.03.23
✎
15:32
|
(19) Я не понял, ты вот этот код у нас выпрашивал? Который написал спустя полчаса за 5 минут?
|
|||
|
44
Гений 1С
17.03.23
✎
15:32
|
(41) у Волшебника в три строчки вышло. Может он правда, не использовал переносы строки, ггг
|
|||
|
45
Гений 1С
17.03.23
✎
15:32
|
(43) да, лень думать было.
|
|||
|
46
ASU_Diamond
17.03.23
✎
15:34
|
(41) Все массивы будут пустыми
|
|||
|
47
Конструктор1С
17.03.23
✎
15:34
|
(45) у меня ощущение, что это девиз всей твоей жизни
|
|||
|
48
bolobol
17.03.23
✎
15:34
|
(46) Тоже так ожидаю, но это не точно
|
|||
|
49
mistеr
17.03.23
✎
15:35
|
(45) Молодец, настоящий 1С-ник. This is the way.
|
|||
|
50
bolobol
17.03.23
✎
15:35
|
Эти непрозрачные схемы со ссылками на объект, когда после = копия создаётся, а когда ссылка передаётся
|
|||
|
51
Fish
17.03.23
✎
15:38
|
(42) Пля, так речь про удаление помеченных? Так бы сразу и говорил. Вот, сразу нашлось готовое: https://infostart.ru/public/92372/
|
|||
|
52
Гений 1С
17.03.23
✎
15:41
|
(47) а чем плохо? Повторное использование кода - это хорошо. Особенно, если возведено в привчку.
|
|||
|
53
mistеr
17.03.23
✎
15:41
|
(46) Нет. Добавить() добавляет копию массива.
|
|||
|
54
Гений 1С
17.03.23
✎
15:42
|
(51) Мне готовое не подходит, звеняй. Эти объекты не помечены, надо сперва понять, нужно их оставлять или нет.
|
|||
|
55
Гений 1С
17.03.23
✎
15:43
|
(41) у меня проще, я вместо счетчика использую размер массива.
|
|||
|
56
НафНаф
17.03.23
✎
15:46
|
(46) (48) не будут уж поверьте, ну или проверьте
|
|||
|
57
mistеr
17.03.23
✎
15:47
|
(54) В ИР все сделано и учтено. Можешь любые объекты проверять и удалять. В т.ч. и результат запроса. И размер порции задается.
Но спорю на пиво, табе будет лень разобраться с ИР и потратишь еще день на г-кодинг. |
|||
|
58
НафНаф
17.03.23
✎
15:47
|
(55) вообще пох, что ты там используешь
|
|||
|
59
Гений 1С
17.03.23
✎
15:48
|
(57) а там можно написать правила удаления объекта? например, если на него нет ссылок из документов за определенный период? И далее не удалять, а помечать на удаление, переименовывать с прфиксом Ъ и переностиь в архивную папку?
|
|||
|
60
Fish
17.03.23
✎
15:48
|
(54) В любом случае это проще сделать без разбиения массива.
|
|||
|
61
Гений 1С
17.03.23
✎
15:48
|
(57) да, ИР я пытался использовать неоднократно, но в итоге плюнул. Это для яйцеголовых 1сников, тем более на обычных формах.
|
|||
|
62
Гений 1С
17.03.23
✎
15:48
|
(60) как же? Расскажи
|
|||
|
63
Fish
17.03.23
✎
15:49
|
(59) "если на него нет ссылок из документов за определенный период" - Что за жесть про период? Т.е. если на объект есть ссылки в другом периоде, ты всё равно объект грохнешь? Да ты силён, как я погляжу :)))
|
|||
|
64
НафНаф
17.03.23
✎
15:50
|
в LINQ для этого есть метод Chunk из коробки
https://learn.microsoft.com/ru-ru/dotnet/api/system.linq.enumerable.chunk?view=net-7.0#system-linq-enumerable-chunk-1(system-collections-generic-ienumerable((-0))-system-int32) |
|||
|
65
Гений 1С
17.03.23
✎
15:50
|
(63) ага, подчищаю базу после свертки. и я не грохну, а переименую и закину в архивную папку. Клиенту так удобнее.
|
|||
|
66
Гений 1С
17.03.23
✎
15:50
|
(64) ты бы еще Питон вспомнил, ггг
|
|||
|
67
Fish
17.03.23
✎
15:51
|
(62) Твоим первоначальным запросом.
|
|||
|
68
НафНаф
17.03.23
✎
15:56
|
(66) это просто говорит, о том, как многого нет в 1С
|
|||
|
69
Гений 1С
17.03.23
✎
15:57
|
(67) можно, но геморройно. Я люблю лаконичный код. Выгрузил в общий массив, разбил на коллекции и работаешь. Не надо чудить с выборками.
|
|||
|
70
Гений 1С
17.03.23
✎
15:57
|
(68) мне не мешает отсутствие пристутсвия.
|
|||
|
71
sikuda
17.03.23
✎
15:57
|
(64) Как же все-таки хорошо, что Гений 1С веселит нас в пятницу. Настроение поднимается....
val chunks = words.chunked(3) |
|||
|
72
Волшебник
17.03.23
✎
15:58
|
(20) Я же не уточнял язык
|
|||
|
73
Гений 1С
17.03.23
✎
15:59
|
(72) пошли отмазы. хорошо, что мы не увидим эти три строчки.
|
|||
|
74
Волшебник
17.03.23
✎
16:04
|
вот решение на Python, как раз 3 строки
def func_chunks_generators(lst, n): for i in range(0, len(lst), n): yield lst[i : i + n] https://egorovegor.ru/python-chunks/ |
|||
|
75
Волшебник
17.03.23
✎
16:04
|
(74) на входе
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 54, 3, 2, 2, 1], 4 на выходе [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 8, 7], [6, 54, 3, 2], [2, 1]] |
|||
|
76
Гений 1С
17.03.23
✎
16:06
|
(74) ты меня разочаровал, я думал в питоне для разбивки массива на порции есть готовая функция.
|
|||
|
77
Волшебник
17.03.23
✎
16:07
|
(76) Это неспортивно
|
|||
|
78
Гений 1С
17.03.23
✎
16:07
|
(77) а при чем тут спорт? Я хотел сэкономить время и нервные клеточки.
|
|||
|
79
Гений 1С
17.03.23
✎
16:08
|
(74) ты списал отсюда: https://stackoverflow.com/questions/312443/how-do-i-split-a-list-into-equally-sized-chunks
def chunks(lst, n): """Yield successive n-sized chunks from lst.""" for i in range(0, len(lst), n): yield lst[i:i + n] |
|||
|
80
Волшебник
17.03.23
✎
16:08
|
(78) Тогда переходи на Kotlin как в (71)
|
|||
|
81
НафНаф
17.03.23
✎
16:08
|
(70) тебе и задницу снегом подтирать не мешает через дырявые штаны
|
|||
|
82
Волшебник
17.03.23
✎
16:09
|
(79) Я же дал ссылку, откуда я списал. Гений уже не тот...
|
|||
|
83
Гена
17.03.23
✎
16:10
|
Проба бухгалтерского пера (лет 8 не кодил), можете кидать камни )
КолвоПервДанных = 500000; МассивПервДанных = Новый Массив(КолвоПервДанных); МассивПодмассивов = Новый Массив; РазмерПодмассива = 2000; КолвоПодмассивов = Цел(КолвоПервДанных/РазмерПодмассива) Для СчетчикПодмассивов = 1 По КолвоПодмассивов Цикл МассивПодмассивов.Вставить(СчетчикПодмассивов-1,Новый Массив); Для СчетчикЭл = 1 По РазмерПодмассива Цикл ИндексМассиваПервДанных = РазмерПодмассива*(СчетчикПодмассивов-1)+(СчетчикЭл-1); Если ИндексМассиваПервДанных < МассивПервДанных.Количество() Тогда МассивПодмассивов[СчетчикПодмассивов-1] .Вставить(СчетчикЭл-1,МассивПервДанных[ИндексМассиваПервДанных]); КонецЕсли; КонецЦикла; КонецЦикла; |
|||
|
84
Гений 1С
17.03.23
✎
16:11
|
(83) а зачем так сложно, если у меня проще?
|
|||
|
85
Гений 1С
17.03.23
✎
16:11
|
(82) прости, не заметил. тоды ладно.
|
|||
|
86
Fish
17.03.23
✎
16:12
|
(69) Не, ну если у тебя цель (40), тогда извиняй. Изобретай тормозной говнокод.
|
|||
|
87
Fish
17.03.23
✎
16:13
|
+(86) И, кстати, способ с запросом, который сразу выбирает тебе нужную порцию, ещё и гораздо лаконичнее, раз ты уж за лаконичность :)))
|
|||
|
88
Гений 1С
17.03.23
✎
16:15
|
(87) я за повторное применение кода. не, ну ежели ты напишешь функцию, куда передаешь запрос, а она нарезает его на кусочки, то окей.
Но в 1С нет аппликаторов, т.е. нельзя передать функцию параметром. |
|||
|
89
Гений 1С
17.03.23
✎
16:16
|
то бишь я к тому, что если есть готовая выверенная функция разбивки на массивы, лучше использовать ее.
Чем заново бить запрос на кусочки. |
|||
|
90
Кирпич
17.03.23
✎
16:18
|
вот так, наверное будет хорошо. памяти меньше сожрет. (не проверял. может и не работает)
|
|||
|
91
mistеr
17.03.23
✎
16:19
|
(88) Можно передать выборку и обойти ее. Но ты чего-то боишься работать с выборками...
|
|||
|
92
Fish
17.03.23
✎
16:20
|
(88) Не нужно нарезать запрос на куски. Что за бред?
|
|||
|
93
НЕА123
17.03.23
✎
16:21
|
(56)
смущает ТекПорция = Новый Массив; Результат.Добавить(ТекПорция); поменять местами и счетчик с 1, ИМХО. |
|||
|
94
BeerHelpsMeWin
17.03.23
✎
16:24
|
(90) Без УПОРЯДОЧИТЬ, наверно, не заработает?
|
|||
|
95
Paradox
17.03.23
✎
16:24
|
&НаКлиенте
Функция РазделитьМассивНаПорции(ИсходныйМассив, КоличествоЭлементовВПорции) //Разделим на порции общий массив МассивПорций = Новый Массив(); НовыйМассивСЧастями = Новый Массив(); Для Сч = 0 По ИсходныйМассив.ВГраница() Цикл Если МассивПорций.Количество() = КоличествоЭлементовВПорции Тогда НовыйМассивСЧастями.Добавить(МассивПорций); МассивПорций = Новый Массив(); КонецЕсли; МассивПорций.Добавить(ИсходныйМассив[Сч]); КонецЦикла; Если МассивПорций.Количество() > 0 Тогда НовыйМассивСЧастями.Добавить(МассивПорций); КонецЕсли; Возврат НовыйМассивСЧастями; КонецФункции //РазделитьМассивНаПорции |
|||
|
96
Кирпич
17.03.23
✎
16:26
|
(94) не знаю. напиши как правильно, если знаешь. лень пробовать.
|
|||
|
97
Paradox
17.03.23
✎
16:27
|
на PHP вообще в одну строчку )))
$result = array_chunk($arr, 2); |
|||
|
98
НафНаф
17.03.23
✎
16:30
|
(19) в конце может добавиться пустой массив, при общем количестве кратном размеру пачки, халтура
|
|||
|
99
bolobol
17.03.23
✎
16:30
|
(90) При повторном выполнении - данные базы уже изменятся и ты будешь пропускать элементы тысячами
|
|||
|
100
bolobol
17.03.23
✎
16:30
|
100!
|
|||
|
101
Кирпич
17.03.23
✎
16:30
|
+(96) переменную надо не М назвать, а то я менеджер таблиц затер :))
|
|||
|
102
Гений 1С
17.03.23
✎
16:32
|
(91) дело не в страхе, а в экономии мозга
|
|||
|
103
Кирпич
17.03.23
✎
16:33
|
(99) а с массивом я ничего прям не пропущю, ага :))
|
|||
|
104
Гений 1С
17.03.23
✎
16:34
|
(98) тогда Р = Неопределено и при достижении пачки сбрасывать Р в Неопределено
|
|||
|
105
bolobol
17.03.23
✎
16:34
|
(103) Ну, судя по Вашим способностям - Вы и в переменной пропустите))
|
|||
|
106
Кирпич
17.03.23
✎
16:35
|
(102) тебе точно надо мозг экономить. у тебя его мало
|
|||
|
107
Гений 1С
17.03.23
✎
16:35
|
Функция РазбитьМассивПоПачкам(М, РазмерПачки)
ММ = Новый Массив(); Р = Неопределено; Для Каждого Эл из М Цикл Если Р = Неопределено Тогда Р = Новый Массив(); ММ.Добавить(Р); КонецЕсли; Р.Добавить(Эл); Если Р.Количество() = РазмерПачки Тогда Р = Неопределено; КонецЕсли; КонецЦикла; Возврат ММ; КонецФункции |
|||
|
108
Кирпич
17.03.23
✎
16:37
|
(107) да убери уже не позорься. такое в 7 классе по информатике проходят
|
|||
|
109
bolobol
17.03.23
✎
16:37
|
Если, всё-таки, задача стоит в том, чтобы не брать много сразу элементов, то ВЫБРАТЬ ПЕРВЫЕ 2000 - обработать, выбрать следующие 2000, не выбирая те, что уже обработаны... И никакого огорода из копирований массивов не потребуется.
|
|||
|
110
Гений 1С
17.03.23
✎
16:37
|
Вариант для сишников:
Функция РазбитьМассивПоПачкам(М, РазмерПачки) Р = Новый Массив(); Для Каждого Эл из М Цикл Если Р.Количество() = 0 ИЛИ Р[Р.Количество() - 1].Количество() = РазмерПачки Тогда Р.Добавить(Новый Массив()); КонецЕсли; Р[Р.Количество() - 1].Добавить(Эл); КонецЦикла; Возврат Р; КонецФункции |
|||
|
111
НафНаф
17.03.23
✎
16:38
|
(107) запахло го*нокодом
|
|||
|
112
Гений 1С
17.03.23
✎
16:38
|
(109) да вы шьто?
|
|||
|
113
Гений 1С
17.03.23
✎
16:38
|
(111) сравни свою поделку и изящество в (110)
|
|||
|
114
Кирпич
17.03.23
✎
16:39
|
(109) массив нужен, чтобы его в функцию потом передать
|
|||
|
115
bolobol
17.03.23
✎
16:39
|
(113) Это не изящество - это говн@код! В чистом виде! Если так можно сказать про говн@код
|
|||
|
116
НафНаф
17.03.23
✎
16:39
|
(113) научись не экономить на буквах
|
|||
|
117
Garykom
17.03.23
✎
16:40
|
(113) извини но у тебя в (110) обычный говнокод в стиле 1С 7.7
|
|||
|
118
Гений 1С
17.03.23
✎
16:40
|
(114) Юноши обычно жизни не нюхавшие полны неоправданного энтузиазма
|
|||
|
119
Гений 1С
17.03.23
✎
16:40
|
(117) в стиле Си
|
|||
|
120
Fish
17.03.23
✎
16:40
|
(112) Да именно так. Элементарно просто :)))
|
|||
|
121
bolobol
17.03.23
✎
16:40
|
(118) Такое - лучше не нюхать, это да
|
|||
|
122
Гений 1С
17.03.23
✎
16:42
|
Хотя лучше переписать так:
Функция РазбитьМассивПоПачкам(М, РазмерПачки) Р = Новый Массив(); Если М.Количество() <> 0 Тогда Р.Добавить(Новый Массив()); КонецЕсли; Для Каждого Эл из М Цикл Если Р[Р.Количество() - 1].Количество() = РазмерПачки Тогда Р.Добавить(Новый Массив()); КонецЕсли; Р[Р.Количество() - 1].Добавить(Эл); КонецЦикла; Возврат Р; КонецФункции |
|||
|
123
Fish
17.03.23
✎
16:42
|
(114) По идее не нужен. Он же потом эти элементы обрабатывать хочет - какие-то удалять, какие-то метить, к каким-то префикс добавить, какие-то в отдельную папочку впихнуть. Хватит и условий.
|
|||
|
124
Garykom
17.03.23
✎
16:43
|
1. Результат запроса это не Массив а ТЗ
2. Раз ТЗ то добавляем колонку НомерПачки 3. В цикле заполняем НомерПачки, получаем КоличествоПачек 4. Используем Пачка = ТЗ.Скопировать(Новый Структура("НомерПачки", НомерПачки)) для получения ТЗ нужной пачки |
|||
|
125
НафНаф
17.03.23
✎
16:43
|
(122) остынь, сходи на улицу
|
|||
|
126
bolobol
17.03.23
✎
16:44
|
(123) Там в функцию НайтиСсылки массив нужен
(124) Гениально!!! |
|||
|
127
Fish
17.03.23
✎
16:45
|
(126) Имеется ввиду, не нужен массив уже обработанных ссылок.
|
|||
|
128
Гений 1С
17.03.23
✎
16:46
|
(124) Сибирский лис! ... нет слов не бранных
|
|||
|
129
Кирпич
17.03.23
✎
16:49
|
(124) в (90) уже есть правильный ответ. А перебирать массивы в 500000 элементов в 1С - это дичь.
|
|||
|
130
Лирик
17.03.23
✎
16:52
|
Эх, пятница
Функция ПорционироватьКоллекцию(Коллекция, РазмерПорции) Экспорт Результат = Новый Массив; Для Сч = 0 По Коллекция.ВГраница() Цикл Если Сч%РазмерПорции = 0 Тогда Результат.Добавить(Новый Массив); КонецЕсли; Результат[Цел(Сч/РазмерПорции)].Добавить(Коллекция[Сч]); КонецЦикла; Возврат Результат; КонецФункции |
|||
|
131
Гений 1С
17.03.23
✎
16:52
|
(129) это быстро, не поверишь
|
|||
|
132
Garykom
17.03.23
✎
16:52
|
(124)+ 3. Номер пачки можно заполнять или счетчиком + 1
или делением нацело
|
|||
|
133
Fish
17.03.23
✎
16:53
|
(130) "ПорционироватьКоллекцию" - лирично :)
|
|||
|
134
Гений 1С
17.03.23
✎
16:53
|
(130) это математический метод, мне не нравятся все эти деления, целые части и т.п
|
|||
|
135
Garykom
17.03.23
✎
16:54
|
(129) Через модификацию исходного запроса средствами СУБД это очень хорошее решение
|
|||
|
136
Garykom
17.03.23
✎
16:54
|
(134) Ты даже математику школьную уже забыл, да?
|
|||
|
137
vovastar
17.03.23
✎
16:54
|
(118) А ты до сих пор видимо нюхаешь.
|
|||
|
138
Кирпич
17.03.23
✎
16:55
|
(134) да всем похер, что тебе нравится. не для тебя писано, а для сообщества.
|
|||
|
139
vovastar
17.03.23
✎
16:55
|
Такое ощущение, что Сергей вышел в чат после обильного принятия.
|
|||
|
140
Garykom
17.03.23
✎
16:55
|
(130) тоже нормальный вариант
|
|||
|
141
Гений 1С
17.03.23
✎
16:56
|
(135) отнюдь. зачем трогать готовый рабочий запрос?
|
|||
|
142
Гений 1С
17.03.23
✎
16:56
|
(139) не, я сейчас делаю присед со штангой 85 кг, 6 подходов по 5 раз.
|
|||
|
143
Garykom
17.03.23
✎
16:56
|
(141) заверни его в ВТ и вперед
это стандартный способ работы в современных типовых конфах 1С |
|||
|
144
bolobol
17.03.23
✎
16:57
|
(141) Результат запроса в принципе трогать незачем. 2000 раз Следующий - вот и готова порция
|
|||
|
145
Лирик
17.03.23
✎
16:57
|
(134) "Если Вам не нравятся собаки, то Вы просто не умеете их готовить".
Насколько я понял задача была разделить массив на массив массивов порционно с наименьшим количеством строк кода. В 130 - максимум, что я смог выжать :) |
|||
|
146
bolobol
17.03.23
✎
16:58
|
(145) Кстати - именно это в стиле Си, а не то что там выше Гений накодил...
|
|||
|
147
Garykom
17.03.23
✎
16:58
|
(144) а вот тех кто использует .Следующий пора уже того, на пенсию
есть же .Выгрузить() в ТЗ сцуко поубивав бы кто в ТЗ не выгружает - отладка нормальная невозможна |
|||
|
148
Гений 1С
17.03.23
✎
16:59
|
(143) сон разума плодит чудовищ. Видел я эти современные ВТ
|
|||
|
149
Garykom
17.03.23
✎
17:01
|
(147)+ а еще когда выборку из запроса как параметор передают в процедуру/функцию - это же ахтунг!!!
|
|||
|
150
Кирпич
17.03.23
✎
17:01
|
(147) говорят, что за ТЗ сейчас увольняют
|
|||
|
151
bolobol
17.03.23
✎
17:01
|
(149) Чой-та? Это ж экономия ресурсов невероятная!!
|
|||
|
152
bolobol
17.03.23
✎
17:02
|
(147) Обхода задуманного нет в ТЗ, Итоги, группировки... О чём Вы вообще?
|
|||
|
153
Гений 1С
17.03.23
✎
17:04
|
(150) отлично, в рядах фрилансеров будет больше вменяемых людей, которые знают, что стоимость разработки важнее мнимых правил оформления кода
|
|||
|
154
Garykom
17.03.23
✎
17:04
|
(150) Покажи код как ты проверишь что результат запроса только одна строка?
Без выгрузки в ТЗ!
|
|||
|
155
Fish
17.03.23
✎
17:04
|
(152) (151) Ну не умеет человек нормально работать с запросами, что ж поделать. Зато он умет ветку-ветку в Гите добавлять :)))
|
|||
|
156
Гений 1С
17.03.23
✎
17:04
|
(154) у резульатазапроса есть метод Пустой
|
|||
|
157
Garykom
17.03.23
✎
17:04
|
(152) Ты в курсе про?
ДеревоЗнач = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); |
|||
|
158
Garykom
17.03.23
✎
17:05
|
(155) ты не умничай, ты свой код без выгрузки в ТЗ покажи аналог (154)
|
|||
|
159
Гений 1С
17.03.23
✎
17:07
|
(158) для сравнения с нулем пустой. Далее делаешь выборку, а не выгрузку и все. о чем спич?
|
|||
|
160
Гений 1С
17.03.23
✎
17:07
|
РезультатЗапроса (QueryResult)
Пустой (IsEmpty) Синтаксис: Пустой() Возвращаемое значение: Тип: Булево. Истина - нет ни одной записи; Ложь - в противном случае. |
|||
|
161
Garykom
17.03.23
✎
17:08
|
(159) стандартная ситуация когда запросом ищем нечто в базе
и надо разные действия если не нашло совсем (ошибка плохо, не нашло) когда нашло 1 (все отлично, работаем) и когда нашло >1 (ошибка плохо, нашло много) |
|||
|
162
mikecool
17.03.23
✎
17:09
|
(147) вон из профессии в ГО )
|
|||
|
163
Fish
17.03.23
✎
17:09
|
(158) В (154) какой-то тупой быдлокодерский ахтунг. Даже не знаю, зачем это может понадобиться.
|
|||
|
164
Garykom
17.03.23
✎
17:09
|
(160) а теперь добавь к (161) что тебе в ошибки надо вывести которые "много"
|
|||
|
165
Fish
17.03.23
✎
17:10
|
(161) Это делается сразу запросом, а не адским быдлокодом из (154) :))))
|
|||
|
166
mikecool
17.03.23
✎
17:10
|
(154) у выборки есть метод Количество()
|
|||
|
167
Garykom
17.03.23
✎
17:11
|
(163) для (161) - частая стандартная ситуация при любых загрузка-синхронизациях
когда по уид, коду, наименованию нашелся не один объект а не одного или много и да часто видел когда берут первый попавшийся а потом фигеют от глюков |
|||
|
168
Гений 1С
17.03.23
✎
17:11
|
(167) (166) отож, количество у Выборки
|
|||
|
169
Fish
17.03.23
✎
17:11
|
(166) Ну или через выборку.
|
|||
|
170
Garykom
17.03.23
✎
17:11
|
(166) в курсе
но тогда код превращается без выгрузки в ТЗ в нечто странное |
|||
|
171
Fish
17.03.23
✎
17:12
|
(170) Нет, не превращается.
|
|||
|
172
Garykom
17.03.23
✎
17:12
|
да я знаю что промежуточная выгрузка в ТЗ жрет память и время
но экономит код и время при отладке/доработке |
|||
|
173
Garykom
17.03.23
✎
17:12
|
(171) покажи?
|
|||
|
174
mikecool
17.03.23
✎
17:12
|
(170) ты о чем? Оо
|
|||
|
175
Кирпич
17.03.23
✎
17:13
|
(170) какие то вы с гением манерные. нравится... не нравится... странное...
|
|||
|
176
Garykom
17.03.23
✎
17:13
|
(174) покажи уже аналог кода (154) без ТЗ
|
|||
|
177
Fish
17.03.23
✎
17:13
|
(173) Что тебе показать? Как работать с выборкой? Сходи на курсы 1С, там тебя обучат, как правильно писать на 1С.
|
|||
|
178
mikecool
17.03.23
✎
17:14
|
Выборка = Запрос.Выполнить().Выбрать();
КолвоЗаписей = Выборка.Количество(); дальше продолжать? |
|||
|
179
Кирпич
17.03.23
✎
17:14
|
(172) ты нормальный вабще? если у тебя в ТЗ упадет 500000 строк только ради того, чтобы ты проверил одна там запись или не одна :)))
|
|||
|
180
Garykom
17.03.23
✎
17:15
|
(175) да не нравится
когда в ERP УХ в отладчики в километрах кода по десяткам модулей ковыряешься и когда у тебя .Выбрать() в одном модуле а .Следующий() разбросано по куче других... |
|||
|
181
mikecool
17.03.23
✎
17:15
|
(179) на Го об этом не задумываются ))
|
|||
|
182
Fish
17.03.23
✎
17:15
|
(154) Кстати, несколько раз выполнять метод Количество() - это быдлокод :))
|
|||
|
183
mikecool
17.03.23
✎
17:15
|
(180) это только твои трудности )
|
|||
|
184
mikecool
17.03.23
✎
17:15
|
(182) для коллекции не принципиально, но считается да
|
|||
|
185
Garykom
17.03.23
✎
17:16
|
(179) если нужная обработка этих 500000 строк то один фиг их придется ксть в ТЗ или в другие структуры
и вот средствами платформы разом класть быстрей |
|||
|
186
Garykom
17.03.23
✎
17:16
|
(185) *класть
|
|||
|
187
mikecool
17.03.23
✎
17:16
|
(180) а прикинь - еще НайтиСледующий и СледующийПоЗначениюПоля )))
|
|||
|
188
mikecool
17.03.23
✎
17:16
|
(185) зачем? обрабатывай последовательно
|
|||
|
189
Garykom
17.03.23
✎
17:17
|
(182) да обычно КоличествоРезультатов сначала делаю а уже затем по нему условие
|
|||
|
190
Fish
17.03.23
✎
17:17
|
(185) Зачем в ТЗ, если есть выборка? Ты правда не знаешь, как работать с выборкой, или придуриваешься?
|
|||
|
191
magicSan
17.03.23
✎
17:18
|
(110) причем тут сишники? это классика.
|
|||
|
192
Garykom
17.03.23
✎
17:19
|
(188) бывают разные ситуации
например надо отобрать из результата только которые тогда код
намного логичней |
|||
|
193
lodger
17.03.23
✎
17:19
|
(185) >>платформы разом класть быстрей
вот тут ты прав на все 100, потом говорят что сервер 1с обожрался памяти и исдох. |
|||
|
194
Garykom
17.03.23
✎
17:20
|
(190) Покажи уже класс как работать с выборкой!!!
Ну напиши аналог (154) |
|||
|
195
Fish
17.03.23
✎
17:21
|
(192) Бывают, не спорю. Есть отдельные ситуации, когда выгрузка результата в ТЗ будет оптимальнее. Но в (147) ты написал совсем другое ты написал, что ТЗ всегда надо использовать, а это бред.
|
|||
|
196
lodger
17.03.23
✎
17:21
|
(192) если у тебя разные отборы накладываются к одной такой выгрузке, то вроде и ладно.
но если ты это делаешь единожды, то не проще сразу уменьшить результирующий запрос оператором ГДЕ? |
|||
|
197
mikecool
17.03.23
✎
17:21
|
(194) я тебе в (178) написал, чего еще надо?
|
|||
|
198
Garykom
17.03.23
✎
17:21
|
(195) для отладки ТЗ удобней
всегда можно ее целиком глянуть или выгрузить и покрутить |
|||
|
199
magicSan
17.03.23
✎
17:22
|
(192) это глупо, тебе вернули данные которые ты очевидно будешь обрабатвать полностью - поэтому нужно упорядочить и последовательно а не через найтпистроки
|
|||
|
200
Fish
17.03.23
✎
17:23
|
(194) Я повторюсь: сходи уже на курсы по 1С. Думаю, курсы для новичков вполне подойдут, таким элементарным вещам, по-моему уже там учат.
А аналог (154) без ТЗ тебе уже написали, но ты, похоже, даже не понял этого :)))) |
|||
|
201
Кирпич
17.03.23
✎
17:23
|
(198) ну так и используй для отладки. только не забывай убирать
|
|||
|
202
mikecool
17.03.23
✎
17:23
|
(198) для отладки всегда можно рассчитать Выгрузить и посмотреть
|
|||
|
203
Fish
17.03.23
✎
17:23
|
(197) Видимо, не осилил :)))
|
|||
|
204
Garykom
17.03.23
✎
17:23
|
(197) 1. вопрос (194) был не к тебе а к Fish
2. Это не аналог а хрень |
|||
|
205
Fish
17.03.23
✎
17:24
|
(202) Сейчас выяснится, что мастер веток-веток не умеет и отладчиком пользоваться :)))
|
|||
|
206
lodger
17.03.23
✎
17:24
|
(154) чем тебя так ломает работать с интерфейсом выборки? это тоже некая таблица, только в памяти сервака, и ты её не выгружаешь в ТЗ ещё раз на такой же размер памяти.
РезультатЗ = Запросище.Выполнить(); Если РезультатЗ.Пустой() Тогда Возврат "пусто" Иначе ВыборкаЗ = РезультатЗ.Выбрать(); Если ВыборкаЗ.Количество() = 1 Тогда Возврат "Тут 1 строка"; Иначе Возврат "Тут много строк"; КонецЕсли; КонецЕсли; |
|||
|
207
mikecool
17.03.23
✎
17:24
|
(204) ты что то совсем гонишь )))
|
|||
|
208
Garykom
17.03.23
✎
17:24
|
(197) >я тебе в (178) написал, чего еще надо?
ты получение элементов покажи дальше )) чтобы вывести в ошибку |
|||
|
209
Fish
17.03.23
✎
17:25
|
(208) Ну вот тебе в (206) написали. Зачем там элементы получать?
|
|||
|
210
Garykom
17.03.23
✎
17:25
|
(206) а сами значения как получить и вывести?
|
|||
|
211
Лирик
17.03.23
✎
17:26
|
Кстати, вот вариант с запросом:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | АВТОНОМЕРЗАПИСИ() КАК НомерЗаписи |ПОМЕСТИТЬ Таблица |ИЗ | Справочник.Номенклатура КАК Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Таблица.Ссылка, | ЦЕЛ(Таблица.НомерЗаписи / &РазмерПорции) КАК ИндексПорции |ИЗ | Таблица КАК Таблица"; |
|||
|
212
mikecool
17.03.23
✎
17:26
|
(208) каких элементов? Следующий() и в путь
или НайтиСледующий или СледующийПоЗначениюПоля |
|||
|
213
Fish
17.03.23
✎
17:26
|
(210) Ты правда не знаешь? Охренеть :)))
|
|||
|
214
mikecool
17.03.23
✎
17:27
|
+212 НайтиСледующий и структуру принимает
|
|||
|
215
Garykom
17.03.23
✎
17:27
|
(213) знаю
и знаю что без ТЗ код превращается в нечто странное в этом случае |
|||
|
216
mikecool
17.03.23
✎
17:27
|
(213) троллит наверное, жирный Гарик ))
|
|||
|
217
Fish
17.03.23
✎
17:27
|
(216) Да я тоже подозреваю, что троллит. :))
|
|||
|
218
Кирпич
17.03.23
✎
17:28
|
(213) в Go такого нету
|
|||
|
219
bolobol
17.03.23
✎
17:28
|
Полноценная пятничная ветка получилась)) Один массив массивов из запроса-запроса получить, второй что из запроса вообще ничего не получить...
|
|||
|
220
Кирпич
17.03.23
✎
17:28
|
(217) да бухой он. пятница же
|
|||
|
221
Garykom
17.03.23
✎
17:28
|
(216) покажи как в случае результат запроса >1 строки получить строки со 2 до последней без ТЗ
|
|||
|
222
Fish
17.03.23
✎
17:29
|
Хотя работа с выборкой - это тебе не пулл реквесты в бранчи коммитить - тут хоть немного соображать надо :))))
|
|||
|
223
bolobol
17.03.23
✎
17:29
|
(221)
Если Следующий() Тогда одна строка Если Следующий() - тогда тут много ещё строк |
|||
|
224
Garykom
17.03.23
✎
17:29
|
(220) нет, просто заипался при отладке "типового" кода ERP УХ
|
|||
|
225
Garykom
17.03.23
✎
17:31
|
(224)+ например попробуйте (в ERP/КА/УТ11) в печформу УПД/УКД свою колонку добавить и заполнить ее данными из документа ))
|
|||
|
226
Garykom
17.03.23
✎
17:32
|
(222) >пулл реквесты в бранчи коммитить
ты в курсе что хрень написал? |
|||
|
227
Кирпич
17.03.23
✎
17:32
|
(224) да брось ты. пускай 1С сама свой код отлаживает. Давай с гением массивы делить. Изящно и в стиле Си.
|
|||
|
228
Garykom
17.03.23
✎
17:32
|
(223) муахаха
|
|||
|
229
Garykom
17.03.23
✎
17:35
|
(227) я не думаю что много 1Сников сможет с лету разобраться в массивах, срезах и картах из Го
|
|||
|
230
Кирпич
17.03.23
✎
17:37
|
(229) Думаешь, что если ты с лёту не разобрался, то и другие не смогут? Тебя гений не укусил случайно?
|
|||
|
231
mikecool
17.03.23
✎
17:40
|
(229) я норм разобрался в объектах питона, причем слету )))
не суди по себе ))) |
|||
|
232
mikecool
17.03.23
✎
17:42
|
+231 вот чего я так и не понял в 2005, как в нет с делегатами работать ))
|
|||
|
233
magicSan
17.03.23
✎
17:42
|
(231) я тоже со второго раза осилил яндекс практикум за вечер, через месяц правда всё забыл. Ну задачи которые ставил под него решил.
|
|||
|
234
Garykom
17.03.23
✎
17:42
|
я всего то высказался о своем личном опыте кодинга на 1С
что через ТЗ получается намного проще, понятней и удобней в будущем при доработке и отладке |
|||
|
235
Garykom
17.03.23
✎
17:43
|
(232) >как в нет с делегатами работать
это как ОписаниеОповещения в 1С |
|||
|
236
Garykom
17.03.23
✎
17:45
|
(234)+ и признаю что иногда нет смысла делать через ТЗ
и можно банально обойти выборку запроса через Следующий() |
|||
|
237
mikecool
17.03.23
✎
17:50
|
(235) да знаю подсознательно, но в том году мне кореш объяснял - я был не готов к этому знанию
|
|||
|
238
Кирпич
17.03.23
✎
17:55
|
(237) чо там понимать. ссылка на метод
|
|||
|
239
Гена
17.03.23
✎
17:55
|
В мужском споре важен каждый сантиметр
|
|||
|
240
Кирпич
17.03.23
✎
17:57
|
(239) побеждает тот, кто в конце заявит "А, вы про сантиметры? Я то в дюймах говорил."
|
|||
|
241
Garykom
17.03.23
✎
17:59
|
(240) эээ у меня в вершках
|
|||
|
242
Garykom
17.03.23
✎
18:01
|
(241)+ у меня сервер аж 6 вершков
|
|||
|
243
bolobol
17.03.23
✎
18:17
|
Самое главное - корешок, а не вершок
|
|||
|
244
magicSan
17.03.23
✎
19:26
|
(236) если это не тиражное решение то надо тз - там всё сильно быстрее будет чем ваши выборки.
|
|||
|
245
novichok79
17.03.23
✎
19:50
|
переходи на голанг, там можно одной строчкой порезать слайс.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |