Page 1 of 1

PROBLEMAS CON ESCAPE ( EN UN GET)

Posted: Tue Dec 18, 2007 9:28 pm
by ADBLANCO
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

Posted: Tue Dec 18, 2007 9:39 pm
by Antonio Linares
Angel,

Que versión de FWH usas ?

Posted: Wed Dec 19, 2007 4:32 pm
by ADBLANCO
La Versión de fw es la 0709

Posted: Wed Dec 19, 2007 8:40 pm
by Antonio Linares
Angel,

Por favor prueba este ejemplo. Aqui funciona correctamente:

Code: Select all

#include "FiveWin.ch"

function Main()

   local oDlg, cTest := "hello world"

   DEFINE DIALOG oDlg

   @ 2, 2 GET cTest   

   ACTIVATE DIALOG oDlg VALID MsgYesNo( "Want to end ?" )

return nil

Posted: Thu Dec 20, 2007 1:51 pm
by ADBLANCO
Estimado Antonio,

Me parece que Hay que revisar la clase codigo de Tget, ya que efectúa el ON CHANGE Retrasado (entre otros detallitos)

Solucioné mi problema utilizando la clase tget, de una versión anterior (La que utiliza GianCarlos)

Aunque no fué una solución muy elegante y es provisional, por lo menos puedo seguir adelante.

Felices fiestas y que la Salud, Paz, Felicidad y Prosperidad acompañen a Ti y a todos los compañeros del Mundo, Sinseramente les deseamos desde este humilde rincón Venezolano.


Con Afecto Infinito:
Angel D. Blanco y los compañeros anónimos de esta oficina, en
Valencia, Venezuela

Posted: Thu Dec 20, 2007 2:43 pm
by Antonio Linares
Angel,

Envíame el PRG por email, gracias

Posted: Wed Dec 26, 2007 2:35 am
by ADBLANCO
Estimado Colega:

Ya te envié el programa (la clase tget modificada), Avísame si te llegó.


Angel

Posted: Wed Dec 26, 2007 8:49 am
by Antonio Linares
Angel,

Hemos recibido y revisado tu PRG. Efectivamente se estaba evaluando bPostKey desde KeyDown() y desde KeyChar(), y solo debía hacerse desde KeyChar(). Gracias,

En cuanto a tus _, no nos parecen correctos. Puede ser que a ti te funcione bien, pero has eliminado código que debe permanecer en la Clase.

Cuando dejamos código comentado en la clase, por un tiempo, es para ver si se produce algún tipo de efecto colateral en _ recientes y así saber exactamente a que se corresponden los _. Si durante un tiempo no se reportan errores, entonces el código comentado se elimina definitivamente.

Posted: Wed Dec 26, 2007 12:56 pm
by ADBLANCO
Muchas Gracias. Antonio,

Sería posible que me mandaras el código correcto de la clase, para Utilizarlo, (y Así evitar futuros entuertos :lol: ).

Mi Correo es BLANCOANDREANI@HOTMAIL.COM


Gracias de antemano, y espero que el niño Jesús te haya premiado con algo, Je Je..


Felicidad
Angel