Página 1 de 1

TbrowseDb com Sql exemplos

Enviado: 08 Abr 2020 21:17
por andrelucass
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

TbrowseDb com Sql exemplos

Enviado: 13 Abr 2020 11:25
por andrelucass
Bom dia a todos

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


Atenciosamente
André Lucas Souza

TbrowseDb com Sql exemplos

Enviado: 13 Abr 2020 12:03
por JoséQuintas
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.

TbrowseDb com Sql exemplos

Enviado: 13 Abr 2020 13:46
por andrelucass
Boa tarde

Você usa algo parecido

TbrowseDb com Sql exemplos

Enviado: 13 Abr 2020 21:24
por Fernando queiroz

Código: Selecionar todos

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

TbrowseDb com Sql exemplos

Enviado: 15 Abr 2020 08:14
por andrelucass
Esse é o codigo que uso, usando o xharbour free, gostaria de passar essa busca incremental para sql

no xharbour usando dbf

Código: Selecionar todos

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

Código: Selecionar todos

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


TbrowseDb com Sql exemplos

Enviado: 15 Abr 2020 09:17
por modalsist
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

TbrowseDb com Sql exemplos

Enviado: 15 Abr 2020 09:32
por andrelucass
Ola Eduardo Fernandes,

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


Detalhe
Uso local e remotamente.

andrelucassouza72@gmail.com

Atenciosamente
André Lucas Souza

TbrowseDb com Sql exemplos

Enviado: 17 Abr 2020 13:46
por andrelucass
Ola Eduardo Fernandes,

Obrigado recebi seu e-mail.


Atenciosamente
André Lucas Souza

TbrowseDb com Sql exemplos

Enviado: 02 Set 2020 11:33
por leandrolinauer
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+

TbrowseDb com Sql exemplos

Enviado: 04 Set 2020 05:33
por tonicm
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á

TbrowseDb com Sql exemplos

Enviado: 17 Set 2020 13:12
por modalsist
Boa tarde !

Em anexo.

Eduardo

TbrowseDb com Sql exemplos

Enviado: 20 Fev 2021 11:10
por leandrolinauer
Bom dia modalsist
Muito grato pelo exemplo, hoje que vi seu retorno, agradecido irei testar.
Valeu