Browse com ADO

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

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

Browse com ADO

Mensagem por Fernando queiroz »

Dando uma melhorada na QUERY de filtragem, ficou muito show

Código: Selecionar todos

*************************************************************************************************************
STATIC FUNCTION FILTROLOGGERAL( oServer, nCODPRO, dDatepicker1, dDatepicker2, lEntradas , lSaidas)
*************************************************************************************************************
LOCAL aResult:={};
	, oQuery;
	, cQuery

	cQuery := "SELECT LOGGERAL_NUMNOT, ";
				   + "LOGGERAL_CODPRO, ";
				   + "LOGGERAL_DATMOV, ";
				   + "LOGGERAL_CODVEN, ";
				   + "LOGGERAL_CLIFOR, ";
				   + "LOGGERAL_QUANT, ";
				   + "LOGGERAL_VALUNI, ";
				   + "LOGGERAL_OPERADOR, ";
				   + "CASE WHEN LOGGERAL_TIPMOV IS TRUE THEN 'ENTRADA' ELSE 'SAIDA' END AS STATUS_TIPO ";
				   
				   IF nCODPRO # 0
						cQuery += "from loggeral WHERE LOGGERAL_CODPRO = '" + STRZERO(nCODPRO,7,0) + "' AND "
				   ELSE
						cQuery += "from loggeral WHERE " 
				   ENDIF
				   
					cQuery  += "LOGGERAL_DATMOV BETWEEN " ;
							+ "'" + STRZERO(YEAR(dDatepicker1),4,0) + "-" + STRZERO(MONTH(dDatepicker1),2,0) + "-" + STRZERO(DAY(dDatepicker1),2,0) + "'";
							+ " AND ";
							+ "'" + STRZERO(YEAR(dDatepicker2),4,0) + "-" + STRZERO(MONTH(dDatepicker2),2,0) + "-" + STRZERO(DAY(dDatepicker2),2,0) + "'"
			
					IF lEntradas .AND. ! lSaidas
						cQuery += " AND LOGGERAL_TIPMOV IS TRUE "
					ELSEIF ! lEntradas .AND. lSaidas
						cQuery += " AND LOGGERAL_TIPMOV IS FALSE "
					ENDIF
					
//					hwg_MsgInfo( cQuery,"QUERY" ) 
								
	oQuery := oServer:Execute(cQuery)

	DO WHILE ! oQuery:Eof()
		aAdd( aResult, {oQuery:Fields( "LOGGERAL_NUMNOT" ):Value,;
						oQuery:Fields( "LOGGERAL_CODPRO" ):Value,;
						oQuery:Fields( "LOGGERAL_DATMOV" ):Value,;
						oQuery:Fields( "STATUS_TIPO" ):Value,;
						oQuery:Fields( "LOGGERAL_CODVEN" ):Value,;
						oQuery:Fields( "LOGGERAL_CLIFOR" ):Value,;
						oQuery:Fields( "LOGGERAL_QUANT" ):Value,;
						oQuery:Fields( "LOGGERAL_VALUNI" ):Value,;
						oQuery:Fields( "LOGGERAL_OPERADOR" ):Value} ) 

		oQuery:MoveNext()
	ENDDO
	oQuery:Close()

RETURN aResult
resultado
tela.jpg
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Browse com ADO

Mensagem por gilbertosilverio »

Fernando,

Estava vendo teu codigo, e pelo que entendi, voce trabalha com MARIADB e DBF, pela chamada que voce faz na consulta de produtos correto?

Da pra trabalhar com duas base de dados?
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
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

Browse com ADO

Mensagem por Fernando queiroz »

gilbertosilverio escreveu:Fernando,

Estava vendo teu codigo, e pelo que entendi, voce trabalha com MARIADB e DBF, pela chamada que voce faz na consulta de produtos correto?

Da pra trabalhar com duas base de dados?
pode sim , sem problemas

na realidade estou trabalhando com o LETODBF e MARIADB

mas ja converti todos os arquivos DBF em MARIADB

e agora estou brincando com os dois, e no futuro migrar tudo, to fazendo que nem o QUINTAS vamos brincar e aprender e depois migrar
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Browse com ADO

Mensagem por Fernando queiroz »

Fonte completo de uma rotina de CONSULTA, INCLUSÃO , EXCLUSÃO, ALTERAÇÃO em MARIADB

Gostaria da ajuda dos amigos para umas dicas de como posicionar novamente no mesmo registro do browse array apos a inc/alt
Dicas de como melhorar alguns procedimento serão bem vindas.

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 "hbgtinfo.ch"
#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 CADASTROCLIENTESMARIADB( )
****************************************
	LOCAL oDlg ;
		, oLabel1, oLabel4 ;
		, oBrowse1 ;
		, oToolbar1 ;
		, nKeyPress ;
		, oColuna, bColorBlock
	
		
		
	PRIVATE   cProgressKey:="";
			, cConsulta:="";
			, cAlvo_Consulta:="CLIENTES_NRAZ_SOC" 
			

	oServer := MySqlConnection(  )
	oServer:Open()

******************************************************************************************************************************************************
	aVENBLO 	:= {"0 - Liberado","1 - Bloqueado"}
	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 POSCHANGE {|| hwg_WriteStatus( oDlg,2,LTrim(Str( RecNo(),8))+ "/" +LTrim(Str( Lastrec(),8))) } ;
			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" )

		oBrowse1:AddColumn( HColumn():New( "Codigo",hwg_ColumnArBlock(),"C",08,0,.F.,,,,,,,,;
					{|| oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY CLIENTES_UCLIENTE" ), cAlvo_Consulta:="CLIENTES_UCLIENTE",obrowse1:Refresh(), hwg_WriteStatus( oDlg,3,"Ordem: Codigo") } ,,,,))
		oBrowse1:AddColumn( HColumn():New( "Nome Cliente/Razao Social",hwg_ColumnArBlock(),"C",65,0,.F.,,,,,,,,;
					{|| oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY CLIENTES_NRAZ_SOC" ), cAlvo_Consulta:="CLIENTES_NRAZ_SOC", obrowse1:Refresh(), hwg_WriteStatus( oDlg,3,"Ordem: Nome Cliente/Razao Social") } ,,,,))
		oBrowse1:AddColumn( HColumn():New( "CPF/CNPJ",hwg_ColumnArBlock(),"C",18,0,.F.,,,,,,,,;
					{|| oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY CLIENTES_CPFCGC"), 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"), 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('Data Alteração', hwg_ColumnArBlock() ,'D',12, 0 ,.F.,,,,,,,,,,,,))
		oBrowse1:AddColumn( HColumn():New('Operador', hwg_ColumnArBlock() ,'C',20, 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"), 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 " + cAlvo_Consulta ), obrowse1:REFRESH()},'Incluir novo Cliente','', "oToolbutton1") 
		oToolbar1:AddButton("CMDEDIT", , 0, 16, "Altera"   ,{||CADCLIENTES( oServer, LTRIM(str(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 22])), "ALTERAR"  ), oBrowse1:aArray := CARREGA_CLIENTES( oServer, "ORDER BY " + 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 " + 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,{| This, nId | RELATORIO_CLIENTES( ) }}};
																   , "oToolbutton6") 
		oToolbar1:AddButton("EXIT16BMP", , 4, 16, "Sair" ,{|| DBCLOSEALL(), 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    
	oServer:Close()
   
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_DATALT, ";
				   + "CLIENTES_USUALT, ";									   
				   + "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_DATALT" ):Value,;
						oQuery:Fields( "CLIENTES_USUALT" ):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,2,oDlg:oBrowse1:nCurrent)                  
    hwg_WriteStatus( oDlg,3,"Ordem: Nome Cliente/Razao Social")	
RETURN Nil


******************************************************
STATIC FUNCTION CADCLIENTES_EXCLUI( oDlg, oServer )
******************************************************
LOCAL oQuery;
	
	IF hwg_MsgYesNo("DESEJA excluir, Tem certeza disso ?","Excluindo Cliente")
		BEGIN SEQUENCE
			oQuery := oServer:Execute("DELETE FROM clientes WHERE CLIENTES_Id='" + LTRIM(str(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 22])) + "'")
		RECOVER 
			hwg_msginfo("REGISTRO NÃO FOI EXCLUIDO, ERRO DE ESCLUSÃO","Excluindo Cliente")
		END SEQUENCE
	ENDIF

RETURN NIL
 
***********************************************************
STATIC FUNCTION oBrowse1_onClick( oDlg, oServer ) 
***********************************************************
	IF hwg_LastKey() ==	MK_LBUTTON
		CADCLIENTES( oServer, LTRIM(str(oDlg:oBrowse1:aArray[ oDlg:oBrowse1:nCurrent, 22])), "CONSULTAR"  )
		oDlg:oBrowse1:Refresh()
		RETURN .T. 
	ENDIF
RETURN .T.
 
 
*******************************************************************
STATIC FUNCTION oBrowse1_onKeyDown( oBrowse1, nKey, oDlg, oServer )
*******************************************************************
LOCAL nPosicao:=0;
	, nKeyPress:=nkey;
	, cRegEx := "[a-zA-Z0-9 ]{1}";
	, cQuery
	
	KSETCAPS(.T.);

	IF nKeyPress # 8 .AND. AllTrim(Str(nKeyPress)) $ "34|33|37|38|39|40|20|16"
		cProgressKey:=""
		oDlg:oLabel4:settext(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, 22])), "CONSULTAR"  )
		oDlg:oBrowse1:Refresh()
		RETURN .T.   
	ELSEIF nKeyPress = VK_ESCAPE
		oDlg:Close()		
		RETURN .T. 
	ENDIF
		
	If nKeyPress # 8
		cProgressKey += Chr(nKeyPress)
		nPosicao:=AScan(oDlg:oBrowse1:aArray,cProgressKey)
		oDlg:oLabel4:settext(cProgressKey)
		cConsulta:= "WHERE " + cAlvo_Consulta + " LIKE '" + cProgressKey + "%'" + " ORDER BY CLIENTES_NRAZ_SOC"
		oBrowse1:aArray := CARREGA_CLIENTES( oServer, cConsulta )
		oDlg:obrowse1:REFRESH()
	ELSEIF nKeyPress = 8 .AND. Len(cProgressKey) >= 1
		cProgressKey:=Left(cProgressKey,Len(cProgressKey) - 1)
		nPosicao:=AScan(oDlg:oBrowse1:aArray,cProgressKey)
		oDlg:oLabel4:settext(cProgressKey)
		cConsulta:= "WHERE " + cAlvo_Consulta + " LIKE '" + cProgressKey + "%'" + " ORDER BY CLIENTES_NRAZ_SOC"
		oBrowse1:aArray := CARREGA_CLIENTES( oServer, cConsulta )
		oDlg:obrowse1:REFRESH()
	ENDIF   
	IF nPosicao # 0
		cConsulta:= "WHERE " + cAlvo_Consulta + " LIKE '" + cProgressKey + "%'" + " ORDER BY CLIENTES_NRAZ_SOC"
		oBrowse1:aArray := CARREGA_CLIENTES( oServer, cConsulta )
		oDlg:obrowse1:REFRESH()
	ENDIF  

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

LOCAL     oDlg,  oStatus1, oLine1,oLine2, oEdit1, oLabel1, oEdit2, oLabel2, oEdit3 ;
		, oLabel3, oEdit4, oLabel4, oEdit5, oLabel5, oEdit6, oLabel6, oOwnerbutton1 ;
		, oCombo1, oLabel7, oLink1, oLink2, oEdit7, oLabel8, oEdit8, oLabel9, oEdit9 ;
		, oLabel10, oEdit10, oLabel11, oEdit11, oLabel12, oLabel13, oCombo2, oLabel14 ;
		, oCombo3, oLabel15, oEdit13, oLabel16, oEdit14, oLabel17, oCombo4, oEdit12 ;
		, oCombo5, oCombo6, oLabel19, oLabel18, oEdit15, oLabel20, oEdit16, oLabel21, oEdit17 ;
		, oLabel22, oOwnerbutton2, oOwnerbutton3, oOwnerbutton4, oPanel1, oLabel24, oLabel25, oLabel26 ;
		, oPAIS, oUF, oCIDADE;
		, cEdit1 := "" , nEdit2 := 0 , nEdit3 := 0 , nEdit4 := 0 , nEdit5 := 0 , cEdit6 := "" ;
		, cEdit7 := "" , nEdit8 := 0 , cEdit9 := "" , cEdit10 := "" , nEdit11 := 0  ;
		, cEdit13 := "" , cEdit14 := ""  , nEdit12 := 0 , nCombo5 := 1 , nEdit15 := 0 ;
		, dEdit16 := DATE() , dEdit17 := DATE() ;
		, oQuery;
		, cQuery;
		 
private   aPAIS:= {};		 
		, aUF:= {};
		, aMunicipios:= {};
		, nCombo1 := 1;
		, nCombo2 := 1;
		, nCombo6 := 1;
		, nCombo3 := 1;
		, nCombo4 := 1


	hb_Default( @cAcao, "CONSULTAR" )
	hb_Default( @cClientes_Id, "0" )
		
//	hwg_MsgInfo(cAcao + "/" + cClientes_Id)
//	RETURN NIL
		
	IF cAcao = "INCLUIR"
		MEMVAR->ID			:=0
		MEMVAR->TIPCLI  	:=1 
		MEMVAR->NRAZ_SOC	:=SPACE(60) 
		MEMVAR->TIPDOC  	:=1 
		MEMVAR->CPFCGC  	:=SPACE(18) 
		MEMVAR->CPFCGC_ANT	:=SPACE(18) 
		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->CPFCGC_ANT	:=MEMVAR->CPFCGC
	ENDIF

	FOR EACH oPAIS IN SEFAZ_CIDADE
		IF oPAIS[1] == "EX"
			AAdd(aPAIS,oPAIS[3])
		ENDIF
	NEXT
	
	FOR EACH oUF IN SEFAZ_UF
		AAdd(aUF,oUF[1])
	NEXT
	
	FOR EACH oCIDADE IN SEFAZ_CIDADE
		IF oCIDADE[1] == MEMVAR->UF
			AAdd(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  
		
    ThisCAD := oDlg
	hwg_SetColorinFocus( oDlg,, 13172680 )

//    ADD STATUS PANEL TO oDlg HEIGHT 30  PARTS 200,120,300 
   @ 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( oDlg, oServer ) }
		
   @ 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  {|| oEdit3_onLostFocus(  ) }
		
   @ 404,81 SAY oLabel7 CAPTION "Tipo Contribuinte"  SIZE 112,21 
   @ 521,79 GET COMBOBOX oCombo1 VAR nCombo1 ;
        ITEMS 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 nCombo4 ;
        ITEMS aPAIS  ;
        SIZE 259,24  DISPLAYCOUNT 8   
   @ 78,376 SAY oLabel14 CAPTION "UF"  SIZE 20,24 
   @ 105,374 GET COMBOBOX oCombo2 VAR nCombo2 ;
        ITEMS aUF  ;
        SIZE 65,24  DISPLAYCOUNT 8 ;
		ON CHANGE {|| oCombo2_onChange( oDlg, aUF[nCombo2] ),oCombo3:REFRESH() }
		
   @ 33,407 SAY oLabel15 CAPTION "Municipio"  SIZE 65,24 
   @ 105,405 GET COMBOBOX oCombo3 VAR nCombo3  ITEMS 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  {|| oEdit10_onLostFocus(  ) }  
   
   @ 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(  ) }

   @ 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( 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 nCombo6 ITEMS aVENBLO SIZE 154,24  ;
		ON CHANGE {|| oCombo6_onChange( 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"
		oCombo2_onChange( oDlg, MEMVAR->UF )	
	ENDIF

	oCombo6:SetItem( Ascan(aVENBLO,MEMVAR->VENBLO ) )		
	oCombo1:SetItem( Ascan(aISENTO,MEMVAR->ISENTO ) )	
	oCombo4:SetItem( Ascan(aPAIS,RTRIM(MEMVAR->PAIS) ) )	
	oCombo2:SetItem( Ascan(aUF,RTRIM(MEMVAR->UF) ) )	
	oCombo3:SetItem( Ascan(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.
ELSE
	oDlg:oOwnerbutton2:ENABLE()	
	RETURN .T.
ENDIF

**************************************************
STATIC FUNCTION oCombo2_onChange( oDlg, mUF )
**************************************************
LOCAL oCIDADE
	DO WHILE .T.
	
		FOR nI = Len( aMunicipios ) TO 1 STEP -1
		   hb_ADel( aMunicipios, nI, .T. )
		NEXT
//		FOR nI := 1 TO Len(aMunicipios)
//			hb_ADel( aMunicipios, nI, .T. )
//		NEXT
		IF Len(aMunicipios) <= 0
			EXIT
		ENDIF
	ENDDO
	FOR EACH oCIDADE IN SEFAZ_CIDADE
		IF oCIDADE[1] == mUF
			AAdd(aMunicipios,oCIDADE[3])
		ENDIF
	NEXT
	oDlg:oCombo3:SetItem( Ascan(aMunicipios,RTRIM(MEMVAR->CIDADE) ) )
//	nCombo3 := 1
 RETURN( aMunicipios )
******************************************************
STATIC FUNCTION CADASTROCLIENTES_CONSULTA_CNPJ(  )
******************************************************
LOCAL oDlg,  oOwnerbutton2, oOwnerbutton3, oCNPJ, oLabel1, oLabel2, oBitmap1, oCombo1

 Local  cCNPJ := mCPFCGC , nCombo1 := 1
	SELE CERTIFICADO
	IF !DBSEEK(rtrim(hwg_GetComputerName()))
		hwg_MsgInfo("Este Computador não possui CERTIFICADO DIGITAL instalado"+ HB_EOL()+"Pesquisa não poderá ser efetuada")
		SELE CLIENTES
		return .T.
	endif
	SELE CLIENTES 

	INIT DIALOG oDlg TITLE "CONSULTA CNPJ"  ;
		ICON MEMVAR->SGC_ICON  ;
		AT 0, 0 SIZE 445,168 CLIPPER  NOEXIT  
		
    ThisCNPJ := oDlg

	hwg_SetColorinFocus( oDlg,, 13172680 )

   @ 24,35 BITMAP oBitmap1  SHOW 'searchonline' FROM RESOURCE  SIZE 62,62  
		
   @ 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(cCNPJ,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 aUF ;
        SIZE 63,24 DISPLAYCOUNT 5  

   ACTIVATE DIALOG oDlg CENTER


RETURN oDlg:lresult
***************************************************************
STATIC FUNCTION CADASTROCLIENTES_PESQUISA_CNPJ( cCNPJ,cUF)
***************************************************************
	DBSELECTAREA("CERTIFICADO")
	IF !DBSEEK(rtrim(hwg_GetComputerName()))
		hwg_MsgInfo("Computador sem certificado digital instalado"+ HB_EOL()+"A Operação não poderá ser efetuada")
		DBSELECTAREA("CLIENTES")
		RETURN NIL
	endif
	DBSELECTAREA("CLIENTES")
	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(CERTIFICADO->NOMCERT)
//	hwg_MsgInfo("["+TRIM(cCnpj)+"]"+"["+cUF+"]")
	cRetorno:=oSefaz:NFeConsultaCadastro( TRIM(cCnpj), cUF, oSefaz:cCertificado, FLAG->n_tpAmb )

	if XmlNode(cRetorno, "cStat") $ "111,112"
		cStat       :=XmlNode(cRetorno, "cStat")
		xMotivo    	:=XmlNode(cRetorno, "xMotivo")
		m->leitura  :=XmlNode(cRetorno, "infCad")
		mCPFCGC     :=cCNPJ
		mNRAZ_SOC 	:=XmlNode(cRetorno, "xNome") + space(60-len(XmlNode(cRetorno, "xNome")))
		mNRAZ_FANT	:=XmlNode(cRetorno, "xFant") + space(60-len(XmlNode(cRetorno, "xFant")))
		mINSEST   	:=XmlNode(cRetorno, "IE") + space(18-len(XmlNode(cRetorno, "IE")))
		mISENTO   	:=XmlNode(cRetorno, "cSit")
		mCEP      	:=SUBSTR(XmlNode(cRetorno, "CEP"),1,5)+"-"+SUBSTR(XmlNode(cRetorno, "CEP"),6,3)
		mNUMERO   	:=val(XmlNode(cRetorno, "nro"))
		mBAIR     	:=XmlNode(cRetorno, "xBairro")
		mCIDADE   	:=XmlNode(cRetorno, "xMun")
		mUF       	:=XmlNode(cRetorno, "UF")
		mENDER    	:=XmlNode(cRetorno, "xLgr")
		IF cStat = "112"
			cRetorno := "ACESSE AO SINTEGRA: http://www.sintegra.gov.br"+ HB_EOL()+ "PARA CONSULTA DETALHADA"
		ENDIF
		IF LEN(cCNPJ) < 14
			mCPFCGC:=replicate("0",14-LEN(cCNPJ))+cCNPJ
		endif

//		hwg_MsgInfo(mCPFCGC)

		IF ! ValidIE( RTRIM(mINSEST), mUF )
			mINSEST:="0"+mINSEST
		ENDIF
		IF mISENTO = "0"
			mISENTO = "2"
			mINSEST:= SPACE(18)
		ENDIF
//		hwg_MsgInfo( ;
//                "STATUS: " + cStat + hb_Eol()+ ;
//                "MOTIVO: " + xMotivo + hb_Eol()+hb_Eol()+ ;
//                "CNPJ: " + cCNPJ + hb_Eol() + ;
//                "RAZAO SOCIAL: " + mNRAZ_SOC + hb_Eol() + ;
//                "NOME FANTASIA: " + mNRAZ_FANT + hb_Eol() + ;
//                "INSC.EST.: " + mINSEST + hb_Eol() + ;
//                "TIPO CONT.: " + mISENTO + hb_Eol() + ;
//                "CEP.: " + mCEP + hb_Eol() + ;
//                "ENDERECO: " + mENDER + hb_Eol() + ;
//                "NUMERO: " + XmlNode(m->leitura, "nro") + hb_Eol() + ;
//                "BAIRRO: " + mBAIR + hb_Eol() + ;
//                "CIDADE: " + mCIDADE + hb_Eol() + ;
//                "UF: " + mUF + hb_Eol() + hb_Eol() ,"CONSULTA CADASTRO DE CONTRIBUINTE")
	ELSE
		hwg_MsgInfo("STATUS: " + XmlNode(cRetorno, "cStat") + hb_Eol() + "MOTIVO: " + XmlNode(cRetorno, "xMotivo") + hb_Eol()+ hb_Eol() ,"CONSULTA CADASTRO DE CONTRIBUINTE")
		IF XmlNode(cRetorno, "cStat") $ "259"
			mISENTO   :="9"
		ENDIF
	ENDIF
	ThisCAD:oEdit2:REFRESH()
	ThisCAD:oEdit1:REFRESH()
	ThisCAD:oEdit3:REFRESH()
	ThisCAD:oEdit8:REFRESH()	
	ThisCAD:oEdit9:REFRESH()	
	ThisCAD:oEdit11:REFRESH()
	ThisCAD:oEdit13:REFRESH()
	ThisCAD:oCombo2:SetItem( Ascan(aUF,mUF ) )
	ThisCAD:oCombo2:REFRESH()	
	ThisCAD:oCombo3:SetItem( Ascan(aMunicipios,RTRIM(mCIDADE) ) )
	ThisCAD:oCombo3:REFRESH()
RETURN
   
***********************************************************
static FUNCTION CADASTROCLIENTES_CONSULTA_CEP( mCEP )
***********************************************************
LOCAL oHttp, cXML, cCep
LOCAL cRes, cResTxt, cUf, cCidade, cTipo, cEnde, cBairro
 
DO WHILE .T.
	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->Uf 			:= XmlNode(cXml, "uf") 
	MEMVAR->CIDADE		:= XmlNode(cXml, "cidade")
	MEMVAR->ENDER		:= XmlNode(cXml, "logradouro") 
	MEMVAR->BAIR		:= XmlNode(cXml, "bairro") 

	ThisCAD:oEdit8:REFRESH()
	ThisCAD:oEdit9:REFRESH()
	ThisCAD:oEdit11:REFRESH()
	ThisCAD:oEdit13:REFRESH()
	ThisCAD:oCombo2:SetItem( Ascan(aUF,MEMVAR->Uf ) )
	ThisCAD:oCombo2:REFRESH()	
	ThisCAD:oCombo3:SetItem( Ascan(aMunicipios,MEMVAR->CIDADE ) )
	ThisCAD:oCombo3:REFRESH()
	
	return .T.
 	
ENDDO
*****************************************
STATIC FUNCTION oEdit10_onLostFocus( )
*****************************************
   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( valor )
*****************************************

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

RETURN 
********************************************
STATIC FUNCTION oEdit18_onInit( valor )
********************************************
   IF substr(valor,1,1) = "0"
             ThisCAD:oedit18:Enable()
             ThisCAD:oedit12:Enable()
         ELSE
             ThisCAD:oedit18:Disable()
             ThisCAD:oedit12:Disable()
         ENDIF
      RETURN
************************************************************		  
STATIC FUNCTION VERIFICA_CPFCNPJ( oDlg, oServer )
************************************************************	
LOCAL cQuery;
	, oQuery_cpfcnpj;

	IF RTRIM(MEMVAR->CPFCGC) # RTRIM(MEMVAR->CPFCGC_ANT)
		IF LEN(RTRIM(MEMVAR->CPFCGC)) < 12
			IF !VDV2(MEMVAR->CPFCGC)
				RETURN .F.
			ENDIF
		ELSE
			IF !VCGC(MEMVAR->CPFCGC)
				RETURN .F.
			ENDIF
		ENDIF
		
		cQuery 			:= "SELECT CLIENTES_NRAZ_SOC, CLIENTES_CPFCGC FROM CLIENTES WHERE CLIENTES_CPFCGC = " + MEMVAR->CPFCGC
		oQuery_cpfcnpj 	:= oServer:Execute(cQuery)
		
		IF ! oQuery_cpfcnpj:Eof()
		   hwg_MsgInfo("CPF/CNPJ já existe no cadastro" + HB_EOL() + oQuery_cpfcnpj:Fields( "CLIENTES_NRAZ_SOC" ):Value +HB_EOL() + "CNPJ/CPF: "+ oQuery_cpfcnpj:Fields( "CLIENTES_CPFCGC" ):Value, "Atenção !!!")
		   IF PERG( "Continua a Fazer o Cadastro com CNPJ/CPF já cadastrado ?" ) = "N"
				oQuery_cpfcnpj:close()
				RETURN .F.
		   ENDIF
		ENDIF
		oQuery_cpfcnpj:close()	
	ENDIF
	
RETURN .T.
********************************************
STATIC FUNCTION oEdit3_onLostFocus
********************************************
*   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, oUF, oCIDADE;
	, cQuery1;
	, cQuery2;

	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 nCombo1 = 0
			nCombo1 := 1
		ENDIF		
		cQuery1 += "CLIENTES_ISENTO, "
		cQuery2	+="'" + SUBSTR(aISENTO[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 += "'" + aPAIS[nCombo4] + "', " 


		
		FOR EACH oPAIS IN SEFAZ_CIDADE
			IF oPAIS[3] == aPAIS[nCombo4]
				cQuery1 += "CLIENTES_CODPAIS, "
				cQuery2 += "'" + SUBSTR(oPAIS[2],3,4) + "', "
			ENDIF
		NEXT 				
		
		cQuery1 += "CLIENTES_UF, "
		cQuery2 += "'"	+ aUF[nCombo2] + "', "  

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

		
		FOR EACH oCIDADE IN SEFAZ_CIDADE
			IF oCIDADE[1] == aUF[nCombo2] .AND. oCIDADE[3] == aMunicipios[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(aVENBLO[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)
		
		oQuery := oServer:Execute(cQuery1+cQuery2)
				
	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 nCombo1 = 0
			nCombo1 := 1
		ENDIF		
		
		cQuery1 += "CLIENTES_ISENTO = '" + SUBSTR(aISENTO[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 = '" + aPAIS[nCombo4] + "', " 
		
		FOR EACH oPAIS IN SEFAZ_CIDADE
			IF oPAIS[3] == aPAIS[nCombo4]
				cQuery1 += "CLIENTES_CODPAIS = '" + SUBSTR(oPAIS[2],3,4) + "', "
			ENDIF
		NEXT 				
				
		cQuery1 += "CLIENTES_UF = '"	+ aUF[nCombo2] + "', "  
		
		FOR EACH oCIDADE IN SEFAZ_CIDADE
			IF oCIDADE[1] == aUF[nCombo2] .AND. oCIDADE[3] == aMunicipios[nCombo3]
				cQuery1 += "CLIENTES_CODMUN = '"	+ oCIDADE[2] + "', " 
			ENDIF
		NEXT   
   
		cQuery1 += "CLIENTES_CIDADE = '" + aMunicipios[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(aVENBLO[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 + "'"

		
		oQuery := oServer:Execute(cQuery1)
		
	ENDIF

return NIL



*****************************************
STATIC Function EMAIL_VALIDO(cmail)
*****************************************
Local cRegEx

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

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

************************************************************
STATIC FUNCTION RELATORIO_CLIENTES( )
************************************************************ 
	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 
	
	DBSELECTAREA("CLIENTES")
	Ordsetfocus(2)
	CLIENTES->( DBGOTOP() )
	
	
	IF  oPDF:nPrinterType ==  PDFCLASS_LANDSCAPE
		
		oPDF:Begin()

		nLinha	:= 100
		nPagina := 1
		
		DO WHILE ! EOF()
			IF 	nLinha	> 96
				oPDF:AddPage()
				
				nMaxCol := oPDF:MaxCol()
				nMaxRow := oPDF:MaxRow()

				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(FLAG->n_xNome), nil, 10, "Helvetica-Bold", Nil, Nil )
				oPDF:DrawText( 3.5, 42, RTRIM(FLAG->n_xLgr) + ', ' + RTRIM(FLAG->n_nro), Nil, 8, "Helvetica", Nil, Nil )
				oPDF:DrawText( 5.0, 42,'BAIRRO - ' + RTRIM(FLAG->n_xBairro), Nil, 8, "Helvetica", Nil, Nil )
				oPDF:DrawText( 6.4, 42, "CEP " +FLAG->n_CEP + ' - ' + RTRIM(FLAG->n_xMun) + ' - ' + FLAG->n_xUF + " - FONE: " +FLAG->n_fone, Nil, 8, "Helvetica", Nil, Nil )
				oPDF:DrawText( 8.0, 42, 'CNPJ-'+RTRIM(FLAG->n_CNPJ) + '   Insc.Est.-' + RTRIM(FLAG->n_IE) , 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(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
				nHightLin:=3

				nLenItem := 20
				nLenUnit := 22
				nLenVlrUni := 27
				nLenDescri := ( nMaxCol - ( nLenItem + nLenUnit +  nLenVlrUni ) )
				
				oPDF:DrawText( nLinha, 1, "CODIGO", Nil, 10, "Helvetica", Nil, Nil )
				oPDF:DrawText( nLinha, 16, "NOME/RAZAO SOCIAL", Nil, 10, "Helvetica", Nil, Nil )

				nLinha += 3

			ENDIF
			
			
			oPDF:DrawText( nLinha, 1, CLIENTES->UCLIENTE, Nil, 12, "Courier-Bold", Nil, Nil )
			oPDF:DrawText( nLinha, 16, CLIENTES->NRAZ_SOC, Nil, 10, "Helvetica", Nil, Nil )
			nLinha += 2
			DBSKIP()
		ENDDO   
		
		oPDF:DrawLine( nLinha, 0, nLinha, nMaxCol, 1 ) 
		
		oPDF:End(  )
		
	ELSE  
	
		DBSELECTAREA("CLIENTES")
		Ordsetfocus(2)
		CLIENTES->( DBGOTOP() )
	
		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(FLAG->n_xNome), nil, 10, "Helvetica-Bold", Nil, Nil )
		oPDF:DrawText( 6, 0, RTRIM(FLAG->n_xLgr) + ', ' + RTRIM(FLAG->n_nro), Nil, 8, "Helvetica", Nil, Nil )
		oPDF:DrawText( 7, 0,'BAIRRO - ' + RTRIM(FLAG->n_xBairro), Nil, 8, "Helvetica", Nil, Nil )
		oPDF:DrawText( 8, 0, "CEP " +FLAG->n_CEP + ' - ' + RTRIM(FLAG->n_xMun) + ' - ' + FLAG->n_xUF + " - FONE: " +FLAG->n_fone, Nil, 8, "Helvetica", Nil, Nil )
		oPDF:DrawText( 9, 0, 'CNPJ-'+RTRIM(FLAG->n_CNPJ) + '   Insc.Est.-' + RTRIM(FLAG->n_IE) , 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/RAZAO SOCIAL", Nil, 8, "Helvetica", Nil, Nil )	
		oPDF:DrawLine( 12, 0, 12, nMaxCol, 1 )
		
		
		nLinha 	 := 13
		nLenItem := 20
		nLenUnit := 7
		nLenVlrUni := 19
		nLenDescri := ( nMaxCol - ( nLenItem + nLenUnit +  nLenVlrUni ) )
			
		DO WHILE ! EOF()	
		
			IF 	nLinha	> 70
				oPDF:AddPage()
				nLinha	:= 0
			ENDIF
			
			oPDF:DrawText( nLinha, 0, CLIENTES->UCLIENTE, Nil, 08, "Helvetica", Nil, Nil )
			oPDF:DrawText( nLinha++, 7, CLIENTES->NRAZ_SOC, Nil, 08, "Helvetica", Nil, Nil )
			CLIENTES->(DBSKIP())
	
		ENDDO   

		oPDF:End(  )	

	ENDIF
	
	
	oPDF:PrintPreview(  )

RETURN NIL	

tela.jpg
tela.jpg
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Browse com ADO

Mensagem por gilbertosilverio »

Ola Amigos,

Baseado neste exemplo do Fernando, consegui entender e fazer alguns testes com SQL.

Depois de tentar por um bom tempo, vi que meu erro estava na conexão com o banco de dados, por mais que fizesse não conseguia conectar.

O meu maior erro, um erro de principiante e estar compilando com 32bits e estar tentando conectar com 64... kkkk

Mais agora estou com uma duvida:

Instalei em minha maquina o MariaDb e o driver mariaodbc 3.1, conforme o exemplo do Fernando, só que no meu servidor existem outros drivers ODBC, e e ai te enrosquei de novo.

Qual driver usar e onde consigo as configurações para a minha comunicação com o banco de dados funcionar.

No meu servidor um W2008 estão instalados estes drivers, qual devo usar ou posso simplesmente instalar o Mariaodbc 3.1, sendo que no server tem o SQL e o MYSQL, que são usados por outros aplicativos.

Vou precisar conectar com outro server linux usando ubuntu, onde esta instalado o MYSQL, da minha maquina consigo conectar com o OBDC do mariadb, posso instalar este drive la no meu w2008 e não vou derrubar os outros sistemas.

Encontrei aqui no forum diversas configurações, mais fiquei em duvida qual usar.

Ja pesquisei muito, encontrei muita coisa, e nada me ajudou a entender.

Agradeço a ajuda.
Anexos
t1.png
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Browse com ADO

Mensagem por JoséQuintas »

O interessante do driver do MariaDB 3.1, é que ele conecta com todos.

Quem precisa do ODBC é o aplicativo, não o servidor.
Só vai instalar no servidor se rodar o aplicativo nele.

ODBC 32 bits pra aplicativo 32 bits - APLICATIVO 32 BITS (não tem a ver com sistema operacional aqui).

Cada um é independente. Pode instalar todos esses, e ir removendo o que está fora de uso.
NÃO atrapalha ter vários, mas vai indicar no aplicativo qual está usando, e esse sim precisa estar instalado.
É PELO NOME, NÃO TEM substituição automática, vai ser usado exatamente o nome que colocar no aplicativo.
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/
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Browse com ADO

Mensagem por gilbertosilverio »

Quintas,

Muito obrigado.

Instalei no w2008 o Odbc do Mariadb e funcionou perfeitamente, consegui me conectar com o outro servidor linux onde estão as bases de dados que necessito.
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Browse com ADO

Mensagem por Itamar M. Lins Jr. »

Ola!
90% dos meus browses não são editáveis.
Funciona dessa forma conforme exemplo do Fernando.
Acredito que usando SQLMIX, não vamos precisar de alguns códigos. Vamos diminuir consideravelmente. Eu quero usar acesso nativo com SQLMIX, mas está dando erro na hora de criar a lib no HB_3.4.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Browse com ADO

Mensagem por Itamar M. Lins Jr. »

Ola!
Tem que criar o browse da mesma forma que fazemos com HTML.
Temos que usar a "flag" LIMITE no código SQL e no browse guardar a posição. Chamar 50 de cada vez, senão fica horrível, nem funciona, precisamos PAGINAR, as consultas SQL com mais de 10 mil registros por exemplo, não podemos chamar tudo de vez.
Esse são os detalhes, o pulo do gato que ainda não vi, e as consultas PAI->FILHO de milhares de NFe por exemplo.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
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

Browse com ADO

Mensagem por Fernando queiroz »

Itamar M. Lins Jr. escreveu:Ola!
Tem que criar o browse da mesma forma que fazemos com HTML.
Temos que usar a "flag" LIMITE no código SQL e no browse guardar a posição. Chamar 50 de cada vez, senão fica horrível, nem funciona, precisamos PAGINAR, as consultas SQL com mais de 10 mil registros por exemplo, não podemos chamar tudo de vez.
Esse são os detalhes, o pulo do gato que ainda não vi, e as consultas PAI->FILHO de milhares de NFe por exemplo.

Saudações,
Itamar M. Lins Jr.
Itamar tenho carregado no máximo 500 registro, deixando a consulta trazer os específicos, fiz teste de carga via internet e ficou com um tempo admissível , se a conexão estiver muito ruim podemos ate baixar a quantidade para 100 registros, no geral o cliente faz um filtro nas telas de consulta.

no caso de relatórios ou processos com todos os registro ainda nao testei
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Browse com ADO

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Tem que criar o browse da mesma forma que fazemos com HTML.
Temos que usar a "flag" LIMITE no código SQL e no browse guardar a posição.
Chamar 50 de cada vez, senão fica horrível, nem funciona, precisamos PAGINAR, as consultas SQL com mais de 10 mil registros por exemplo, não podemos chamar tudo de vez.Esse são os detalhes, o pulo do gato que ainda não vi, e as consultas PAI->FILHO de milhares de NFe por exemplo.
50 de cada vez? acho que tá brincando
Tenho limitado a 2.000, mas por causa de relacionamento entre campos numéricos/não numéricos.
pai e filho? do tipo pedido e produtos? só fazer o comando SQL.

No caso do ADO, o pulo do gato é fazer tudo com ADO, SEM CONVERSÃO.
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Browse com ADO

Mensagem por Itamar M. Lins Jr. »

Ola!
50 de cada vez? acho que tá brincando
Isso vai depender da quantidade de fields(campos) que tem nesses 50 registros. Mas mesmo assim, não quis dizer exatamente 50, pode ser mais...
Meu cadastro de clientes é enorme, tem fields para dar e vender...
do tipo pedido e produtos? só fazer o comando SQL.
É isso, mas tem gente que edita no browse. Ai depois que edita, tem que salvar. Com DBF não tem botão salvar, entendeu ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Browse com ADO

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Meu cadastro de clientes é enorme, tem fields para dar e vender...
Mas aí que está o ponto.
Porque o browse de todos os campos?
Porque essa mania antiga de editar limitado no próprio browse?
Normalmente browse é pra pesquisa, e não pra ficar alterando, salvo exceções.
O ganho de velocidade é justamente em trazer somente o que precisa, e nada mais, e é justamente aí que o DBF perde, porque trás sempre TUDO.
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/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Browse com ADO

Mensagem por asimoes »

Nas minhas Grids eu coloco os campos chaves da consulta e os demais eu coloco em uma janela dialog, fica ruim a visualização de muitas colunas na grid.

Exemplo: CPF, NOME, TELEFONE se o usuário der um duplo click abre uma janela modal com o restante do cadastro, aproveitando o mesmo resultset

Se precisar editar, a própria janela modal está habilitada para isso, nada de edição na grid

A grid que eu uso é com vetor, não uso BROWSE DBF
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Browse com ADO

Mensagem por Itamar M. Lins Jr. »

Ola!
, e é justamente aí que o DBF perde, porque trás sempre TUDO.
Não, no browse só traz o que cabe nas linhas do browse. Usando LetoDbf é assim.
Isso é um problema da rede mapeada, usando servidores de DBF, NetIO, LetoDbf, ADS, isso não "ecziste"
Como eu disse, normalmente eu não edito no browse. Mas existe essa possibilidade.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder