Clodoaldo,
Acho que consegui contornar.
Veja, eu declarei a variável oGet como PRIVATE na function ReadModal
a na function valsen, MEMVAR oGet
lSis := .T.
@ 12,28 SAY "S E N H A: " GET KeySis PICTURE "@P" VALID VALSEN(@KeySis,10,"SISTEMA")=.T. COLOR "N/W"
READ
O exemplo da minha validação
FUNCTION VALSEN(cVar,nTam,cAcesso,nLin,nCol)
LOCAL lOk :=.F.,;
cPASS := ALLTRIM(PASS),;
cPASS1 := ALLTRIM(PASS1),;
cPASS2 := ALLTRIM(PASS2),;
cVarGet:= SPACE(nTam),;
cRead := READVAR()
MEMVAR oGet // Quem vem do getsys2
DEFAULT cAcesso TO "",;
nLin TO 0 ,;
nCol TO 0
cVarGet:=ALLTRIM(oGet:CARGO()) // Aqui eu pego o que o usuário digitou
IF cAcesso = "SISTEMA"
IF cVarGet = cPass .OR. cVarGet = cPass1 .OR. cVarGet = cPass2
IF cVarGet = cPass1 .OR. cVarGet = cPass2
lSis:=.T.
ELSE
lSis:=.F.
ENDIF
lOk:=.T.
ELSE
ALERTA("SENHA INVÁLIDA. VERIFIQUE.",2)
lOk:=.F.
ENDIF
ELSEIF cAcesso = "USUARIO"
DBSEEK(cVarGet,.T.)
IF !FOUND()
?? CHR(7)
ALERTA("SENHA INVÁLIDA. VERIFIQUE.",2)
lOk:=.F.
ELSE
IF !Tipo $ "GS"
?? CHR(7)
ALERTA("ACESSO SÓ PARA GERENTES. USUáRIO NÃO AUTORIZADO",2)
lOk:=.F.
ELSE
F0 := 1
lOk:=.T.
ENDIF
ENDIF
ELSEIF cAcesso = "CANCELA"
DBSEEK(cVarGet,.T.)
IF !FOUND()
?? CHR(7)
ALERTA("SENHA INEXISTENTE. CHAME O GERENTE.",2)
lOk:=.F.
ELSE
IF !Tipo $ "GS"
?? CHR(7)
ALERTA("SOMENTE O GERENTE PODE CANCELAR.",2)
lOk:=.F.
ELSE
SELECT CARDTIME
DBSEEK(DTOS(dHoje)+STR(EMPLOYEE->Codigo,5),.T.)
IF !FOUND()
TONE(300,1)
TONE(100,1)
TONE(300,1)
TONE(100,1)
ALERTA("FUNCIONÁRIO NÃO BATEU O PONTO, VERIFIQUE.",2)
SELECT EMPLOYEE
lOk:=.F.
ELSE
IF EMPTY(TimeIn1)
TONE(300,1)
TONE(100,1)
TONE(300,1)
TONE(100,1)
ALERTA("FUNCIONÁRIO NÃO BATEU O PONTO, VERIFIQUE.",2)
SELECT EMPLOYEE
lOk:=.F.
ENDIF
IF !EMPTY(TimeWork)
TONE(300,1)
TONE(100,1)
TONE(300,1)
TONE(100,1)
ALERTA("FUNCIONÁRIO JÁ FECHOU O PONTO, VERIFIQUE.",2)
SELECT EMPLOYEE
lOk:=.F.
ENDIF
SELECT EMPLOYEE
IF !Tipo $ "GS"
?? CHR(7)
ALERTA("SOMENTE O GERENTE PODE CANCELAR.",2)
lOk:=.F.
ENDIF
@ nLin,nCol SAY TRANS(Nombre,"@!")
lOk:=.T.
ENDIF
ENDIF
ENDIF
ENDIF
IF !lOk
oGet:CARGO:=SPACE(nTam)
&cRead.:=SPACE(nTam)
ENDIF
RETURN lOk
clodoaldomonteiro escreveu:Alexandre!
O problema é que na hora do valid o campo de senha ainda não foi modificado para receber o seu verdadeiro conteúdo, é só depois do read que eu pude fazer isso.
O que me travou aqui foi o seguinte:
Eu não consigo visualizar a o coneúdo do comando valid, ele é colocado dentro de um codeblock, para ser usado com a função eval(), assim: eval(oget:postblock,oget), essa é a rotina que valida o get.
Queria saber se você sabe como visualizar uma variável tipo code block, ai eu poderia fazer o valid.
Só sei que eval() excuta code block.