TbrowseDb com Sql exemplos

Forum sobre SQL.

Moderador: Moderadores

andrelucass
Usuário Nível 3
Usuário Nível 3
Mensagens: 145
Registrado em: 25 Fev 2005 10:40

TbrowseDb com Sql exemplos

Mensagem 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
andrelucass
Usuário Nível 3
Usuário Nível 3
Mensagens: 145
Registrado em: 25 Fev 2005 10:40

TbrowseDb com Sql exemplos

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

TbrowseDb com Sql exemplos

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
andrelucass
Usuário Nível 3
Usuário Nível 3
Mensagens: 145
Registrado em: 25 Fev 2005 10:40

TbrowseDb com Sql exemplos

Mensagem por andrelucass »

Boa tarde

Você usa algo parecido
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

TbrowseDb com Sql exemplos

Mensagem 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
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
andrelucass
Usuário Nível 3
Usuário Nível 3
Mensagens: 145
Registrado em: 25 Fev 2005 10:40

TbrowseDb com Sql exemplos

Mensagem 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

modalsist
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 14 Mar 2020 09:13
Localização: São Paulo/SP

TbrowseDb com Sql exemplos

Mensagem 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
andrelucass
Usuário Nível 3
Usuário Nível 3
Mensagens: 145
Registrado em: 25 Fev 2005 10:40

TbrowseDb com Sql exemplos

Mensagem 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
andrelucass
Usuário Nível 3
Usuário Nível 3
Mensagens: 145
Registrado em: 25 Fev 2005 10:40

TbrowseDb com Sql exemplos

Mensagem por andrelucass »

Ola Eduardo Fernandes,

Obrigado recebi seu e-mail.


Atenciosamente
André Lucas Souza
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

TbrowseDb com Sql exemplos

Mensagem 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+
Harbour 3.2 + GtWVW + QT + SQLite3 + DBF + SQL (Firebird)
tonicm
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 08 Mar 2016 21:51
Localização: Porto

TbrowseDb com Sql exemplos

Mensagem 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á
modalsist
Usuário Nível 1
Usuário Nível 1
Mensagens: 3
Registrado em: 14 Mar 2020 09:13
Localização: São Paulo/SP

TbrowseDb com Sql exemplos

Mensagem por modalsist »

Boa tarde !

Em anexo.

Eduardo
Anexos
SHOWSQL.zip
(4.84 KiB) Baixado 198 vezes
leandrolinauer
Usuário Nível 3
Usuário Nível 3
Mensagens: 413
Registrado em: 16 Out 2006 10:59
Localização: Paranaíba-MS

TbrowseDb com Sql exemplos

Mensagem por leandrolinauer »

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)
Responder