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

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Перевод сообщений из формы-владельца в активную форму
    МассивСообщений = ПолучитьСообщенияПользователю(Истина);
    КонецПроцедуры

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    Для Каждого ИсходноеСообщениеПользователю Из МассивСообщений Цикл
    СообщениеПользователю = Новый СообщениеПользователю;
    ЗаполнитьЗначенияСвойств(СообщениеПользователю, ИсходноеСообщениеПользователю);
    СообщениеПользователю.УстановитьДанные(Объект);
    СообщениеПользователю.Сообщить();
    КонецЦикла;
    КонецПроцедуры
```
---
ОбработчикОжидания ?
---
Строковый реквизит "текстОшибки" Если ЗначениеЗаполнено(текстОшибки) Сообщить
---
или параметры формы
---
Человеческих вариантов нет, ибо нет ни одного события формы, в котором еще "жив" экземпляр объекта, для которого выполнялось заполнение. Следовательно, остаются только "черезжопные" варианты со своими минусами. "По дизайну" это и не предусмотрено, так как обработка заполнения может вызываться для программно заполняемого объекта и вывод информационных сообщений при этом может быть не только бессмысленен, но и нежелателен. Максимум предусмотренной реакции при этом согласно документации - бросить исключение, если объект не может быть корректно заполнен.
ИМХО, проще не искать обходных путей и вынести нужные проверки с выдачей необходимых предупреждений непосредственно в форму. Это может привести к некоторой избыточности кода, зато более аккуратно его разложит по контекстам вызова.
---
А есть ли проблема? Если вывести сообщение в ОбработкаЗаполнения без привязки к объекту, разве оно не выведется в активном окне – форме созданного объекта?
---
Активное окно - то, что вызвало обработку заполнения. Мало того оказывается, сообщения из "ПриСозданииНаСервере()" в самой форме так же выводятся в предыдущей форме!
---
Так вызывайте сообщение из формы
---
В форме невозможно узнать, какие проблемы возникали при заполнении объекта.
---
Почему же не возможно? Возможно, если куда то запишите. Вариантов куча - использовать имеющиеся реквизиты, добавить свой, записывать в свойства объекта.

UPD Ну хотя для свойства у нас еще нет ссылки.
---
Добавлять реквизит для промежуточных операций в таблицы базы данных - это супер
---
Ну так найдите место по лучше, куда сохранить и откуда потом достать. Вам ведь предлагают идею, а не реализацию.
---
Во время заполнения документа можно попробовать поместить текст ошибки во временное хранилище, при открытии формы проверять хранилище на наличие текста. Можно попробовать через хранилище настроек так как там можно передать и пользователя и можно обойтись без идентификаторов.
---
Вот так вот работает. Реквизит формы МассивСообщений имеет произвольный тип данных.
Срабатывает даже адресация на реквизиты (колонки) табличных частей объекта

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Перевод сообщений из формы-владельца в активную форму
    МассивСообщений = ПолучитьСообщенияПользователю(Истина);
    КонецПроцедуры

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