TENGO EL SIGUIENTE CODIGO:
******************************************************************************************
FUNCTION CREACLIENTE(oDlgAnt,nCliente,aData)
******************************************************************************************
LOCAL oDlg ,;
oLbx ,;
oNombre ,;
oDenom ,;
oApellido ,;
oCedula ,;
oCedLetra ,;
oRif ,;
oRifLetra ,;
oNit ,;
oButCont ,;
oButSalir ,;
oButModif ,;
bButCont ,;
oQuery ,;
cCommand ,;
lOk:=.f. ,;
oTpoCliente ,;
oTpoEstadoCivil ,;
oTpoGenero ,;
oTpoNacionalidad ,;
oTpoActividad ,;
oTpoClienteRegistro ,;
oIdDtsBanco ,;
oRifNat ,;
oRifNatLetra ,;
aIdDtsBanco ,;
oFechaRegistro ,;
oFechaNacimiento ,;
oTelefonoMovil ,;
oEmail ,;
oEdad ,;
nEdad ,;
oWeb ,;
oCodigoCuenta ,;
oStatusActivo ,;
aTpoActividad:={} ,;
bSeek ,;
bContinuar ,;
lModif:=.f. ,;
lCrea:=IIF(nCliente=nil,.t.,.f.)
LOCAL oInsDir,oElimDir
LOCAL oData,oOldData,oFKey
oFKey:=tvkey():NEW // CLASE TVKEY (control de teclas de funcion)
SETKEY(VK_F9, {|| msgalert("Imprimir")} )
DEFAULT oDlgAnt:=oWnd // para cuando se crea primer cliente
aTpoActividad:=CREAARREGLO(oDtBase,'SELECT TpoActividad.IntIdTpoActividad,'+;
'TpoActividad.VchDescripcion '+;
'FROM '+cDTBase+'.TpoActividad '+;
'ORDER BY TpoActividad.VchDescripcion')
aIdDtsBanco:=CREAARREGLO(oDtBase,'SELECT DtsBanco.IntIdDtsBanco,'+;
'DtsBanco.VchDescripcion '+;
'FROM '+cDTBase+'.DtsBanco '+;
'ORDER BY DtsBanco.VchDescripcion')
oData :=TCLIENTE(aData)
oOldData:=TCLIENTE(aData)
IF oData:nTpoCliente<>"1"
oData:nTpoGenero :="1"
oData:nTpoEstadoCivil:="1"
oData:nTpoActividad :="1"
ENDIF
bContinuar:={|| IIF(( IIF(oData:nTpoCliente="1",( oOldData:cNombre <> oData:cNombre .OR.;
oOldData:cApellido <> oData:cApellido .OR.;
oOldData:cCedLetra <> oData:cCedLetra .OR.;
oOldData:cCedula <> oData:cCedula .OR.;
oOldData:nTpoEstadoCivil <> oData:nTpoEstadoCivil .OR.;
oOldData:nTpoGenero <> oData:nTpoGenero .OR.;
oOldData:nTpoActividad <> oData:nTpoActividad ),;
( oOldData:cDenom <> oData:cDenom .OR.;
oOldData:cRif <> oData:cRif .OR.;
oOldData:cRifLetra <> oData:cRifLetra )) .OR.;
oOldData:cRifNat <> oData:cRifNat .OR.;
oOldData:cRifNatLetra <> oData:cRifNatLetra .OR.;
oOldData:cNit <> oData:cNit .OR.;
oOldData:nTpoCliente <> oData:nTpoCliente .OR.;
oOldData:nTpoNacionalidad <> oData:nTpoNacionalidad .OR.;
oOldData:nTpoClienteRegistro <> oData:nTpoClienteRegistro .OR.;
oOldData:nIdDtsBanco <> oData:nIdDtsBanco .OR.;
oOldData:dFechaRegistro <> oData:dFechaRegistro .OR.;
oOldData:dFechaNacimiento <> oData:dFechaNacimiento .OR.;
oOldData:cTelefonoMovil <> oData:cTelefonoMovil .OR.;
oOldData:cEmail <> oData:cEmail .OR.;
oOldData:cWeb <> oData:cWeb .OR.;
oOldData:cCodigoCuenta <> oData:cCodigoCuenta .OR.;
oOldData:cStatusActivo <> oData:cStatusActivo) .AND. oData:NOTNULL(),.T.,.F.)}
IF lCrea
lModif:=.t.
cCommand:={||"INSERT INTO "+cDTBase+".DtsCliente(VchNombre,"+;
'VchApellido,'+;
'VchCedula,'+;
'VchRif,'+;
'VchNit,'+;
'IntIdTpoCliente,'+;
'IntIdTpoEstadoCivil,'+;
'IntIdTpoGenero,'+;
'IntIdTpoNacionalidad,'+;
'IntIdTpoActividad,'+;
'IntIdTpoClienteRegistro,'+;
'IntIdDtsBanco,'+;
'DtmFechaRegistro,'+;
'DtmFechaNacimiento,'+;
'VchTelefonoMovil,'+;
'VchEmail,'+;
'VchWeb,'+;
'VchCodigoCuenta,'+;
'TinStatusActivo) '+;
"VALUES( "+bTrans(IIF(oData:nTpoCliente="1",oData:cNombre,oData:cDenom))+","+;
bTrans(oData:cApellido )+","+;
bTrans(oData:cCedLetra+'-'+oData:cCedula)+","+;
bTrans(IIF(oData:nTpoCliente="1",oData:cRifNatLetra+'-'+oData:cRifNat,oData:cRifLetra+'-'+oData:cRif))+","+;
bTrans(oData:cNit )+","+;
oData:nTpoCliente +","+;
oData:nTpoEstadoCivil +","+;
oData:nTpoGenero +","+;
oData:nTpoNacionalidad +","+;
ALLTRIM(oData:nTpoActividad)+","+;
oData:nTpoClienteRegistro+","+;
oData:nIdDtsBanco +","+;
bTrans(oData:dFechaRegistro )+","+;
bTrans(oData:dFechaNacimiento)+","+;
bTrans(oData:cTelefonoMovil )+","+;
bTrans(oData:cEmail )+","+;
bTrans(oData:cWeb )+","+;
bTrans(oData:cCodigoCuenta )+","+;
"1)"}
ELSE
cCommand:={|| "UPDATE "+cDTBase+".DtsCliente "+;
"SET VchNombre ="+bTrans(IIF(oData:nTpoCliente="1",oData:cNombre,oData:cDenom))+","+;
'VchApellido ='+bTrans(oData:cApellido)+','+;
'VchCedula ='+bTrans(oData:cCedLetra+'-'+oData:cCedula)+','+;
'VchRif ='+bTrans(IIF(oData:nTpoCliente="1",oData:cRifNatLetra+'-'+oData:cRifNat,oData:cRifLetra+'-'+oData:cRif))+','+;
'VchNit ='+bTrans(oData:cNit)+','+;
'IntIdTpoCliente ='+oData:nTpoCliente+','+;
'IntIdTpoEstadoCivil ='+oData:nTpoEstadoCivil+','+;
'IntIdTpoGenero ='+oData:nTpoGenero+','+;
'IntIdTpoNacionalidad ='+oData:nTpoNacionalidad+','+;
'IntIdTpoActividad ='+oData:nTpoActividad+','+;
'IntIdTpoClienteRegistro='+oData:nTpoClienteRegistro+','+;
'IntIdDtsBanco ='+oData:nIdDtsBanco+','+;
'DtmFechaRegistro ='+bTrans(oData:dFechaRegistro)+','+;
'DtmFechaNacimiento ='+bTrans(oData:dFechaNacimiento)+','+;
'VchTelefonoMovil ='+bTrans(oData:cTelefonoMovil)+','+;
'VchEmail ='+bTrans(oData:cEmail)+','+;
'VchWeb ='+bTrans(oData:cWeb)+','+;
'VchCodigoCuenta ='+bTrans(oData:cCodigoCuenta)+','+;
'TinStatusActivo ='+oData:cStatusActivo+' '+;
" WHERE "+cDTBase+".DtsCliente.IntIdDtsCliente = "+STR(nCliente)}
ENDIF
DEFINE DIALOG oDlg RESOURCE "CLIENTES_EDT" OF oDlgAnt;
TITLE IIF(lCrea,'Incluir Cliente','Modifica Cliente')
oDlg:lHelpIcon :=.f. && Apago el Icono de Help
REDEFINE DBCOMBO oTpoCliente VAR oData:nTpoCliente ID 209 OF oDlg ;
ITEMS SeparaArreglo(aTpoCliente,1); // LO QUE RETORNA
LIST SeparaArreglo(aTpoCliente,2); // LO QUE PRESENTA
MESSAGE "Seleccione Tipo de Persona";
ON CHANGE IIF(oData:nTpoCliente<>"1",(oData:nTpoGenero:="1",;
oData:nTpoEstadoCivil:="1",;
oData:nTpoActividad :="1",;
oDlg:Refresh()),.t.);
WHEN lModif .and. lcrea
REDEFINE GET oNombre VAR oData:cNombre ID 201 OF oDlg ;
MESSAGE "Coloque Nombre(s) del Cliente";
PICTURE "@!";
WHEN lModif .AND. oData:nTpoCliente="1"
REDEFINE GET oApellido VAR oData:cApellido ID 202 OF oDlg ;
MESSAGE "Coloque Apellido(s) del Cliente";
PICTURE "@!";
WHEN lModif .AND. oData:nTpoCliente="1"
REDEFINE GET oTelefonoMovil VAR oData:cTelefonoMovil ID 215 OF oDlg ;
MESSAGE "Coloque Nro. Del Teléfono Movil del Cliente";
PICTURE "@!";
WHEN lModif .AND. oData:nTpoCliente="1"
REDEFINE COMBOBOX oCedLetra VAR oData:cCedLetra ITEMS {"V","E"," "} ID 301;
MESSAGE "Coloque Letra de la Cédula del Cliente";
WHEN lModif .AND. oData:nTpoCliente="1"
REDEFINE GET oCedula VAR oData:cCedula ID 203 OF oDlg ;
MESSAGE "Coloque Nro. Cédula del Cliente";
PICTURE "@!";
WHEN oData:cCedLetra<>" " .and. lModif .AND. oData:nTpoCliente="1"
REDEFINE COMBOBOX oRifNatLetra VAR oData:cRifNatLetra ITEMS {"J","V","E"," "} ID 302 OF oDlg ;
MESSAGE "Coloque Letra R.I.F. del Cliente";
PICTURE "!";
WHEN oData:cRifNatLetra<>" " .and. lModif .AND. oData:nTpoCliente="1"
REDEFINE GET oRifNat VAR oData:cRifNat ID 219 OF oDlg ;
MESSAGE "Coloque Nro. R.I.F. del Cliente";
PICTURE "@!";
WHEN lModif .AND. oData:nTpoCliente="1"
REDEFINE GET oFechaNacimiento VAR oData:dFechaNacimiento ID 205 OF oDlg ;
MESSAGE "Coloque Nro. Fecha de Nacimiento del Cliente";
PICTURE "99/99/9999";
VALID EVAL({|| nEdad:=IIF(oData:nTpoCliente="1",CAL_EDAD(oData:dFechaNacimiento,date()),0),;
oEdad:varput(nEdad),;
oEdad:Refresh(),;
.t.});
WHEN lModif .AND. oData:nTpoCliente="1"
REDEFINE GET oEdad VAR nEdad ID 221 OF oDlg ;
PICTURE "999";
WHEN .f.
nEdad:=IIF(oData:nTpoCliente="1",CAL_EDAD(oData:dFechaNacimiento,date()),0)
REDEFINE GET oFechaRegistro VAR oData:dFechaRegistro ID 211 OF oDlg ;
PICTURE "99/99/9999" when .f.
REDEFINE DBCOMBO oTpoEstadoCivil VAR oData:nTpoEstadoCivil ID 206 OF oDlg ;
ITEMS SeparaArreglo(aTpoEstadoCivil,1); // LO QUE RETORNA
LIST SeparaArreglo(aTpoEstadoCivil,2); // LO QUE PRESENTA
MESSAGE "Seleccione Estado Civil del Cliente";
WHEN lModif .AND. oData:nTpoCliente="1"
REDEFINE DBCOMBO oTpoGenero VAR oData:nTpoGenero ID 208 OF oDlg ;
ITEMS SeparaArreglo(aTpoGenero,1); // LO QUE RETORNA
LIST SeparaArreglo(aTpoGenero,2); // LO QUE PRESENTA
MESSAGE "Seleccione Género del Cliente";
WHEN lModif .AND. oData:nTpoCliente="1"
REDEFINE DBCOMBO oTpoActividad VAR oData:nTpoActividad ID 210 OF oDlg ;
ITEMS SeparaArreglo(aTpoActividad,1); // LO QUE RETORNA
LIST SeparaArreglo(aTpoActividad,2); // LO QUE PRESENTA
MESSAGE "Seleccione Tipo de Actividad del Cliente";
WHEN lModif .AND. oData:nTpoCliente="1"
REDEFINE COMBOBOX oRifLetra VAR oData:cRifLetra ITEMS {"J","V","E"," "} ID 303 OF oDlg ;
MESSAGE "Coloque Letra R.I.F. del Cliente";
PICTURE "!";
WHEN lModif .AND. oData:nTpoCliente<>"1"
REDEFINE GET oRif VAR oData:cRif ID 204 OF oDlg ;
MESSAGE "Coloque Nro. R.I.F. del Cliente";
PICTURE "@!";
WHEN oData:cRifLetra<>" " .and. lModif .AND. oData:nTpoCliente<>"1"
REDEFINE GET oDenom VAR oData:cDenom ID 223 OF oDlg ;
MESSAGE "Coloque Denominacion Comercial del Cliente";
PICTURE "@!";
WHEN lModif .AND. oData:nTpoCliente<>"1"
REDEFINE GET oEmail VAR oData:cEmail ID 212 OF oDlg ;
MESSAGE "Coloque Correo Electrónico del Cliente";
WHEN lModif
REDEFINE GET oWeb VAR oData:cWeb ID 213 OF oDlg ;
MESSAGE "Coloque Dirección de la página Web del Cliente";
WHEN lModif
REDEFINE DBCOMBO oIdDtsBanco VAR oData:nIdDtsBanco ID 216 OF oDlg ;
ITEMS SeparaArreglo(aIdDtsBanco,1); // LO QUE RETORNA
LIST SeparaArreglo(aIdDtsBanco,2); // LO QUE PRESENTA
MESSAGE "Seleccione Tipo de Cliente";
WHEN lModif
REDEFINE GET oCodigoCuenta VAR oData:cCodigoCuenta ID 217 OF oDlg ;
MESSAGE "Coloque Nro. de Cuenta del Cliente";
PICTURE "@!";
WHEN lModif
REDEFINE GET oStatusActivo VAR oData:cStatAct ID 218 OF oDlg ;
PICTURE "@!";
WHEN .F.
REDEFINE BUTTON oButSalir ID 101 OF oDlg;
MESSAGE "Sale";
PROMPT "&Salir";
ACTION oDlg:End()
REDEFINE BUTTON oButCont ID 102 OF oDlg;
MESSAGE IIF(lCrea,"Insertar y Salir","Almacenar y Salir");
PROMPT "&Continuar";
WHEN eval(bContinuar);
ACTION (lModif:=.f.,lOk:=.t.,oDlg:End())
REDEFINE BUTTON oButModif ID 103 OF oDlg;
MESSAGE "Modificar";
WHEN !lModif;
ACTION (lModif:=.t.,oDlg:Refresh(),oCedLetra:setfocus(.t.),;
oCedLetra:Click(),oDlg:setfocus())
oButCont:disable()
ACTIVATE DIALOG oDlg CENTER;
ON INIT IIF(lModif,oButModif:HIDE(),);
VALID IIF(lModif .or. Eval(bContinuar),MSGNOYES("Desea Salir","Atencion..."),.T.)
IF lOk
IF lCrea
IF VERIFRIFCLIENTE(oData:cRifLetra+'-'+oData:cRIF,oData:cCedLetra+'-'+oData:cCedula,oData:cRifNatLetra+'-'+oData:cRifNat) // verifica si RIF ya existe
oQuery:=TMSQuery():New( oDTbase )
oQuery:Open(eval(cCommand))
oQuery:close()
ENDIF
ELSE
oQuery:=TMSQuery():New( oDTbase )
oQuery:Open(eval(cCommand))
oQuery:close()
ENDIF
ENDIF
oFkey:End()
RETURN lOk
Pues resulta que, cuando bContinuar es .T. , el cursor está sobre un GET,
y se pulsa Escape, pregunta si desea salir, al reponder No, lo pregunta dos veces. (este comportamiento no sucede cuando está sobre un dbcombo o acciono directamente el boton Salir), que puede estar sucediendo, en donde estoy metiendo la pata.
Ayudenme, que ya casi no tengo cabellos!!!
Angel