Clipper On Line • Ver Tópico - TbrowseDb com Sql exemplos

TbrowseDb com Sql exemplos

Discussão sobre SQL

Moderador: Moderadores

 

TbrowseDb com Sql exemplos

Mensagempor andrelucass » 08 Abr 2020 21:17

Ola a todos

Estou migrando meus bancos de dados de dbf para postgresql, usando a classe do rodrigo moreno, tenho um tbrowsedb usando dbf que faz a pesquisa no browse, a medida que o usuario vai digitando.

Gostaria de saber se alguém tem uma rotina dessa pronto, ou algum exemplo.

Atenciosamente
André Lucas Souza
andrelucass
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 145
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

TbrowseDb com Sql exemplos

Mensagempor andrelucass » 13 Abr 2020 11:25

Bom dia a todos

Alguém poderia me ajudar, só esta faltando isso para atualizar o sistema no cliente

Atenciosamente
André Lucas Souza
andrelucass
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 145
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

TbrowseDb com Sql exemplos

Mensagempor JoséQuintas » 13 Abr 2020 12:03

Isso não é vinculado ao banco de dados, mas ao que usa pra recuperar informações dele.
Dizer que é postgreSQL não é suficiente.
E dizer que usa a classe do rodrigo moreno... aí piorou... só quem usa a classe pode dizer.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

TbrowseDb com Sql exemplos

Mensagempor andrelucass » 13 Abr 2020 13:46

Boa tarde

Você usa algo parecido
andrelucass
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 145
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

TbrowseDb com Sql exemplos

Mensagempor Fernando queiroz » 13 Abr 2020 21:24

/*
TITULO     : SISTEMA DE GESTÇO DE COMERCIO
DATA       : 09/03/2020
PROGRAMA   : CADASTROCLIENTES_MARIADB.PRG
COMENTARIO : CADASTRO/RELATORIO (/Clientes)/
*/
//#pragma -w0
//#pragma -es0

#include "hwgui.ch"
#include "SEFAZ_CIDADE.CH"
#include "SEFAZ_UF.CH"
#define PDFCLASS_PORTRAIT  1
#define PDFCLASS_LANDSCAPE 2
#define PDFCLASS_TXT       3
#define PDFCLASS_ROLLS     4

***************************************************
FUNCTION CADASTROCLIENTES( oServer )
***************************************************
LOCAL oDlg ;
   , oLabel1, oLabel4 ;
   , oBrowse1 ;
   , oToolbar1 ;
   , oColuna, bColorBlock
   
   MEMVAR->nCombo1:= 0
   MEMVAR->cProgressKey:=""
   MEMVAR->cConsulta:=""
   MEMVAR->cAlvo_Consulta:="CLIENTES_NRAZ_SOC"
   MEMVAR->aVENBLO:= {"0 - Liberado","1 - Bloqueado"}
   MEMVAR->aISENTO:= {"1 - CONTRIBUINTE DE ICMS","2 - CONTRIBUINTE ISENTO","9 - NAO CONTRIBUINTE"}

******************************************************************************************************************************************************

   INIT DIALOG oDlg TITLE "Cadastro de Clientes"  ;
      ICON MEMVAR->SGC_ICON  ;
      AT 0, 0 SIZE 1008,600 CLIPPER  NOEXIT  ;
      ON INIT {|| onDlgInit( oDlg ) }
   
   @ 4,70 BROWSE oBrowse1 ARRAY OF oDlg SIZE 1000,497 STYLE WS_BORDER + WS_VSCROLL +WS_HSCROLL ;
         ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS ;
         ON CLICK {|| oBrowse1_onClick( oDlg, oServer ) } ;
         ON KEYDOWN {|oBrowse1,nKeyPress| oBrowse1_onKeyDown( oBrowse1,nKeyPress, oDlg, oServer ) }

      oBrowse1:oStyleHead := HStyle():New( { 0xffffff, 0xbbbbbb }, 1,, 0.4, 16759929 )
      oBrowse1:oFont := HFont():Add( '',0,-15,700,,,)
      oBrowse1:freeze := 2
      oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY CLIENTES_NRAZ_SOC LIMIT 500" )

      oBrowse1:AddColumn( HColumn():New( "CODIGO",hwg_ColumnArBlock(),"C",09,0,.F.,,,,,,,,;
               {|| oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY CLIENTES_UCLIENTE" ), MEMVAR->cAlvo_Consulta:="CLIENTES_UCLIENTE",obrowse1:Refresh(), hwg_WriteStatus( oDlg,3,"Ordem: CODIGO") } ,,,,))
      oBrowse1:AddColumn( HColumn():New( "NOME CLIENTE",hwg_ColumnArBlock(),"C",65,0,.F.,,,,,,,,;
               {|| oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY CLIENTES_NRAZ_SOC" ), MEMVAR->cAlvo_Consulta:="CLIENTES_NRAZ_SOC", obrowse1:Refresh(), hwg_WriteStatus( oDlg,3,"Ordem: NOME CLIENTE") } ,,,,))
      oBrowse1:AddColumn( HColumn():New( "CPF/CNPJ",hwg_ColumnArBlock(),"C",18,0,.F.,,,,,,,,;
               {|| oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY CLIENTES_CPFCGC"), MEMVAR->cAlvo_Consulta:="CLIENTES_CPFCGC", obrowse1:Refresh(), hwg_WriteStatus( oDlg,3,"Ordem: CPF/CNPJ") } ,,,,))
      oBrowse1:AddColumn( HColumn():New( "FONE", hwg_ColumnArBlock(),"C",18,0,.F.,,,,,,,,;
               {|| oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY CLIENTES_FONE"), MEMVAR->cAlvo_Consulta:="CLIENTES_FONE", obrowse1:Refresh(), hwg_WriteStatus( oDlg,3,"Ordem: FONE") } ,,,,))
      oBrowse1:AddColumn( HColumn():New('E-Mail', hwg_ColumnArBlock() ,'C',60, 0 ,.F.,,,,,,,,))
      oBrowse1:AddColumn( HColumn():New( "Insc.Estadual",hwg_ColumnArBlock(),"C",18,0,.F.,,, ) )
      oBrowse1:AddColumn( HColumn():New( "TC",hwg_ColumnArBlock(),"C",4,0,.F., ) )
      oBrowse1:AddColumn( HColumn():New( "Logradouro",hwg_ColumnArBlock(),"C",60,0,.F., ) )
      oBrowse1:AddColumn( HColumn():New( "Numero", hwg_ColumnArBlock(),'N',9,0,.F.,1,2, ) )
      oBrowse1:AddColumn( HColumn():New( "Complemento",hwg_ColumnArBlock(),"C",60,0,.F., ) )
      oBrowse1:AddColumn( HColumn():New('Bairro', hwg_ColumnArBlock() ,'C',60, 0 ,.F.,,,,,,,,,,,,,))
      oBrowse1:AddColumn( HColumn():New('CEP', hwg_ColumnArBlock() ,'C',12, 0 ,.F.,,,,,,,,,,,,,))
      oBrowse1:AddColumn( HColumn():New('Cod.Pais', hwg_ColumnArBlock() ,'C',7, 0 ,.F.,,,,,,,,,,,,,))
      oBrowse1:AddColumn( HColumn():New('Pais', hwg_ColumnArBlock() ,'C',50, 0 ,.F.,,,,,,,,,,,,))
      oBrowse1:AddColumn( HColumn():New('UF', hwg_ColumnArBlock() ,'C',4, 0 ,.F.,,,,,,,,,,,,))
      oBrowse1:AddColumn( HColumn():New('Cod.Mun.', hwg_ColumnArBlock() ,'C',7, 0 ,.F.,,,,,,,,,,,,))
      oBrowse1:AddColumn( HColumn():New('Municipio', hwg_ColumnArBlock() ,'C',50, 0 ,.F.,,,,,,,,,,,,))
      oBrowse1:AddColumn( HColumn():New('Contato', hwg_ColumnArBlock() ,'C',50, 0 ,.F.,,,,,,,,,,,,))
      oBrowse1:AddColumn( HColumn():New('Operador/Computador DATA/HORA', hwg_ColumnArBlock() ,'C',60, 0 ,.F.,,,,,,,,))
      oBrowse1:AddColumn( HColumn():New('CLIENTES ID', hwg_ColumnArBlock() ,'N',14, 0 ,.F.,1,2,,,,,,;
               {|| oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY CLIENTES_ID"), MEMVAR->cAlvo_Consulta:="CLIENTES_ID", obrowse1:Refresh(), hwg_WriteStatus( oDlg,3,"Ordem: CHAVE ID") } ,,,,))

      bColorBlock := {|| {0,16777215,, } }      
      FOR EACH oColuna IN oBrowse1:aColumns
         oColuna:bColorBlock := bColorBlock
      NEXT

   @ 1,-1 TOOLBAR oToolbar1  SIZE hwg_Getdesktopwidth(),43     
               
      oToolbar1:AddButton("CMDINSERT", , 0, 16, "Inclui" ,{||CADCLIENTES( oServer, , "INCLUIR"  ), oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY " + MEMVAR->cAlvo_Consulta ), obrowse1:REFRESH()},'Incluir novo Cliente','', "oToolbutton1")
      oToolbar1:AddButton("CMDEDIT", , 0, 16, "Altera"   ,{||CADCLIENTES( oServer, LTRIM(str(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 20])), "ALTERAR"  ), oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY " + MEMVAR->cAlvo_Consulta ), obrowse1:REFRESH()},'Altera os dados do Cliente','', "oToolbutton2")
      oToolbar1:AddButton("CMDDELETE", , 0, 16, "Exclui" ,{||CADCLIENTES_EXCLUI( oDlg, oServer ), oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY " + MEMVAR->cAlvo_Consulta ), obrowse1:REFRESH() },'Exclui os dados do Cliente','', "oToolbutton3")
//      oToolbar1:AddButton("CLFLBMP", , 4, 16, "Consulta" ,{||CONSULTACADCLIENTES( )},'Consulta dados do Cadastro de Clientes','', "oToolbutton5")
      oToolbar1:AddButton("rel_print",, 4, 128, "Relatórios" ,,, {{"Cadastro de Clientes ", 4,{|| RELATORIO_CLIENTES( oServer ) }}};
                                                   , "oToolbutton6")
      oToolbar1:AddButton("EXIT16BMP", , 4, 16, "Sair" ,{|| oDlg:Close() },'Sair da rotina','', "oToolbutton7")
      oToolbar1:CreateTool()

    ADD STATUS PANEL TO oDlg HEIGHT 30  PARTS 200,120,300
   @ 4,45 SAY oLabel1 CAPTION "Pesquisar"  SIZE 138,25 ;
      STYLE SS_CENTER +WS_DLGFRAME    
   @ 150,45 SAY oLabel4 CAPTION "" SIZE 410,25 ;
        STYLE WS_BORDER;
        COLOR 16777215  BACKCOLOR 255

   ACTIVATE DIALOG oDlg CENTER   
   
RETURN NIL

******************************************************************
STATIC FUNCTION CARREGA_CLIENTES( oServer, cAlvo_Consulta )
******************************************************************
LOCAL aResult :={};
   , oQuery;
   , cQuery
   
   cQuery := "SELECT CLIENTES_UCLIENTE, ";
               + "CLIENTES_NRAZ_SOC, ";
               + "CLIENTES_CPFCGC, ";
               + "CLIENTES_FONE, ";
               + "CLIENTES_EMAIL, ";
               + "CLIENTES_INSEST, ";
               + "CLIENTES_ISENTO, ";
               + "CLIENTES_ENDER, ";
               + "CLIENTES_NUMERO, ";
               + "CLIENTES_COMPLEM, ";
               + "CLIENTES_BAIR, ";
               + "CLIENTES_CEP, ";
               + "CLIENTES_CODPAIS, ";
               + "CLIENTES_PAIS, ";
               + "CLIENTES_UF, ";
               + "CLIENTES_CODMUN, ";
               + "CLIENTES_CIDADE, ";
               + "CLIENTES_CONTATO, ";
               + "CLIENTES_QUEM_BLOQ, ";
               + "CLIENTES_ID ";
               + "from CLIENTES ";
               + cAlvo_Consulta

   oQuery := oServer:Execute(cQuery)

   DO WHILE ! oQuery:Eof()
      aAdd( aResult, {oQuery:Fields( "CLIENTES_UCLIENTE" ):Value,;
                  oQuery:Fields( "CLIENTES_NRAZ_SOC" ):Value,;
                  oQuery:Fields( "CLIENTES_CPFCGC" ):Value,;
                  oQuery:Fields( "CLIENTES_FONE" ):Value,;
                  oQuery:Fields( "CLIENTES_EMAIL" ):Value,;
                  oQuery:Fields( "CLIENTES_INSEST" ):Value,;
                  oQuery:Fields( "CLIENTES_ISENTO" ):Value,;
                  oQuery:Fields( "CLIENTES_ENDER" ):Value,;
                  oQuery:Fields( "CLIENTES_NUMERO" ):Value,;
                  oQuery:Fields( "CLIENTES_COMPLEM" ):Value,;
                  oQuery:Fields( "CLIENTES_BAIR" ):Value,;
                  oQuery:Fields( "CLIENTES_CEP" ):Value,;
                  oQuery:Fields( "CLIENTES_CODPAIS" ):Value,;
                  oQuery:Fields( "CLIENTES_PAIS" ):Value,;
                  oQuery:Fields( "CLIENTES_UF" ):Value,;
                  oQuery:Fields( "CLIENTES_CODMUN" ):Value,;
                  oQuery:Fields( "CLIENTES_CIDADE" ):Value,;
                  oQuery:Fields( "CLIENTES_CONTATO" ):Value,;
                  oQuery:Fields( "CLIENTES_QUEM_BLOQ" ):Value,;
                  oQuery:Fields( "CLIENTES_ID" ):Value} )

      oQuery:MoveNext()
   ENDDO
   oQuery:Close()   
      
RETURN aResult

******************************************************************
STATIC FUNCTION onDlgInit( oDlg )
******************************************************************
      oDlg:oToolbar1:oToolbutton1:ENABLE()
      oDlg:oToolbar1:oToolbutton2:ENABLE()
      IF strzero(M->NIV_ACESSO,1,0)$"689"
         oDlg:oToolbar1:oToolbutton3:ENABLE()
      ENDIF

   hwg_WriteStatus( oDlg,1,"Tabela: CLIENTES")
    hwg_WriteStatus( oDlg,3,"Ordem: NOME CLIENTE")   
RETURN Nil

******************************************************
STATIC FUNCTION CADCLIENTES_EXCLUI( oDlg, oServer )
******************************************************
LOCAL cQuery;
   , cQuery1;
   
   IF hwg_MsgYesNo("DESEJA excluir o Cliente, Tem certeza disso ?","Excluindo Cliente")
      cQuery1:="DELETE FROM clientes WHERE CLIENTES_Id='" + LTRIM(str(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 20])) + "'"
      oServer:Execute(cQuery1)

      cQuery:=[INSERT INTO logtrans (LOGTRANS_OPERADOR, LOGTRANS_COMPUTADOR, LOGTRANS_TEXTO ) VALUES ( "] + M->OPERADOR + [", "] + rtrim(hwg_GetComputerName()) + [", "] + cQuery1 + (oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 2]) + [")]
      oServer:Execute(cQuery)      
      
   ENDIF

RETURN NIL

***********************************************************
STATIC FUNCTION oBrowse1_onClick( oDlg, oServer )
***********************************************************
   IF hwg_LastKey() ==   MK_LBUTTON
      CADCLIENTES( oServer, LTRIM(str(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 20])), "CONSULTAR"  )
      oDlg:oBrowse1:Refresh()
   ENDIF
RETURN .T.


*******************************************************************
STATIC FUNCTION oBrowse1_onKeyDown( oBrowse1, nKey, oDlg, oServer )
*******************************************************************
LOCAL nPosicao:=0;
   , nKeyPress:=nkey;
   , cConsulta;
   
   KSETCAPS(.T.);

   IF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ "34|33|37|38|39|40|20|16"
      MEMVAR->cProgressKey:=""
      oDlg:oLabel4:settext(MEMVAR->cProgressKey)
      RETURN .T.
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [90]
      nKeyPress := 90
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [96]
      nKeyPress := 48
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [97]
      nKeyPress := 49
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [98]
      nKeyPress := 50
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [99]
      nKeyPress := 51
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [100]
      nKeyPress := 52
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [101]
      nKeyPress := 53
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [102]
      nKeyPress := 54
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [103]
      nKeyPress := 55
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [104]
      nKeyPress := 56
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [105]
      nKeyPress := 57
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [106]
      nKeyPress := 42
   ELSEIF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ [190]
      nKeyPress := 46
   ELSEIF nKeyPress == Asc("8") .AND. hwg_isCtrlShift( .F.,.T. )
      nKeyPress := 42      
   ENDIF   
   
   IF  nKeyPress = VK_RETURN
      CADCLIENTES( oServer, LTRIM(str(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 20])), "CONSULTAR"  )
      oDlg:oBrowse1:Refresh()
      RETURN .T.   
   ELSEIF nKeyPress = VK_ESCAPE
      oDlg:Close()      
      RETURN .T.
   ENDIF
      
   If nKeyPress # 8
      MEMVAR->cProgressKey += Chr(nKeyPress)
      nPosicao:=AScan(oDlg:oBrowse1:aArray,MEMVAR->cProgressKey)
      oDlg:oLabel4:settext(MEMVAR->cProgressKey)
      cConsulta:= "WHERE " + MEMVAR->cAlvo_Consulta + " LIKE '" + MEMVAR->cProgressKey + "%'" + " ORDER BY " + MEMVAR->cAlvo_Consulta
      oBrowse1:aArray := CARREGA_CLIENTES( oServer, cConsulta )
      oDlg:obrowse1:REFRESH()
   ELSEIF nKeyPress = 8 .AND. Len(MEMVAR->cProgressKey) >= 1
      MEMVAR->cProgressKey:=Left(MEMVAR->cProgressKey,Len(MEMVAR->cProgressKey) - 1)
      nPosicao:=AScan(oDlg:oBrowse1:aArray,MEMVAR->cProgressKey)
      oDlg:oLabel4:settext(MEMVAR->cProgressKey)
      cConsulta:= "WHERE " + MEMVAR->cAlvo_Consulta + " LIKE '" + MEMVAR->cProgressKey + "%'" + " ORDER BY " + MEMVAR->cAlvo_Consulta
      oBrowse1:aArray := CARREGA_CLIENTES( oServer, cConsulta )
      oDlg:obrowse1:REFRESH()
   ENDIF   
   IF nPosicao # 0
      cConsulta:= "WHERE " + MEMVAR->cAlvo_Consulta + " LIKE '" + MEMVAR->cProgressKey + "%'" + " ORDER BY " + MEMVAR->cAlvo_Consulta
      oBrowse1:aArray := CARREGA_CLIENTES( oServer, cConsulta )
      oDlg:obrowse1:REFRESH()
   ENDIF 

return .T.   
   
***********************************************************
STATIC FUNCTION CADCLIENTES( oServer, cClientes_Id, cAcao )
***********************************************************

LOCAL     oDlg;
      , oLine1;
      , oEdit1, oEdit2, oEdit3, oEdit4, oEdit5, oEdit6, oEdit7, oEdit8, oEdit9, oEdit10, oEdit11, oEdit12, oEdit13, oEdit14 ;
      , oEdit18;
      , oLabel1, oLabel2, oLabel3, oLabel4, oLabel5, oLabel6, oLabel7, oLabel8, oLabel9, oLabel10, oLabel11, oLabel12, oLabel13, oLabel14, oLabel15 ;
      , oLabel16, oLabel17, oLabel18, oLabel19, oLabel20, oLabel21, oLabel23, oLabel24, oLabel25 ;
      , oOwnerbutton1, oOwnerbutton2, oOwnerbutton4;
      , oCombo1, oCombo2, oCombo3, oCombo4, oCombo6 ;
      , oLink1, oLink2 ;
      , oPAIS, oUF, oCIDADE;
      , oQuery;
      , cQuery;
      , oGroup1;
      
      MEMVAR->aPAIS:= {}   
      MEMVAR->aUF:= {}
      MEMVAR->aMunicipios:= {}
      MEMVAR->nCombo1 := 1
      MEMVAR->nCombo2 := 1
      MEMVAR->nCombo3 := 1
      MEMVAR->nCombo4 := 1      
      MEMVAR->nCombo5 := 1
      MEMVAR->nCombo6 := 1

   hb_Default( @cAcao, "CONSULTAR" )
   hb_Default( @cClientes_Id, "0" )
      
   IF cAcao = "INCLUIR"
      MEMVAR->ID         :=0
      MEMVAR->TIPCLI     :=1
      MEMVAR->NRAZ_SOC   :=SPACE(60)
      MEMVAR->TIPDOC     :=1
      MEMVAR->CPFCGC     :=SPACE(18)
      MEMVAR->CPFANT      :="999999999999999999"
      MEMVAR->INSEST     :=SPACE(18)
      MEMVAR->INSMUN     :=SPACE(18)
      MEMVAR->ISENTO     :=SPACE(01)
      MEMVAR->SUFRAMA    :=SPACE(18)
      MEMVAR->EMAIL      :=SPACE(60)
      MEMVAR->ENDER      :=SPACE(60)
      MEMVAR->NUMERO     :=0
      MEMVAR->COMPLEM    :=SPACE(60)
      MEMVAR->BAIR       :=SPACE(50)
      MEMVAR->CEP        :=space(09)
      MEMVAR->CODPAIS    :="1058"
      MEMVAR->PAIS       :="BRASIL"
      MEMVAR->UF         :="AC"
      MEMVAR->CIDADE     :="RIO BRANCO"
      MEMVAR->CODMUN     :="1200401"
      MEMVAR->FONE       :=SPACE(14)
      MEMVAR->CONTATO    :=SPACE(80)
      MEMVAR->LIMCRE     :=0.00
      MEMVAR->TOTCRE     :=0.00 
      MEMVAR->VENBLO     :="1"
      MEMVAR->DATCAD     :=M->DAT_HOJE
      MEMVAR->DATALT     :=M->DAT_HOJE
      MEMVAR->USUALT     :=M->OPERADOR
      MEMVAR->TAXCLI     :=0.00
      MEMVAR->NUMPAR     :=0.00
      MEMVAR->PERDES     :=0.00
      MEMVAR->VALMIN     :=0.00
   ELSE
      cQuery := "SELECT  CLIENTES_ID, ";
                  + "CLIENTES_TIPCLI, ";
                  + "CLIENTES_NRAZ_SOC, ";
                  + "CLIENTES_TIPDOC, ";
                  + "CLIENTES_CPFCGC, ";
                  + "CLIENTES_INSEST, ";
                  + "CLIENTES_INSMUN, ";
                  + "CLIENTES_ISENTO, ";
                  + "CLIENTES_SUFRAMA, ";
                  + "CLIENTES_EMAIL, ";
                  + "CLIENTES_ENDER, ";
                  + "CLIENTES_NUMERO, ";
                  + "CLIENTES_COMPLEM, ";
                  + "CLIENTES_BAIR, ";
                  + "CLIENTES_CEP, ";
                  + "CLIENTES_CODPAIS, ";
                  + "CLIENTES_PAIS, ";
                  + "CLIENTES_UF, ";
                  + "CLIENTES_CIDADE, ";
                  + "CLIENTES_CODMUN, ";
                  + "CLIENTES_FONE, ";
                  + "CLIENTES_CONTATO, ";
                  + "CLIENTES_LIMCRE, ";
                  + "CLIENTES_TOTCRE, ";
                  + "CLIENTES_VENBLO, ";
                  + "CLIENTES_DATCAD, ";
                  + "CLIENTES_DATALT, ";
                  + "CLIENTES_USUALT, ";
                  + "CLIENTES_TAXCLI, ";
                  + "CLIENTES_NUMPAR, ";
                  + "CLIENTES_PERDES, ";
                  + "CLIENTES_VALMIN ";
                  + "FROM CLIENTES ";
                  + "WHERE CLIENTES_ID = ";
                  + "'" + cClientes_Id + "'"
               
      oQuery := oServer:Execute(cQuery)         
   
      MEMVAR->ID         :=cClientes_Id
      MEMVAR->TIPCLI     :=VAL(oQuery:Fields( "CLIENTES_TIPCLI" ):Value)
      MEMVAR->NRAZ_SOC   :=oQuery:Fields( "CLIENTES_NRAZ_SOC" ):Value
      MEMVAR->TIPDOC     :=VAL(oQuery:Fields( "CLIENTES_TIPDOC" ):Value)
      MEMVAR->CPFCGC     :=oQuery:Fields( "CLIENTES_CPFCGC" ):Value
      MEMVAR->INSEST     :=oQuery:Fields( "CLIENTES_INSEST" ):Value
      MEMVAR->INSMUN     :=oQuery:Fields( "CLIENTES_INSMUN" ):Value
      MEMVAR->ISENTO     :=oQuery:Fields( "CLIENTES_ISENTO" ):Value
      MEMVAR->SUFRAMA    :=oQuery:Fields( "CLIENTES_SUFRAMA" ):Value
      MEMVAR->EMAIL      :=oQuery:Fields( "CLIENTES_EMAIL" ):Value
      MEMVAR->ENDER      :=oQuery:Fields( "CLIENTES_ENDER" ):Value
      MEMVAR->NUMERO     :=oQuery:Fields( "CLIENTES_NUMERO" ):Value
      MEMVAR->COMPLEM    :=oQuery:Fields( "CLIENTES_COMPLEM" ):Value
      MEMVAR->BAIR       :=oQuery:Fields( "CLIENTES_BAIR" ):Value
      MEMVAR->CEP        :=oQuery:Fields( "CLIENTES_CEP" ):Value
      MEMVAR->CODPAIS    :=oQuery:Fields( "CLIENTES_CODPAIS" ):Value
      MEMVAR->PAIS       :=oQuery:Fields( "CLIENTES_PAIS" ):Value
      MEMVAR->UF         :=oQuery:Fields( "CLIENTES_UF" ):Value
      MEMVAR->CIDADE     :=oQuery:Fields( "CLIENTES_CIDADE" ):Value
      MEMVAR->CODMUN     :=oQuery:Fields( "CLIENTES_CODMUN" ):Value
      MEMVAR->FONE       :=oQuery:Fields( "CLIENTES_FONE" ):Value
      MEMVAR->CONTATO    :=oQuery:Fields( "CLIENTES_CONTATO" ):Value
      MEMVAR->LIMCRE     :=oQuery:Fields( "CLIENTES_LIMCRE" ):Value
      MEMVAR->TOTCRE     :=oQuery:Fields( "CLIENTES_TOTCRE" ):Value
      MEMVAR->VENBLO     :=oQuery:Fields( "CLIENTES_VENBLO" ):Value
      MEMVAR->DATCAD     :=oQuery:Fields( "CLIENTES_DATCAD" ):Value
      MEMVAR->DATALT     :=M->DAT_HOJE
      MEMVAR->USUALT     :=M->OPERADOR
      MEMVAR->TAXCLI     :=oQuery:Fields( "CLIENTES_TAXCLI" ):Value
      MEMVAR->NUMPAR     :=oQuery:Fields( "CLIENTES_NUMPAR" ):Value
      MEMVAR->PERDES     :=oQuery:Fields( "CLIENTES_PERDES" ):Value
      MEMVAR->VALMIN     :=oQuery:Fields( "CLIENTES_VALMIN" ):Value
      
      MEMVAR->CPFANT       :=MEMVAR->CPFCGC
   ENDIF

   FOR EACH oPAIS IN SEFAZ_CIDADE
      IF oPAIS[1] == "EX"
         AAdd(MEMVAR->aPAIS,oPAIS[3])
      ENDIF
   NEXT
   
   FOR EACH oUF IN SEFAZ_UF
      AAdd(MEMVAR->aUF,oUF[1])
   NEXT
   
   FOR EACH oCIDADE IN SEFAZ_CIDADE
      IF oCIDADE[1] == MEMVAR->UF
         AAdd(MEMVAR->aMunicipios,oCIDADE[3])
      ENDIF
   NEXT
      
********************************************************************************

  INIT DIALOG oDlg TITLE "Cadastro de Cliente - "+cAcao ;
      ICON MEMVAR->SGC_ICON  ;
      AT 0, 0 SIZE 1008,600 CLIPPER  NOEXIT 
      
   hwg_SetColorinFocus( oDlg,, 13172680 )

   @ 0,175 LINE oLine1 LENGTH 1008
        oLine1:Anchor := 11
   @ 415,15 SAY oLink1 CAPTION "http://www.sintegra.gov.br"  ;
        LINK 'http://www.sintegra.gov.br/new_bv.html'  SIZE 180,22       
   @ 79,17 SAY oLabel2 CAPTION "CNPJ/CPF"  SIZE 67,21       
   @ 150,15 GET oEdit2 VAR MEMVAR->CPFCGC SIZE 201,24 ;
        STYLE ES_LEFT  MAXLENGTH 14   VALID  {|| VERIFICA_CPFCNPJ( oServer, MEMVAR->CPFCGC, MEMVAR->CPFANT, cAcao ) }
      
   @ 16,49 SAY oLabel1 CAPTION "Nome/Razão Social"  SIZE 131,21
   @ 150,47 GET oEdit1 VAR MEMVAR->NRAZ_SOC SIZE 657,24 STYLE ES_UPPERCASE PICTURE '@!' MAXLENGTH 60 VALID  {|| VERIFICA_NRAZ_SOC( oDlg, cAcao ) }
        oEdit1:Anchor := 11
   @ 25,81 SAY oLabel3 CAPTION "Inscrição Estadual"  SIZE 122,21   
   @ 150,79 GET oEdit3 VAR MEMVAR->INSEST SIZE 202,24 ;
        STYLE ES_LEFT  MAXLENGTH 15  ;
        VALID  {|| VERIFICA_INCRICAO_ESTADUAL( ) }
      
   @ 404,81 SAY oLabel7 CAPTION "Tipo Contribuinte"  SIZE 112,21
   @ 521,79 GET COMBOBOX oCombo1 VAR MEMVAR->nCombo1 ;
        ITEMS MEMVAR->aISENTO  ;
        SIZE 218,24 
   @ 18,113 SAY oLabel4 CAPTION "Inscrição Municipal"  SIZE 128,21       
   @ 150,111 GET oEdit4 VAR MEMVAR->INSMUN SIZE 202,24 ;
        STYLE ES_RIGHT  MAXLENGTH 15       
   @ 397,113 SAY oLabel5 CAPTION "Inscrição Suframa"  SIZE 119,21      
   @ 521,111 GET oEdit5 VAR MEMVAR->SUFRAMA SIZE 201,24 ;   
        STYLE ES_RIGHT  MAXLENGTH 15   
   @ 101,146 SAY oLabel6 CAPTION "E-Mail"  SIZE 43,21      
   @ 149,144 GET oEdit6 VAR MEMVAR->EMAIL SIZE 657,24 STYLE ES_LOWERCASE MAXLENGTH 60 
        oEdit6:Anchor := 11       
   @ 69,185 SAY oLabel9 CAPTION "CEP"  SIZE 29,24 
   @ 105,183 GET oEdit8 VAR MEMVAR->CEP SIZE 80,24  STYLE ES_RIGHT PICTURE '99999-999'  MAXLENGTH 9
   
   @ 246,187 SAY oLink2 CAPTION "http://www.correios.com.br"  ;
        LINK 'http://www.buscacep.correios.com.br/sistemas/buscacep/buscaEndereco.cfm'  SIZE 181,22   
   
   @ 22,216 SAY oLabel10 CAPTION "Logradouro"  SIZE 76,24 
   @ 105,214 GET oEdit9 VAR MEMVAR->ENDER SIZE 703,24 STYLE ES_UPPERCASE PICTURE '@!' MAXLENGTH 60 
        oEdit9:Anchor := 11   
   @ 45,248 SAY oLabel11 CAPTION "Numero"  SIZE 53,21
   @ 105,246 GET oEdit11 VAR MEMVAR->NUMERO SIZE 80,24 ;
        STYLE ES_RIGHT  MAXLENGTH 20
   @ 7,280 SAY oLabel8 CAPTION "Complemento"  SIZE 91,24
   @ 104,278 GET oEdit7 VAR MEMVAR->COMPLEM SIZE 490,24 STYLE ES_UPPERCASE PICTURE '@!' MAXLENGTH 60       
   @ 56,311 SAY oLabel12 CAPTION "Bairro"  SIZE 42,24 
   @ 105,309 GET oEdit13 VAR MEMVAR->BAIR SIZE 490,24 STYLE ES_UPPERCASE PICTURE '@!' MAXLENGTH 50
   @ 67,341 SAY oLabel13 CAPTION "Pais"  SIZE 31,24 
   @ 105,339 GET COMBOBOX oCombo4 VAR MEMVAR->nCombo4 ;
        ITEMS MEMVAR->aPAIS  ;
        SIZE 259,24  DISPLAYCOUNT 8   
   @ 78,376 SAY oLabel14 CAPTION "UF"  SIZE 20,24
   @ 105,374 GET COMBOBOX oCombo2 VAR MEMVAR->nCombo2 ;
        ITEMS MEMVAR->aUF  ;
        SIZE 65,24  DISPLAYCOUNT 8 ;
      ON CHANGE {|| oCombo3:SetItem( Ascan(CARREGA_MUNICIPIOS( MEMVAR->aUF[MEMVAR->nCombo2] ),RTRIM(MEMVAR->CIDADE) ) ), oCombo3:REFRESH() }
      
   @ 33,407 SAY oLabel15 CAPTION "Municipio"  SIZE 65,24
   @ 105,405 GET COMBOBOX oCombo3 VAR MEMVAR->nCombo3  ITEMS MEMVAR->aMunicipios  ;
        SIZE 259,24 DISPLAYCOUNT 7 
      
   @ 40,436 SAY oLabel16 CAPTION "Telefone"  SIZE 58,24       
   @ 105,434 GET oEdit10 VAR MEMVAR->FONE SIZE 260,24  MAXLENGTH 14  ;
         VALID  {|| VERIFICA_TELEFONE(  ) } 
   
   @ 47,465 SAY oLabel17 CAPTION "Contato"  SIZE 51,24
   @ 105,463 GET oEdit14 VAR MEMVAR->CONTATO SIZE 495,24  MAXLENGTH 80 


   @ 355,14 OWNERBUTTON oOwnerbutton1  SIZE 24,24 ;
        TEXT ''  ;
        COORDINATES 0, 0, 0, 0  ;
        BITMAP 'FINDBMP' FROM RESOURCE TRANSPARENT;
        COORDINATES 0, 0, 0, 0 ;
      ON CLICK {|| oEdit2:setfocus(), CADASTROCLIENTES_CONSULTA_CNPJ( oDlg, oServer ) }

   @ 191,183 OWNERBUTTON oOwnerbutton4  SIZE 24,24   ;
        TEXT ''  ;
        COORDINATES 0, 0, 0, 0  ;
        BITMAP 'FINDBMP' FROM RESOURCE TRANSPARENT;
        COORDINATES 0, 0, 0, 0 ;
      ON CLICK {|| oEdit8:setfocus(), CADASTROCLIENTES_CONSULTA_CEP( oDlg, MEMVAR->CEP )}

   IF cAcao != "CONSULTAR"
      @ 904,560  OWNERBUTTON oOwnerbutton2  SIZE 98,32 DISABLED  ;
         TEXT 'Salvar'  ;
         COORDINATES 30, 0, 0, 0  ;
         BITMAP 'APPLYBMP' FROM RESOURCE TRANSPARENT;
         COORDINATES 5, 0, 0, 0;
         ON CLICK {|| SALVA_CLIENTES( oServer, cClientes_Id, cAcao ), hwg_Enddialog() }      
         oOwnerbutton2:Anchor := 12
   ENDIF

   @ 830,240 GROUPBOX oGroup1 CAPTION ""  SIZE 173,267

   @ 840,251 SAY oLabel21 CAPTION "Faturamento"  SIZE 110,21
   @ 840,272 GET COMBOBOX oCombo6 VAR MEMVAR->nCombo6 ITEMS MEMVAR->aVENBLO SIZE 154,24  ;
      ON CHANGE {|| oCombo6_onChange( oDlg, oCombo6:GETTEXT( ) ) }

   @ 840,297 SAY oLabel23 CAPTION "Limite de crédito"  SIZE 110,21
   @ 840,319 GET oEdit18 VAR MEMVAR->LIMCRE SIZE 154,24 ;
        STYLE ES_RIGHT +WS_DISABLED  PICTURE '@E 999,999,999.99' MAXLENGTH 14   
      
   @ 840,344 SAY oLabel18 CAPTION "Utilizado"  SIZE 60,21
   @ 840,366 GET oEdit12 VAR MEMVAR->TOTCRE SIZE 154,24 ;
        STYLE ES_RIGHT+WS_DISABLED  PICTURE '@E 999,999,999.99' MAXLENGTH 14

      
   @ 840,392 SAY oLabel19 CAPTION "Data Inclusão"  SIZE 91,21 ;

   @ 840,415 SAY oLabel24 CAPTION dtoc(MEMVAR->DATCAD)  SIZE 154,30 ;
      STYLE WS_BORDER+SS_CENTER ;
      COLOR 16777215  BACKCOLOR 255  ;
      FONT HFont():Add( '',0,-21,400,,,)

   @ 840,449 SAY oLabel20 CAPTION "Data ultima Alteração"  SIZE 141,21 ;

   @ 840,470 SAY oLabel25 CAPTION dtoc(MEMVAR->DATALT)  SIZE 154,30 ;
      STYLE WS_BORDER+SS_CENTER ;
      COLOR 16777215  BACKCOLOR 255  ;
      FONT HFont():Add( '',0,-21,400,,,) 

   IF MEMVAR->UF # "AC"
      CARREGA_MUNICIPIOS( oDlg, MEMVAR->UF )   
   ENDIF

   oCombo6:SetItem( Ascan(MEMVAR->aVENBLO,MEMVAR->VENBLO ) )      
   oCombo1:SetItem( Ascan(MEMVAR->aISENTO,MEMVAR->ISENTO ) )   
   oCombo4:SetItem( Ascan(MEMVAR->aPAIS,RTRIM(MEMVAR->PAIS) ) )   
   oCombo2:SetItem( Ascan(MEMVAR->aUF,RTRIM(MEMVAR->UF) ) )   
   oCombo3:SetItem( Ascan(MEMVAR->aMunicipios,RTRIM(MEMVAR->CIDADE) ) )
    ACTIVATE DIALOG oDlg CENTER

RETURN NIL

************************************************
STATIC FUNCTION VERIFICA_NRAZ_SOC( oDlg, cAcao )
************************************************
   IF cAcao = "CONSULTAR"
      RETURN .T.
   ENDIF

   IF MEMVAR->NRAZ_SOC = SPACE(60)
      oDlg:oOwnerbutton2:DISABLE()
      RETURN .F.
   ENDIF
   oDlg:oOwnerbutton2:ENABLE()   

RETURN .T.

**************************************************
STATIC FUNCTION CARREGA_MUNICIPIOS( mUF )
**************************************************
LOCAL oCIDADE, nI
   DO WHILE .T.
   
      FOR nI = Len( MEMVAR->aMunicipios ) TO 1 STEP -1
         hb_ADel( MEMVAR->aMunicipios, nI, .T. )
      NEXT
      IF Len(MEMVAR->aMunicipios) <= 0
         EXIT
      ENDIF
   ENDDO
   FOR EACH oCIDADE IN SEFAZ_CIDADE
      IF oCIDADE[1] == mUF
         AAdd(MEMVAR->aMunicipios,oCIDADE[3])
      ENDIF
   NEXT

RETURN( MEMVAR->aMunicipios )
*********************************************************************
STATIC FUNCTION CADASTROCLIENTES_CONSULTA_CNPJ( oDlg, oServer )
*********************************************************************
LOCAL oDlgCnpj;
   , oOwnerbutton2;
   , oCNPJ;
   , oLabel1, oLabel2;
   , oBitmap1;
   , oCombo1;
   , nCombo1:=1;
   , cCNPJ:=MEMVAR->CPFCGC;
   , oQuery;
   

   oQuery:= oServer:Execute("SELECT CERTIFICADO_COMPUTADOR FROM CERTIFICADO WHERE CERTIFICADO_COMPUTADOR = '" + rtrim(hwg_GetComputerName()) + "'")

   IF oQuery:Eof()
      hwg_MsgInfo("Este Computador não possui CERTIFICADO DIGITAL instalado"+ HB_EOL()+"Pesquisa não poderá ser efetuada")
      oQuery:Close()
      return .T.
   endif
   oQuery:Close()

   INIT DIALOG oDlgCnpj TITLE "CONSULTA CNPJ"  ;
      ICON MEMVAR->SGC_ICON  ;
      AT 0, 0 SIZE 445,168 CLIPPER  NOEXIT 
      
   hwg_SetColorinFocus( oDlg,, 13172680 )

   @ 24,35 BITMAP oBitmap1  SHOW 'searchonline' FROM RESOURCE  SIZE 82,82 
      
   @ 333,100 OWNERBUTTON oOwnerbutton2  SIZE 98,32  ;
        TEXT "Pesquisa"  ;
        COORDINATES 30, 0, 0, 0  ;
        BITMAP 'APPLYBMP' FROM RESOURCE TRANSPARENT;
        COORDINATES 5, 0, 0, 0;
      ON CLICK {|| CADASTROCLIENTES_PESQUISA_CNPJ(oDlg, oServer, cCNPJ, MEMVAR->aUF[nCombo1] ), oDlg:close() }      
        oOwnerbutton2:Anchor := 12
      
      
   @ 188,29 GET oCNPJ VAR cCNPJ SIZE 246,24  MAXLENGTH 14   
   @ 110,32 SAY oLabel1 CAPTION "CNPJ:"  SIZE 72,21 ;
        STYLE SS_RIGHT 
   @ 158,68 SAY oLabel2 CAPTION "UF:"  SIZE 24,21 
   @ 188,65 GET COMBOBOX oCombo1 VAR nCombo1 ;
        ITEMS MEMVAR->aUF ;
        SIZE 63,24 DISPLAYCOUNT 5 

   ACTIVATE DIALOG oDlgCnpj CENTER

RETURN oDlg:lresult
********************************************************************************
STATIC FUNCTION CADASTROCLIENTES_PESQUISA_CNPJ( oDlg, oServer, cCNPJ, cUF)
********************************************************************************
LOCAL oQuery1;
   , oQuery2;
   , oSefaz;
   , cRetorno;
   , cStat;
   , cCIDADE;

   oQuery1:= oServer:Execute("SELECT FLAG_n_tpAmb FROM FLAG ")

   oQuery2:= oServer:Execute("SELECT CERTIFICADO_NOMCERT FROM CERTIFICADO WHERE CERTIFICADO_COMPUTADOR = '" + rtrim(hwg_GetComputerName()) + "'")
   IF oQuery2:Eof()
      hwg_MsgInfo("Este Computador não possui CERTIFICADO DIGITAL instalado"+ HB_EOL()+"Pesquisa não poderá ser efetuada")
      oQuery1:Close()
      oQuery2:Close()
      return .T.
   endif

   
   IF LEN(RTRIM(cCNPJ)) < 14
      hwg_MsgInfo("CONSULTA AO CADASTRO DE CONTRIBUINTES SOMENTE POR CNPJ "+ HB_EOL()+ HB_EOL()+ "Clique no LINK para acesso ao SINTEGRA" )
      RETURN NIL
   ENDIF
   oSefaz:= SefazClass():New()
   oSefaz:cCertificado := TRIM(oQuery2:Fields( "CERTIFICADO_NOMCERT" ):Value)
//   hwg_MsgInfo("["+TRIM(cCnpj)+"]"+"["+cUF+"]")
   cRetorno:=oSefaz:NFeConsultaCadastro( TRIM(cCnpj), cUF, oSefaz:cCertificado, oQuery1:Fields( "FLAG_n_tpAmb" ):Value )

   if XmlNode(cRetorno, "cStat") $ "111,112,259"
      cStat             :=XmlNode(cRetorno, "cStat")
      MEMVAR->CPFCGC     :=cCNPJ
      MEMVAR->NRAZ_SOC    :=XmlNode(cRetorno, "xNome") + space(60-len(XmlNode(cRetorno, "xNome")))
      MEMVAR->NRAZ_FANT   :=XmlNode(cRetorno, "xFant") + space(60-len(XmlNode(cRetorno, "xFant")))
      MEMVAR->INSEST      :=XmlNode(cRetorno, "IE") + space(18-len(XmlNode(cRetorno, "IE")))
      MEMVAR->ISENTO      :=XmlNode(cRetorno, "cSit")
      MEMVAR->CEP         :=SUBSTR(XmlNode(cRetorno, "CEP"),1,5)+"-"+SUBSTR(XmlNode(cRetorno, "CEP"),6,3)
      MEMVAR->NUMERO      :=val(XmlNode(cRetorno, "nro"))
      MEMVAR->BAIR        :=XmlNode(cRetorno, "xBairro")
      cCIDADE            :=XmlNode(cRetorno, "xMun")
      cUF                :=XmlNode(cRetorno, "UF")
      MEMVAR->ENDER       :=XmlNode(cRetorno, "xLgr")
      IF cStat = "112"
         cRetorno := "ACESSE AO SINTEGRA: http://www.sintegra.gov.br"+ HB_EOL()+ "PARA CONSULTA DETALHADA"
         hwg_MsgInfo("STATUS: " + XmlNode(cRetorno, "cStat") + hb_Eol() + "MOTIVO: " + cRetorno + hb_Eol()+ hb_Eol() ,"CONSULTA CADASTRO DE CONTRIBUINTE")
      ENDIF
      
      IF XmlNode(cRetorno, "cStat") $ "259"
         MEMVAR->ISENTO   :="9"
      ENDIF
      IF LEN(cCNPJ) < 14
         MEMVAR->CPFCGC:=replicate("0",14-LEN(cCNPJ))+cCNPJ
      endif

//      hwg_MsgInfo(mCPFCGC)

      IF ! ValidIE( RTRIM(MEMVAR->INSEST), cUF )
         MEMVAR->INSEST:="0"+MEMVAR->INSEST
      ENDIF
      IF MEMVAR->ISENTO = "0"
         MEMVAR->ISENTO = "2"
         MEMVAR->INSEST:= SPACE(18)
      ENDIF

   ENDIF
   oDlg:oEdit2:REFRESH()
   oDlg:oEdit1:REFRESH()
   oDlg:oEdit3:REFRESH()
   oDlg:oEdit8:REFRESH()   
   oDlg:oEdit9:REFRESH()   
   oDlg:oEdit11:REFRESH()
   oDlg:oEdit13:REFRESH()
   oDlg:oCombo2:SetItem( Ascan(MEMVAR->aUF,cUF ) )
   oDlg:oCombo2:REFRESH()   
   oDlg:oCombo3:SetItem( Ascan(MEMVAR->aMunicipios,cCIDADE ) )
   oDlg:oCombo3:REFRESH()
   oQuery1:Close()
   oQuery2:Close()
RETURN NIL
   
***********************************************************
static FUNCTION CADASTROCLIENTES_CONSULTA_CEP( oDlg, mCEP )
***********************************************************
LOCAL oHttp;
   , cXML;

   IF mCEP = '     -   ' .OR. mCEP = SPACE(09)
      hwg_MsgInfo(  "o CEP esta em branco, verifique!" )
      RETURN .F.
   ENDIF

   oHttp:= TIpClientHttp():new( "http://www.jpatecnologia.com.br/cep.asp?cep="+substr(mCEP,1,5)+'-'+substr(mCEP,7,3)+"&clipper=1" )
   IF ! oHttp:open()
      hwg_MsgInfo(  "Erro na conecção: "+ oHttp:lastErrorMessage() )
      RETURN .T.
   ENDIF
   cXML := oHttp:readAll()
   oHttp:close()

   IF Empty(cXML)
**      hwg_MsgInfo( "Ocorreu um erro inesperado. Tente outro CEP...")
      return .t.
   ENDIF

   MEMVAR->ENDER      := XmlNode(cXml, "logradouro")
   MEMVAR->BAIR      := XmlNode(cXml, "bairro")

   oDlg:oEdit8:REFRESH()
   oDlg:oEdit9:REFRESH()
   oDlg:oEdit11:REFRESH()
   oDlg:oEdit13:REFRESH()
   oDlg:oCombo2:SetItem( Ascan(MEMVAR->aUF,XmlNode(cXml, "uf")  ) )
   oDlg:oCombo2:REFRESH()   
   oDlg:oCombo3:SetItem( Ascan(MEMVAR->aMunicipios,XmlNode(cXml, "cidade") ) )
   oDlg:oCombo3:REFRESH()
   
return .T.
   

*******************************************************
STATIC FUNCTION VERIFICA_TELEFONE( )
*******************************************************
   IF LEN(RTRIM(MEMVAR->FONE)) = 0
       RETURN .T.
   ENDIF
   IF LEN(RTRIM(MEMVAR->FONE)) < 10
       hwg_MsgInfo("FORMATO DE NUMERO DE TELEFONE INVALIDO"+ HB_EOL()+ HB_EOL() + "DEVE CONTER NO MINIMO 10 DIGITOS")
       RETURN .F.
   ENDIF
RETURN .T.

*******************************************************
STATIC FUNCTION oCombo6_onChange( oDlg, valor )
*******************************************************

   IF substr(valor,1,1) = "0"
       oDlg:oedit18:Enable()
       oDlg:oedit12:Enable()
   ELSE
       oDlg:oedit18:Disable()
       oDlg:oedit12:Disable()
   ENDIF

RETURN NIL

****************************************************************************               
STATIC FUNCTION VERIFICA_CPFCNPJ( oServer, CPFCGC, CPFANT, cAcao )
****************************************************************************           
LOCAL cQuery;
   , oQuery_cpfcnpj;

   IF cAcao = "ALTERAR" .AND. CPFCGC = CPFANT
      RETURN .T.
   ENDIF
   
   IF LEN(RTRIM(CPFCGC)) < 12
      IF !VDV2(CPFCGC)
         RETURN .F.
      ENDIF
   ELSE
      IF !VCGC(CPFCGC)
         RETURN .F.
      ENDIF
   ENDIF
   
   cQuery          := "SELECT CLIENTES_NRAZ_SOC, CLIENTES_CPFCGC FROM CLIENTES WHERE CLIENTES_CPFCGC = '" + RTRIM(CPFCGC) + "'"
   oQuery_cpfcnpj    := oServer:Execute(cQuery)
   
   IF ! oQuery_cpfcnpj:Eof()
      hwg_MsgInfo("CPF/CNPJ já existe no cadastro" + HB_EOL() + HB_EOL() + oQuery_cpfcnpj:Fields( "CLIENTES_NRAZ_SOC" ):Value +HB_EOL() + HB_EOL() + "CNPJ/CPF: "+ oQuery_cpfcnpj:Fields( "CLIENTES_CPFCGC" ):Value, "Atenção !!!")
      IF LEN(RTRIM(CPFCGC)) < 12
         IF PERG( "Continua a Fazer o Cadastro com CPF já cadastrado ?" ) = "N"
            oQuery_cpfcnpj:close()
            RETURN .F.
         ENDIF
      ELSE
         oQuery_cpfcnpj:close()
         RETURN .F.
      ENDIF
   ENDIF
   oQuery_cpfcnpj:close()   

   
RETURN .T.
*******************************************************
STATIC FUNCTION VERIFICA_INCRICAO_ESTADUAL( )
*******************************************************
*   If mINSEST != Space(15)
*          If ! ValidIE( Rtrim(mINSEST), mUF )
*               hwg_MsgInfo("INSCRICAO ESTADUAL INVALIDA"+ HB_EOL() )
*               Return .F.
*           ENDIF
*       Endif
    Return .T.
   
****************************************************************************************
STATIC FUNCTION SALVA_CLIENTES( oServer, cClientes_Id, cAcao )
****************************************************************************************
LOCAL oPAIS;
   , oCIDADE;
   , cQuery;
   , cQuery1;
   , cQuery2;
   , oQuery;

   IF cAcao = 'INCLUIR'
      cQuery1   :="INSERT INTO CLIENTES ( "
      cQuery2   :=" VALUES ("
      
      cQuery1 += "CLIENTES_TIPCLI, "
      cQuery2   += "'" + strzero(MEMVAR->TIPCLI,1,0) + "', "
      
      cQuery1 += "CLIENTES_NRAZ_SOC, "
      cQuery2   +="'" + rtrim(TIRACENTO(upper(MEMVAR->NRAZ_SOC))) + "', "
      
      cQuery1 += "CLIENTES_TIPDOC, "
      IF  LEN(RTRIM(MEMVAR->CPFCGC)) < 12   
         cQuery2   +="'1', "
      ELSE
         cQuery2   +="'2', "
      ENDIF

      
      IF ! EMPTY(MEMVAR->CPFCGC)
         cQuery1 += "CLIENTES_CPFCGC, "
         cQuery2   +="'" + rtrim(MEMVAR->CPFCGC) + "', "
      ENDIF
      
      
      IF ! EMPTY(MEMVAR->INSEST)
         cQuery1 += "CLIENTES_INSEST, "
         cQuery2   +="'" + rtrim(MEMVAR->INSEST) + "', "
      ENDIF
      
      
      IF ! EMPTY(MEMVAR->INSMUN)
         cQuery1 += "CLIENTES_INSMUN, "
         cQuery2   +="'" + rtrim(MEMVAR->INSMUN) + "', "
      ENDIF

      IF MEMVAR->nCombo1 = 0
         MEMVAR->nCombo1 := 1
      ENDIF      
      cQuery1 += "CLIENTES_ISENTO, "
      cQuery2   +="'" + SUBSTR(MEMVAR->aISENTO[MEMVAR->nCombo1],1,1) + "', "

      IF ! EMPTY(MEMVAR->SUFRAMA)
         cQuery1 += "CLIENTES_SUFRAMA, "
         cQuery2   +="'" + rtrim(MEMVAR->SUFRAMA) + "', "
      ENDIF

      IF ! EMPTY(MEMVAR->EMAIL)
         IF EMAIL_VALIDO(MEMVAR->EMAIL)
            cQuery1 += "CLIENTES_EMAIL, "
            cQuery2   +="'" + rtrim(MEMVAR->EMAIL) + "', "
         endif
      ENDIF   
      
      IF ! EMPTY(MEMVAR->ENDER)
         cQuery1 += "CLIENTES_ENDER, "
         cQuery2   +="'" + rtrim(MEMVAR->ENDER) + "', "
      ENDIF   

      cQuery1 += "CLIENTES_NUMERO, "
      cQuery2   +="'" + strzero(MEMVAR->NUMERO,9,0) + "', "
      
      IF ! EMPTY(MEMVAR->COMPLEM)
         cQuery1 += "CLIENTES_COMPLEM, "
         cQuery2   +="'" + rtrim(MEMVAR->COMPLEM) + "', "
      ENDIF

      
      IF ! EMPTY(MEMVAR->BAIR)
         cQuery1 += "CLIENTES_BAIR, "
         cQuery2   +="'" + rtrim(MEMVAR->BAIR) + "', "
      ENDIF

      
      IF ! EMPTY(MEMVAR->CEP)
         cQuery1 += "CLIENTES_CEP, "
         cQuery2   +="'" + rtrim(MEMVAR->CEP) + "', "
      ENDIF
      
      
      cQuery1 += "CLIENTES_PAIS, "
      cQuery2 += "'" + MEMVAR->aPAIS[MEMVAR->nCombo4] + "', "
      
      FOR EACH oPAIS IN SEFAZ_CIDADE
         IF oPAIS[3] == MEMVAR->aPAIS[MEMVAR->nCombo4]
            cQuery1 += "CLIENTES_CODPAIS, "
            cQuery2 += "'" + SUBSTR(oPAIS[2],3,4) + "', "
         ENDIF
      NEXT             
      
      cQuery1 += "CLIENTES_UF, "
      cQuery2 += "'"   + MEMVAR->aUF[MEMVAR->nCombo2] + "', " 

      cQuery1 += "CLIENTES_CIDADE, "
      cQuery2 += "'" + MEMVAR->aMunicipios[MEMVAR->nCombo3] + "', " 

      
      FOR EACH oCIDADE IN SEFAZ_CIDADE
         IF oCIDADE[1] == MEMVAR->aUF[MEMVAR->nCombo2] .AND. oCIDADE[3] == MEMVAR->aMunicipios[MEMVAR->nCombo3]
            cQuery1 += "CLIENTES_CODMUN, "
            cQuery2 += "'"   + oCIDADE[2] + "', "
         ENDIF
      NEXT

      cQuery1 += "CLIENTES_FONE, "
      cQuery2   +="'" + rtrim(MEMVAR->FONE) + "', "
      
      cQuery1 += "CLIENTES_CONTATO, "
      cQuery2   +="'" + rtrim(MEMVAR->CONTATO) + "', "
      
      cQuery1 += "CLIENTES_LIMCRE, "
      cQuery2   +="'" + strzero(MEMVAR->LIMCRE,14,2) + "', "
      
      cQuery1 += "CLIENTES_TOTCRE, "
      cQuery2   +="'" + strzero(MEMVAR->TOTCRE,14,2) + "', "
      
      cQuery1 += "CLIENTES_VENBLO, "
      cQuery2   +="'" + SUBSTR(MEMVAR->aVENBLO[MEMVAR->nCombo6],1,1) + "', "
      
      cQuery1 += "CLIENTES_DATCAD, "
      cQuery2   +="'" + strzero(year(MEMVAR->DATCAD),4,0) + "-" + strzero(month(MEMVAR->DATCAD),2,0) + "-" + strzero(day(MEMVAR->DATCAD),2,0) + "', "
      
      cQuery1 += "CLIENTES_DATALT, "
      cQuery2   +="'" + strzero(year(MEMVAR->DATALT),4,0) + "-" + strzero(month(MEMVAR->DATALT),2,0) + "-" + strzero(day(MEMVAR->DATALT),2,0) + "', "
      
      cQuery1 += "CLIENTES_USUALT, "
      cQuery2   +="'" + rtrim(MEMVAR->USUALT) + "', "
      
      cQuery1 += "CLIENTES_TAXCLI, "
      cQuery2   +="'" + strzero(MEMVAR->TAXCLI,5,2) + "', "
      
      cQuery1 += "CLIENTES_NUMPAR, "
      cQuery2   +="'" + strzero(MEMVAR->NUMPAR,2,0) + "', "
      
      cQuery1 += "CLIENTES_PERDES, "
      cQuery2   +="'" + strzero(MEMVAR->PERDES,5,2) + "', "
      
      cQuery1 += "CLIENTES_VALMIN, "
      cQuery2   +="'" + strzero(MEMVAR->VALMIN,5,0) + "', "
      
      cQuery1 += "CLIENTES_QUEM_BLOQ ) "
      cQuery2   +="'" + rtrim(M->OPERADOR)+"/"+rtrim(hwg_GetComputerName()+" ["+dtoc(M->DAT_HOJE)+" "+time()+"]") + "' )"
      
//      HB_GTINFO( HB_GTI_CLIPBOARDDATA, cQuery1+cQuery2)
      
      oServer:Execute(cQuery1+cQuery2)
      
      oQuery := oServer:Execute("SELECT LAST_INSERT_ID()")
      
      MEMVAR->UCLIENTE := oQuery:Fields( "LAST_INSERT_ID()" ):Value
      
      oServer:Execute("UPDATE CLIENTES SET CLIENTES_UCLIENTE = '" + STRZERO(MEMVAR->UCLIENTE,6,0) + "' WHERE CLIENTES_Id = '" + LTRIM(STR(MEMVAR->UCLIENTE)) + "'")

      cQuery:=[INSERT INTO logtrans (LOGTRANS_OPERADOR, LOGTRANS_COMPUTADOR, LOGTRANS_TEXTO ) VALUES ( "] + rtrim(M->OPERADOR) +[", "] + rtrim(hwg_GetComputerName()) + [", "] + cQuery1+cQuery2 + [")]
      
      oServer:Execute(cQuery)

            
   ELSE
      cQuery1   :="UPDATE CLIENTES SET "
      cQuery1  +="CLIENTES_TIPCLI = '" + strzero(MEMVAR->TIPCLI,1,0) + "', "
            
      IF strzero(M->NIV_ACESSO,1,0)$"89"      
         cQuery1 += "CLIENTES_NRAZ_SOC = '"   + rtrim(TIRACENTO(upper(MEMVAR->NRAZ_SOC))) + "', "
      ENDIF
      
      IF  LEN(RTRIM(MEMVAR->CPFCGC)) < 12
         cQuery1 += "CLIENTES_TIPDOC ='1', "
      ELSE
         cQuery1 += "CLIENTES_TIPDOC ='2', "
      ENDIF
      
      IF ! EMPTY(MEMVAR->CPFCGC)
         cQuery1 += "CLIENTES_CPFCGC = '"   + rtrim(MEMVAR->CPFCGC) + "', "
      ENDIF
      IF ! EMPTY(MEMVAR->INSEST)
         cQuery1 += "CLIENTES_INSEST = '" + rtrim(MEMVAR->INSEST) + "', "
      ENDIF
      IF ! EMPTY(MEMVAR->INSMUN)
         cQuery1 += "CLIENTES_INSMUN = '" + rtrim(MEMVAR->INSMUN) + "', "
      ENDIF
            
      IF MEMVAR->nCombo1 = 0
         MEMVAR->nCombo1 := 1
      ENDIF      
      
      cQuery1 += "CLIENTES_ISENTO = '" + SUBSTR(MEMVAR->aISENTO[MEMVAR->nCombo1],1,1) + "', "

      IF ! EMPTY(MEMVAR->SUFRAMA)
         cQuery1 += "CLIENTES_SUFRAMA = '" + rtrim(MEMVAR->SUFRAMA) + "', "
      ENDIF
      
      IF ! EMPTY(MEMVAR->EMAIL)
         IF EMAIL_VALIDO(MEMVAR->EMAIL)
            cQuery1 += "CLIENTES_EMAIL = '" + rtrim(LOWER(MEMVAR->EMAIL)) + "', "
         endif
      ENDIF

      IF ! EMPTY(MEMVAR->ENDER)
         cQuery1 += "CLIENTES_ENDER = '" + rtrim(MEMVAR->ENDER) + "', "
      ENDIF
      
      cQuery1 += "CLIENTES_NUMERO = '" + strzero(MEMVAR->NUMERO,9,0) + "', "
      
      IF ! EMPTY(MEMVAR->COMPLEM)
         cQuery1 += "CLIENTES_COMPLEM = '" + rtrim(MEMVAR->COMPLEM) + "', "
      ENDIF
      
      IF ! EMPTY(MEMVAR->BAIR)
         cQuery1 += "CLIENTES_BAIR = '" + rtrim(MEMVAR->BAIR) + "', "
      ENDIF   

      cQuery1 += "CLIENTES_CEP = '" + MEMVAR->CEP + "', "
       cQuery1 += "CLIENTES_PAIS = '" + MEMVAR->aPAIS[MEMVAR->nCombo4] + "', "
      
      FOR EACH oPAIS IN SEFAZ_CIDADE
         IF oPAIS[3] == MEMVAR->aPAIS[MEMVAR->nCombo4]
            cQuery1 += "CLIENTES_CODPAIS = '" + SUBSTR(oPAIS[2],3,4) + "', "
         ENDIF
      NEXT             
            
      cQuery1 += "CLIENTES_UF = '"   + MEMVAR->aUF[MEMVAR->nCombo2] + "', " 
      
      FOR EACH oCIDADE IN SEFAZ_CIDADE
         IF oCIDADE[1] == MEMVAR->aUF[MEMVAR->nCombo2] .AND. oCIDADE[3] == MEMVAR->aMunicipios[MEMVAR->nCombo3]
            cQuery1 += "CLIENTES_CODMUN = '"   + oCIDADE[2] + "', "
         ENDIF
      NEXT   
   
      cQuery1 += "CLIENTES_CIDADE = '" + MEMVAR->aMunicipios[MEMVAR->nCombo3] + "', "
      cQuery1 += "CLIENTES_FONE = '" +  rtrim(MEMVAR->FONE) + "', "
      
      IF ! EMPTY(MEMVAR->CONTATO)
         cQuery1 += "CLIENTES_CONTATO = '" + rtrim(MEMVAR->CONTATO) + "', "
      endif
      
      cQuery1 += "CLIENTES_LIMCRE = '"   + strzero(MEMVAR->LIMCRE,14,2) + "', "
      cQuery1 += "CLIENTES_TOTCRE = '"   + strzero(MEMVAR->TOTCRE,14,2) + "', "
      cQuery1 += "CLIENTES_VENBLO = '"   + SUBSTR(MEMVAR->aVENBLO[MEMVAR->nCombo6],1,1) + "', "
      cQuery1 += "CLIENTES_DATCAD = '"   + strzero(year(MEMVAR->DATCAD),4,0) + "-" + strzero(month(MEMVAR->DATCAD),2,0) + "-" + strzero(day(MEMVAR->DATCAD),2,0) + "', "
      cQuery1 += "CLIENTES_DATALT = '"   + strzero(year(MEMVAR->DATALT),4,0) + "-" + strzero(month(MEMVAR->DATALT),2,0) + "-" + strzero(day(MEMVAR->DATALT),2,0) + "', "
      cQuery1 += "CLIENTES_USUALT = '"   + rtrim(MEMVAR->USUALT) + "', "
      cQuery1 += "CLIENTES_TAXCLI = '"   + strzero(MEMVAR->TAXCLI,5,2) + "', "
      cQuery1 += "CLIENTES_NUMPAR = '"   + strzero(MEMVAR->NUMPAR,2,0) + "', "
      cQuery1 += "CLIENTES_PERDES = '"   + strzero(MEMVAR->PERDES,5,2) + "', "
      cQuery1 += "CLIENTES_VALMIN = '"   + strzero(MEMVAR->VALMIN,5,0) + "', "
      cQuery1 += "CLIENTES_QUEM_BLOQ = '" + rtrim(M->OPERADOR)+"/"+rtrim(hwg_GetComputerName()+" ["+dtoc(M->DAT_HOJE)+" "+time()+"]") + "' "
      cQuery1 += "WHERE CLIENTES_Id = '" + cClientes_Id + "'"

      oServer:Execute(cQuery1)
      
      cQuery:=[INSERT INTO logtrans (LOGTRANS_OPERADOR, LOGTRANS_COMPUTADOR, LOGTRANS_TEXTO ) VALUES ( "] + rtrim(M->OPERADOR) +[", "] + rtrim(hwg_GetComputerName()) + [", "] + cQuery1 + [")]
      
      oServer:Execute(cQuery)
      
   ENDIF

return NIL

*****************************************
STATIC Function EMAIL_VALIDO(cmail)
*****************************************
Local cRegEx:="^[\w-\.]{1,}\@([\da-zA-Z-_]{1,}\.){1,}[\da-zA-Z-_]{2,3}$"

   IF HB_REGEXLIKE( cRegEx, RTrim(cmail) )
      RETURN .T.
   ENDIF

RETURN .F.

************************************************************
STATIC FUNCTION RELATORIO_CLIENTES( oServer )
************************************************************
LOCAL oPDF;
   , nLinha;
   , nPagina;
   , nMaxCol;
   , oQuery;
   , oQuery1;
   

   oPDF := PDFClass()
   IF oPDF == NIL
      hwg_msginfo("Falha da criação do objeto PDF")
      RETURN .F.
   ENDIF
   oPDF:cFileName    := "C:\TEMP\CLIENTES"+strzero(HB_RandomInt(1, 99999999),8,0)+'.PDF'
   IF ! oPDF:PrintOptions(  ); RETURN NIL; ENDIF

   oQuery:= oServer:Execute("SELECT CLIENTES_UCLIENTE, CLIENTES_NRAZ_SOC FROM CLIENTES ORDER BY CLIENTES_NRAZ_SOC")
   
   oQuery1:= oServer:Execute("SELECT FLAG_n_xNome, FLAG_n_xLgr, FLAG_n_nro, FLAG_n_xBairro, FLAG_n_CEP, FLAG_n_xMun, FLAG_n_xUF, FLAG_n_fone, FLAG_n_CNPJ, FLAG_n_IE FROM FLAG ")

   IF  oPDF:nPrinterType ==  PDFCLASS_LANDSCAPE
      
      oPDF:Begin()

      nLinha   := 100
      nPagina := 1
      
      DO WHILE ! oQuery:Eof()
         IF    nLinha   > 96
            oPDF:AddPage()
            
            nMaxCol := oPDF:MaxCol()

            oPDF:DrawBox( 0, 0, 9, 41, Nil, Nil, Nil )                 // box esquerdo
            oPDF:DrawImageSize( 0.5, 0.5, 8, 39, "logotipo.jpg" )             // logotipo

            oPDF:DrawBox( 0, 41, 9, 117, Nil, Nil, Nil )  // box centro
            oPDF:DrawText( 2.0, 42, RTRIM(oQuery1:Fields( "FLAG_n_xNome" ):Value), nil, 10, "Helvetica-Bold", Nil, Nil )
            oPDF:DrawText( 3.5, 42, RTRIM(oQuery1:Fields( "FLAG_n_xLgr" ):Value) + ', ' + RTRIM(oQuery1:Fields( "FLAG_n_nro" ):Value), Nil, 8, "Helvetica", Nil, Nil )
            oPDF:DrawText( 5.0, 42,'BAIRRO - ' + RTRIM(oQuery1:Fields( "FLAG_n_xBairro" ):Value), Nil, 8, "Helvetica", Nil, Nil )
            oPDF:DrawText( 6.4, 42, "CEP " +oQuery1:Fields( "FLAG_n_CEP" ):Value + ' - ' + RTRIM(oQuery1:Fields( "FLAG_n_xMun" ):Value) + ' - ' + oQuery1:Fields( "FLAG_n_xUF" ):Value + " - FONE: " +oQuery1:Fields( "FLAG_n_fone" ):Value, Nil, 8, "Helvetica", Nil, Nil )
            oPDF:DrawText( 8.0, 42, 'CNPJ-'+RTRIM(oQuery1:Fields( "FLAG_n_CNPJ" ):Value) + '   Insc.Est.-' + RTRIM(oQuery1:Fields( "FLAG_n_IE" ):Value) , Nil, 8, "Helvetica-Bold", Nil, Nil )

            oPDF:DrawBox( 0, nMaxCol, 9, 41, Nil, Nil, Nil )  // box direito
            oPDF:DrawText( 2, 120, "CAD.CLIENTES      " , Nil, 10, "Helvetica", Nil, Nil )
            oPDF:DrawText( 4, 120, "PAGINA Nr.: " + STRZERO(nPagina,4,0), Nil, 10, "Helvetica", Nil, Nil )
            oPDF:DrawText( 6, 120, "DATA: " + DTOC(M->DAT_HOJE), Nil, 10, "Helvetica", Nil, Nil )
            oPDF:DrawText( 8, 120, "HORA: " + TIME(), Nil, 10, "Helvetica", Nil, Nil )

            oPDF:DrawBox( 9, 0, 12, nMaxCol, Nil, Nil, Nil ) 

            nLinha := 11
            nPagina += 1
            
            oPDF:DrawText( nLinha, 1, "CODIGO", Nil, 10, "Helvetica", Nil, Nil )
            oPDF:DrawText( nLinha, 16, "NOME CLIENTE", Nil, 10, "Helvetica", Nil, Nil )

            nLinha += 3

         ENDIF
         
         oPDF:DrawText( nLinha, 1, oQuery:Fields( "CLIENTES_UCLIENTE" ):Value, Nil, 12, "Courier-Bold", Nil, Nil )
         oPDF:DrawText( nLinha, 16, oQuery:Fields( "CLIENTES_NRAZ_SOC" ):Value, Nil, 10, "Helvetica", Nil, Nil )
         nLinha += 2
         oQuery:MoveNext()
      ENDDO   
      
      oPDF:DrawLine( nLinha, 0, nLinha, nMaxCol, 1 )
      
      oPDF:End(  )
      oQuery:Close( )
      oQuery1:Close( )
      
   ELSE

      oPDF:nPrinterType :=  WIN_PRINTERGETDEFAULT()
      oPDF:SetType( PDFCLASS_ROLLS )
      oPDF:Begin()
      oPDF:nPageHeight := 841.89
      oPDF:AddPage()
      nMaxCol := oPDF:MaxCol()

      oPDF:DrawImageSize( 0, 0, 4, 19, "logotipo.jpg" )             // logotipo

      oPDF:DrawText( 5, 0, RTRIM(oQuery1:Fields( "FLAG_n_xNome" ):Value), nil, 10, "Helvetica-Bold", Nil, Nil )
      oPDF:DrawText( 6, 0, RTRIM(oQuery1:Fields( "FLAG_n_xLgr" ):Value) + ', ' + RTRIM(oQuery1:Fields( "FLAG_n_nro" ):Value), Nil, 8, "Helvetica", Nil, Nil )
      oPDF:DrawText( 7, 0,'BAIRRO - ' + RTRIM(oQuery1:Fields( "FLAG_n_xBairro" ):Value), Nil, 8, "Helvetica", Nil, Nil )
      oPDF:DrawText( 8, 0, "CEP " +oQuery1:Fields( "FLAG_n_CEP" ):Value + ' - ' + RTRIM(oQuery1:Fields( "FLAG_n_xMun" ):Value) + ' - ' + oQuery1:Fields( "FLAG_n_xUF" ):Value + " - FONE: " +oQuery1:Fields( "FLAG_n_fone" ):Value, Nil, 8, "Helvetica", Nil, Nil )
      oPDF:DrawText( 9, 0, 'CNPJ-'+RTRIM(oQuery1:Fields( "FLAG_n_CNPJ" ):Value) + '   Insc.Est.-' + RTRIM(oQuery1:Fields( "FLAG_n_IE" ):Value) , Nil, 8, "Helvetica-Bold", Nil, Nil )
      oPDF:DrawLine( 9.5, 0, 9.5, nMaxCol, 1 )
      oPDF:DrawText( 10.5, 0, "CADASTRO DE CLIENTES", Nil, 10, "Helvetica-Bold", Nil, Nil )   
      oPDF:DrawText( 11.5, 0, "CODIGO  NOME CLIENTE", Nil, 8, "Helvetica", Nil, Nil )   
      oPDF:DrawLine( 12, 0, 12, nMaxCol, 1 )
      
      nLinha     := 13
         
      DO WHILE ! oQuery:Eof()
      
         IF    nLinha   > 70
            oPDF:AddPage()
            nLinha   := 0
         ENDIF
         
         oPDF:DrawText( nLinha, 0, oQuery:Fields( "CLIENTES_UCLIENTE" ):Value, Nil, 08, "Helvetica", Nil, Nil )
         oPDF:DrawText( nLinha++, 7, oQuery:Fields( "CLIENTES_NRAZ_SOC" ):Value, Nil, 08, "Helvetica", Nil, Nil )
         oQuery:MoveNext()
   
      ENDDO   

      oPDF:End(  )   
      oQuery:Close( )
      oQuery1:Close( )
   ENDIF

   oPDF:PrintPreview(  )

RETURN NIL   



exemplo usando SQL
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

TbrowseDb com Sql exemplos

Mensagempor andrelucass » 15 Abr 2020 08:14

Esse é o codigo que uso, usando o xharbour free, gostaria de passar essa busca incremental para sql

no xharbour usando dbf
// ESTRUTURA DO ARQUIVO .DBF

+--------- VERBAS.DBF ----------+
| Nº Nome          Tipo Tam Dec |
+-------------------------------+
| 1  "CODIGO"      ,"N",003,000 |
| 2  "DESCRICAO"   ,"C",040,000 |
| 3  "VALOR"       ,"N",015,002 |
| 4  "TIPO"        ,"C",001,000 |
| 5  "OPERACAO"    ,"C",001,000 |
+------ Nº Registros 256 -------+

procedure ConVerbas(lAbrir)
   local oBrow,oCol,nTecla,lFim := .F.,cTela := savewindow(),cDados
   local nCursor := setcursor(),cCor := setcolor(),lTop
   local nLin1 := 02,nCol1 := 10,nLin2 := maxrow()-1,nCol2 := 79
   private nRecno

    if lAbrir
        Msg(.t.)
        Msg("Aguarde : Abrindo o Arquivo")
        if !OpenVerbas()
            FechaDados()
            Msg(.f.)
            return
        endif
        Msg(.f.)
    else
        setcursor(SC_NONE)
    endif
   select Verbas
   set order to 2
   goto top
   if lAbrir
      Rodape("Esc-Encerrar")
   else
      Rodape("Esc-Encerra | ENTER-Transfere")
   end
   n_Itens := lastrec()
   Pos := 1
   setcolor(cor(5))
   Window(nLin1,nCol1,nLin2,nCol2,"> Tabela de Verbas <")
   oBrow := TBrowseDB(nLin1+1,nCol1+1,nLin2-2,nCol2-1)
   oBrow:headSep := chr(194)+chr(196)
   oBrow:colSep  := chr(179)
   oBrow:footSep := chr(193)+chr(196)
   oBrow:colorSpec := COR(25)+","+cor(6)+","+Cor(9)+",N,"+cor(6)+","+Cor(6)
   oBrow:addcolumn(TBColumnNew("C¢digo" ,{|| Verbas->Codigo }))
   oBrow:addcolumn(TBColumnNew("Descricao" ,{|| Verbas->Descricao }))
   oBrow:addcolumn(TBColumnNew("Valor" ,{|| Verbas->Valor }))
   setcolor(Cor(26))
   AddKeyAction(K_ESC,    {|| lFim := .t.})
   AddKeyAction(K_ALT_X,  {|| xTecla := ""})
   AddKeyAction(K_CTRL_H, {|| IF((nLen := LEN(xTecla)) > 0,((xTecla := SUBSTR(xTecla, 1, --nLen)), SeekIt(xTecla, .T., oBrow)),NIL) })
   xTecla := ""
   WHILE (! lFim)
      @ nLin2-1,nCol1+1 say padr(" Pesquisar: "+ xTecla,30) color Cor(11)
      ForceStable(oBrow)
      if ( obrow:hittop .or. obrow:hitbottom )
         tone(1200,1)
      endif
        aRect := { oBrow:rowPos,1,oBrow:rowPos,3}
        oBrow:colorRect(aRect,{2,2})
     
      cTecla := chr((nTecla := inkey(0)))
      if (nTecla >= 32 .and. nTecla <= 93) .or. (nTecla >= 96 .and. nTecla <= 125)
         if nTecla >= 97 .and. nTecla <= 122
            cTecla := chr(nTecla-32)
         endif
      endif
      if !OnKey( nTecla,oBrow)
         if !(nTecla == K_ENTER)

            // VERIFICA A TECLA PRESSIONADA
            if (nTecla >= 32 .and. nTecla <= 93) .or. (nTecla >= 96 .and. nTecla <= 125)
               xTecla += cTecla
               nRec := Verbas->(Recno())

               // AQUI FAZ A BUSCA DBF
               if !SeekIt(xTecla,.T.,obrow)
                  Verbas->(dbgoto(nRec))
               endif
            endif
         endif
      endif
      if nTecla == K_ENTER
         if !lAbrir
            cDados := str(Verbas->Codigo,3,0)
            keyboard (cDados)+chr(K_ENTER)
            lFim := .t.
         endif
      elseif nTecla == K_ESC
         lFim := .t.
      endif
      oBrow:refreshcurrent()
   enddo
   if !lAbrir
      setcursor(nCursor)
      setcolor(cCor)
   else
      FechaDados()
   endif
   RestWindow( cTela )
   RETURN

FUNCTION SeekIt( xKey, lSoftSeek, oObj )
   LOCAL lFound, nRecno

   nRecno    := RECNO()
   lSoftSeek := IF(VALTYPE(lSoftSeek) == "L", lSoftSeek, .F.)

   IF !(lFound := DBSEEK( xKey, lSoftSeek ))
      IF EOF()
         // Not found.
         // Keep pointer in the same place
         DBGOTO(nRecno)
         oObj:invalidate()

      ENDIF

   ELSE
      // Found!
      // But there is that behaviour on TBrowse...
      //
      nRecno := RECNO()
      DISPBEGIN()
      oObj:refreshAll()
      ForceStable( oObj )
      WHILE (nRecno != RECNO()) .AND. !(oObj:hitTop())
         oObj:up()
         ForceStable( oObj )

      END
      DISPEND()

   ENDIF

   RETURN (lFound)



esse código é usando xharbour com sql, só não conseguir fazer a busca

procedure ConVerbas(lAbrir)
   local oBrow,oCol,nTecla,lFim := .F.,cTela := savewindow(),cDados
   local nCursor := setcursor(),cCor := setcolor(),lTop
   local nLin1 := 02,nCol1 := 10,nLin2 := 33,nCol2 := 79
   local cQuery,oQuery
   private nRecno

    setcursor(SC_NONE)
    cQuery := "SELECT idverbas,descricao,valor FROM administrativo.verbas "
    cQuery += " ORDER BY descricao "
    if !ExecuteSql(cQuery,@oQuery,{"Erro: Abrir Tabela de Verbas"},"verbas")
      return
   endif
    if oQuery:Lastrec() = 0
        Mens({"Tabela de verbas vazia"})
        oQuery:Destroy()
        return
    endif
   if lAbrir
      Rodape("Esc-Encerrar")
   else
      Rodape("Esc-Encerra | ENTER-Transfere")
   end
   setcolor(cor(5))
   Window(nLin1,nCol1,nLin2,nCol2,"> Tabela de Verbas <")
   oBrow := TBrowseDB(nLin1+1,nCol1+1,nLin2-2,nCol2-1)
   oBrow:headSep := chr(194)+chr(196)
   oBrow:colSep  := chr(179)
   oBrow:footSep := chr(193)+chr(196)
   oBrow:colorSpec := COR(25)+","+cor(6)+","+Cor(9)+",N,"+cor(6)+","+Cor(6)
    oCurRow := oQuery:GetRow( 1 )
    oBrow:SkipBlock := {| n | oCurRow := SkipperQuery( @n, oQuery ), n }
    oBrow:GoBottomBlock := {|| oCurRow := oQuery:GetRow( oQuery:LastRec() ), 1 }
    oBrow:GoTopBlock := {|| oCurRow := oQuery:GetRow( 1 ), 1 }
   oBrow:addcolumn(TBColumnNew("Código" ,{|| str(oQuery:FieldGet("idverbas"),3) }))
   oBrow:addcolumn(TBColumnNew("Descricao" ,{|| oQuery:FieldGet("Descricao") }))
   oBrow:addcolumn(TBColumnNew("Valor" ,{|| transform(oQuery:FieldGet("Valor"),"@ke 999,999,999.99") }))
   setcolor(Cor(26))
   WHILE (! lFim)
      ForceStable(oBrow)
      if ( obrow:hittop .or. obrow:hitbottom )
         tone(1200,1)
      endif
        aRect := { oBrow:rowPos,1,oBrow:rowPos,3}
        oBrow:colorRect(aRect,{2,2})
        cTecla := chr((nTecla := inkey(0)))
        if !OnKey( nTecla,oBrow)
        endif
        if nTecla == K_ENTER
            if !lAbrir
                cDados := str(oQuery:FieldGet('idverbas'),3)
                keyboard (cDados)+chr(K_ENTER)
                lFim := .t.
            endif
        elseif nTecla == K_ESC
            lFim := .t.
        endif
        oBrow:refreshcurrent()
   enddo
   if !lAbrir
      setcursor(nCursor)
      setcolor(cCor)
   endif
   RestWindow( cTela )
   RETURN

andrelucass
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 145
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

TbrowseDb com Sql exemplos

Mensagempor modalsist » 15 Abr 2020 09:17

Bom dia André!

Vc pode criar um um dbf temporário com os mesmos campos da query, importar as tuplas da query e usar este dbf no TBrowseDB().
Eu uso TBrowseNew() com funções específicas para navegação e pesquisa direto na query e a cada pesquisa eu invoco uma nova query e realimento o browse.
Para paginar o browse como no dbf uso a cláusula OFFSET do SELECT.

Att,
Eduardo Fernandes
modalsist
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 14 Mar 2020 09:13
Cidade/Estado: São Paulo/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

TbrowseDb com Sql exemplos

Mensagempor andrelucass » 15 Abr 2020 09:32

Ola Eduardo Fernandes,

Você poderia colocar aqui ou mandar por e-mail ?

Detalhe
Uso local e remotamente.

andrelucassouza72@gmail.com

Atenciosamente
André Lucas Souza
andrelucass
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 145
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

TbrowseDb com Sql exemplos

Mensagempor andrelucass » 17 Abr 2020 13:46

Ola Eduardo Fernandes,

Obrigado recebi seu e-mail.

Atenciosamente
André Lucas Souza
andrelucass
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 145
Data de registro: 25 Fev 2005 10:40
Curtiu: 0 vez
Mens.Curtidas: 6 vezes

TbrowseDb com Sql exemplos

Mensagempor leandrolinauer » 02 Set 2020 11:33

Bom dia Eduardo Fernandes.
Fiquei interessado na forma como você utiliza, estou migrando agora para SQL e preciso tambem de algo para funcionar como fazia no DBF com TBROWSEDB.
Envia pra mim por gentileza esta sua função, fico grato.
leandrolinauer@hotmail.com

Valeu
T+
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
leandrolinauer
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 16 Out 2006 10:59
Cidade/Estado: Paranaíba-MS
Curtiu: 0 vez
Mens.Curtidas: 12 vezes

TbrowseDb com Sql exemplos

Mensagempor tonicm » 04 Set 2020 05:33

Acho essa rotina interessante e podia ajudar vários membros, inclusive a mim.
Será que poderia colocar essa rotina aqui no fórum?
Agradeço desde já
tonicm
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 55
Data de registro: 08 Mar 2016 21:51
Cidade/Estado: Porto
Curtiu: 12 vezes
Mens.Curtidas: 1 vez

TbrowseDb com Sql exemplos

Mensagempor modalsist » 17 Set 2020 13:12

Boa tarde !

Em anexo.

Eduardo
Anexos
SHOWSQL.zip
(4.84 KiB) Baixado 115 vezes
modalsist
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 3
Data de registro: 14 Mar 2020 09:13
Cidade/Estado: São Paulo/SP
Curtiu: 0 vez
Mens.Curtidas: 1 vez

TbrowseDb com Sql exemplos

Mensagempor leandrolinauer » 20 Fev 2021 11:10

Bom dia modalsist
Muito grato pelo exemplo, hoje que vi seu retorno, agradecido irei testar.
Valeu
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
leandrolinauer
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 373
Data de registro: 16 Out 2006 10:59
Cidade/Estado: Paranaíba-MS
Curtiu: 0 vez
Mens.Curtidas: 12 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro