Есть обработка с несколькими формами и рядом реквизитов.

Необходимо в зависимости от настроек устанавливать определенный реквизит (в моем случае булевский, так что назовем его для примера "Флаг") прикладного объекта "Обработка", соответствующего выполняемой обработке, чтобы он влиял на логику процедур в модуле объекта ("Если ЭтотОбъект.Флаг Тогда").

---

Я делаю это, устанавливая реквизит основной формы "Объект.Флаг" из сохраненных настроек (в "ПриСозданииНаСервере") или после изменения настроек.

Однако, при открытии вспомогательной формы изменение не появляется ни в реквизите "Объект" этой вспомогательной формы, ни в "РеквизитФормыВЗначение("Объект").Флаг" -- и, соответственно, в процедурах модуля объекта обработки, вызываемых из этой вспомогательной формы, что приводит к ее некорректной работе.

---

Методом проб и ошибок нашел следующий способ:

```1c
    // модуль вспомогательной формы
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    //В основной форме перед созданием вспомогательной формы добавляю Флаг в ее параметры.
    //Значение необходимо поместить и в Объект, и в ОбъектОбработка.
    //Без первого оно не сохраняется в следующих обработчиках,
    // даже если вызвать ЗначениеВРеквизитФормы.
    //Без второго оно вообще не появляется в серверном объекте ЭтотОбъект.
    Объект.Флаг = Параметры.Флаг;
    ОбъектОбработка = РеквизитФормыВЗначение("Объект");
    ОбъектОбработка.Флаг = Параметры.Флаг;

    КонецПроцедуры
```

Но, мне кажется, должен быть более простой способ, или вообще это должно происходить автоматически: т.к. обе формы относятся к одному и тому же экземпляру обработки, логично ожидать, что реквизиты "Объект" в них должны содержать одно и то же (как минимум, изначально), а "РеквизитФормыВЗначение("Объект")" вообще должны получать один и тот же объект.

Идеальна будет ссылка на документацию, где описывается, по какой схеме происходит / предполагается происходить обмен данными в описанных мной обстоятельствах (сам уже искал).

---

Прочие рассмотренные варианты:

* Передача флага через параметр процедуры крайне нежелательна, т.к. ветвление добавлено в расширении (т.е. я не могу менять списки параметров), и ветвление происходит глубоко в штатной логике (т.е. доп. параметр пришлось бы передавать через все уровни по цепочке) .
* Для справочников и документов передача данных из формы в прикладной объект происходит по "Записать()", но обработки записывать нельзя
---
нужно понимать как работает механизм создания и работы формы на УФ.
Общий механизм такой:
1. Создается объект и при возможности заполняется данными из базы.
2. На основании данных этого объекта создается серверная форма.
3. объект удаляется из памяти.
4. данные серверной формы сериализуются и передаются на клиент.
5. на клиенте происходит создание клиентской формы и заполнение ее при десериализации полученных данных.

При выполнении метода РеквизитФормыВЗначение("Объект") идет обратный процесс и Объект создается новый и заполненный данными полученными с клиента.

Для обработки выбрасываем заполнение данными из базы данных.

Вот и получается, что для каждой формы обработки Объект будет новый и ничего не знает про другие объекты.
Поэтому наиболее распространенный способ это передача данных напрямую (или опосредовано) между формами.
---
Сделайте реквизит в обработке
---
нужно понимать как работает механизм создания и работы формы на УФ.
Общий механизм такой:
1. Создается объект и при возможности заполняется данными из базы.
2. На основании данных этого объекта создается серверная форма.
3. объект удаляется из памяти.
4. данные серверной формы сериализуются и передаются на клиент.
5. на клиенте происходит создание клиентской формы и заполнение ее при десериализации полученных данных.

При выполнении метода РеквизитФормыВЗначение("Объект") идет обратный процесс и Объект создается новый и заполненный данными полученными с клиента.

Для обработки выбрасываем заполнение данными из базы данных.

Вот и получается, что для каждой формы обработки Объект будет новый и ничего не знает про другие объекты.
Поэтому наиболее распространенный способ это передача данных напрямую (или опосредовано) между формами.
---
Папа! А ты сейчас с кем разговаривал? :)
---
Получается, несмотря на обманчивое присутствие серверной переменной "ЭтотОбъект", никакого экземпляра "текущего объекта" на сервере не хранится, и хранить в нем состояние, как в ООП, нельзя? Дерьмово.
С другими типами, получается, так же? Даже если прикладной объект в базе есть -- верить его реквизитам во вспомогательных формах опасно, т.к. он мог измениться?

Хорошо, что по второму вопросу? Можно ли упростить / привести к стандарту мой приведенный код? В основной форме мне почему-то достаточно установить реквизит у "Объект", чтобы он далее появился у "ЭтотОбъект" в нужном месте, а во вспомогательной форме -- нет.
По сказанному вами, достаточно установить реквизит у "Объект". Но в моем случае при этом в следующем вызове обработчика я и там, и там снова вижу значение по умолчанию.
---
Получается, несмотря на обманчивое присутствие серверной переменной "ЭтотОбъект", никакого экземпляра "текущего объекта" на сервере не хранится, и хранить в нем состояние, как в ООП, нельзя?
В модуле формы ЭтотОбъект синоним ЭтаФорма.

(5) По сказанному вами, достаточно установить реквизит у "Объект"
Это где такое было сказано?
В модуле формы "Объект" это основной реквизит формы. У кажной формы он свой.
РеквизитФормыВЗначение("Объект") создает новый объект, который заполняется из данных основного реквизита формы "Объект".
Поэтому только передача нужных значений в саму форму. Можно напрямую через форму, можно через параметры, можно через временное хранилище.
Но каждая форма независима от другой в плане основного реквизита формы (соответственно и объект). Считайте, что это два разных объекта. Тут с термином может возникнуть путаница. Объект, который всегда есть на форме, это основной реквизит формы "Объект". Объект обработки это отдельная сущность и она не хранится на сервере (как впрочем и на клиенте).
---
В (0) я привел код из процедуры "ПриСозданииНаСервере" вспомогательной формы, где я устанавливаю реквизит и в "Объект" этой (вспомогательной) формы, и в "РеквизитФормыВЗначение("Объект")", иначе не работает (в комментарии описано, что именно).

По рассказанному вами, каждый раз при вызове "РеквизитФормыВЗначение("Объект")" данные передаются из "Объект" в полученный объект типа обработка (для краткости назовем его "ОбъектОбработка").

Согласно этому, в моем коде достаточно установить реквизит у Объект, и во всем дальнейшем коде изменение будет видно и в "Объект", и в "ОбъектОбработка", и, соответственно, в "ЭтотОбъект" в коде модуля объекта.

Но такого не происходит.
---
По рассказанному вами, каждый раз при вызове "РеквизитФормыВЗначение("Объект")" данные передаются из "Объект" в полученный объект типа обработка (для краткости назовем его "ОбъектОбработка").

Согласно этому, в моем коде достаточно установить реквизит у Объект, и во всем дальнейшем коде изменение будет видно и в "Объект", и в "ОбъектОбработка", и, соответственно, в "ЭтотОбъект" в коде модуля объекта.

Но такого не происходит.
Да. Будет. Пробуйте:

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

    Объект.Флаг = Параметры.Флаг;
    ОбъектОбработка = РеквизитФормыВЗначение("Объект");
    // тут точку остановки и посмотреть значение в ОбъектОбработка.Флаг

    КонецПроцедуры
```

Только есть такой ньюанс, который я уже не первое сообщение озвучиваю: в "ОбъектОбработка" будет видно в области видимости этой переменной. После Объект, на который ссылается переменная ОбъектОбработка будет уничтожен.
---
ОК. Т.е. если у меня этого не происходит -- это ненормально, возможно, что-то другое перезаписывает изменения. Понял.
---
смотря где пытаетесь потом это посмотреть. Потом (вне процедуры ПриСозданииНаСервере) этого и не будет.