Запоминание данных Объекта одной формы при обработке другой формы

1. ovadia 16.10.19 13:31 Сейчас в теме
Существует 1) ФормаЗадачи в объекте Задачи и 2) ФормаДокументы в объекте Документы. Из формы (1) открывается форма (2), где выбираются документы. После этого происходит обработка данных формы (2) используя процедуры формы (1) через Оповестить(). При этом теряется информация об Объекте формы (1)

Например: при открытии формы (1) получаю не пустой ОбъектЗадача = РеквизитФормыВЗначение("Объект"); далее открывается форма (2) и при вызове метода Оповестить() осуществляется переход в процедуру ОбработкаОповещения() формы (1). Но там уже ОбъектЗадача пустой!

Посоветуйте, пожалуйста, как это исправить?
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
9. ovadia 16.10.19 14:22 Сейчас в теме
В модуле формы (1):

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

&НаСервере
Функция ВыборДокументовНаСервере(ИдентификаторЗадачи)
   
        //выборка запросом документов из Документ.Договоры

КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
			
	ВыборДокументовНаСервере(ЭтаФорма.Объект.Ссылка);
			
КонецПроцедуры
Показать


В модуле формы (2):

&НаКлиенте
Процедура ДобавитьДокументыКЗадаче(Команда)
	
		
		Если тзЖурналДокументов.Количество() > 0 Тогда
			Оповестить("ДобавлениеДокумента", тзЖурналДокументов);
		КонецЕсли;
		
КонецПроцедуры
Показать


тзЖурналДокументовЗадача подобна тзЖурналДокументов.

Нужно при добавлении документов в тзЖурналДокументовЗадача формы (1) исключить повторяющиеся документы.
10. dhurricane 16.10.19 15:02 Сейчас в теме
(9) Что Вам мешает в обработке оповещения не добавлять новую строку, если она уже есть в таблице?
11. ovadia 16.10.19 15:10 Сейчас в теме
(10) А как это проверить? Одна таблица живет на форме (1), а другая на (2) .
12. dhurricane 16.10.19 15:16 Сейчас в теме
(11) Различие владельцев не помешало же Вам добавить строки из одной таблицы в другую. :) Почему же это должно помешать добавить проверку перед добавлением строк?
13. starjevschik 16.10.19 15:22 Сейчас в теме
(9) еще раз попробую о)
// в форме 1:
&НаКлиенте
Процедура НажатиеКнопкиДобавитьДокументыВСписок()
Форма = ПолучиьтФорму2();
ЧтоДобавлять = Форма2.ПолучитьСписокДляФормы1();
ОбработатьПолученныйСписок(ЧтоДобавлять);
КонецПроцедуры

// В форме2:
Функция ПолучитьСписокДляФормы1() Экспорт
блаблабла
Возврат ПолученныйСписок;
КонецФункции
Показать


Скорее всего, реализация будет чуть по=другому, с передачей полученного в форме2 списка через временное хранилище. Но это уже дело автора, я думаю.
14. dhurricane 16.10.19 15:28 Сейчас в теме
(13) Так просто не выйдет. :) Предполагается интерактивная работа пользователя с открытой формой 2.
2. starjevschik 16.10.19 13:39 Сейчас в теме
Скорее всего, это уже другая форма, нового объекта. Надо код смотреть, как что вызывается.
Мне так сдается, что тут нужно не оповещение, а вызов из первой формы методов второй. Если это "управляемые формы", то придется сочинять всякие забавные фокусы.
3. ovadia 16.10.19 13:41 Сейчас в теме
(2) Да понятно, что форма уже не та. А мне нужно добраться до прежней формы. Ведь форма (1) не закрывалась. Получается, что к ней программно вернуться нельзя?
4. starjevschik 16.10.19 13:45 Сейчас в теме
Неправильная идеология.
В первой форме должно быть так:
НужныйНаборДанных = ВтораяФорма.СделатьМнеЭтотНабор();

Вернуться теоретически можно, есть методы поиска открытых форм. Но это совсем уж коряво как-то.
Реализация очень сильно зависит от обычные/управляемые формы.
5. ovadia 16.10.19 13:53 Сейчас в теме
(4)
НужныйНаборДанных = ВтораяФорма.СделатьМнеЭтотНабор();


Вот тут можно, пожалуйста, объяснить подробнее.

Пусть на форме (1) уже существует НаборДанных_1 и нужно добавить к этому набору новые данные. Используем НужныйНаборДанных = ВтораяФорма.СделатьМнеЭтотНабор(). На форме (2) добавляем НаборДанных_2 и пусть он пересекается с НаборДанных_1.

Как этот случай обработать? Наверное, нужно вернутся к форме (1) и используя НаборДанных_1 сравнить его с НаборДанных_2. Однако, как только вы возвращаетесь к форме (1), то НаборДанных_1 уже нет, так как нет того первоначального Объекта.
7. dhurricane 16.10.19 14:03 Сейчас в теме
(5) Трудно, конечно, оперируя некоторыми абстракциями "Набор1" и "Набор2", говорить о целесообразности тех или иных действий. :-) Вы бы хоть сообщили о природе этих абстракций. Что из себя представляют наборы?

Ну а отвечая на Ваш вопрос выше, задам встречный. Почему НаборДанных_2 должна обрабатывать вторая форма? Она разве не выполняет роль диалога с пользователем? Пусть обработкой занимается первая форма.

И не понятно, что в Вашем понимании означает "вернуться к форме". Сужу по исходному тексту поста. "ОбъектЗадача" - некоторая переменная, созданная в некоторой серверной процедуре. Обработка оповещения выполняется на клиенте. Вы пишите, что "ОбъектЗадача" там уже пустая, но такой переменной там (в обработчике оповещения) там вовсе не должно быть. Либо это уже совсем другая переменная, вычисленная иначе.
6. starjevschik 16.10.19 14:03 Сейчас в теме
обработка будет на форме 1. Или на сервере, но вызываться их формы 1. Набор данных надо возвращать в таком виде, который можно передать независимо от формы, для этого есть всякие структуры, массивы и т.д.
Ты не "возвращаешься" к форме 1, а открываешь новую форму 3, я думаю так, хотя этого без кода не понять.
8. Boyborodin 16.10.19 14:08 Сейчас в теме
Используйте методы ПоместитьВоВременноеХранилище и ПолучитьИзВременногоХранилища. Очень помогает передавать данные в подобных случаях.
Оставьте свое сообщение

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