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