Цитата
MaxMart пишет:
А ссылку на владельца можно получить только после записи элемента. То есть нужно использовать обработчик события ПриЗаписи, когда контрагент уже записан! Но в нем не получается установить Основное контактное лицо
Оказывается, платформа 8.2 предоставляет средства, позволяющие обойти это препятствие. Основное контактное лицо можно установить "по частям".
СправочникМенеджер имеет метод
ПолучитьСсылку()
Этот метод, примененный без параметров, позволяет сформировать новую уникальную ссылку.
В процедуре "ПередЗаписью" справочника "Контрагенты" вызываем этот метод следующим образом:
БудущаяСсылкаКЛ = Справочники.КонтактныеЛицаКонтрагентов.ПолучитьСсылку();
Так получаем ссылку на будущий элемент справочника "Контактные лица". Раз ссылка получена, можно установить реквизит:
ОсновноеКонтактноеЛицо = БудущаяСсылкаКЛ;
Дальнейший код будет располагаться уже в процедуре "ПриЗаписи", поэтому переменная БудущаяСсылкаКЛ должна быть объявлена как переменная модуля.
В процедуре "ПриЗаписи" создаем новый объект-справочник "Контактные лица" и устанавливаем его реквизиты, в т.ч. владельца, т.к. контрагент уже записан:
НовыйКЛОбъект = Справочники.КонтактныеЛицаКонтрагентов.СоздатьЭлемент();
НовыйКЛОбъект.Владелец = ЭтотОбъект.Ссылка;
.......................................... (прочие реквизиты)
А теперь "соединяем две части". Для этого используем метод СправочникОбъекта УстановитьСсылкуНового().
Этот метод "Устанавливает значение для нового (созданного и еще не записанного) объекта, которое будет назначено при записи в качестве ссылки" (синтакс-помощник). Т.е. в качестве параметра нужно передать ту самую ссылку, которая была создана ранее:
НовыйКЛОбъект.УстановитьСсылкуНового(БудущаяСсылкаКЛ);
Теперь объект готов для записи:
НовыйКЛОбъект.Записать();
Следует отметить, что если по каким-то причинам запись не удастся, то будет отменена также и запись контрагента, что особенно приятно.
Наконец, последний штрих. Дело в том, что объект ЭтотОбъект (записываемый контрагент) содержит ссылку на контактное лицо, а объект НовыйКЛОбъект в реквизите Владелец содержит ссылку на ЭтотОбъект. Такие связки не очищаются автоматически после окончания процедуры, поэтому вспомогательный объект надо уничтожить принудительно:
НовыйКЛОбъект = Неопределено;
[необходимо зарегистрироваться для просмотра ссылки]
Сообщение отредактировал MATEVI - 15.08.11, 23:06