Exit form
Hola.
Agradeceria que alguien me echase una mano.
Un form llamado con un CALL FORM, en un momento dado de la ejecución, se ejecuta un EXIT FORM y se sale directamente de la aplicacion cuando deberÃa salirse unicamente del formulario llamado.
Muchas gracias.
Un saludo.
Agradeceria que alguien me echase una mano.
Un form llamado con un CALL FORM, en un momento dado de la ejecución, se ejecuta un EXIT FORM y se sale directamente de la aplicacion cuando deberÃa salirse unicamente del formulario llamado.
Muchas gracias.
Un saludo.
¿ Por un casual no tendrás en el primer form ( el que hace CALL_FORM ) un WHEN-WINDOW-ACTIVATED verdad ?
La pantalla se llama desde un menu, pero en ese momento el formulario que hace de tapiz sà tiene un WHEN_WINDOW_ACTIVATED. ¿Por que?
No he visto nada raro. Es curioso porque parece que el error ocurre cuando se muestra un mensaje.
¿Qué tendrÃa que haber en when_window_activate?
¿Qué tendrÃa que haber en when_window_activate?
Este es el texto del when_windows_activate
DECLARE
L_ret NUMBER;
BEGIN
Set_Window_Property('COGS002W', WINDOW_STATE, MAXIMIZE);
Set_Window_Property('COGS002W', TITLE, :GLOBAL.GE_NOM_CLIENTE);
/* Si elige corporativo distinto cargar datos y habilitar el menú y actualizar variable
que comprueba el nodo desconocido, en otro caso no hacer nada. La variable global
de cod_corporativo esta con '0001' rellenado con ceros. En display 1. Por eso se transforma. */
IF (:COGSCORPO.DXT_COD_CORPORATIVO) = TO_CHAR(TO_NUMBER(:GLOBAL.GE_COD_CORPORATIVO))
THEN
:GLOBAL.GE_NODO_REVISADO:='S';
ELSE
:GLOBAL.GE_NODO_REVISADO:='N';
END IF;
/* Solo se cargan los datos en pantalla principal si se selecciona un corporativo */
IF :GLOBAL.GE_COD_CORPORATIVO<>'0'
THEN
IF (:global.ge_cod_servicio='0002') THEN
COGS_CARGAR_DATOS_P;
COGS_CARGAR_SERVCONTRA_MINI_P;
Set_Window_Property(FORMS_MDI_WINDOW,title,:cogscorpo.dxt_txt_servicio);
Set_Window_Property('COGS002W', TITLE, :GLOBAL.GE_NOM_CLIENTE);
COGS_HAB_GESTION_P;
COGS_HAB_FACTURACION_P;
COGS_HAB_TARIFICACION_P;
:GLOBAL.GE_COD_CORPORATIVO_ANTERIOR:=:GLOBAL.GE_COD_CORPORATIVO; /* El nuevo corporatiov anterior es el actural*/
:GLOBAL.GE_CAMBIOS_DATOS_GENERALES:='N'; /* Cambio a 'N', NO. Si cambia algo en datos generales pasará a 'S'*/
:COGSCORPO.ETIQ_ACCESO_PRIMARIO:=Null;
:COGSCORPO.ETIQ_ACCESO_UNICO:=Null;
:COGSCORPO.DXT_ACCESOS:=Null;
:COGSCORPO.DXT_ACCESOSUNICO:=Null;
:COGSCORPO.ETIQ_DES_CICLOFACT:=Null;
Set_Item_Property('COGSCORPO.ETIQ_AGRUPACION',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.DXT_NOMAGRUPACION',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.DXT_CODAGRUP',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.ETIQ_BUZ_IBERCON',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTBUZONIBER',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.ETIQ_EXT_ALARMA',X_POS,23);
Set_Item_Property('COGSCORPO.ETIQ_EXT_ALARMA',Y_POS,185);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTCONTROL',X_POS,155);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTCONTROL',Y_POS,185);
Set_item_property('COGSCORPO.DES_CICLOFACT',DISPLAYED,property_false);
Set_item_property('COGSCORPO.ETIQ_DES_CICLOFACT',DISPLAYED,property_false);
--GO_ITEM ('COGS_SERVCONTRA.TXT_FOCO');
SHOW_VIEW('COGS_SERVCONTRA');
ELSE
COGS_CARGAR_DATOS_P;
Set_Window_Property(FORMS_MDI_WINDOW,title,:cogscorpo.dxt_txt_servicio);
Set_Window_Property('COGS002W', TITLE, :GLOBAL.GE_NOM_CLIENTE);
COGS_HAB_GESTION_P;
COGS_HAB_FACTURACION_P;
COGS_HAB_TARIFICACION_P;
:GLOBAL.GE_COD_CORPORATIVO_ANTERIOR:=:GLOBAL.GE_COD_CORPORATIVO; /* El nuevo corporatiov anterior es el actural*/
:GLOBAL.GE_CAMBIOS_DATOS_GENERALES:='N'; /* Cambio a 'N', NO. Si cambia algo en datos generales pasará a 'S'*/
:COGSCORPO.ETIQ_ACCESO_PRIMARIO:='Accesos Primarios:';
:COGSCORPO.ETIQ_ACCESO_UNICO:='Accesos Únicos:';
:COGSCORPO.ETIQ_DES_CICLOFACT:='Ciclo de Facturación:';
Set_Item_Property('COGSCORPO.ETIQ_AGRUPACION',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.DXT_NOMAGRUPACION',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.DXT_CODAGRUP',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.ETIQ_BUZ_IBERCON',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTBUZONIBER',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.ETIQ_EXT_ALARMA',X_POS,23);
Set_Item_Property('COGSCORPO.ETIQ_EXT_ALARMA',Y_POS,201);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTCONTROL',X_POS,155);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTCONTROL',Y_POS,201);
set_item_property('COGSCORPO.DES_CICLOFACT',DISPLAYED,property_true);
Set_item_property('COGSCORPO.ETIQ_DES_CICLOFACT',DISPLAYED,property_true);
--GO_ITEM ('COGSCORPO.TXT_FOCO');
SHOW_VIEW('COGS_CORPO');
END IF;
END IF;
/**********************************************************************************************
Si el corporativo elegido está dado de baja, hay que desactivar algunas opciones de menú.
**********************************************************************************************/
COGS_DESHAB_BAJA_CORP_P;
/*si el Cod_Servicio es CORPORATIVO 2000 o MINICORPORATIVO, se habilitaran unos u otros posibilidades
del menú principal*/
IF :GLOBAL.GE_COD_SERVICIO = '0001' THEN
COGS_HABILITAR_MENU_CORPO_P;
ELSE
IF :GLOBAL.GE_COD_SERVICIO = '0002' THEN
COGS_HAB_MENU_MINICORPO_P;
COGS_DESHAB_MENU_MINICORPO_P;
END IF;
END IF;
COGS_SEGURIDAD_MENU_P;
EXCEPTION
WHEN VALUE_ERROR THEN
NULL;
/* Salta esta exception la primera vez que se entra en
el trigger, porque cod_corporativo='0'
en vez de un number , p.ej '0001'. Dejarlo asÃ, porque
en COGS001E se pone cod_corporativo='0'.
Sirve para saber si es la primera vez que salta el trigger
Porque el tratamiento es distinto en las siguientes.*/
END;
DECLARE
L_ret NUMBER;
BEGIN
Set_Window_Property('COGS002W', WINDOW_STATE, MAXIMIZE);
Set_Window_Property('COGS002W', TITLE, :GLOBAL.GE_NOM_CLIENTE);
/* Si elige corporativo distinto cargar datos y habilitar el menú y actualizar variable
que comprueba el nodo desconocido, en otro caso no hacer nada. La variable global
de cod_corporativo esta con '0001' rellenado con ceros. En display 1. Por eso se transforma. */
IF (:COGSCORPO.DXT_COD_CORPORATIVO) = TO_CHAR(TO_NUMBER(:GLOBAL.GE_COD_CORPORATIVO))
THEN
:GLOBAL.GE_NODO_REVISADO:='S';
ELSE
:GLOBAL.GE_NODO_REVISADO:='N';
END IF;
/* Solo se cargan los datos en pantalla principal si se selecciona un corporativo */
IF :GLOBAL.GE_COD_CORPORATIVO<>'0'
THEN
IF (:global.ge_cod_servicio='0002') THEN
COGS_CARGAR_DATOS_P;
COGS_CARGAR_SERVCONTRA_MINI_P;
Set_Window_Property(FORMS_MDI_WINDOW,title,:cogscorpo.dxt_txt_servicio);
Set_Window_Property('COGS002W', TITLE, :GLOBAL.GE_NOM_CLIENTE);
COGS_HAB_GESTION_P;
COGS_HAB_FACTURACION_P;
COGS_HAB_TARIFICACION_P;
:GLOBAL.GE_COD_CORPORATIVO_ANTERIOR:=:GLOBAL.GE_COD_CORPORATIVO; /* El nuevo corporatiov anterior es el actural*/
:GLOBAL.GE_CAMBIOS_DATOS_GENERALES:='N'; /* Cambio a 'N', NO. Si cambia algo en datos generales pasará a 'S'*/
:COGSCORPO.ETIQ_ACCESO_PRIMARIO:=Null;
:COGSCORPO.ETIQ_ACCESO_UNICO:=Null;
:COGSCORPO.DXT_ACCESOS:=Null;
:COGSCORPO.DXT_ACCESOSUNICO:=Null;
:COGSCORPO.ETIQ_DES_CICLOFACT:=Null;
Set_Item_Property('COGSCORPO.ETIQ_AGRUPACION',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.DXT_NOMAGRUPACION',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.DXT_CODAGRUP',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.ETIQ_BUZ_IBERCON',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTBUZONIBER',DISPLAYED,PROPERTY_FALSE);
Set_Item_Property('COGSCORPO.ETIQ_EXT_ALARMA',X_POS,23);
Set_Item_Property('COGSCORPO.ETIQ_EXT_ALARMA',Y_POS,185);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTCONTROL',X_POS,155);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTCONTROL',Y_POS,185);
Set_item_property('COGSCORPO.DES_CICLOFACT',DISPLAYED,property_false);
Set_item_property('COGSCORPO.ETIQ_DES_CICLOFACT',DISPLAYED,property_false);
--GO_ITEM ('COGS_SERVCONTRA.TXT_FOCO');
SHOW_VIEW('COGS_SERVCONTRA');
ELSE
COGS_CARGAR_DATOS_P;
Set_Window_Property(FORMS_MDI_WINDOW,title,:cogscorpo.dxt_txt_servicio);
Set_Window_Property('COGS002W', TITLE, :GLOBAL.GE_NOM_CLIENTE);
COGS_HAB_GESTION_P;
COGS_HAB_FACTURACION_P;
COGS_HAB_TARIFICACION_P;
:GLOBAL.GE_COD_CORPORATIVO_ANTERIOR:=:GLOBAL.GE_COD_CORPORATIVO; /* El nuevo corporatiov anterior es el actural*/
:GLOBAL.GE_CAMBIOS_DATOS_GENERALES:='N'; /* Cambio a 'N', NO. Si cambia algo en datos generales pasará a 'S'*/
:COGSCORPO.ETIQ_ACCESO_PRIMARIO:='Accesos Primarios:';
:COGSCORPO.ETIQ_ACCESO_UNICO:='Accesos Únicos:';
:COGSCORPO.ETIQ_DES_CICLOFACT:='Ciclo de Facturación:';
Set_Item_Property('COGSCORPO.ETIQ_AGRUPACION',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.DXT_NOMAGRUPACION',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.DXT_CODAGRUP',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.ETIQ_BUZ_IBERCON',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTBUZONIBER',DISPLAYED,PROPERTY_TRUE);
Set_Item_Property('COGSCORPO.ETIQ_EXT_ALARMA',X_POS,23);
Set_Item_Property('COGSCORPO.ETIQ_EXT_ALARMA',Y_POS,201);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTCONTROL',X_POS,155);
Set_Item_Property('COGSCORPO.DXT_NUM_EXTCONTROL',Y_POS,201);
set_item_property('COGSCORPO.DES_CICLOFACT',DISPLAYED,property_true);
Set_item_property('COGSCORPO.ETIQ_DES_CICLOFACT',DISPLAYED,property_true);
--GO_ITEM ('COGSCORPO.TXT_FOCO');
SHOW_VIEW('COGS_CORPO');
END IF;
END IF;
/**********************************************************************************************
Si el corporativo elegido está dado de baja, hay que desactivar algunas opciones de menú.
**********************************************************************************************/
COGS_DESHAB_BAJA_CORP_P;
/*si el Cod_Servicio es CORPORATIVO 2000 o MINICORPORATIVO, se habilitaran unos u otros posibilidades
del menú principal*/
IF :GLOBAL.GE_COD_SERVICIO = '0001' THEN
COGS_HABILITAR_MENU_CORPO_P;
ELSE
IF :GLOBAL.GE_COD_SERVICIO = '0002' THEN
COGS_HAB_MENU_MINICORPO_P;
COGS_DESHAB_MENU_MINICORPO_P;
END IF;
END IF;
COGS_SEGURIDAD_MENU_P;
EXCEPTION
WHEN VALUE_ERROR THEN
NULL;
/* Salta esta exception la primera vez que se entra en
el trigger, porque cod_corporativo='0'
en vez de un number , p.ej '0001'. Dejarlo asÃ, porque
en COGS001E se pone cod_corporativo='0'.
Sirve para saber si es la primera vez que salta el trigger
Porque el tratamiento es distinto en las siguientes.*/
END;
Bien, la verdad es que no he visto nada raro en el codigo que me has puesto, pero por experiencia personal, me dá que ese trigger es el que de alguna manera está cerrando la aplicación.
Haz una cosa, vete poniendo trazas a lo largo del codigo del WHEN-WINDOW-ACTIVATED, por ejemplo :
MESSAGE(1);
MESSAGE(1);
IF (:COGSCORPO.DXT_COD_CORPORATIVO) = TO_CHAR(TO_NUMBER(:GLOBAL.GE_COD_CORPORATIVO))
THEN
:GLOBAL.GE_NODO_REVISADO:=\'S\';
ELSE
:GLOBAL.GE_NODO_REVISADO:=\'N\';
END IF;
MESSAGE(2);
MESSAGE(2);
Y asà hasta llegar al final
Con suerte te echará antes de llegar al ultimo mensaje y entonces sabrás que es lo que no rula bien.
Tb create un KEY-EXIT a nivel de form con este codigo :
message(:system.trigger_item);
message(:system.trigger_item);
Esto te dirá el BLOQUE.CAMPO donde estaba posicionado el foco cuando se ha producido el EXIT-FORM
Cuentame lo que veas..........
Haz una cosa, vete poniendo trazas a lo largo del codigo del WHEN-WINDOW-ACTIVATED, por ejemplo :
MESSAGE(1);
MESSAGE(1);
IF (:COGSCORPO.DXT_COD_CORPORATIVO) = TO_CHAR(TO_NUMBER(:GLOBAL.GE_COD_CORPORATIVO))
THEN
:GLOBAL.GE_NODO_REVISADO:=\'S\';
ELSE
:GLOBAL.GE_NODO_REVISADO:=\'N\';
END IF;
MESSAGE(2);
MESSAGE(2);
Y asà hasta llegar al final
Con suerte te echará antes de llegar al ultimo mensaje y entonces sabrás que es lo que no rula bien.
Tb create un KEY-EXIT a nivel de form con este codigo :
message(:system.trigger_item);
message(:system.trigger_item);
Esto te dirá el BLOQUE.CAMPO donde estaba posicionado el foco cuando se ha producido el EXIT-FORM
Cuentame lo que veas..........
