|
быстро записать несколько десятков тысяч документов | ☑ | ||
---|---|---|---|---|
0
m1_1976
24.04.15
✎
11:15
|
Всем доброго времени суток.
1С Бух 8 (ред.3) УФ. 1С 8.3 Есть задача - Добавлен новый реквизит в шапку поступения товаров. надо теперь пройти по всем документам и поставить в этот реквизит рассчитанное число. Очень долго работает пара ДокументВыборка и ПолучитьОбъект() а потом его записать. Проводить документ заново не надо. ТОлько реквизит шапки вписать... Как-то можно быстрее? |
|||
1
Михаил Козлов
24.04.15
✎
11:20
|
РежимЗаписиДокумента.Запись.
Полезно еще ДокументОбъект.ОбменДанными.Загрузка = ИСТИНА; В 8.2 для этого пользовался УниверсальныйПодборИОбработкаОбъектов. |
|||
2
m1_1976
24.04.15
✎
11:20
|
ап. может есть что-то более правильное? чем простой перебор...
начатьТранзакцию() и ЗафиксироватьТранзакцию() поставил через каждые 200 документов!... Прироста скорости не дало... |
|||
3
Ващета
24.04.15
✎
11:21
|
+(1) ещё если в транзакции по идее быстрее должно быть
|
|||
4
m1_1976
24.04.15
✎
11:21
|
Вот текст модуля...
&НаСервере Процедура Команда1НаСервере() ВыборкаВсе = Документы.ПоступлениеТоваровУслуг.Выбрать(); НачатьТранзакцию(); СЧ = 1; Пока ВыборкаВсе.Следующий() Цикл Об = ВыборкаВсе.ПолучитьОбъект(); Об.М1_ИтогНаценки = Об.Товары.Итог("СуммаВРознице"); Если Об.М1_ИтогНаценки = 0 Тогда продолжить; КонецЕсли; Об.Записать(РежимЗаписиДокумента.Запись); Сч=СЧ+1; Если СЧ = 200 Тогда ЗафиксироватьТранзакцию(); НачатьТранзакцию(); СЧ =1; Конецесли; КонецЦикла; ЗафиксироватьТранзакцию(); КонецПроцедуры |
|||
5
m1_1976
24.04.15
✎
11:21
|
10 минут на 14 дней...
|
|||
6
H A D G E H O G s
24.04.15
✎
11:22
|
(5) Ты что то делаешь не так.
|
|||
7
m1_1976
24.04.15
✎
11:23
|
ага. я знаю
|
|||
8
Nuobu
24.04.15
✎
11:23
|
(5) Об.ОбменДанными.Загрузка = ИСТИНА; из (1)
поробуй добавить. |
|||
9
Ващета
24.04.15
✎
11:23
|
Об.ОбменДанными.Загрузка = ИСТИНА;
добавь ещё |
|||
10
GROOVY
24.04.15
✎
11:23
|
Нафига тебе пересчитывать значение реквизита?
Почему не в регистр сведений это пишешь? Почему группировку сумм не запросом получаешь? |
|||
11
Nuobu
24.04.15
✎
11:24
|
(5) Можешь еще включить замер производительности и посмотреть, где нужно подпилить.
|
|||
12
m1_1976
24.04.15
✎
11:25
|
(10) - я вот про это наверное и спрашиваю...
|
|||
13
DmitriyDI
24.04.15
✎
11:26
|
(12) да и выборка почему такая делай запросом порциями по 10000, с условием твой реквизит не заполнен, если будешь перезапускать свою обработку каждый раз по новой все документы проходить.
|
|||
14
GROOVY
24.04.15
✎
11:26
|
(12) Ты спросил "как можно быстрее", я как бы тебе намекаю от куда у тебя тормоза.
|
|||
15
m1_1976
24.04.15
✎
11:26
|
(9) и (1) +100
спасибо все пошло. уже есть смысл ждать, чашка кофе и закончит! |
|||
16
m1_1976
24.04.15
✎
11:28
|
собственно вот замер - верхние строки
Форма.Форма.Форма 15 Об.Записать(РежимЗаписиДокумента.Запись); 904 6,677819 36,24 Форма.Форма.Форма 8 Об = ВыборкаВсе.ПолучитьОбъект(); 1 216 3,169029 17,20 ОбщийМодуль.ОбщегоНазначенияБПСобытия.Модуль 134 НаборЗаписейРегистра.Записать(Истина); 904 2,075488 11,26 ОбщийМодуль.ОбменДаннымиВызовСервера.Модуль 48 АктуальнаяДата = ПолучитьФункциональнуюОпцию("АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО"); 7 232 1,131479 6,14 Форма.Форма.Форма 7 Пока ВыборкаВсе.Следующий() Цикл 1 216 1,074724 5,83 ОбщийМодуль.ОбщегоНазначенияБПСобытия.Модуль 123 НаборЗаписейРегистра = РегистрыСведений.ДанныеПервичныхДокументов.СоздатьНаборЗаписей(); 904 0,473850 2,57 ОбщийМодуль.ОбменДаннымиСобытия.Модуль 891 Если Не ОбменДаннымиВызовСервера.ОбменДаннымиВключен(ИмяПланаОбмена, Объект.ОбменДанными.Отправитель) Тогда 7 232 0,198080 1,07 ОбщийМодуль.ОбменДаннымиСобытия.Модуль 856 Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда 7 232 0,186016 1,01 |
|||
17
m1_1976
24.04.15
✎
11:29
|
там оказывается <<НЕ МОЕГО>> Вызывается из всяких подписок и событий :))) ... жуть
|
|||
18
Сильф
24.04.15
✎
12:01
|
(4) Что, прямо все-все документы нужны? Вместе с помеченными на удаление и непроведёнными?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |