|   |   | 
| 
 | Как оптимизировать запись регистра сведений | ☑ | ||
|---|---|---|---|---|
| 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)
  Умываю руки. #семеркастаршеменя :) | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |