Имя: Пароль:
1C
 
быстро записать несколько десятков тысяч документов
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) Что, прямо все-все документы нужны? Вместе с помеченными на удаление и непроведёнными?
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn