Возможно, я не открою ничего нового, но кому-то мой совет может пригодиться. Часто при создании нового объекта (например, элемента справочника "Номенклатура"), при попытке установить значения каких-то свойств, появляется надпись типа "Для выполнения данной операции необходимо записать элемент". Лично меня это немного напрягает. Предположим, что у нас есть регистр сведений «Цены продажи» с измерением «Товар». При открытии формы элемента цены из этого регистра отображаются в списке на форме. Пользователь хочет, чтобы при копировании элемента (по F9), цены копируемого элемента сразу появились бы на форме нового. Казалось бы, для этого надо просто скопировать записи регистра для старого элемента и указать в них ссылку нового. Но загвоздка в том, что новый элемент еще не записан, и следовательно ссылки для него не существует. Конечно, можно предварительно записать объект, а потом открыть форму, но при таком подходе при каждом нажатии кнопки «Добавить копированием» элементы справочника будут добавляться, даже если пользователь закроет форму редактирование без сохранения. Выход один – использовать метод УстановитьСсылкуНового() для элемента, созданного копированием. Ссылка для созданного, но еще не записанного объекта будет возвращена методом ПолучитьСсылкуНового().
Вот пример процедуры модуля объекта справочника номенклатура:
Процедура ПриКопировании(ОбъектКопирования) если ЭтоГруппа тогда Возврат; КонецЕсли; УстановитьСсылкуНового(Справочники.Номенклатура.ПолучитьСсылку()); запрос = новый запрос("ВЫБРАТЬ | Цена, | Категория |ИЗ | РегистрСведений.ЦеныПродажи.СрезПоследних(,товар = &товар) "); запрос.УстановитьПараметр("товар",ОбъектКопирования.ссылка); выб = запрос.Выполнить().Выбрать(); пока выб.Следующий() цикл РегЦены = РегистрыСведений.ЦеныПродажи.СоздатьМенеджерЗаписи(); РегЦены.Период = НачалоДня( ТекущаяДата()); РегЦены.Товар = ПолучитьСсылкуНового(); РегЦены.Категория = выб.Категория; РегЦены.Цена = выб.Цена; РегЦены.Автор = ИмяПользователя(); РегЦены.Записать(истина); конецЦикла; КонецПроцедуры