Por este medio les pido su amable ayuda de como controlar el get y en cada campo tengo validados ciertas condiciones, pero como controlar que del segundo campo me regrese al primer campo principal,espero haberme explicado y expongo el ejemplo :
- Code: Select all Expand view
- DEFINE DIALOG oDlg RESOURCE "ENTSAL" TITLE "Entrada y salida personal" COLOR CLR_BLUE
REDEFINE GET oGet[01] VAR cNomUsua ID 101 OF oDlg PICT "@" VALID V_NOMUSUA()
REDEFINE GET oGet[02] VAR cCveUsua ID 102 OF oDlg PICT "@!" VALID V_CVEUSUA() // Aqui en caso que me valide y teclee por error nombre de usuario, que me permita regresar al primer campo cNomUsua
REDEFINE GET oGet[03] VAR nCveMotiv ID 103 OF oDlg PICT "9" VALID V_CVEMOTIV() ACTION SelTipMot()
oGet[03]:bKeyDown := { |nKey| IIF( nKey == VK_F2,(oGet[03]:Assign(),Eval( oGet[03]:bAction )),"" ) }
oGet[03]:cToolTip := "Presiona F2"
REDEFINE SAY oSay[01] PROMPT cDescMot ID 151 OF oDlg FONT oFnt1 COLOR CLR_BLUE
REDEFINE GET oGet[04] VAR cObservac ID 104 OF oDlg PICT "@S30" VALID V_OBSERVAC()
REDEFINE BUTTON oBtn[01] ID 201 OF oDlg ACTION Reg_EntSal(oDlg, oLbx)
//------------------------------------------------------------------------------
STATIC FUNCTION V_NOMUSUA()
IF EMPTY(cNomUsua)
MsgAlert("Error: Teclear nombre usuario!")
oGet[01]:SetFocus()
RETURN .F.
ENDIF
RETURN (.T.)
//------------------------------------------------------------------------------
STATIC FUNCTION V_CVEUSUA()
(S01)->( DbSeek(cNomUsua+cCveUsua) )
IF (S01)->( !FOUND() )
MsgAlert("Error: Nombre de usuario ó clave no válido")
oGet[02]:SetFocus()
RETURN .F.
ENDIF
RETURN(.T.)
//------------------------------------------------------------------------------
STATIC FUNCTION V_CVEMOTIV()
(S02)->( DbSeek(STR(nCveMotiv,1)) )
IF (S02)->( FOUND() )
cDescMot := (S02)->DESCMOTI
ELSE
MsgAlert("Error: Código no encontrado")
RETURN .F.
ENDIF
oSay[01]:Refresh()
RETURN(.T.)
//------------------------------------------------------------------------------
STATIC FUNCTION V_OBSERVAC()
IF !GetKeyState( VK_RETURN ) .and. !GetKeyState( VK_DOWN ) .and. !GetKeyState( VK_TAB )
RETURN( .T. )
ENDIF
IF EMPTY(cObservac)
MsgAlert("Error: Favor teclear observación o entrada normal")
RETURN .F.
ENDIF
RETURN(.T.)
//------------------------------------------------------------------------------
FUNCTION SelTipMot()
LOCAL oDlg, oLbx
DbSelectArea(S02)
(S02)->( SetSeek(STR(nCveMotiv,1)) )
DEFINE DIALOG oDlg RESOURCE "SELCAT" TITLE "Catálogo tipos de motivos"
REDEFINE LISTBOX oLbx FIELDS STR((S02)->CVEMOTIV,1), SUBS((S02)->DESCMOTI,1,16);
HEADER "Código", "Descripción Motivo";
SIZES 30,50;
ALIAS (S02)->(ALIAS()) ID 101 OF oDlg
oLbx:aJustify := {0,0}
oLbx:lCellStyle := .T.
oLbx:nClrForeHead:= CLR_BLUE
oLbx:bLDblClick := {|| oDlg:END()}
oLbx:bKeyDown := {| nKey| IF(nKey = 13, oDlg:END(), .T.)}
ACTIVATE DIALOG oDlg
nCveMotiv := (S02)->CVEMOTIV
oGet[03]:Refresh()
Release oDlg, oLbx
RETURN NIL
Espero haberme explicado, que no recuerdo como adjuntar la imagen..
Saludos cordiales.
Atte: Adrian C. C.
acc69@hotmail.com