Запоминание данных Объекта одной формы при обработке другой формы
Существует 1) ФормаЗадачи в объекте Задачи и 2) ФормаДокументы в объекте Документы. Из формы (1) открывается форма (2), где выбираются документы. После этого происходит обработка данных формы (2) используя процедуры формы (1) через Оповестить(). При этом теряется информация об Объекте формы (1)
Например: при открытии формы (1) получаю не пустой ОбъектЗадача = РеквизитФормыВЗначение("Объект"); далее открывается форма (2) и при вызове метода Оповестить() осуществляется переход в процедуру ОбработкаОповещения() формы (1). Но там уже ОбъектЗадача пустой!
Посоветуйте, пожалуйста, как это исправить?
Например: при открытии формы (1) получаю не пустой ОбъектЗадача = РеквизитФормыВЗначение("Объект"); далее открывается форма (2) и при вызове метода Оповестить() осуществляется переход в процедуру ОбработкаОповещения() формы (1). Но там уже ОбъектЗадача пустой!
Посоветуйте, пожалуйста, как это исправить?
По теме из базы знаний
- Продвинутая технология внешних печатных форм
- Эффективная обработка данных в оперативной памяти за счет использования коллекции "соответствие"
- Поблочная обработка таблицы. Обзор решений
- Фишки платформы и конфигураций 1С, о которых все знают, но почти никто не помнит
- Обзор полезных методов БСП 3.1.4. Часть 2
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
В модуле формы (1):
В модуле формы (2):
тзЖурналДокументовЗадача подобна тзЖурналДокументов.
Нужно при добавлении документов в тзЖурналДокументовЗадача формы (1) исключить повторяющиеся документы.
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ДобавлениеДокумента" Тогда
Для каждого elm Из Параметр Цикл
Если elm.Флаг Тогда
стрТЗ = тзЖурналДокументовЗадача.Добавить();
стрТЗ.Номер = elm.Номер;
стрТЗ.Дата = elm.Дата;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ВыборДокументовНаСервере(ИдентификаторЗадачи)
//выборка запросом документов из Документ.Договоры
КонецФункции
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ВыборДокументовНаСервере(ЭтаФорма.Объект.Ссылка);
КонецПроцедуры
ПоказатьВ модуле формы (2):
&НаКлиенте
Процедура ДобавитьДокументыКЗадаче(Команда)
Если тзЖурналДокументов.Количество() > 0 Тогда
Оповестить("ДобавлениеДокумента", тзЖурналДокументов);
КонецЕсли;
КонецПроцедуры
ПоказатьтзЖурналДокументовЗадача подобна тзЖурналДокументов.
Нужно при добавлении документов в тзЖурналДокументовЗадача формы (1) исключить повторяющиеся документы.
(9) еще раз попробую о)
Скорее всего, реализация будет чуть по=другому, с передачей полученного в форме2 списка через временное хранилище. Но это уже дело автора, я думаю.
// в форме 1:
&НаКлиенте
Процедура НажатиеКнопкиДобавитьДокументыВСписок()
Форма = ПолучиьтФорму2();
ЧтоДобавлять = Форма2.ПолучитьСписокДляФормы1();
ОбработатьПолученныйСписок(ЧтоДобавлять);
КонецПроцедуры
// В форме2:
Функция ПолучитьСписокДляФормы1() Экспорт
блаблабла
Возврат ПолученныйСписок;
КонецФункции
ПоказатьСкорее всего, реализация будет чуть по=другому, с передачей полученного в форме2 списка через временное хранилище. Но это уже дело автора, я думаю.
Скорее всего, это уже другая форма, нового объекта. Надо код смотреть, как что вызывается.
Мне так сдается, что тут нужно не оповещение, а вызов из первой формы методов второй. Если это "управляемые формы", то придется сочинять всякие забавные фокусы.
Мне так сдается, что тут нужно не оповещение, а вызов из первой формы методов второй. Если это "управляемые формы", то придется сочинять всякие забавные фокусы.
Неправильная идеология.
В первой форме должно быть так:
Вернуться теоретически можно, есть методы поиска открытых форм. Но это совсем уж коряво как-то.
Реализация очень сильно зависит от обычные/управляемые формы.
В первой форме должно быть так:
НужныйНаборДанных = ВтораяФорма.СделатьМнеЭтотНабор();
Вернуться теоретически можно, есть методы поиска открытых форм. Но это совсем уж коряво как-то.
Реализация очень сильно зависит от обычные/управляемые формы.
(4)
Вот тут можно, пожалуйста, объяснить подробнее.
Пусть на форме (1) уже существует НаборДанных_1 и нужно добавить к этому набору новые данные. Используем НужныйНаборДанных = ВтораяФорма.СделатьМнеЭтотНабор(). На форме (2) добавляем НаборДанных_2 и пусть он пересекается с НаборДанных_1.
Как этот случай обработать? Наверное, нужно вернутся к форме (1) и используя НаборДанных_1 сравнить его с НаборДанных_2. Однако, как только вы возвращаетесь к форме (1), то НаборДанных_1 уже нет, так как нет того первоначального Объекта.
НужныйНаборДанных = ВтораяФорма.СделатьМнеЭтотНабор();
Вот тут можно, пожалуйста, объяснить подробнее.
Пусть на форме (1) уже существует НаборДанных_1 и нужно добавить к этому набору новые данные. Используем НужныйНаборДанных = ВтораяФорма.СделатьМнеЭтотНабор(). На форме (2) добавляем НаборДанных_2 и пусть он пересекается с НаборДанных_1.
Как этот случай обработать? Наверное, нужно вернутся к форме (1) и используя НаборДанных_1 сравнить его с НаборДанных_2. Однако, как только вы возвращаетесь к форме (1), то НаборДанных_1 уже нет, так как нет того первоначального Объекта.
(5) Трудно, конечно, оперируя некоторыми абстракциями "Набор1" и "Набор2", говорить о целесообразности тех или иных действий. :-) Вы бы хоть сообщили о природе этих абстракций. Что из себя представляют наборы?
Ну а отвечая на Ваш вопрос выше, задам встречный. Почему НаборДанных_2 должна обрабатывать вторая форма? Она разве не выполняет роль диалога с пользователем? Пусть обработкой занимается первая форма.
И не понятно, что в Вашем понимании означает "вернуться к форме". Сужу по исходному тексту поста. "ОбъектЗадача" - некоторая переменная, созданная в некоторой серверной процедуре. Обработка оповещения выполняется на клиенте. Вы пишите, что "ОбъектЗадача" там уже пустая, но такой переменной там (в обработчике оповещения) там вовсе не должно быть. Либо это уже совсем другая переменная, вычисленная иначе.
Ну а отвечая на Ваш вопрос выше, задам встречный. Почему НаборДанных_2 должна обрабатывать вторая форма? Она разве не выполняет роль диалога с пользователем? Пусть обработкой занимается первая форма.
И не понятно, что в Вашем понимании означает "вернуться к форме". Сужу по исходному тексту поста. "ОбъектЗадача" - некоторая переменная, созданная в некоторой серверной процедуре. Обработка оповещения выполняется на клиенте. Вы пишите, что "ОбъектЗадача" там уже пустая, но такой переменной там (в обработчике оповещения) там вовсе не должно быть. Либо это уже совсем другая переменная, вычисленная иначе.
обработка будет на форме 1. Или на сервере, но вызываться их формы 1. Набор данных надо возвращать в таком виде, который можно передать независимо от формы, для этого есть всякие структуры, массивы и т.д.
Ты не "возвращаешься" к форме 1, а открываешь новую форму 3, я думаю так, хотя этого без кода не понять.
Ты не "возвращаешься" к форме 1, а открываешь новую форму 3, я думаю так, хотя этого без кода не понять.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот