ao retornar de um VALID numa rotina de critica à um dado inserido, como fazer para deixá-lo limpinho para uma nova inserção?
valeu!
Moderador: Moderadores

Código: Selecionar todos
nome=space(20)
@00,00 get nome pict "@!" valid validar(nome)=.t.
read
function validar(par1)
*--pegue a variavel em questao atraves de readvar()
var=readvar()
if !"ANDRIL"$par1
&var=space(len(par1))
return .f.
endif
return .t.
Código: Selecionar todos
nome=space(20)
@00,00 get nome pict "@!" valid validar(nome) // =.t. Não é necessário comparar uma função que retorna valor lógico
readOriginal
Contains a value of any data type that is a copy of the value in the
Get variable at the time the Get object acquired input focus. This
value implements the Get:Undo message. Get:Original is meaningful
only while the Get has input focus. At all other times, it contains
NIL.
cTempVar := cOriginalVar := oGet:Original


Código: Selecionar todos
LOCAL cCpf:=Space(14), cRG:=Space(12), cTel:=Space(10)
---------------------------------------------------------------------------------
@00,00 GET cCpf PICT "999.999.999-99" VALID validar(cCpf)
@01,00 GET cRG PICT "99-999.999" VALID validar(cRG)
@02,00 GET cTel PICT "@R (99)9999-9999" VALID validar(cTel)
...

Código: Selecionar todos
function validar(par1)
*--pegue a variavel em questao atraves de readvar()
var=readvar()
//c) deixou em branco porque não sabe os dados ainda: .T.
if empty(par1)=.t.
return .t.
endif
//a) preencheu corretamente o GET, a rotina criticou duplicidade e o dado não //esta cadastrado: .T.
seek par1
if found()
return .t.
else
//b) preencheu .... ....e há duplicidade: .F. (retorna ao GET sem limpar)
return .f.
endif
//b) escreveu bobiça ou tava com preguiça e acha que pode deixar incompleto: .F. (retorna ao GET, deixa-o limpinho e brioso estalando de novo: Space(14) no caso da cCpf).
***aqui vc pode ate tirar o if porque se chegou ate aqui é pq as consideracoes acima nao foram executadas e retorna o GET limpo
//if !"ANDRIL"$par1
&var=space(len(par1))
return .f.
//endif
//return .t.

Código: Selecionar todos
#include "Common.CH"
#include "Inkey.CH"
LOCAL cCpf:=Space(11), cRG:=Space(12), cTel:=Space(10), GetList := {}
CLS
WHILE LastKey() != K_ESC
@10,10 GET cCpf PICT "@R 999.999.999-99" ;
VALID { |oGet| Validar( oGet, .T. ) }
@11,10 GET cRG PICT "99-999.999" VALID validar(cRG)
@12,10 GET cTel PICT "@R (99)9999-9999" VALID validar(cTel)
READ
ENDDO
RETURN
//------------------------------------------------------------------------------
Function validar( oGet, lShowMessage )
// Alexandre Santos - 27/06/2007 - 12:13
Local numero := oGet:varget(), parcial, soma, i, lRet := .F.
DEFAULT lShowMessage TO .F.
BEGIN SEQUENCE
If (ValType(numero) == "C") .And. (Len( AllTrim( numero) ) == 11)
For i:= 1 To 11
// aceitar apenas numeros
If (Asc(SubStr(numero, i, 1)) > 57 .OR. Asc(SubStr(numero, i, ;
1)) < 48)
Break
EndIf
Next
parcial:= SubStr(numero, 1, 9)
soma:= 0
For i:= 1 To Len(parcial)
soma:= Val(SubStr(numero, i, 1)) * (11 - i) + soma
Next
If (11 - soma % 11 > 9)
parcial:= parcial + "0"
Else
parcial:= parcial + SubStr(alltrim(Str(11 - soma % 11)), 1, 1)
EndIf
soma:= 0
For i:= 1 To Len(parcial)
soma:= Val(SubStr(numero, i, 1)) * (12 - i) + soma
Next
If (11 - soma % 11 > 9)
parcial:= parcial + "0"
Else
parcial:= parcial + SubStr(alltrim(Str(11 - soma % 11)), 1, 1)
EndIf
lRet := Parcial == numero
Endif
END SEQUENCE
If ! lRet
If lShowMessage
Alert( "CPF Inv lido." )
Endif
oGet:undo() // =================== desfaz a digitação
Endif
Return lRet
//------------------------------------------------------------------------------