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