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! :D

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
//------------------------------------------------------------------------------