Estimado Rolando.
Nuestros conocimientos y experiencia son lo mejor que tenemos, ! , Nunca sera una polemica, es un regalo que damos todos.
Por ello este Foro es tan especial !
Gracias
Lubin
Como controlar que no se salten los Gets con el Mouse
Re: Como controlar que no se salten los Gets con el Mouse
ACC69 wrote:Marcelo Via Giglio wrote:Estimado Rolando,
que gusto saber de ti, como andas espero algún día podamos tomar un cafe.
Sobre el tema de validación, como dice Rolando es menos dolor de cabeza hacerlo en bloque, pero puedes validar algún tipo de dato como por ejemplo un código para no introducir uno repetido, y colocas la clausa CANCEL en el BUTTON (de cancelar o salir) o si no esta disponible utilizar oBtn:lCancel := .T. eso te permite no trancarte en una validacion de un GET.
Yo utilizo un validador basico
y lo definesCode: Select all
//------------------------------------------------------------------------------ FUNCTION validador ( oDbf, aParam ) // aParam { bloque de verificación, Campo de la tabla, mensaje } //------------------------------------------------------------------------------ LOCAL i FOR i := 1 TO LEN( aParam ) IF VALTYPE( aParam[i,1] ) = "B" IF ! EVAL( aParam[i,1], oDbf ) RETURN .F. ENDIF ELSE IF EVAL( aParam[i,2], oDbf:fieldGet( oDbf:FIELDPOS( aParam[i,1] ) ), oDbf:RECNO(), oDbf ) MSGALERT( aParam[i,3] ) RETURN .F. ENDIF ENDIF NEXT RETURN .T.
y lo llamas antes de cualquier operación, funciona en base a la clase tDataBase para _ de validaciónCode: Select all
::aValids := {{ "almacen", {|c| EMPTY(c) }, "Se debe definir un almacen" },; { "item", {|c| EMPTY(c) }, "Se debe definir un código de item" },; { IF( job $ "NEW,DUPLI", {| oDbf | valid_item( oDbf ) }, {|| .T. } ) },; { "descripcion", {|c| EMPTY(c) }, "Se debe definir una descripción" },; { "aplicacion", {|c| EMPTY(c) }, "Se debe definir la aplicación" }; }
Son solo ideas pero espero ayudenCode: Select all
validador( ::oDbf, ::aValids )
Saludos
Marcelo
Hola buenos dias de antemano les envio cordial saludos.
Aqui pongo mi forma de validar mis gets antes de grabar el registro,segun sea la condicion ...
Y creo que es la forma correcta ,que muchas veces no siempre se podra validar en cada get, porque el usuario siempre tendra acceso usando el mouse..es mejor validar al darle click de grabar y ahi que se haga toda la validacion correcta y segura...Code: Select all
REDEFINE GET oG_IVA[03] VAR nIVA_1 ID 103 OF oDlgIVA PICT "99,999,999.99" VALID V_IVA(1) //------------------------------------------------------------------------------ STATIC FUNCTION V_IVA(nOp) // Function para validar el get //Esta parte de aqui te permite regresar al get anterior en caso que tecleaste mal el dato\\ IF !GetKeyState( VK_RETURN ) .and. !GetKeyState( VK_DOWN ) .and. !GetKeyState( VK_TAB ) RETURN( .T. ) ENDIF DO CASE CASE noP = 1 .AND. nIVA_1 <> 0 .AND. !nImpBs1 <> 0 .AND. !nTasa1 <> 0 MsgAlert('Error: No puede capturar importe IVA,si base y tasa IVA,se encuentra vacío',"Confirma") RETURN .F. CASE noP = 2 .AND. nIVA_2 <> 0 .AND. !nImpBs2 <> 0 .AND. !nTasa2 <> 0 MsgAlert('Error: No puede capturar importe IVA,si base y tasa IVA,se encuentra vacío',"Confirma") RETURN .F. ENDCASE RETURN (.T.) //------------------------------------------------------------------------------ STATIC FUNCTION Reg_Cap() Local nNumMov,cCtaSN oG_D[06]:SetColor() oG_D[06]:Refresh() oG_D[07]:SetColor() oG_D[07]:Refresh() cCtaSN := SUBS(cCta,1,4) + SUBS(cCta,6,4) + SUBS(cCta,11,4) + SUBS(cCta,16,4) cCta2 := FORMATO1("cCta",cCta, .F.) // No Permite separar guiones //Aqui antes de registrar el dato al dbf...te valida cada campo si esta vacio o no...\\ // Aqui te valida cada get despues del boton de agregar nuevo registro...yo creo que es lo mas fiable y seguro... DO CASE CASE !(S09)->( DbSeek(STR(nSegNg,4)) ) .AND. lAP_SN MsgInfo("Error: No existe Segmento de Negocio","Confirme") oG_D[02]:SetFocus() oG_D[02]:Refresh() RETURN.F. CASE EMPTY(cCta) MsgInfo("Error: Favor de teclear subcuenta") oG_D[01]:SetFocus() oG_D[01]:Refresh() RETURN .F. CASE (S08)->( DbSeek(cCta2) ) IF (S08)->TIPONAT = "A" MsgInfo("Error: La cuenta debe ser de detalle!","Confirme") cCta := SPACE(19) oG_D[01]:SetFocus() oG_D[01]:Refresh() RETURN .F. ENDIF CASE !(S08)->( DbSeek(cCta2) ) MsgInfo("Error: La cuenta no existe!","Confirme") cCta := SPACE(19) oG_D[01]:SetFocus() oG_D[01]:Refresh() RETURN .F. ENDCASE // Aqui se añade nuevo registro en caso que todos los gets hayan cumplido la validacion ...\\ //* Paso 1 ----- Agrega datos a S12:= Abre_Dbf(12,12) // Abre: POLZxMxA.DBF -----*\\ IF lAdd // Agrega nuevo registro (S12)->( DbSeek(cID_AMMov+cTipo+STR(nNumPol,5)) ) IF (S12)->(!FOUND()) // Si agrega nuevo resistro en la base de datos (S12)->(DbAppend()) (S12)->FECALTA := DATE() (S12)->REGHORA := AMPM(TIME()) (S12)->NICKUSUA:= cNombUsua (S12)->NOMBUSUA:= cNombre ENDIF *?"Regisro nuevo dado de alta" IF nCarg <> 0 aSum[1, 2] += nCarg aSum[1, 3] += nAbon aSum[1, 4] += nImpBs1 ENDIF ...Mas intrucciones Return nil..
Saludos cordiales .
Atte: Adrian C. C.
Hola de nuevo Ing. Lubin, significa que ya solucionaste el problema de la validacion..???
Saludos.
Atte: Adrian C. C.
Re: Como controlar que no se salten los Gets con el Mouse
RSalazarU:
Respecto a tu comentario:
NO colocar VALIDADORES en los Gets y ningun otro control de captura de datos.
Cuando colocas un validador a un GET, NO puedes salir de el mientras no se cumpla la
condicion,
lo cual te impide presionar en el boton CANCEL o CLOSE del dialogo, la unica forma de salir del
dialogo es presionando la tecla ESC.
A veces se da el caso, de que tienes que anular la tecla ESC; si de da el caso no podras cerrar
el DIALOGO a menos que se cumpla la condicion.
Esto me ocurrio, sobre todo, cuando hacia: VALID !Empty(cDato)
Toma ésta apreciación:
01. En un formato con cualesquier campos de llenado, las opciones proporcionadas
por Windows a travéz de FWH y Xharbour son muy ricas en opciones y nos permiten
el pasearnos por todo el dialogo GET como queramos.
02. El entrampamiento VALID si te permite salir si lo programas para todos los actos del
usuario, por ejemplo
- Tienes un campo GET que te pide un código de tabla.
- Tu VALID podría considerar hasta cuatro opciones
FUNCTION ValidaGETdeTabla()
LOCAL uvf:=.F.
IF GETKEYSTATE(VK_UP) // al pulsar tecla flecha arriba
uvf=.T. //te permite salir del GET para regresar al campo GET anterior.
ELSEIF EMPTY(CampoGetConTabla) .AND. GETKEYSTATE(VK_RETURN)
uvf=.T. //si quieres pasar sin llenar, puedes hacerlo
ELSEIF EMPTY(CampoGetConTabla) .AND. GETKEYSTATE(VK_F2)
//despliegas la tabla para que el usuario elija su clasificacion y le retornas
//los datos complementarios en _ necesarios.
Eligió los datos de un registro en la tabla sin pulsar ESC ??
uvf=.T.
No eligió, la tabla esta vacia ??
sigue uvf en .F.
ENDI
ELSEIF LEN(CampoGetConTabla)=6
//usuario conoce el codigo de la tabla ... realizas la busqueda y le retornas
//los datos complementarios en _ necesarios.
Encontró los datos del codigo ingresado en un registro de la tabla ??
uvf=.T.
No eligió, la tabla esta vacia ??
sigue uvf en .F.
ENDI
ENDI
RETU uvf
03. La pos validación en el boton ACEPTAR es obligada antes de grabar.
Para Lubin:
El desorden con el que el usuario registre una forma no tiene que ser un problema para
encasillarlo a pasar los gets uno por uno en orden riguroso. Puede que el usuario NO tenga
en determinado momento el dato para llenar el GET tres, pero pero en ese mismo momento
SI tiene los datos para llenar los GETS seis, ocho y once.
Saludos
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú
Respecto a tu comentario:
NO colocar VALIDADORES en los Gets y ningun otro control de captura de datos.
Cuando colocas un validador a un GET, NO puedes salir de el mientras no se cumpla la
condicion,
lo cual te impide presionar en el boton CANCEL o CLOSE del dialogo, la unica forma de salir del
dialogo es presionando la tecla ESC.
A veces se da el caso, de que tienes que anular la tecla ESC; si de da el caso no podras cerrar
el DIALOGO a menos que se cumpla la condicion.
Esto me ocurrio, sobre todo, cuando hacia: VALID !Empty(cDato)
Toma ésta apreciación:
01. En un formato con cualesquier campos de llenado, las opciones proporcionadas
por Windows a travéz de FWH y Xharbour son muy ricas en opciones y nos permiten
el pasearnos por todo el dialogo GET como queramos.
02. El entrampamiento VALID si te permite salir si lo programas para todos los actos del
usuario, por ejemplo
- Tienes un campo GET que te pide un código de tabla.
- Tu VALID podría considerar hasta cuatro opciones
FUNCTION ValidaGETdeTabla()
LOCAL uvf:=.F.
IF GETKEYSTATE(VK_UP) // al pulsar tecla flecha arriba
uvf=.T. //te permite salir del GET para regresar al campo GET anterior.
ELSEIF EMPTY(CampoGetConTabla) .AND. GETKEYSTATE(VK_RETURN)
uvf=.T. //si quieres pasar sin llenar, puedes hacerlo
ELSEIF EMPTY(CampoGetConTabla) .AND. GETKEYSTATE(VK_F2)
//despliegas la tabla para que el usuario elija su clasificacion y le retornas
//los datos complementarios en _ necesarios.
Eligió los datos de un registro en la tabla sin pulsar ESC ??
uvf=.T.
No eligió, la tabla esta vacia ??
sigue uvf en .F.
ENDI
ELSEIF LEN(CampoGetConTabla)=6
//usuario conoce el codigo de la tabla ... realizas la busqueda y le retornas
//los datos complementarios en _ necesarios.
Encontró los datos del codigo ingresado en un registro de la tabla ??
uvf=.T.
No eligió, la tabla esta vacia ??
sigue uvf en .F.
ENDI
ENDI
RETU uvf
03. La pos validación en el boton ACEPTAR es obligada antes de grabar.
Para Lubin:
El desorden con el que el usuario registre una forma no tiene que ser un problema para
encasillarlo a pasar los gets uno por uno en orden riguroso. Puede que el usuario NO tenga
en determinado momento el dato para llenar el GET tres, pero pero en ese mismo momento
SI tiene los datos para llenar los GETS seis, ocho y once.
Saludos
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú
Re: Como controlar que no se salten los Gets con el Mouse
Maggiro wrote:RSalazarU:
Respecto a tu comentario:
NO colocar VALIDADORES en los Gets y ningun otro control de captura de datos.
Cuando colocas un validador a un GET, NO puedes salir de el mientras no se cumpla la
condicion,
lo cual te impide presionar en el boton CANCEL o CLOSE del dialogo, la unica forma de salir del
dialogo es presionando la tecla ESC.
A veces se da el caso, de que tienes que anular la tecla ESC; si de da el caso no podras cerrar
el DIALOGO a menos que se cumpla la condicion.
Esto me ocurrio, sobre todo, cuando hacia: VALID !Empty(cDato)
Toma ésta apreciación:
01. En un formato con cualesquier campos de llenado, las opciones proporcionadas
por Windows a travéz de FWH y Xharbour son muy ricas en opciones y nos permiten
el pasearnos por todo el dialogo GET como queramos.
02. El entrampamiento VALID si te permite salir si lo programas para todos los actos del
usuario, por ejemplo
- Tienes un campo GET que te pide un código de tabla.
- Tu VALID podría considerar hasta cuatro opciones
FUNCTION ValidaGETdeTabla()
LOCAL uvf:=.F.
IF GETKEYSTATE(VK_UP) // al pulsar tecla flecha arriba
uvf=.T. //te permite salir del GET para regresar al campo GET anterior.
ELSEIF EMPTY(CampoGetConTabla) .AND. GETKEYSTATE(VK_RETURN)
uvf=.T. //si quieres pasar sin llenar, puedes hacerlo
ELSEIF EMPTY(CampoGetConTabla) .AND. GETKEYSTATE(VK_F2)
//despliegas la tabla para que el usuario elija su clasificacion y le retornas
//los datos complementarios en _ necesarios.
Eligió los datos de un registro en la tabla sin pulsar ESC ??
uvf=.T.
No eligió, la tabla esta vacia ??
sigue uvf en .F.
ENDI
ELSEIF LEN(CampoGetConTabla)=6
//usuario conoce el codigo de la tabla ... realizas la busqueda y le retornas
//los datos complementarios en _ necesarios.
Encontró los datos del codigo ingresado en un registro de la tabla ??
uvf=.T.
No eligió, la tabla esta vacia ??
sigue uvf en .F.
ENDI
ENDI
RETU uvf
03. La pos validación en el boton ACEPTAR es obligada antes de grabar.
Para Lubin:
El desorden con el que el usuario registre una forma no tiene que ser un problema para
encasillarlo a pasar los gets uno por uno en orden riguroso. Puede que el usuario NO tenga
en determinado momento el dato para llenar el GET tres, pero pero en ese mismo momento
SI tiene los datos para llenar los GETS seis, ocho y once.
Saludos
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú
Exactamente asi es Ing. Maggiro, por eso puse el ejemplo como se valida al pulsar el boton agregar y dentro de ese boton se valida si cada get se valide.. y si en el get tienes forzado a validar no podras regresar al get anterior, es por eso del ejemplo que puse de como lo hago .
Code: Select all
//Esta parte de aqui te permite regresar al get anterior en caso que tecleaste mal el dato\\
IF !GetKeyState( VK_RETURN ) .and. !GetKeyState( VK_DOWN ) .and. !GetKeyState( VK_TAB )
RETURN( .T. )
ENDIF
Saludos cordiales Ing. Maggiro
Atte: Adrian C. C.
Re: Como controlar que no se salten los Gets con el Mouse
Esa es la idea ACCE69, nosotros hacemos que el usuario posea una buena herramienta
de trabajo operativo-productivo, bien por ser previsivo !!
de trabajo operativo-productivo, bien por ser previsivo !!
-
- Posts: 988
- Joined: Thu Nov 24, 2005 3:01 pm
- Location: Madrid, España
Re: Como controlar que no se salten los Gets con el Mouse
Julio César,
Un saludo
Creo que en los botones se puede añadir la cláusula CANCEL que permite que se ejecuten con el get inválido, como es el caso que mencionas. ¿Lo has probado?Maggiro wrote: NO colocar VALIDADORES en los Gets y ningun otro control de captura de datos.
Cuando colocas un validador a un GET, NO puedes salir de el mientras no se cumpla la
condicion,
lo cual te impide presionar en el boton CANCEL o CLOSE del dialogo, la unica forma de salir del
dialogo es presionando la tecla ESC.
Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
Re: Como controlar que no se salten los Gets con el Mouse
Carlos Mora :
La referencia corresponde a lo descrito por nuestro amigo RSalazarU:
Podrias escribir un ejemplo de lo que indicas?
<< cláusula CANCEL que permite que se ejecute con el get inválido >>
Saludos
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú
La referencia corresponde a lo descrito por nuestro amigo RSalazarU:
Podrias escribir un ejemplo de lo que indicas?
<< cláusula CANCEL que permite que se ejecute con el get inválido >>
Saludos
Julio César Gómez Cortéz
Godryc Experiencias
Lima Perú