Имя: Пароль:
1C
1С v8
Эффективный по времени способ создания справочника
0 Мимохожий Однако
 
29.12.14
20:49
Задачка немного теоретическая. Есть некоторая таблица значений с полями "Наименование" и "ДопРеквизит".
Способ 1. Перебираем ТЗ и для каждой строки используем СоздатьЭлемент().
Есть ли "волшебный" способ массового создания справочника Номенклатура быстрее Способа 1?
1 Aleksey
 
29.12.14
20:51
да
НачатьТранзакцию()
2 Garykom
 
гуру
29.12.14
20:56
(1) +1

+2 это прямая запись в таблицу (если sql сервер)
3 Мимохожий Однако
 
29.12.14
21:00
Надо померить производительность. Вещь очевидная, но как-то не обратил внимания. (1),(2) спасибо
4 karabas11
 
29.12.14
21:30
(0) Распараллелить запись
5 MrStomak
 
29.12.14
22:15
(1), (2) У автора, суда по СоздатьЭлемент(), вовсе не dbf-ная семёрка.
6 Garykom
 
гуру
29.12.14
22:23
(5) эээ и что оба метода хотите сказать не работают? ))
7 MrStomak
 
29.12.14
22:28
(6) Нет, просто НачатьТранзакцию в 8ке не так сильно ускоряет. Прямо в sql или параллельная запись (тоже при sql) - это значительно изменит расклад.
8 Мимохожий Однако
 
29.12.14
22:44
Сделал замер в обработке. Нашел строку с максимальным временем. Это был запрос... в цикле. Поменял код.
Ускорилось раз в 10.
А команда НачатьТранзакцию() дала минимальный эффект.
(5) У автора восьмёрка ))
9 Garykom
 
гуру
29.12.14
22:59
(7)(8) НачатьТранзакцию() и ЗафиксироватьТранзакцию() просто готовить нужно правильно...

типа вплоть до подбора оптимального кол-ва элементов записываемых в каждой транзакции...
10 Garykom
 
гуру
29.12.14
23:01
(9)+ т.е. например если требуется записать 10 000 элементов то бесполезно писать их в одной транзакции

но вот если писать их кусками по 200-300 штук то ускорение в несколько раз будет ))
11 Мимохожий Однако
 
29.12.14
23:02
(9)Я с этим не спорю. В моём частном случае важнее оказался мой кривой код. Рекомендации по разбивке понадобятся при больших объемах. Спасибо.
12 MrStomak
 
29.12.14
23:20
(10) ну дык это же семерочный глюк\фича с подбором элементов транзакции. Сейчас вот на 8ке перезаписывал 5000+ элементов в файловом варианте без транзакции - 17 сек, в одной транзакции - 15 сек, в транзакциях по 200 штук - все равно 15 сек. Все повторено по 10 раз, результат стабильный. Возможно, с созданием ситуация и другая, не знаю.
13 Garykom
 
гуру
29.12.14
23:45
(12) update с insert'ом не попутал? )) при перезаписи еще поиск идет - который все и сжирает в твоем случае

ЗЫ а подбор нужен когда оперативки не хватает, чтобы все в памяти держать - оптимальными кусками писалось сразу из памяти