Page 1 of 1

DICA - COMO TRABALHAR COM VETOR E GET

Posted: Wed Nov 15, 2006 8:04 am
by Dorneles
AUTOR : DORNELES
EMPRESA: SOFT-TRES
PAIS : BRASIL

Essa funcao, ja utilizo em clip 5.3 a muito tempo, passei a utilizar
tambem no fivewin, o grande diferencial dela, é o ganho de tempo no
desenvolvimento e sua utilizacao é bem simples, porque ela cria um
vetor do arquivo(dbf) com o nomes _, ela e semelhante a
DATABASE. É uma alternativa para quem não quer ficar declarando as variavel.

Para utilizar a D3 tem que ter um arquivo cabecalho.ch com os nomes dos
campo(D3CH gera o arquivo cabecalho com _)


Ex. CLIENTE.CH //conteudo do arquivo cabecalho
#xtranslate.cl_codigo => \[01]
#xtranslate.cl_nome => \[02]
#xtranslate.cl_endereco => \[03]
#xtranslate.cl_cidade => \[04]
#xtranslate.cl_cpf => \[05]

Code: Select all

#INCLUDE ".\Include\FiveWin.ch"
#INCLUDE ".\Include\cliente.Ch"
#include ".\Include\error.ch"

******************
FUNCTION CLIENTE()
******************
STATIC aGetCli  := {}
STATIC oGetCli  := {}
STATIC oDlg

IF !AbreDbfNtx({"Cliente"}) //abertura do arquivo
    RETURN NIL
END

Select Cliente
Set orde TO 1
GO BOTTOM
SKIP
aGetCli := D3GET() //carregar o vetor
oGetCli := D3GET() 

DEFINE DIALOG oDlg RESOURCE 1032 ;
  TITLE "Cadastro de Cliente"

    REDEFINE TBTNGET oGetCli.cl_codigo VAR aGetCli.cl_codigo ID 4095 PICTURE "@E 999999999999999"  OF oDlg ;
    VALID AchaCliente(@aGetCli) UPDATE

    REDEFINE TBTNGET oGetCli.cl_nome     VAR aGetCli.cl_nome     ID 4001 OF oDlg PICTURE "@!" 
    REDEFINE TBTNGET oGetCli.cl_endereco VAR aGetCli.cl_endereco ID 4002 OF oDlg PICTURE "@!"
    REDEFINE TBTNGET oGetCli.cl_cidade   VAR aGetCli.cl_cidade   ID 4003 OF oDlg PICTURE "@!"
    REDEFINE TBTNGET oGetCli.cl_cpf      VAR aGetCli.cl_cpf      ID 4004 OF oDlg PICTURE "@e 999.999.999-99" VALID CPF(@aGetCli)		

    REDEFINE BUTTON ID 4002 OF oDlg WHEN !lBotaoR ACTION (GravaCli(@aGetCli)) UPDATE
    REDEFINE BUTTON ID 701  OF oDlg WHEN !lBotaoR ACTION (Cancela(oGetCli,@aGetCli)) UPDATE CANCEL

ACTIVATE DIALOG oDlg CENTERED ON MOVE(oDlg:Center)

CLOSE Cliente

EndDialog()
oDlg:End()
Release All
SysRefresh()

RETURN

************************************
STATIC FUNCTION AchaCLIENTE(aGetCli)
************************************
  LOCAL lRetorno := .F.

  Select Cliente
  Set ORDE TO 2

  IF Cliente->(DbSeek(aGetCli.codigo))
     aGetCli := D3GET()
     lRetorno := .T.		
  ENDIF

  RefreshObj()

  RETURN(lFound)

*******************************************************************************
STATIC FUNCTION CPF(aGetCli)		
****************************

 IF ValCPF(aGetCli.cl_cpf)
    RETURN(.T.)
 ENDIF 

 RETURN(.F.)
*******************************************************************************
STATIC FUNCTION GravaCli(aGetCli,modo)
**************************************
LOCAL nCod := nID := 0


Select Cliente
IF modo = "I" //inclusao

   IF AddRec(10)
      aGetCli.cl_codigo := BuscaCodigo("Codigo",1)
      D3Repl(aGetCli)
      FINALI()
   ENDIF

ELSEIF modo = "A" //alteracao
   IF BloqReg(10)
      D3Repl(aGetCli)
      FINALI()
   ENDIF
ENDIF

lFound    := .F.
lDisableR := .F.
lBotaoR   := .T.

Select Cliente
Set ORDE TO 1
GO BOTTOM
SKIP
aGetCli := D3GET() 

oGetCli.cl_nome     :Refresh()
oGetCli.cl_endereco :Refresh()
oGetCli.cl_cidade   :Refresh()
oGetCli.cl_cpf      :Refresh()

oDlg:Update()        // Atualiza os gets...
oDlg:aEvalWhen()     // Reavalia os whens...

RETURN(.T.)
*******************************************************************************
FUNCTION D3Get()
****************
   //
   LOCAL aGets := ARRAY(FCOUNT())
   //
   AEVAL(aGets,{|x,nl| aGets[nl] := FIELDGET(nl)})
   //
RETURN aGets
*******************************************************************************
FUNCTION D3Repl(aGets)
**********************
   //
   AEVAL(aGets,{|x,nl| FIELDPUT(nl,x)})
   //
RETURN NIL
*******************************************************************************