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