Доброго дня.

Из формы одного справочника программно открываю форму нового элемента другого справочника.
Как, используя ДанныеФормыСтруктура формы другого справочника создать прикладной объект и программно записать туда все значения, которые пользователь ввел на форме другого справочника?
Не использовать же ЗаполнитьЗначенияСвойств...
---
РеквизитФормыВЗначение или ДанныеФормыВЗначение
---
СправочникОбъект = РеквизитФормыВЗначение("Объект");
СправочникОбъект.Записать();
---
КопироватьДанныеФормы (CopyFormData) не предлагать?
---
рассматривал этот вариант, но мне нужно выгрузить данные формы в новый объект, а не в такие же данные формы.

(тип источника и приемника - ДанныеФормыСтруктураСКоллекцией, ДанныеФормыКоллекция, ДанныеФормыСтруктура)
---
РеквизитФормыВЗначение или ДанныеФормыВЗначение
---
Делал через ДанныеФормыВЗначение:

```1c
    НовыйОбъект = ДанныеФормыВЗначение(ДанныеФормыЭлементаДопСправочника, ТипЗнч(ПустаяСсылкаПодчиненногоСправочника))
```

получаю ошибку: Несоответствие типов (параметр номер '2')

Код вызывается в модуле основной формы, оттуда же программно открывается форма другого справочника (ДанныеФормыЭлементаДопСправочника)
---
указывайте тип прикладного объекта - Тип("СпрвочникОбъект.ИмяСправочника")
---
Все получилось, с объектом действительно затупил, спасибо.

Есть только один нюанс - ДанныеФормыДругогоСправочника.Объект нужно класть в отдельную переменную, и переменную использовать в качестве первого параметра, иначе у меня валилось с ошибкой:"Нельзя изменять поле, содержащее объект данных формы".
---
Объект нужно класть в отдельную переменную Вот для меня это совсем неочевидное поведение платформы. Я понял о чем вы. Грубо говоря, нельзя:
```1c
    КакаяТоПроцедураНаСервереБезЗнач(Форма.Объект)
```
 но
```1c
    ДанныеФормы = Форма.Объект;
    КакаяТоПроцедураНаСервереБезЗнач(ДанныеФормы)
```
 можно. При том, что в
```1c
    ДанныеФормы = Форма.Объект
```
 никакого копирования не происходит.
---
тут важно то, что передается все по ссылке. При передачи переменной, возможна замена значения переменной внутри вызываемой процедуры.
Вот передали если Форма.Объект, а внутри происходит присваивание входящей переменной Неопределено. Это недопустимо, так как будет попытка присваивания Форма.Объект значению Неопределено.
А вот при присваивании переменной ДанныеФормы = Форма.Объект и передачи этой переменной, даже если внутри процедуры будет присваивание Неопределено, то Неопределено станет значение только переменной, а не Форма.Объект.
---
Нормальный подход заключается в том, чтобы создать элемент справочника через его менеджер, затем вызвать методом Заполнить(), передав через параметр Структуру со значениями для заполнения. Затем дозаполнить при необходимости. Все остальные копирования и преобразования - от лукавого. Объект ДанныеФормыСтруктура может не иметь свойств реального прикладного объекта, я делал такие формы объектов, где снимал флажок использования для технических табличных частей и реквизитов, чтобы уменьшить размер контекста формы передаваемый с клиента на сервер. Такие объекты просто невозможно преобразовать в прикладной объект. Платформа не даст.
---
Такие объекты просто невозможно преобразовать в прикладной объект. Платформа не даст.

Приведите пример, пожалуйста.
---
Вот скриншот. Снимайте галочку "Использовать всегда" у нужного реквизита и попробуйте его потом найти в объекте ДанныеФормыСтруктура.
---
попробуйте его потом найти в объекте ДанныеФормыСтруктура Но ведь вы утверждали, что такие данные формы нельзя преобразовать в прикладной объект, а не то, что нельзя найти отключенное свойство.
---
Я утверждаю то, что невозможно в этом случае получить полноценный объект копированием, т.к. часть информации по объекту теряется. Это хорошо видно при попытке вызывать РеквизитФормыВЗначение, где копия реального объекта формы имеет значение в определенных реквизитах, а после преобразования в прикладной объект из ДанныеФормыСтруктура эти реквизиты пустые.