понедельник, 6 октября 2014 г.

УстановитьСсылкуНового() как ход оптимизации!

Для себя открыл новую возможность применения данного метода в типовых конфигурациях.
Особенность чрезвычайно интересная при загрузке справочников.

 Есть реквизит Справочника "Контрагенты", "ОсновнойДоговор". И если создавать нового контрагента, приходится записывать основной договор контрагента. Проблема в том, что для того чтобы записать реквизит ОсновнойДоговор необходимо делать избыточную запись справочника контрагенты.

Процедура СоздатьКонтрагентыИДоговоры()

   
//контрагент
   
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
   
НовыйКонтрагент.УстановитьНовыйКод();
   
НовыйКонтрагент.Наименование        = НаименованиеКонтрагент;

   
НовыйКонтрагент.Записать();

   
//договор
   
ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
   
ДоговорКонтрагента.УстановитьНовыйКод();
   
ДоговорКонтрагента.Владелец                 = НовыйКонтрагент.Ссылка;
   
ДоговорКонтрагента.Организация              = Организация;
   
ДоговорКонтрагента.Наименование             = "Основной договор";

   
ДоговорКонтрагента.Записать();

   
//снова записуем
   
НовыйКонтрагент.ОсновнойДоговорКонтрагента = ДоговорКонтрагента.Ссылка;
   
НовыйКонтрагент.Записать();

КонецПроцедуры


Процедура
СоздатьКонтрагентыИДоговорыПоНовому()

   
НовыйДоговорСсылка = Справочники.ДоговорыКонтрагентов.ПолучитьСсылку(Новый УникальныйИдентификатор); //получаем ссылку для основного договора контрагента

    //контрагент
   
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
   
НовыйКонтрагентСсылка = СправочникКонтрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор);
   
НовыйКонтрагент.УстановитьСсылкуНового(НовыйКонтрагентСсылка);
   
НовыйКонтрагент.УстановитьНовыйКод();
   
НовыйКонтрагент.Наименование        = НаименованиеКонтрагент;
   
НовыйКонтрагент.ОсновнойДоговорКонтрагента = НовыйДоговорСсылка;

   
НовыйКонтрагент.Записать();

   
//договор
   
ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
   
ДоговорКонтрагента.УстановитьНовыйКод();
   
ДоговорКонтрагента.УстановитьСсылкуНового(НовыйДоговорСсылка);
   
ДоговорКонтрагента.Владелец                 = НовыйКонтрагентСсылка;
   
ДоговорКонтрагента.Организация              = Организация;
   
ДоговорКонтрагента.Наименование             = "Основной договор";

   
ДоговорКонтрагента.Записать();

КонецПроцедуры
Недостатки старого метода во всем!

  • НовыйКонтрагент.Ссылка, ДоговорКонтрагента.Ссылка; Система тут кэширует всю ссылку.
  • НовыйКонтрагент.Записать(); Лишняя запись объекта.

Преимущества нового метода во всем, мы системе указываем конкретную ссылку. При этом никаких кэширований и самое важное, избавились от ненужной повторной записи объекта справочника "Контрагенты".

Комментариев нет:

Отправить комментарий