Имеем:
DefCls.ert
Класс MyCls = MyCls@MD {};
MyCls.ert
//=================================================
Процедура Конструктор()
//#curmeth
вирт()._ВыброситьИскл("Исключение из конструктора!");
КонецПроцедуры // Конструктор
//=================================================
Процедура Деструктор()
//#curmeth
КонецПроцедуры // Деструктор
//=================================================
создаем объект в тестовой обработке
Вариант 1:
Перем MyObj;//глобальная переменная модуля
//*******************************************
Процедура Сформировать()
Попытка
MyObj = СоздатьОбъект("MyCls");
Исключение
Сообщить("описание ошибки >>> " + ОписаниеОшибки(),"!!!");
КонецПопытки;
Сообщить("тип значения MyObj: " + ТипЗначенияСтр(MyObj) + ", ПустоеЗначение(MyObj) = " + ПустоеЗначение(MyObj));
КонецПроцедуры
получаем:
i>>> MyCls::Конструктор()
!!! >>> описание ошибки >>> MyCls::Конструктор() : Исключение из конструктора!
вирт()._ВыброситьИскл("Исключение из конструктора!");
{MyCls@MD(4) }
> >>> тип значения MyObj: , ПустоеЗначение(MyObj) = 1
Т.е. все супер - объект не создан.
Вариант 2:
Перем MyObj;//глобальная переменная модуля
//*******************************************
Процедура Сформировать()
ФабрикаОбъектов = СоздатьОбъект("ФабрикаОбъектов");
Попытка
MyObj = ФабрикаОбъектов.Новый("MyCls");
Исключение
Сообщить("описание ошибки >>> " + ОписаниеОшибки(),"!!!");
КонецПопытки;
Сообщить("тип значения MyObj: " + ТипЗначенияСтр(MyObj) + ", ПустоеЗначение(MyObj) = " + ПустоеЗначение(MyObj));
КонецПроцедуры
получаем:
i>>> MyCls::Конструктор()
!!! >>> описание ошибки >>> MyCls::Конструктор() : Исключение из конструктора!
вирт()._ВыброситьИскл("Исключение из конструктора!");
{MyCls@MD(4) }
> >>> тип значения MyObj: , ПустоеЗначение(MyObj) = 1
Тоже все отлично.
И вариант 3:
Перем MyObj;//глобальная переменная модуля
//*******************************************
Процедура Сформировать()
ФабрикаОбъектов = СоздатьОбъект("ФабрикаОбъектов");
Попытка
MyObj = ФабрикаОбъектов.Новый("MyCls","Конструктор");
Исключение
Сообщить("описание ошибки >>> " + ОписаниеОшибки(),"!!!");
КонецПопытки;
Сообщить("тип значения MyObj: " + ТипЗначенияСтр(MyObj) + ", ПустоеЗначение(MyObj) = " + ПустоеЗначение(MyObj));
КонецПроцедуры
i>>> MyCls::Конструктор()
> >>> тип значения MyObj: MyCls, ПустоеЗначение(MyObj) = 0
Т.е. в третьем варианте объект создан, исключения не возникло. Но
если мы теперь закрываем форму, в которой тестовый код, т.е. уничтожается переменная MyObj, получаем
err >>> MyCls::Конструктор() : Исключение из конструктора!
вирт()._ВыброситьИскл("Исключение из конструктора!");
{MyCls@MD(4) }
err >>> MyCls::Конструктор() : Исключение из конструктора!
вирт()._ВыброситьИскл("Исключение из конструктора!");
{MyCls@MD(4) }
i>>> MyCls::Деструктор()
Собственно, вот. Кажися что-то тут не так.