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