Спасибо!
Еще нупский вопрос, ничего не могу понять, вчера дома разбирался, аналогично делал, все работало. Сегодня на работе что-то ничего не взлетает.
1cpp.dll 3.0.1.23
Класс(FormCls.ert):
Перем КонтФормы;
//==========================================
Процедура Конструктор()
//#curmeth
КонецПроцедуры // Конструктор
//==========================================
Процедура Деструктор()
//#curmeth
Если ПустоеЗначение(КонтФормы) = 0 Тогда
КонтФормы.Форма.Закрыть();
КонецЕсли;
КонецПроцедуры // Деструктор
//==========================================
Процедура ОткрытьФорму_() Экспорт
стрПуть = СтрЗаменить(я().ПолучитьПуть(),"\FormCls.ert","\Form.ert");
ОткрытьФорму("Обработка.Form#",КонтФормы,стрПуть);
Перехватчик = СоздатьОбъект("Перехватчик");
Перехватчик.ПерехватитьСобытияГК(КонтФормы, я());
КонецПроцедуры // ОткрытьФорму_
//==========================================
Процедура Событие_ПриОткрытии() Экспорт
//#curmeth
КонецПроцедуры // ПриОткрытии
//==========================================
Процедура Событие_ПриЗакрытии() Экспорт
//#curmeth
я().ОтправитьСообщениеМодулюХоз(я(),"KillMe","");
КонецПроцедуры // Событие_ПриЗакрытии
Форма(Form.ert)
Процедура ПриОткрытии()
Сообщить("Form.ert::ПриОткрытии");
КонецПроцедуры // ПриОткрытии
//=========================================
Процедура ПриЗакрытии()
Сообщить("Form.ert::ПриЗакрытии");
КонецПроцедуры // ПриЗакрытии
//=========================================
тестовая обработка(test.ert):
Перем сп;
//=======================================
Процедура Сформировать()
УправлениеНастройками = СоздатьОбъект("УправлениеНастройками");
УправлениеНастройками.Включить("ПерехватитьСобытияГК");
MyForm = СоздатьОбъект("MyForm");
MyForm.ОткрытьФорму_();
сп.ДобавитьЗначение(MyForm);
КонецПроцедуры
//=======================================
Функция ОбработкаСобытияОтКласса(отКого, стрСобытие, Данные)
поз = сп.НайтиЗначение(отКого);
сп.УдалитьЗначение(поз);
Сообщить("поз = " + поз);
Сообщить("отКого = " + отКого);
Сообщить("стрСобытие = " + стрСобытие);
Сообщить("Данные = " + Данные);
КонецФункции // ОбработкаСобытияОтКласса
//=======================================
сп = СоздатьОбъект("СписокЗначений");
Сейчас происходит следующее
1) если запустить в тестовой обработке процедуру Сформировать. Создается объект MyForm, открывается форма(вызывается метод ОткрытьФорму_())
в окне сообщений вижу
i > MyForm::Конструктор()
> > Form.ert::ПриОткрытии
i > MyForm::Деструктор()
Почему запускается Деструктор объекта сразу не могу понять
Объект у меня в списке значений. Ссылка на него жива. При этом пробовал вызвать тестовый метод объекта после вызова Деструктора - работает.
Т.е. если так, например,
Процедура Сформировать()
УправлениеНастройками = СоздатьОбъект("УправлениеНастройками");
УправлениеНастройками.Включить("ПерехватитьСобытияГК");
MyForm = СоздатьОбъект("MyForm");
MyForm.ОткрытьФорму_();
сп.ДобавитьЗначение(MyForm);
сп.ПолучитьЗначение(1).Событие_ПриОткрытии();
КонецПроцедуры
в окне сообщений видим
i > MyForm::Конструктор()
> > Form.ert::ПриОткрытии
i > MyForm::Деструктор()
i > MyForm::Событие_ПриОткрытии()
как это после Деструктора объекта, можно вызвать его метод?
2) Событие ПриЗакрытии формы Form.ert не перехватывается
3) Если в тестовой обработке убрать MyForm.ОткрытьФорму_();, то поведение логичное. Т.е.
Запускаю процедуру Сформировать тестовой обработки. В окне сообщений вижу
i > MyForm::Конструктор()
Закрываю тестовую обработку - уничтожается переменная сп с моим объектом MyForm
в окне сообщений вижу
i > MyForm::Деструктор()
Подозреваю, то ли я где-то туплю. То ли, может какая-то путаница в реестре с установленными компонентами?(в 1С в параметрах пишет 3.0.1.23). Вчера из дома делал ну буквально все блин аналогично, все работало