Доброго вечера.
Мне необходимо из основной формы получить форму настроек.
Я делаю по аналогии с работающим отчётом.
В модуле основной формы- (форма настроек открывается)
такой код:

```1c
    //**************************************************************************************************************
    &НаКлиенте

    Процедура ОткрытьНастройки(Команда)
    ПараметрыОткрытия = Новый Структура("СтруктураОтчета",ПолучитьСтруктуруОтчета());

    Форма = ПолучитьФорму("ВнешняяОбработка.Тест.Форма.ФормаНастроек",ПараметрыОткрытия,ЭтаФорма);

    Форма.ОткрытьМодально();
    ЗаполнитьЗначенияСвойств(Объект,Форма);

    КонецПроцедуры // ОткрытьНастройки()

    //**************************************************************************************************************
    &НаКлиенте
    Функция ПолучитьСтруктуруОтчета()

    СтруктураОтчета = Новый Структура;
    СтруктураОтчета.Вставить("ДатаНач");
    СтруктураОтчета.Вставить("ДатаКон");
    СтруктураОтчета.Вставить("МинСумма");
    СтруктураОтчета.Вставить("МаксСумма");
    СтруктураОтчета.Вставить("ЛицевойСчёт");
    СтруктураОтчета.Вставить("Представитель");

    ЗаполнитьЗначенияСвойств(СтруктураОтчета,Объект);

    Возврат СтруктураОтчета;

    КонецФункции //ПолучитьСтруктуруОтчета()

    //**************************************************************************************************************

    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    УстановитьЗначенияРеквизитов(Параметры);

    КонецПроцедуры //ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    //**************************************************************************************************************

    &НаСервере
    Процедура УстановитьЗначенияРеквизитов(Параметры)
    ////Отчет.ВариантМакета = Параметры.ВариантМакета; //Из рабочего образца
    //Объект.ДатаНач = Параметры.ДатаНач;
    //Объект.ДатаКон = Параметры.ДатаКон;
    //Объект.ЛицевойСчёт = Параметры.ЛицевойСчёт;
    //Объект.Представитель = Параметры.Представитель;

    КонецПроцедуры //УстановитьЗначенияРеквизитов(Параметры)
    //**************************************************************************************************************
```

В модуле формы настроек

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Если Параметры.Свойство("СтруктураОтчета") Тогда
    СтруктураОтчета = Параметры.СтруктураОтчета;

    ЗаполнитьЗначенияСвойств(ЭтаФорма,СтруктураОтчета);
    КонецЕсли; //Параметры.Свойство("СтруктураОтчета") Тогда

    КонецПроцедуры //ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    //**************************************************************************************************************
```

Я прошу помощи в объяснении рабочего кода. Что необходимо писать в процедуре УстановитьЗначенияРеквизитов??

И у меня на данный момент не работает :(
только открывается форма настрое

В отладчике- СтруктураОтчета- нужные, но пустые поля.
---
Получилось :)
Благодарю Всех за помощь и за советы

Взяла другой отчёт и по шаблону сделала
На основной форме

```1c
    &НаКлиенте
    Процедура ОткрытьНастройки(Команда)
    //https://www.about1c.ru/v83/language-reference/other/procedure-fill-property-values

    //Источник = Новый Структура("Наименование,Код", "Стул деревянный", 1);
    //Получатель = Новый Структура("Наименование,Код");
    //ЗаполнитьЗначенияСвойств(Получатель, Источник);

    Парам = ПолучитьСтруктуруРеквизитов();
    ЗаполнитьЗначенияСвойств(Парам, Объект);

    ФормаНастроек = ПолучитьФорму("ВнешняяОбработка.Тест.Форма.ФормаНастроек",Парам,ЭтаФорма);
    ФормаНастроек.ОткрытьМодально();

    КонецПроцедуры // ОткрытьНастройки()
    //**************************************************************************************************************
    &НаКлиенте
    Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "Передать настройки" Тогда
    ЗаполнитьЗначенияСвойств(Объект,Параметр);

    КонецЕсли; //ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    КонецПроцедуры //ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    //**************************************************************************************************************
    //
    &НаСервере
    Функция ПолучитьСтруктуруРеквизитов()
    СтруктураРеквизитов = Новый Структура;
    ОтчетОбъект = РеквизитФормыВЗначение("Объект");
    МетаданныеОтчета = ОтчетОбъект.Метаданные();
    Для каждого ТекущийРеквизит Из МетаданныеОтчета.Реквизиты Цикл
    СтруктураРеквизитов.Вставить(ТекущийРеквизит.Имя, Неопределено);
    КонецЦикла;//каждого ТекущийРеквизит Из МетаданныеОтчета.Реквизиты Цикл

    Возврат СтруктураРеквизитов;
    КонецФункции //ПолучитьСтруктуруРеквизитов()
    //**************************************************************************************************************
```

на форме настроек

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    ЗаполнитьЗначенияСвойств(Объект,Параметры);

    КонецПроцедуры //ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    //**************************************************************************************************************

    Процедура НастройкиОтчета(Настройки) Экспорт

    // Пустой модуль что бы не ругалась система
    НовыеНастройки = Настройки;
    Настройки = НовыеНастройки;

    КонецПроцедуры
    //**************************************************************************************************************

    &НаСервере
    Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)

    ЭтаФорма.Параметры.Свойство("ДатаНач",Объект.ДатаНач);
    ЭтаФорма.Параметры.Свойство("ДатаКон",Объект.ДатаКон);
    ЭтаФорма.Параметры.Свойство("ЛицевойСчёт",Объект.ЛицевойСчёт);
    ЭтаФорма.Параметры.Свойство("Представитель",Объект.Представитель);
    ЭтаФорма.Параметры.Свойство("МинСумма",Объект.МинСумма);
    ЭтаФорма.Параметры.Свойство("МаксСумма",Объект.МаксСумма);

    КонецПроцедуры //ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)

    //**************************************************************************************************************
    &НаКлиенте
    Процедура ПринятьНастройки(Команда)
    Отказ = Ложь;
    Парам = ПолучитьСтруктуруРеквизитов();
    ЗаполнитьЗначенияСвойств(Парам, Объект);
    Оповестить("Передать настройки", Парам, ЭтаФорма);

    Если Не Отказ Тогда
    Закрыть();
    КонецЕсли;
    КонецПроцедуры //КомандаОК(Команда)

    //**************************************************************************************************************
    &НаСервере
    Функция ПолучитьСтруктуруРеквизитов()
    СтруктураРеквизитов = Новый Структура;
    ОтчетОбъект = РеквизитФормыВЗначение("Объект");
    МетаданныеОтчета = ОтчетОбъект.Метаданные();
    Для каждого ТекущийРеквизит Из МетаданныеОтчета.Реквизиты Цикл

    СтруктураРеквизитов.Вставить(ТекущийРеквизит.Имя, Неопределено);
    КонецЦикла;
    Возврат СтруктураРеквизитов;
    КонецФункции //ПолучитьСтруктуруРеквизитов()
```
---
Форма.ОткрытьМодально() возвращает значение, которое Вам нужно обработать. Вы вызываете функцию как процедуру. В приведенном коде "ЗаполнитьЗначенияСвойств(Объект,Форма)" вызывается сразу за открытием формы, не дожидаясь заполнения полей в ней. А вообще, уходите от модальности, воспользуйтесь описанием оповещения о закрытии формы настроек (в которой при закрытии возвращайте заполненные значения как структуру).
---
ОткрытьМодально() - это синхронный вызов, то есть выполнение кода после этой строчки останавливается пока форма не будет закрыта, поэтому ЗаполнитьЗначенияСвойств(Объект,Форма) отработает корректно. В остальном согласен, лучше использовать оповещение о закрытии.
---
Можно проще используя ВладелецФормы
В основной форме открываем форму настроек

```1c
    ОткрытьФорму("ВнешняяОбработка.Тест.Форма.ФормаНастроек",,ЭтаФорма);
```

В форме настроек обращаемся к реквизитам основной формы через ВладелецФормы

```1c
    ВладелецФормы.Отчет.ВариантМакета = Параметры.ВариантМакета; //Из рабочего образца
    ВладелецФормы.ДатаНач = Параметры.ДатаНач;
    ВладелецФормы.ДатаКон = Параметры.ДатаКон;
```

```1c
    ВладелецФормы.Объект.Задолженность.Очистить();
    НоваяСтрока = ВладелецФормы.Объект.Задолженность.Добавить();
    НоваяСтрока.ЛС = ВладелецФормы.Объект.ЛицевойСчёт;
    НоваяСтрока.Помещение = ВладелецФормы.Объект.ЛицевойСчёт.Помещение;
```
---
Вот здесь вручную пропиши параметры

```1c
    &НаКлиенте
    Функция ПолучитьСтруктуруОтчета()

    СтруктураОтчета = Новый Структура;
    СтруктураОтчета.Вставить("ДатаНач" ДатаНач);
    СтруктураОтчета.Вставить("ДатаКон" ДатаКон);
    СтруктураОтчета.Вставить("МинСумма" МинСумма);
    СтруктураОтчета.Вставить("МаксСумма" МаксСумма );
    СтруктураОтчета.Вставить("ЛицевойСчёт" ЛицевойСчёт);
    СтруктураОтчета.Вставить("Представитель" Представитель);

    ///ЗаполнитьЗначенияСвойств(СтруктураОтчета,Объект);

    Возврат СтруктураОтчета;

    КонецФункции //ПолучитьСтруктуруОтчета()
```
---
ПолучитьСтруктуруОтчета

 ///ЗаполнитьЗначенияСвойств(СтруктураОтчета,Объект);
Закоментировала эту строчку, не получается ничего.. :(

сейчас продолжу отладчиком смотреть и буду сравнивать с рабочим отчётом
---
в ПолучитьСтруктуруОтчета() СтруктураОтчета заполняется данными ?
---
Нет, все поля пустые :(
Я добавила ещё этот код в основную форму, а то до него ругался при открытии.

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

```1c
    Процедура ОткрытьНастройки(Команда)
    ПараметрыОткрытия = Новый Структура("СтруктураОтчета",ПолучитьСтруктуруОтчета());

    Форма = ПолучитьФорму("ВнешняяОбработка.Тест.Форма.ФормаНастроек",ПараметрыОткрытия,ЭтаФорма);
    ЗаполнитьЗначенияСвойств(Объект,Форма); ///ВОт так
    Форма.ОткрытьМодально();

    КонецПроцедуры // ОткрытьНастройки()
```
---
Попробовала 2 Ваших предложенных варианта, к сожалению не получается
---
Или так ;

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

```1c
    &НаСервере
    Процедура ЛСПриИзмененииНаСервере()
    Объект.Задолженность.Очистить();
    НоваяСтрока = Объект.Задолженность.Добавить();
    НоваяСтрока.ЛС = Объект.ЛицевойСчёт;
    НоваяСтрока.Помещение = Объект.ЛицевойСчёт.Помещение;

    КонецПроцедуры //ЛСПриИзмененииНаСервере()
```
---
Получилось :)
Благодарю Всех за помощь и за советы

Взяла другой отчёт и по шаблону сделала
На основной форме

```1c
    &НаКлиенте
    Процедура ОткрытьНастройки(Команда)
    //https://www.about1c.ru/v83/language-reference/other/procedure-fill-property-values

    //Источник = Новый Структура("Наименование,Код", "Стул деревянный", 1);
    //Получатель = Новый Структура("Наименование,Код");
    //ЗаполнитьЗначенияСвойств(Получатель, Источник);

    Парам = ПолучитьСтруктуруРеквизитов();
    ЗаполнитьЗначенияСвойств(Парам, Объект);

    ФормаНастроек = ПолучитьФорму("ВнешняяОбработка.Тест.Форма.ФормаНастроек",Парам,ЭтаФорма);
    ФормаНастроек.ОткрытьМодально();

    КонецПроцедуры // ОткрытьНастройки()
    //**************************************************************************************************************
    &НаКлиенте
    Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "Передать настройки" Тогда
    ЗаполнитьЗначенияСвойств(Объект,Параметр);

    КонецЕсли; //ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    КонецПроцедуры //ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    //**************************************************************************************************************
    //
    &НаСервере
    Функция ПолучитьСтруктуруРеквизитов()
    СтруктураРеквизитов = Новый Структура;
    ОтчетОбъект = РеквизитФормыВЗначение("Объект");
    МетаданныеОтчета = ОтчетОбъект.Метаданные();
    Для каждого ТекущийРеквизит Из МетаданныеОтчета.Реквизиты Цикл
    СтруктураРеквизитов.Вставить(ТекущийРеквизит.Имя, Неопределено);
    КонецЦикла;//каждого ТекущийРеквизит Из МетаданныеОтчета.Реквизиты Цикл

    Возврат СтруктураРеквизитов;
    КонецФункции //ПолучитьСтруктуруРеквизитов()
    //**************************************************************************************************************
```

на форме настроек

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    ЗаполнитьЗначенияСвойств(Объект,Параметры);

    КонецПроцедуры //ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    //**************************************************************************************************************

    Процедура НастройкиОтчета(Настройки) Экспорт

    // Пустой модуль что бы не ругалась система
    НовыеНастройки = Настройки;
    Настройки = НовыеНастройки;

    КонецПроцедуры
    //**************************************************************************************************************

    &НаСервере
    Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)

    ЭтаФорма.Параметры.Свойство("ДатаНач",Объект.ДатаНач);
    ЭтаФорма.Параметры.Свойство("ДатаКон",Объект.ДатаКон);
    ЭтаФорма.Параметры.Свойство("ЛицевойСчёт",Объект.ЛицевойСчёт);
    ЭтаФорма.Параметры.Свойство("Представитель",Объект.Представитель);
    ЭтаФорма.Параметры.Свойство("МинСумма",Объект.МинСумма);
    ЭтаФорма.Параметры.Свойство("МаксСумма",Объект.МаксСумма);

    КонецПроцедуры //ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)

    //**************************************************************************************************************
    &НаКлиенте
    Процедура ПринятьНастройки(Команда)
    Отказ = Ложь;
    Парам = ПолучитьСтруктуруРеквизитов();
    ЗаполнитьЗначенияСвойств(Парам, Объект);
    Оповестить("Передать настройки", Парам, ЭтаФорма);

    Если Не Отказ Тогда
    Закрыть();
    КонецЕсли;
    КонецПроцедуры //КомандаОК(Команда)

    //**************************************************************************************************************
    &НаСервере
    Функция ПолучитьСтруктуруРеквизитов()
    СтруктураРеквизитов = Новый Структура;
    ОтчетОбъект = РеквизитФормыВЗначение("Объект");
    МетаданныеОтчета = ОтчетОбъект.Метаданные();
    Для каждого ТекущийРеквизит Из МетаданныеОтчета.Реквизиты Цикл

    СтруктураРеквизитов.Вставить(ТекущийРеквизит.Имя, Неопределено);
    КонецЦикла;
    Возврат СтруктураРеквизитов;
    КонецФункции //ПолучитьСтруктуруРеквизитов()
```
---
Единственный минус

При открытии обработки вначале необходимо открыть форму настроек (хотя настройки сохраняются при закрытии). Без этого открытия формы настроек не получается заполнять данные