Тема: Отмена создания объекта
Есть объект "Организация", в нём некоторые характеристики представлены в виде атрибутов-ссылок на объекты (Адрес).
До создания объекта (BeforeCreate) эти атрибуты инициализируются (CreateObject), иначе их нельзя будет редактировать:
Sub Object_BeforeCreate(Obj, Parent, Cancel) if Obj.Attributes("ATTR_ADDRESS_POSTAL").Object is nothing then Obj.Attributes("ATTR_ADDRESS_POSTAL").Object = ThisApplication.ObjectDefs("OBJECT_ADDRESS").CreateObject if Obj.Attributes("ATTR_ADDRESS_ACTUAL").Object is nothing then Obj.Attributes("ATTR_ADDRESS_ACTUAL").Object = ThisApplication.ObjectDefs("OBJECT_ADDRESS").CreateObject if Obj.Attributes("ATTR_ADDRESS_LEGAL").Object is nothing then Obj.Attributes("ATTR_ADDRESS_LEGAL").Object = ThisApplication.ObjectDefs("OBJECT_ADDRESS").CreateObject End Sub
После удаления объекта (ObjectErased) эти атрибуты удаляются (Erase):
Sub Object_Erased(Obj) if not Obj.Attributes("ATTR_ADDRESS_POSTAL").Object is nothing then Obj.Attributes("ATTR_ADDRESS_POSTAL").Object.Erase if not Obj.Attributes("ATTR_ADDRESS_ACTUAL").Object is nothing then Obj.Attributes("ATTR_ADDRESS_ACTUAL").Object.Erase if not Obj.Attributes("ATTR_ADDRESS_LEGAL").Object is nothing then Obj.Attributes("ATTR_ADDRESS_LEGAL").Object.Erase End Sub
Однако в случае, если при создании объекта была нажата "Отмена", объекты присвоенные атрибутам (Адреса) остаются в системе и болтаются там пока их не найдёшь и не удалишь, т.к. событие Form_BeforeClose не возникает в этом случае.
Как быть? Не использовать такую схему? Это "плохой дизайн"? Я чего-то не понимаю/знаю? ...