|
Как оптимизировать запись регистра сведений | ☑ | ||
---|---|---|---|---|
0
idw
14.02.13
✎
19:46
|
Делаю перенос из 1С 7.7 в 1С 8 периодического реквизита с помощью ОЛЕ,
написал вот такой код: КодКонтра77 = СпрДог77.Контрагент.Код; КодДоговор77 = СпрДог77.Код; Спр=Справочники.Договоры.НайтиПоКоду(КодДоговор77); Если НЕ Спр.Пустая() Тогда Если СокрЛП(Спр.Контрагент.Код) = СокрЛП(КодКонтра77) Тогда НаборЗаписей = РегистрыСведений.СуммаДоговоров.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Договор.Установить(Спр.Ссылка); Попытка Периодический77.ИспользоватьОбъект("Сумма",СпрДог77.ТекущийЭлемент()); Периодический77.ВыбратьЗначения(); Пока Периодический77.ПолучитьЗначение() > 0 Цикл Дата = Периодический77.ДатаЗнач; Сумма = Периодический77.Значение; НовЗапись = НаборЗаписей.Добавить(); НовЗапись.Период = Дата; НовЗапись.Договор = Спр.Ссылка; НовЗапись.Сумма = Сумма; КонецЦикла; Исключение Сообщить(СпрДог77.Код); КонецПопытки; НаборЗаписей.Записать(Истина); КонецЕсли; КонецЕсли; Очень долго выполняется. Может можно его оптимизировать? |
|||
1
idw
14.02.13
✎
19:55
|
(0) да идет перебор договоров в 1С 7.7 и для каждого договора переношу историю изменения суммы договора.
|
|||
2
Очкарик
14.02.13
✎
19:58
|
тут не набор записей тормозит, а 7.7
|
|||
3
UnsavedSoul
14.02.13
✎
19:58
|
Думаю, узкое место в записи в цикле. Попробуй создать сперва ТЗ с данными, загрузить ее в набор и его разом записать.
|
|||
4
Очкарик
14.02.13
✎
20:00
|
(3) никакого узкого места там нет.
НовЗапись = НаборЗаписей.Добавить() не создает никакой записи. Это просто заполняемая таблица в памяти до момента метода Записать() |
|||
5
Очкарик
14.02.13
✎
20:01
|
(0) скорее всего долго выполняется из-за чтения периодических реквизитов 7.7.
|
|||
6
GANR
14.02.13
✎
20:03
|
(0) Что говорит замер? ppf-ник в студию.
|
|||
7
UnsavedSoul
14.02.13
✎
20:04
|
(4) так сказали же в (1), что договора перебираются. И НЗ пишется на каждом витке исходя из кода.
|
|||
8
Очкарик
14.02.13
✎
20:08
|
(7) ну теоретически можно выбрать все периодические реквизиты в ТаблицаЗначений и загрузить в Набор записей один раз. Но не думаю, что это кардинально ускорит.
Главный тормоз там - это перебор истории периодических реквизитов. |
|||
9
idw
14.02.13
✎
20:18
|
Пробую без записи в регистр сведений запускать обработку. Долго выполняется и без записи, просто перебор.
Вот код перебора: СпрОрг77.ВыбратьЭлементы(); Пока СпрОрг77.ПолучитьЭлемент()=1 Цикл Ном=Ном+1; СпрДог77.ИспользоватьВладельца(СпрОрг77.ТекущийЭлемент()); СпрДог77.ВыбратьЭлементы('20100101','20131231'); Пока СпрДог77.ПолучитьЭлемент()=1 Цикл Если СпрДог77.ЭтоГруппа()=1 Тогда Продолжить; КонецЕсли; Если СпрДог77.Контрагент.ПринадлежитГруппе(Группа1)=0 Тогда Продолжить; КонецЕсли; КодКонтра77 = СпрДог77.Контрагент.Код; КодДоговор77 = СпрДог77.Код; Спр=Справочники.Договоры.НайтиПоКоду(КодДоговор77); Если НЕ Спр.Пустая() Тогда |
|||
10
idw
14.02.13
✎
20:18
|
(8) либо перебор истории, либо поиск в базе 1С 8. Либо то и другое.
|
|||
11
Очкарик
14.02.13
✎
20:22
|
(9) на семерке ты больше никак не выберешь историю. Смирись.
|
|||
12
UnsavedSoul
14.02.13
✎
20:26
|
(8)(9)
Умываю руки. #семеркастаршеменя :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |