|
У кого есть функция разложения массива на пачки размером по 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
|
переходи на голанг, там можно одной строчкой порезать слайс.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |