Всем доброе время суток!

Есть задача. При создании документа выбрать другой документ и заполнить одинаковые реквизиты.

Добрался пока что только до такого:

ФормаВыбора документа . Процедура "ПриОткрытии":

```1c
    Если Вопрос("Создать на основании заказа?",РежимДиалогаВопрос.ДаНетОтмена,10)=КодВозвратаДиалога.Да Тогда
    Заказы = Документы.Заказы;
    Форма = Заказы.ПолучитьФормуСписка();
    форма.РежимВыбора = Истина;
    Форма.ОткрытьМодально();
    Иначе
    Отказ = Истина;
    КонецЕсли;
```

Вылазит форма списка этого документа ( выбрать документ нельзя ) .
Как правильнее сделать,чтобы я при нажатии на документ автоматически заполнил реквизиты и табличную часть нынешнего документа ?

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

```1c
    док=Документы.ЗаказПокупателя.ПустаяСсылка();
    если ВвестиЗначение(Док,"Выберите документ основание") тогда
    ЗаполнитьЗначенияСвойств(ЭтотОбъект,Док); //заполнит реквизиты, но не табличные части
    ЭтотОбъект.товары.загрузить(Док.Товары.Выгрузить()); //Так можно заполнить табличную часть
    ЭтотОбъект.заполнить(Док); //Это если есть обработка заполнения в модуле объекта

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

```1c
    док=Документы.ЗаказПокупателя.ПустаяСсылка();
    если ВвестиЗначение(Док,"Выберите документ основание") тогда
    ЗаполнитьЗначенияСвойств(ЭтотОбъект,Док); //заполнит реквизиты, но не табличные части
    ЭтотОбъект.товары.загрузить(Док.Товары.Выгрузить()); //Так можно заполнить табличную часть
    ЭтотОбъект.заполнить(Док); //Это если есть обработка заполнения в модуле объекта

    иначе
    Отказ=Истина;
    КонецЕсли;
```
---
А если я хочу в ручную каждый реквизит и каждый столбик табличной части заполнить,то как ? При помощи "="

И в какое место это писать ? в модуль формы "При открытии"?
---
В той процедуре что я писал, так и присваивать
ЭтотОбъект.Организация = док.Организация и т.д это для реквизитов, для табличной части больше

```1c
    Для каждого стр из Док.Товары цикл
    НовСтр= ЭтотОбъект.ТОвары.Добавить();
    Новстр.Номенклатура=Стр.Номенклатура;
    //и т.д
    Конеццикла;
```
---
Пытался так. Ругается что "поле объекта не доступно для записи".
---
А,вру,всё работает,благодарю.
---
Вот так вышло. Это в модуле формы "При открытии". Правильно ли так будет?

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