|
порционное чтение таблицы значений Ногаминебить, evgeniy_n, Rovan, Aloex, aka MIK, Михаил Козлов, sikuda, paramedic, Кирпич, kir-g, Fish, Мультук, boev82, Timon1405, Ёпрст, skafandr, Затейник, avkynev, Fedor-1971, John D, kupec, Гипервизор, ryutao, k99, Dolly_EV, ndrv, МаленькийВопросик, toypaul, unenu, Умный Слоненок, LuckyStar, Chai Nic, Mihenius, ГдеСобакаЗарыта, H A D G E H O G s, Karamzin, АгентБезопаснойНацио, dva1c, АНДР, zva, vbus, integer, arsik, runuts, Галахад, Черников, craxx, Lazy Stranger, obs191, Климов Сергей, ДенисСмирнов, ТДК, Шурик71, maxab72, lubitelxml, PLUT, Толич, zippygrill, maxar, Доминошник, zenik, Silgis, idw, Hmster, vyaz, ads55, Bigbro
| ☑ | ||
|---|---|---|---|---|
|
0
Маленький Вопросик
07.02.26
✎
18:19
|
товарищи, доброго времени!
предложите варианты кода порционного чтения тз спасибо! |
|||
|
1
Ёпрст
гуру
07.02.26
✎
18:22
|
(0) а че, циклы уже отменили ?
|
|||
|
2
Ёпрст
гуру
07.02.26
✎
18:23
|
+1 еще, дарю: [тут типа номер строки]
|
|||
|
3
X Leshiy
07.02.26
✎
18:52
|
(0) А зачем? ТЗ она в памяти рисуется, а потом уже в сеансовых данных. Индексируй, индексы рулят)
|
|||
|
4
X Leshiy
07.02.26
✎
18:52
|
||||
|
5
sikuda
07.02.26
✎
20:15
|
(0) Из ТаблицыЗначений или Базы данных?
ТаблицаЗначений вся в памяти - выбирай кусками, что хочешь База данных: Пагинации в 1С нет, приходится извращаться Но при много миллионный выборке сделать выгрузить в ТЗ точно не надо ... |
|||
|
6
Маленький Вопросик
07.02.26
✎
21:56
|
если что, то сделано! спасибо всем за советы!
|
|||
|
7
Волшебник
07.02.26
✎
23:55
|
(6) Сделано как?
|
|||
|
8
Chai Nic
08.02.26
✎
08:21
|
(5) Выборка из результата запроса тоже в памяти висит, кстати. По крайней мере, так было пару лет назад. Проверял. Оверхед при выгрузке в ТЗ был буквально единицы процентов.
|
|||
|
9
Маленький Вопросик
08.02.26
✎
08:47
|
(7) ответами "экспертов" не воодушевился?
вот так: &НаСервере
Функция РазбитьТЗНаЧасти(ВходящийМассив, РазмерЧасти)
Сч = 0;
СодержаниеПорции = Новый Массив;
Части = Новый Массив;
Для Индекс = 0 По ВходящийМассив.Количество() - 1 Цикл
Сч = Сч + 1;
Если Сч % РазмерЧасти = 0 Тогда
СодержаниеПорции.Добавить(ВходящийМассив[Индекс]);
Части.Добавить(СодержаниеПорции);
СодержаниеПорции = Новый Массив;
Сч = 0;
Иначе
СодержаниеПорции.Добавить(ВходящийМассив[Индекс]);
КонецЕсли;
КонецЦикла;
Части.Добавить(СодержаниеПорции);
Возврат Части;
КонецФункции |
|||
|
10
Кирпич
08.02.26
✎
09:01
|
Чота как то жутковато становится на мисте.
|
|||
|
11
craxx
08.02.26
✎
09:29
|
(9) а зачем???
|
|||
|
12
Кирпич
08.02.26
✎
09:57
|
(11) Хрен знает. Может хочет одну таблицу значений одновременно обработать несколькими фоновыми заданиями. Но нафига по массивам распихивать, непонятно. Судя по тупости приведенного кода, код писал ИИ. Сельская интеллигенция осваивает ИИ. Деградация, тупость, уныние, безысходность.
|
|||
|
13
Маленький Вопросик
08.02.26
✎
10:10
|
(12) следи за своим языком и предложи свой пример
|
|||
|
14
craxx
08.02.26
✎
10:11
|
(12) если для этого, то просто берешь размер таблицы, делишь его на количество фонок, и в параметры фонок просто первый и последний индекс суешь, нафиг вообще массивы?
|
|||
|
15
Кирпич
08.02.26
✎
10:15
|
(13) вот тебе пример в (14)
|
|||
|
16
H A D G E H O G s
08.02.26
✎
12:05
|
(14) И в фоновые уедут полные копии таблицы?
|
|||
|
17
Кирпич
08.02.26
✎
12:08
|
(16) чо проверил? :)
|
|||
|
18
H A D G E H O G s
08.02.26
✎
12:08
|
(12) Ну и если он разбивает ТЗ - то в результирующем массиве у него будут СтрокаТаблицыЗначений, которую не передать в Фоновое.
|
|||
|
19
H A D G E H O G s
08.02.26
✎
12:10
|
(17) Что проверил? Если я правильно понял идею (14) - Она в передаче в фоновое номеров строк таблицы. Но и таблицу же надо передать, откуда фоновое данные брать будет?
|
|||
|
20
Кирпич
08.02.26
✎
12:15
|
(19) есть маленькая надежда, что таблица не скопируется. но скорее всего она скопируется. проверять ниахота
|
|||
|
21
H A D G E H O G s
08.02.26
✎
12:18
|
(20) Конечно скопируется, а потом сериализуется и десериализуется в фоновом, вы чего?
|
|||
|
22
Кирпич
08.02.26
✎
12:20
|
(21) да ничего. просто логично было бы её не копировать. но в 1с своя логика.
|
|||
|
23
Кирпич
08.02.26
✎
12:23
|
прочитал. "Все передаваемые параметры должны поддерживать сериализацию."
|
|||
|
24
craxx
08.02.26
✎
12:26
|
(19) ТЗ можно заранее передать в некий глобальный объект, который будет виден всем фонкам.
|
|||
|
25
Кирпич
08.02.26
✎
12:41
|
(24) да 1с её скорее всего всё равно скопирует. может там конечно оптимизирует это дело, но тот факт, что параметры должны сериализоваться, гарантий некопирования не дает. да и хрен с ним. нафиг это вабще надо. да и автор так и не сказал чего он хотел сотворить своим гениальным кодом и почему ему не зашло использование метода тз.Скопировать()
|
|||
|
26
Кирпич
08.02.26
✎
12:46
|
(24) вово. в модуль с повторным использованием
|
|||
|
27
craxx
08.02.26
✎
15:18
|
(25) Да и нехай скопирует. Важно, что скопирует только ОДИН раз, а не кучу раз.
|
|||
|
28
ГдеСобака Зарыта
08.02.26
✎
15:44
|
(8) Сомнительно. Почему тогда поиск по выборке так жутко тормозит?
|
|||
|
29
Гипервизор
08.02.26
✎
17:38
|
(8) Кстати, слышал я, что выборка через объектную модель ведёт себя иначе. Но не проверял.
|
|||
|
30
Chai Nic
08.02.26
✎
17:40
|
(28) Не знаю, не приходилось по выборке искать.
Но эксперимент с огромными результатами запросов проводил. И потребление памяти после метода Выбрать() было практически таким же как и после метода Выгрузить(). |
|||
|
31
Asmody
08.02.26
✎
20:50
|
А МВТ в фоновое можно передать? Не охото лезть проверять
|
|||
|
32
CepeLLlka
08.02.26
✎
21:07
|
(10)ВайбКодинг :)
|
|||
|
33
zippygrill
09.02.26
✎
09:40
|
(9) годный вариант, под задачу конечно.
Дополню: если знаешь заранее что ТЗ будет большое, то сразу разбивай ее на части пропорциональным размером и потоками обрабатывай эти части. |
|||
|
34
unenu
09.02.26
✎
09:56
|
если тз типизирована, то в ВТ и примерно так...
ПодробностиВЫБРАТЬ ТаблицаНабораДанных.Ссылка КАК Товар, АВТОНОМЕРЗАПИСИ() КАК Номер ПОМЕСТИТЬ Вт_ТаблицаНабораДанных ИЗ Справочник.Номенклатура КАК ТаблицаНабораДанных ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПЕРВЫЕ 1505 // В реальном наборе ПЕРВЫЕ убрать Вт_ТаблицаНабораДанных.Товар КАК Товар, Вт_ТаблицаНабораДанных.Номер КАК Номер, ВЫБОР КОГДА &СтрокВПорции > 0 ТОГДА (ВЫРАЗИТЬ(Вт_ТаблицаНабораДанных.Номер / &СтрокВПорции - 0.5 КАК ЧИСЛО(15, 0))) + ВЫБОР КОГДА Вт_ТаблицаНабораДанных.Номер / &СтрокВПорции - (ВЫРАЗИТЬ(Вт_ТаблицаНабораДанных.Номер / &СтрокВПорции - 0.5 КАК ЧИСЛО(15, 0))) > 0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ ИНАЧЕ 0 КОНЕЦ КАК Порция ИЗ Вт_ТаблицаНабораДанных КАК Вт_ТаблицаНабораДанных УПОРЯДОЧИТЬ ПО Номер |
|||
|
35
Толич
09.02.26
✎
09:46
|
(21) Тоже об этом подумал. Разбить на массивы и отправить в фоновые задачи.
|
|||
|
36
H A D G E H O G s
09.02.26
✎
10:38
|
(34) К черту полумеры!
Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ ПЕРВЫЕ 10000 | Номенклатура.Ссылка КАК Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.Ссылка > &Ссылка | |УПОРЯДОЧИТЬ ПО | Ссылка"; ПоследняяСсылка=Справочники.Номенклатура.ПустаяСсылка(); Пока Истина Цикл Запрос.УстановитьПараметр("Ссылка",ПоследняяСсылка); МассивНаОбработку=Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Если МассивНаОбработку.Количество()=0 Тогда Прервать; КонецЕсли; ПоследняяСсылка=МассивНаОбработку[МассивНаОбработку.ВГраница()]; ФоновыеЗадания.Выполнить("ОбработатьНоменклатуру",МассивНаОбработку); КонецЦикла; |
|||
|
37
АгентБезопасной Нацио
09.02.26
✎
10:59
|
(34) АВТОНОМЕРЗАПИСИ() не обязана нумеровать "с единицы"...
|
|||
|
38
unenu
09.02.26
✎
11:55
|
(37) это уже вопрос порядка, если он важен для алгоритма, то сначала формируем вт из тз, потом(в запросе) добиваемся правильного порядка и нумерации любым доступным методом в контексте СУБД.
если порядок не важен, а важно только только разбить тз на фиксированные подмножества для параллелизма, то по-барабану. |
|||
|
39
Гипервизор
09.02.26
✎
12:21
|
(36) А вторые 10к записей оставляем за бортом?
|
|||
|
40
Timon1405
09.02.26
✎
12:24
|
(39) Пока Истина Цикл
|
|||
|
41
aka MIK
09.02.26
✎
12:37
|
(36)
Номенклатура.Ссылка > &Ссылка
Прикольно |
|||
|
42
sikuda
09.02.26
✎
13:00
|
(36) Когда технологии пагинации в 1C нет, но очень хочется...
- 10000 Выполнить().Выгрузить() тогда норм. Да унификация в 1С доступа к данным убила всякие SQL OFFSET ... |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |