Как получить обработанное значение из открывшейся формы обратно в основную?

1. j.r.r 69 21.02.25 11:36 Сейчас в теме
Доброго времени суток!

Есть программа Розница. Есть обработка, которая передаёт значение в новую форму, обрабатывается в ней и возвращается. Не пойму, как вернуть. Подскажите пожалуйста

В основной форме:
&НаКлиенте
Процедура ОткрытьФормуИПередатьЗначения(Команда)	
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("ЗначениеПеременной", Объект.Значение);	
    ОткрытьФорму("ВнешняяОбработка.ОткрытиеИПередача.Форма.ФормаВыборЦены", ПараметрыФормы);
КонецПроцедуры  


В новой форме:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка, ПараметрыФормы)
Объект.НовоеЗначение = Параметры.ЗначениеПеременной;
КонецПроцедуры


&НаКлиенте
Процедура ЗакрытьИВернуть(Команда)
    ЭтаФорма.Закрыть()

А как передать новое значение обратно в основную форму объекту Объект.Значение
КонецПроцедуры
Найденные решения
4. j.r.r 69 21.02.25 14:32 Сейчас в теме
(3) (32) Немного проще. Не знаю, почему сразу не сделал:

На стороне формы отправителя (та, что возвращает):

Оповестить("Обновить", Объект.ОстатокНовойФормы, ЭтаФорма);
ЭтаФорма.Закрыть(Объект.Значение);


Принимающая форма:

&НаКлиенте
Процедура ОбработкаОповещения(Событие, Параметр, Источник)

Если Событие = "Обновить" Тогда

Сообщить(Параметр);
Объект.Значение = Параметр;

КонецЕсли;
 
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2107191 21.02.25 11:41 Сейчас в теме
Кури либо Оповестить / ОбработкаОповещения, либо ОписаниеОповещения для асинхронных вызовов.
Ну или Асинх и прочие Ждать
3. Sashares 33 21.02.25 11:42 Сейчас в теме
Можно так:
1) В ОткрытьФорму добавить описание оповещение в соответствующий параметр.
2) в ЭтаФорма.Закрыть(<То что хочу передать>)
3) в обработчике описания оповещения обработать что передано.
VyacheslavShilov; spacecraft; user2107191; +3 Ответить
4. j.r.r 69 21.02.25 14:32 Сейчас в теме
(3) (32) Немного проще. Не знаю, почему сразу не сделал:

На стороне формы отправителя (та, что возвращает):

Оповестить("Обновить", Объект.ОстатокНовойФормы, ЭтаФорма);
ЭтаФорма.Закрыть(Объект.Значение);


Принимающая форма:

&НаКлиенте
Процедура ОбработкаОповещения(Событие, Параметр, Источник)

Если Событие = "Обновить" Тогда

Сообщить(Параметр);
Объект.Значение = Параметр;

КонецЕсли;
 
КонецПроцедуры
Показать
5. Sashares 33 21.02.25 14:34 Сейчас в теме
(4) Учитывайте, что Оповестить - оповещает все открытые формы.
А вариантов реализации конечно больше 1.
VyacheslavShilov; +1 Ответить
6. user2107191 21.02.25 15:39 Сейчас в теме
(4) Ну то есть ты сам сделал, сам себя и отметил, как правильное решение. Молодец! Так держать!
7. j.r.r 69 21.02.25 16:24 Сейчас в теме
(6) так я отмечаю решение. Чтобы те, кто столкнулся с этой проблемой, легко нашли решение на вопрос в этой ветке форума. Кроме того хочу отметить, данное выделение ответа не несёт никакой пользы мне.
8. spacecraft 21.02.25 17:17 Сейчас в теме
(7) в 3 дан исчерпывающий ответ.
То что Вы привели... мягко говоря неправильный, хотя и работающий.
user2107191; +1 Ответить
9. miniogn 45 21.02.25 19:40 Сейчас в теме
(4) Это решение с Оповестить не есть однозначно правильное. Хотя в принципе и рабочее.
Что будет, если у тебя будет открыто несколько форм одного типа. При оповещении все из них получат идентичные сообщения и все выполнят одно и тоже действие...
Лучше как в (3) или ОповеститьОВыборе()

&НаКлиенте
Процедура КомандаТекстов(Команда)
	п = Новый Структура;
	дд = Новый Структура;
	оо = Новый ОписаниеОповещения("ФормаВводЗавершение", ЭтотОбъект, дд);
	ОткрытьФорму("ВнешнийОтчет.Тест1.Форма.ФормаВвода",п, ЭтаФорма, ЭтаФорма,,,оо,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаКлиенте
Процедура ФормаВводЗавершение(р, дд) Экспорт
	
	Если ТипЗнч(р) = Тип("Структура") Тогда
		Объект.Значение = р.Значение;
	КонецЕсли; 
	
КонецПроцедуры
Показать
10. user2107191 21.02.25 19:43 Сейчас в теме
(9)
Что будет, если у тебя будет открыто несколько форм одного типа.
Вооот! В корень!
11. j.r.r 69 21.02.25 21:51 Сейчас в теме
(9) спасибо за код. В моём случае такое оповещение не затронет ничего лишнего. Оно привязано к одной таблице, к одной её строке. Но на будущее будет полезно. Попробую применить. Благодарю!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот