Página 1 de 1
GET: como limpar ainda nele
Enviado: 19 Mai 2010 17:33
por Acéfalo Dias
ei colegas!!!
ao retornar de um VALID numa rotina de critica à um dado inserido, como fazer para deixá-lo limpinho para uma nova inserção?
valeu!

Re: GET: como limpar ainda nele
Enviado: 19 Mai 2010 18:23
por ANDRIL
Resumindo... Nesta função caso a palavra digitada não seja ANDRIL, apaga o que havia sido digitado e permanece no GET.
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.
Ate+,
Re: GET: como limpar ainda nele
Enviado: 19 Mai 2010 19:16
por gvc
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
read
Original
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
Re: GET: como limpar ainda nele
Enviado: 19 Mai 2010 23:19
por Acéfalo Dias
ei ANDRIL!!!
você abordou exatamente o que eu queria saber, puxa!
grato a todos! :)Pos
Re: GET: como limpar ainda nele
Enviado: 20 Mai 2010 21:33
por Acéfalo Dias
ei colegas!!!
estou tendo dificuldade para aplicar em alguns casos. como ficaria considerando esta alteração...
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)
...
explicando melhor... estes dados fazem parte das opções de pesquisa posterior (possuem seus índices) e a rotina de INCLUSÃO prevê as seguintes ações do usuário e respectivas reações:
a) preencheu corretamente o GET, a rotina criticou duplicidade e o dado não esta cadastrado:
.T.
b) preencheu .... ....e há duplicidade:
.F. (retorna ao GET sem limpar)
c) deixou em branco porque não sabe os dados ainda:
.T.
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).
valeu di novo!!! :*
GET: como limpar ainda nele
Enviado: 21 Mai 2010 09:01
por Pablo César
É bom você mostrar as regras que você considerou, servem de guia. Só para complementar... mais uma idéia. Quando eu tenho necessidade de limpar o campo vigente através de função de validação ou até mesmo condicional (uso do when), na função validadora, coloco no final keyboard chr(1)+chr(25) para campos tipo texto que simulam o Home + Ctrl Y para apagar conteúdo.
Re: GET: como limpar ainda nele
Enviado: 21 Mai 2010 10:20
por ANDRIL
No seu caso, basta usar a validação que te passei no final da sua rotina de critica.
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.
Entendi isso, se nao for, desculpe-me!
Ate+
Re: GET: como limpar ainda nele
Enviado: 21 Mai 2010 11:12
por alxsts
Olá!
Apesar dos exemplos já postados, segue outro.
Estou tratando apenas o campo CPF, para exemplo. Note a forma como recebo o campo: caracter, com máscara de CPF (PICT "@R 999.999.999-99" ) mas sem armazenar no campo (nem no DBF) a pontuação. Sugiro que você faça assim também, inclusive nos outros campos.
Outra boa prática é manter campos separados no DBF para o DDD e o número do telefone.
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
//------------------------------------------------------------------------------