Ребят, с управляемыми формами опыт есть, но не большой, подскажите как сделать, пожалуйста, пишу свой документ, если документ новый нужно, что бы перед созданием документа, создавался справочник, который является реквизитом, данного документа. в форме документа, пишу такой код:

```1c
    &НаСервере
    Функция ЭтоНовый()
    Возврат Параметры.Ключ.Пустая();
    КонецФункции

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    Если ЭтоНовый() Тогда
    //Для каждого нового документа создается элемент справочника первичный документ, сразу при создании документа открываю форму
    мПараметры = Новый Структура;
    мПараметры.Вставить("Ключ", Объект.ПервичныйДокумент);
    Объект.ПервичныйДокумент = ОткрытьФорму("Справочник.ПервичныеДокументы.Форма.ФормаЭлемента", , Элементы.ПервичныйДокумент, , ПолучитьОкна()[0], , , РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);

    КонецЕсли;
    КонецПроцедуры
```

происходит следующее:
1. перед открытием формы документа открывается форма нового справочника, о чем я сразу не догадался, т.к. форма была спрятана под формой документа
2. после записи справочника, реквизит в форме документа не обновляется, чего я желаю

подскажите, кто знает, как сделать правильно, процедура ПриОткрытии вызывается "при открытии формы, ДО ЕЁ ПОКАЗА", следовательно мыслю, что нужно использовать другую, подскажите
---
в общем сделал, примерно как рекомендовали в (4)
в форме документа:

```1c
    &НаСервере
    Функция ЭтоНовый()
    Возврат Параметры.Ключ.Пустая();
    КонецФункции

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    Если ЭтоНовый() Тогда
    ПодключитьОбработчикОжидания("СоздатьПервичныйДокументДляЭтойПроверки", 0.1, Истина)
    КонецЕсли;
    КонецПроцедуры

    &НаКлиенте
    Процедура СоздатьПервичныйДокументДляЭтойПроверки()
    //Для каждого нового документа создается элемент справочника первичный документ, сразу при создании документа открываю форму
    ОткрытьФорму("Справочник.ПервичныеДокументы.Форма.ФормаЭлемента", , ЭтаФорма, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
    КонецПроцедуры

    &НаСервере
    Процедура ЗаполнитьПолеПервичныйДокументСозданнымСправочником(Справочник)
    Объект.ПервичныйДокумент = Справочник;
    КонецПроцедуры
```

в форме справочника:

```1c
    &НаКлиенте
    Процедура ПослеЗаписи(ПараметрыЗаписи)
    Если ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма") Тогда
    ВладелецФормы.ЗаполнитьПолеПервичныйДокументСозданнымСправочником(Объект.Ссылка);
    КонецЕсли;
    КонецПроцедуры
```

в принципе, работает как я и хотел, всем спасибо за участие
---
ОткрытьФорму ничего не вернет.
Почему просто не вывести реквизит на форму, и проверять его заполнение? А пользователь по кнопке создать уже реквизит заполнит.
---
реквизит на форме документа есть, как проверять его заполнение, при открытии, думаю, не пойдет, будет то же самое
---
как проверять его заполнение
У реквизита есть свойство, "проверять заполнение".
Есть способ, пройти предложенным путем, но он неправильный:
При открытии подключаем обработчик ожидания, через пару секунд после открытия он запускает создание справочника, владельцем формы создания будет форма документа, в форме справочника после записи можно вызвать экспортную процедуру из формы документа (через владельца формы), либо выполнить метод Оповестить(). Если использовать Оповестить, то в форме документа в событии ОбработкаОповещения ловим создание элемента справочника, и пишем в реквизит. Но повторюсь еще раз, так не делают.
---
в общем сделал, примерно как рекомендовали в (4)
в форме документа:

```1c
    &НаСервере
    Функция ЭтоНовый()
    Возврат Параметры.Ключ.Пустая();
    КонецФункции

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    Если ЭтоНовый() Тогда
    ПодключитьОбработчикОжидания("СоздатьПервичныйДокументДляЭтойПроверки", 0.1, Истина)
    КонецЕсли;
    КонецПроцедуры

    &НаКлиенте
    Процедура СоздатьПервичныйДокументДляЭтойПроверки()
    //Для каждого нового документа создается элемент справочника первичный документ, сразу при создании документа открываю форму
    ОткрытьФорму("Справочник.ПервичныеДокументы.Форма.ФормаЭлемента", , ЭтаФорма, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
    КонецПроцедуры

    &НаСервере
    Процедура ЗаполнитьПолеПервичныйДокументСозданнымСправочником(Справочник)
    Объект.ПервичныйДокумент = Справочник;
    КонецПроцедуры
```

в форме справочника:

```1c
    &НаКлиенте
    Процедура ПослеЗаписи(ПараметрыЗаписи)
    Если ТипЗнч(ВладелецФормы) = Тип("УправляемаяФорма") Тогда
    ВладелецФормы.ЗаполнитьПолеПервичныйДокументСозданнымСправочником(Объект.Ссылка);
    КонецЕсли;
    КонецПроцедуры
```

в принципе, работает как я и хотел, всем спасибо за участие
---
логику примерно понял
но есть 2 вопроса:
1. зачем проверять заполнение реквизита в форме документа?
2. почему подход не правильный? как делать правильно?
---
Ну раз нужно обязательно создавать элемент справочника, то пусть его пользователь сам создаст, и не надо делать костыли, с принудительным вызовом, а если пользователь забудет создать 'элемент справочника, как раз и понадобится это свойство.
---
понял, буду пробовать
---
"проверять заполнение" я имею в виду устанавливать свойство
---
Для удобства пользователя можешь создать кнопку по которой если он нажмёт то создаст элемент справочника
---
проблема в том, что такая кнопка есть, когда нажимаешь выбор на поле ввода, там есть зеленый плюсик, который и создает справочник, вот эту процедуру и хочу сделать более интерактивной, чтобы пользователю не нужно было нажимать кнопки, а только забивать данные