artbear писал(а) 20. Августа 2008 :: 10:44:2) Можно сделать так:
передаем контекст через Форма.Параметр
в ПриЗакрытии/ПослеЗакрытия формы пишем Форма.Параметр.НужнаяПроцедура()
Так и делаю. При закрытии вызываю процедуру контекста, к-й содержится в глобальной переменной текущей формы "ВызывающийКонтекст".
В глобальном модуле:
****
Функция глОткрытьФорму(Объект, Конт, Режим = 0, Параметры = "") Экспорт
Перем Идентификатор;
Если ТипЗначенияСтр(Параметры) <> "СписокЗначений" Тогда
Параметры = СоздатьОбъект("СписокЗначений");
КонецЕсли;
Параметры.ДобавитьЗначение(Конт, "ВызывающийКонтекст");
Рез = ОткрытьФорму(Объект, Конт, Режим); // пытаемся открыть форму Документа/Справочника для редактирования
Если (Рез = 0) И (Режим = 0) Тогда // если не получилось - откроем только для чтения
Рез = ОткрытьФорму(Объект, Конт, 1);
КонецЕсли;
Если Рез = 0 Тогда Возврат 0; КонецЕсли;
Для а = 1 По Параметры.РазмерСписка() Цикл
Значение = Параметры.ПолучитьЗначение(а, Идентификатор);
Если Лев(Идентификатор, 2) = "__" Тогда // служебное
Иначе
глУстановитьПеременнуюКонтекста(Конт, Идентификатор, Значение);
КонецЕсли;
КонецЦикла;
//РасшФормы = СоздатьОбъект("РасширениеФормы");
//РасшФормы.УстановитьФорму(Конт.Форма);
//Модуль = СоздатьОбъект("ВыполняемыйМодуль");
//Модуль.НазначитьКонтекст(Конт);
//Модуль.УстановитьМодуль("Перем ВызывающийКонтекст;"
// "Процедура УстановитьПеременную(Значение)"
// "ВызывающийКонтекст = Значение;"
// "КонецПроцедуры");
//Модуль.КомпилироватьИВыполнитьМодуль();
//Модуль.УстановитьПеременную(ВызывающийКонтекст);
Возврат 1;
КонецФункции
В вызывающем контексте:
Параметры = СоздатьОбъект("СписокЗначений");
Параметры.ДобавитьЗначение(ТекущийЭлемент(), "Объект");
глОткрытьФорму("Элемент.Поручитель", Контекст,, Параметры);
В форме поручителя:
Перем ВызывающийКонтекст;
*******
Процедура ПриЗакрытии()
Если ПустоеЗначение(КонтекстЗапроса) = 0 Тогда
ВыпМодуль = СоздатьОбъект("ВыполняемыйМодуль");
ВыпМодуль.ВыполнитьПроцедуруКонтекста(ВызывающийКонтекст, "СписокПоручителей", СоздатьОбъект("СписокЗначений"));
КонецЕсли;
КонецПроцедуры
Идеальным решением был бы механизм такой:
Я открываю некую формы с указанием особых параметров (вызывающий контекст, имя процедуры). По закрытии формы автоматически вызывается указанная процедура вызывающего контекста. И все это чтобы не требовало вмешательства и дублирования кода в формах как вызывающего,так и вызываемого контекстов...
Если бы я мог каждой открываемой форме присобачивать свойства "ВызывающийКонтекст" "ПроцедураДляВызова" и т.п., я бы это дело автоматически при открытии каждой формы, а в глобальной процедуре "ПослеЗакрытия" я бы вызывал соответствующую процедуру.
Контекст - это объект. Могу я ему создать новое свойство?