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

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

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

В наличии

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

Категория:

Описание

Зачастую в типовых конфигурациях все сталкивались с автоматической загрузкой справочников "Контрагенты" и "ДоговорыКонтрагентов". Как правило загружая эти справочники мы заполняем поля ОсновнойДоговор для справочника Контрагенты и Владелец для справочника ДоговорыКонтрагентов. Для этого приходится вначале записать справочник Контрагенты набивая все возможные реквизиты, а потом создать договор, передать в договор ссылку новосозданого контрагента в качестве владельца, записать этот договор и опять установить записаный договор в реквизит справочника Контрагенты (ОсновнойДоговор). Ну и конечно опять записываем Контрагенты для сохранения измененного реквизита. 
Пример привычной записи: 
Процедура СоздатьКонтрагентыИДоговоры(РеквизитыЗаполненияКонтрагента, РеквизитыЗаполненияДоговора)

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

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

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

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

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

Как бы запутанно это не звучало но вот так оно и выглядит. Недостатки таких телодвижений состоят собственно в двойной записи одного объекта справочника Контрагенты ну и запутанности.


Предлагаю обратить внимание на методы ПолучитьСсылку() и УстановитьСсылкуНового(). Информацию о этих методах можно найти в синтаксис помошнике, а я просто приведу пример как обойти двойную запись одного объекта. Более того преимущество этого метода еще и в том, что ненужно использовать «.Ссылка» при использовании которого, система всецело кэширует объект в память. 

Процедура СоздатьКонтрагентыИДоговорыПоНовому(РеквизитыЗаполненияКонтрагента, РеквизитыЗаполненияДоговора)

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

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

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

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

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

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

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

has been added to your cart:
Оформление заказа