8.х Оптимизация записи в регистр сведений

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Ludmillka, 10 дек 2013.

  1. TopicStarter Overlay
    Ludmillka
    Offline

    Ludmillka Опытный в 1С

    Регистрация:
    13 сен 2013
    Сообщения:
    159
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте!

    Я пишу записи в регистр сведений так:

    Код:
    Для каждого строка из РаботыУчитываемыеВКТУ Цикл
    Набор = РегистрыСведений.ггКонтрольныеРаботы.СоздатьНаборЗаписей();
    
    Набор.Прочитать();
    
    НовЗапись = Набор.Добавить();
    НовЗапись.Работа1=строка.ПерваяРабота ;
    НовЗапись.Работа2=строка.ВтораяРабота;
    НовЗапись.ПерваяРаботаВЭтапе=строка.ПерваяРаботаВЭтапе;
    НовЗапись.ТипОтчета=строка.НомерОтчета;
    НовЗапись.Сценарий=Приемник.Ссылка;
    НовЗапись.Контрагент=Приемник.Ссылка.Владелец.Контрагент;
    НовЗапись.КонтактноеЛицо=Приемник.Ссылка.Владелец.КонтактноеЛицо;
    НовЗапись.ВходящийНомер=Приемник.Ссылка.Владелец.Код +"/"+ Приемник.Ссылка.Код;
    НовЗапись.АдресОбъекта=Приемник.Ссылка.Владелец.ггАдрес;
    НовЗапись.Этап=строка.ВтораяРабота.Родитель;
    Набор.Записать();
    
    КонецЦикла;
    
    Выполняется очень долго
    Код:
    Набор.Записать();
    Подскажите, можно как-то переписать код, выиграв в производительности по времени?
  2. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    например создать набор записей за пределами цикла, а в цикле лишь добавлять в него записи

    примерно так как-то
    Код:
    Набор = РегистрыСведений.ггКонтрольныеРаботы.СоздатьНаборЗаписей();
    
    Набор.Прочитать();
    Для каждого строка из РаботыУчитываемыеВКТУ Цикл
    
    НовЗапись = Набор.Добавить();
    НовЗапись.Работа1=строка.ПерваяРабота;
    НовЗапись.Работа2=строка.ВтораяРабота;
    НовЗапись.ПерваяРаботаВЭтапе=строка.ПерваяРаботаВЭтапе;
    НовЗапись.ТипОтчета=строка.НомерОтчета;
    НовЗапись.Сценарий=Приемник.Ссылка;
    НовЗапись.Контрагент=Приемник.Ссылка.Владелец.Контрагент;
    НовЗапись.КонтактноеЛицо=Приемник.Ссылка.Владелец.КонтактноеЛицо;
    НовЗапись.ВходящийНомер=Приемник.Ссылка.Владелец.Код +"/"+ Приемник.Ссылка.Код;
    НовЗапись.АдресОбъекта=Приемник.Ссылка.Владелец.ггАдрес;
    НовЗапись.Этап=строка.ВтораяРабота.Родитель;
    конецикла;
    Набор.Записать();
    
  3. TopicStarter Overlay
    Ludmillka
    Offline

    Ludmillka Опытный в 1С

    Регистрация:
    13 сен 2013
    Сообщения:
    159
    Симпатии:
    0
    Баллы:
    26
    Спасибо, реально быстрее стало.
  4. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    старайтесь не создавать обЪекты в цикле и не выполнять в нем же запросы. Это заметно тормозит работу.
  5. TopicStarter Overlay
    Ludmillka
    Offline

    Ludmillka Опытный в 1С

    Регистрация:
    13 сен 2013
    Сообщения:
    159
    Симпатии:
    0
    Баллы:
    26
    Спасибо за совет!

Поделиться этой страницей