Página 2 de 3

ACBr LIB

Enviado: 22 Out 2019 21:52
por Nascimento
"Fernando queiroz" escreveu :Uso a SEFAZCLASS , inclusive já fiz alterações nela para ajustes junto com o Quintas, hoje acho super simples usar

isso é ótimo , é admirável o trabalho do nosso amigo Quintas isso é inquestionável, eu até tentei usa-la até porque sou um defensor ferrenho do harbour/clipper
enquanto alguns amigos falam de migrar eu penso vou migrar porque se o harbour até agora vem suprindo minhas necessidades?
mais eu tentei, usar a sefazclass, como não consegui usala satisfatoriamente, voltei ao acbr, que não é essas maravilhas o monitor, mais ta funcionando
*
me anima mais um pouco o amigo fernando falando sobre, da mais ênfase de eu tentar novamente a usar ela!, que pra mim seria o ideal, não depender se soft de terceiros
usar uma ferramenta que eu conheço, "não tão bem quanto o amigo Quintas " que eu fico meio perdido nas classes e Methodos, mais ainda arranho rsrs
*
outro tempo eu até falei de juntar as forças, para ideias implementações duvidas sobre a sefazclass, porque as vezes é como falei anteriormente, tem a função mais o programador
não sabe que tem mais em fim , vou olhar alguns post´s , ver se acho aqui no fórum alguns exemplos práticos da sefazclass, e vamos que vamos!
*
se for possível o amigo Fernando queiroz postar alguns exemplos práticos de uso , seria muito enriquecedor para este fórum

ACBr LIB

Enviado: 22 Out 2019 22:24
por JoséQuintas
Nascimento escreveu:se for possível o amigo Fernando queiroz postar alguns exemplos práticos de uso , seria muito enriquecedor para este fórum
Quer testar, vamos lá um passo a passo rápido:

Na pasta de DLLs vém capicom.dll e msxml5.dll
- instale as DLLs
- instale o certificado
Compile o test.exe, e faça os testes, sem precisar nem mexer em programa nenhum.
Deu certo... aí olha as rotinas e faz igual no seu aplicativo.

Acho o melhor ponto de partida, assim começa confirmando se o ambiente está ok, e só depois mexe com programação.

Importante no teste: a primeira coisa é selecionar o certificado, que é base pra todo restante

ACBr LIB

Enviado: 23 Out 2019 01:36
por fladimir
No SVN já tem as classes em Harbour pra uso com a DLL

As classes q tem em Harbour são pra Boleto, NFE/NFCe e SAT

Com relação a bancos e carteiras já tem vários e o q é interessante é q mudei do CobrebemX para o ACBr a cerca de 1 ano e meio e qdo eu comecei no ACBr com bancos só tinha uns 6, agora da uma olhada

BancoDoBrasil
Santander
CaixaEconomica|
CaixaSicob|
Bradesco|
Itau|
BancoMercantil|
Sicred|
Bancoob|
Banrisul|
Banestes|
HSBC|
BancoDoNordeste|
BRB|
BicBanco|
BradescoSICOOB|
BancoSafra|
SafraBradesco|
BancoCECRED|
BancoDaAmazonia|
BancoDoBrasilSICOOB

Acredito q por ser um projeto aberto cresce vertiginosamente, o q é bom pra todos.

ACBr LIB

Enviado: 12 Nov 2019 11:38
por rubens
Bom dia..

Alguém tem um exemplo de uso prático com a ACBRLIB?
tipo imprimir uma NFE? já seria um começo..
lá no ACBR tem uns exemplos em harbour mas ainda é muito vago...
o ideal seria um tutorialzinho...

obg..

Rubens

ACBr LIB

Enviado: 12 Nov 2019 15:04
por Fernando queiroz
SEGUE exemplo de uso da SEFAZCLASS , partindo do principio que o XML esta tudo OK

Código: Selecionar todos

***************************************************************************************
* MODULO DE ASSINATURA , TRANSMISSAO, AUTORIZACAO, RETORNO E IMPRESSAO
***************************************************************************************
		ThisNFE:oProgressbar1:Set(,60)
		ThisNFE:oLabel5:SetText("Assinando NF-e                                                    ")
********* ASSINATURA VIA SEFAZCLASS **********************************************************************************************************

		SELE CERTIFICADO
		IF !DBSEEK(rtrim(hwg_GetComputerName()))
			hwg_MsgInfo("Computador sem o CERTIFICADO DIGITAL instalado"+ HB_EOL()+"A Operação não poderá ser efetuada")
			SELE NOTAFE
			ThisNFE:oOwnerbutton4:DISABLE()
			RETURN NIL
		endif
		
		SELE NOTAFE

		cTxtXml:=M->cXml		
		oSefaz           	:= SefazClass():New()
		oSefaz:cUF       	:= FLAG->n_xUF 
		oSefaz:cAmbiente 	:= FLAG->n_tpAmb		
		oSefaz:cCertificado := TRIM(CERTIFICADO->NOMCERT)
//		oSefaz:cVersao      := '3.10'
		ThisNFE:oProgressbar1:Set(,80)
		ThisNFE:oLabel5:SetText("Aguardando Retorno                                                ")

**********************************************************************************************************************************************	
        IF hlusuario( ) # "DEMONTRACAO"                                      
			oSefaz:NFEloteenvia( cTxtXml )
		ENDIF
		IF RDDSETDEFAULT() == "LETO"
			Leto_MemoWrite( cPrefixo + ".xml", oSefaz:cXmlDocumento )	
		ELSE
			hb_MemoWrit( cPrefixo + ".xml", oSefaz:cXmlDocumento )	
		ENDIF
		
//		hb_MemoWrit( cPrefixo + "_1_documento.xml", oSefaz:cXmlDocumento )
//		hb_MemoWrit( cPrefixo + "_2_Envio.xml", oSefaz:cXmlEnvio )
//		hb_MemoWrit( cPrefixo + "_3_Soap.xml", oSefaz:cXmlSoap  )
//		hb_MemoWrit( cPrefixo + "_4_Retorno.xml", oSefaz:cXmlRetorno  )
//		hb_MemoWrit( cPrefixo + "_5_Protocolo.xml", oSefaz:cXmlProtocolo   )
//		hb_MemoWrit( cPrefixo + "_6_Recibo.xml", oSefaz:cXmlRecibo  )
//		hb_MemoWrit( cPrefixo + "_7_Autorizado.xml", oSefaz:cXmlAutorizado )
//		hwg_MsgInfo( "Status: " + oSefaz:cStatus + hb_Eol() + oSefaz:cMotivo )

		IF ! oSefaz:cStatus $ "100,101,150,301,302"
			ThisNFE:oLabel5:SetText(oSefaz:cMotivo)
			hwg_MsgInfo(oSefaz:cStatus + oSefaz:cMotivo)
			
		ELSE
			ThisNFE:oLabel5:SetText(oSefaz:cStatus + oSefaz:cMotivo)
			SELE NOTAFE
			IF RLOCK()
				NOTAFE->FL_SITUAC := XmlNode(oSefaz:cXmlRetorno, "cStat")
				NOTAFE->FL_MOTIVO := XmlNode(oSefaz:cXmlRetorno, "xMotivo")
				NOTAFE->b_dhEmi	  := XmlNode(M->cXml, "dhEmi")
				DBUNLOCK()
			ENDIF
			ThisNFE:oProgressbar1:Set(,90)
			ThisNFE:oLabel5:SetText("Gerando DANFE em PDF                                              ")	
		    oSpedDa := hbNfeDaGeral():New()
			IF RDDSETDEFAULT() == "LETO"
				Leto_MemoWrite( cPrefixo + ".xml", oSefaz:cXmlAutorizado )
				oSpedDa:ToPdf( oSefaz:cXmlAutorizado, cPrefixo + ".PDF" )
			ELSE
				hb_MemoWrit( cPrefixo + ".xml", oSefaz:cXmlAutorizado )
				oSpedDa:ToPdf( oSefaz:cXmlAutorizado, cPrefixo + ".PDF" )			
			ENDIF
			ThisNFE:oProgressbar1:Set(,100)
			ThisNFE:oLabel5:SetText("NF-e Concluida com sucesso                                        ")
//			hwg_MsgInfo(cPrefixo + ".PDF")



*
*	---> ENVIA EMAIL DA NOTA FISCAL AUTOMATICAMENTE SE TIVER EMAIL NO CADASTRO
*	
			IF EMAIL_VALIDO(LOWER(NOTAFE->e_eMAIL))
				IF .NOT. EMPTY(NOTAFE->e_eMAIL)
					
					cFrom  		:= "sgcnfe@gmail.com"
					cPassword	:= "suasenha" 
					cTo      	:= LOWER(NOTAFE->e_eMAIL) 
					cHost    	:= "google" 

					cSubject := "SGC - NOTA FISCAL ELETRONICA NF-E"
					cBody    := "emitida por: " + HB_EOL() +;
											  FLAG->n_xFant+ HB_EOL() +;
											  FLAG->n_xNome+ HB_EOL() +;
											  "CPF/CNPJ: " + FLAG->n_CNPJ + HB_EOL() +;
											  "NOTA FISCAL ELETRONICA Nr. " + NOTAFE->b_serie + "/" + NOTAFE->b_nNF + HB_EOL() + HB_EOL() +;
								"para: " + HB_EOL() + ;
											  RTRIM(NOTAFE->e_xNome) + HB_EOL() +;
											  "CPF/CNPJ: " + RTRIM(NOTAFE->e_CNPJ) + HB_EOL() +;
											  "VALOR: R$ " +  LTRIM(STR(NOTAFE->w_vNF,14,2)) + HB_EOL()+ HB_EOL() +;
								"chave acesso: " + substr(NOTAFE->a_Id,4,44) + HB_EOL()+ HB_EOL() +;
								"Obs: E-mail enviado automaticamente por SGC-SISTEMA DE GESTAO DE COMERCIO, nao responda."
					
					aFilesAttch := {cPrefixo + ".xml",cPrefixo + ".PDF"}
					
					Email_Envia( cFrom, cPassword, cTo, cHost, aFilesAttch, cBody, cSubject )			

				ENDIF 
			ENDIF
*
*	---> ABRE O PDF PARA IMPRESSAO ATRAVEZ DO PROGRAMA PADRAO
*

			WAPI_ShellExecute( NIL, "OPEN", cPrefixo + ".PDF" ,"",NIL,5 )

		ENDIF
//		NFEITENS->( DBCLOSEAREA() )
//		FILEDELETE(cArquivoNFEItem)

	
return nil
Acho que a maior dificuldade é criar o XML que nada mais é que uma tira de TAGs que vou montando

Código: Selecionar todos

		M->cXml := '<NFe xmlns="http://www.portalfiscal.inf.br/nfe">'
		M->cXml += '<infNFe Id="'+ NOTAFE->a_Id + '" versao="4.00">'
		M->cXml += '<ide>'
		M->cXml += '<cUF>'      +NOTAFE->b_cUF                       +'</cUF>'
		M->cXml += '<cNF>'      +NOTAFE->b_cNF                       +'</cNF>'
		IF NOTAFE->b_finNFe = "4"
			M->cXml += '<natOp>DEVOLUCAO DE COMPRA P/ COMERCIALIZACAO</natOp>'
		ELSE
			M->cXml += '<natOp>'    +RTRIM(NOTAFE->b_natOp)              +'</natOp>'
		ENDIF
//		M->cXml += '<indPag>'   +Mb_indPag					         +'</indPag>'                                           && 0-A VISTA 1-A PRAZO 2-OUTROS
		M->cXml += '<mod>'      +NOTAFE->b_mod                       +'</mod>'
		M->cXml += '<serie>'    +ALLTRIM(STR(VAL(NOTAFE->b_serie)))  +'</serie>'
		M->cXml += '<nNF>'      +ALLTRIM(STR(VAL(NOTAFE->b_nNF)))    +'</nNF>'
		M->cXml += '<dhEmi>'    +DateTimeXml(M->DAT_HOJE,TIME() ,FLAG->n_xUF,.T. ) +'</dhEmi>'
		M->cXml += '<tpNF>'     +NOTAFE->b_tpNF                      +'</tpNF>' 		                               && 0-ENTRADA 1-SAIDA
		M->cXml += '<idDest>'   +NOTAFE->b_idDest                    +'</idDest>'                                           && id de destino da operacao 1=interna 2=interestadual 3=exterior
		M->cXml += '<cMunFG>'   +NOTAFE->b_cMunFG                    +'</cMunFG>'
		M->cXml += '<tpImp>'    +NOTAFE->b_tpImp                     +'</tpImp>'                                             && formato impressao 1-normal retrato 2-normal paisagem
		M->cXml += '<tpEmis>'   +NOTAFE->b_tpEmis                    +'</tpEmis>'                                           && tipo emissao 1-emissao normal
		M->cXml += '<cDV>'      +NOTAFE->b_cDV                       +'</cDV>'
		M->cXml += '<tpAmb>'    +NOTAFE->b_tpAmb                     +'</tpAmb>'    				          			&& TIPO DE AMBIENTE 1-PRODUCAO 2-DESENVOLVIMENTO
		M->cXml += '<finNFe>'   +NOTAFE->b_finNFe                    +'</finNFe>'                                           && finalidade da emissao 1-normal 2-complementar 3-ajuste 4-devolucao
		M->cXml += '<indFinal>' +NOTAFE->b_indFinal                  +'</indFinal>'                                       && operacao com consumidor final 0-normal 1-consumidor final
		M->cXml += '<indPres>'  +SUBSTR(aINDPRES[nCombo1],1,1)       +'</indPres>'                                         && indicador de presenca do comprador 1-operacao presencial
		M->cXml += '<procEmi>'  +NOTAFE->b_procEmi                   +'</procEmi>'                                         && processo de emissao da NFe 3-app fornecido pelo fisco
		M->cXml += '<verProc>'  +ALLTRIM(NOTAFE->b_verProc)          +'</verProc>'
		
		IF NOTAFE->b_finNFe = "4"
			M->cXml += '<NFref>'
				M->cXml += '<refNFe>'   +CHAVE_refNFe                +'</refNFe>'
			M->cXml += '</NFref>'
		ENDIF
		M->cXml += '</ide>'
*************************************************************************************************************************		
		M->cXml += '<emit>'
        IF LEN(NOTAFE->c_CNPJ) > 11
			M->cXml += '<CNPJ>'     +ALLTRIM(NOTAFE->c_CNPJ)                      +'</CNPJ>'
		ELSE
			M->cXml += '<CPF>'     +ALLTRIM(NOTAFE->c_CNPJ)              +'</CPF>'
		ENDIF
		M->cXml += '<xNome>'    +rtrim(TIRACENTO(NOTAFE->c_xNome))   +'</xNome>'
		M->cXml += '<xFant>'    +RTRIM(TIRACENTO(NOTAFE->c_xFant))   +'</xFant>'
		M->cXml += '<enderEmit>'
		M->cXml += '<xLgr>'     +rtrim(TIRACENTO(NOTAFE->c_xLgr))    +'</xLgr>'
		M->cXml += '<nro>'      +rtrim(NOTAFE->c_nro)                +'</nro>'
		if NOTAFE->c_xCpl <> space(60)
			M->cXml += '<xCpl>'     +rtrim(NOTAFE->c_xCpl)           +'</xCpl>'
		endif
		M->cXml += '<xBairro>'  +rtrim(NOTAFE->c_xBairro)            +'</xBairro>'
		M->cXml += '<cMun>'     +NOTAFE->c_cMun                      +'</cMun>'
		M->cXml += '<xMun>'     +rtrim(NOTAFE->c_xMun)               +'</xMun>'
		M->cXml += '<UF>'       +NOTAFE->c_UF                        +'</UF>'
		M->cXml += '<CEP>'      +NOTAFE->c_CEP                       +'</CEP>'
		M->cXml += '<cPais>'    +NOTAFE->c_cPais                     +'</cPais>'
		M->cXml += '<xPais>'    +rtrim(NOTAFE->c_xPais)              +'</xPais>'
		M->cXml += '<fone>'     +rtrim(NOTAFE->c_fone)               +'</fone>'
		M->cXml += '</enderEmit>'
		IF FLAG->n_IE <> SPACE(14)
			M->cXml += '<IE>'   +rtrim(NOTAFE->c_IE)                 +'</IE>'
		ENDIF
***		IF FLAG->n_IM <> SPACE(15)
***			M->cXml += '<IM>'   +rtrim(NOTAFE->c_IM)                 +'</IM>'
***			M->cXml += '<CNAE>' +NOTAFE->c_CNAE                      +'</CNAE>'
***		ENDIF
		M->cXml += '<CRT>'      +NOTAFE->c_CRT                       +'</CRT>'
		M->cXml += '</emit>'				
*************************************************************************************************************************

		M->cXml += '<dest>'
		IF LEN(ALLTRIM(NOTAFE->e_CNPJ)) > 11
			M->cXml += '<CNPJ>'      +ALLTRIM(NOTAFE->e_CNPJ)            +'</CNPJ>'
		ELSE
			M->cXml += '<CPF>'      +ALLTRIM(NOTAFE->e_CNPJ)            +'</CPF>'		
		ENDIF
		M->cXml += '<xNome>'     +rtrim(TIRACENTO(NOTAFE->e_xNome))  +'</xNome>'
		M->cXml += '<enderDest>'
		M->cXml += '<xLgr>'     +rtrim(TIRACENTO(NOTAFE->e_xLgr))    +'</xLgr>'
		M->cXml += '<nro>'      +rtrim(NOTAFE->e_nro)                +'</nro>'
		IF NOTAFE->e_xCpl # SPACE(60)
			M->cXml += '<xCpl>' +rtrim(NOTAFE->e_xCpl)           +'</xCpl>'				
		ENDIF				
		M->cXml += '<xBairro>'  +rtrim(NOTAFE->e_xBairr)             +'</xBairro>'
		M->cXml += '<cMun>'     +rtrim(NOTAFE->e_cMun)               +'</cMun>'
		M->cXml += '<xMun>'     +rtrim(NOTAFE->e_xMun)               +'</xMun>'
		M->cXml += '<UF>'       +NOTAFE->e_UF                        +'</UF>'
		M->cXml += '<CEP>'      +NOTAFE->e_CEP                       +'</CEP>'
		M->cXml += '<cPais>'    +NOTAFE->e_cPais                     +'</cPais>'
		M->cXml += '<xPais>'    +rtrim(NOTAFE->e_xPais)              +'</xPais>'
		IF NOTAFE->e_fone <> SPACE(14)
			M->cXml += '<fone>'     +rtrim(NOTAFE->e_fone)           +'</fone>'
		ENDIF
		M->cXml += '</enderDest>'
		M->cXml += '<indIEDest>'+NOTAFE->e_indIE                     +'</indIEDest>'
		IF NOTAFE->e_indIE = "1"
			M->cXml += '<IE>'       +rtrim(NOTAFE->e_IE)             +'</IE>'
		endif
		if NOTAFE->e_ISUF <> space(9)
			M->cXml += '<ISUF>'     +rtrim(NOTAFE->e_ISUF)           +'</ISUF>'
		endif
		if NOTAFE->e_IM <> space(15)
			M->cXml += '<IM>'       +rtrim(NOTAFE->e_IM)             +'</IM>'
		endif
		if NOTAFE->e_eMAIL <> space(60)
			M->cXml += '<email>'    +rtrim(NOTAFE->e_eMAIL)          +'</email>'
		endif

		M->cXml += '</dest>'
ou tem uma forma de fazer bem mais pratica usando o XMLTAG() da SEFAZCLASS

Código: Selecionar todos

*************************************
STATIC FUNCTION IDENTIFICACAO(  )
*************************************
		MEMVAR->b_cUF		:=FLAG->n_cUF
		MEMVAR->b_dhEmi		:=substr(strzero(YEAR(M->DAT_HOJE),4,0),3,2)+strzero(MONTH(M->DAT_HOJE),2,0)
		MEMVAR->c_CNPJ		:=FLAG->n_CNPJ
		MEMVAR->b_mod		:='99'
		MEMVAR->b_serie		:=FLAG->n_serie
		MEMVAR->b_nNF		:=FLAG->n_serie + PEDIDOS->NUMNOT
		MEMVAR->b_tpEmis	:='1'
		MEMVAR->b_cNF		:=FLAG->n_cNF

		MEMVAR->a_Id 		:= MEMVAR->b_cUF+MEMVAR->b_dhEmi+MEMVAR->c_CNPJ+MEMVAR->b_mod+MEMVAR->b_serie+MEMVAR->b_nNF+MEMVAR->b_tpEmis+MEMVAR->b_cNF

		MEMVAR->b_cDV 		:=CalculaDigito( MEMVAR->a_Id, "11" )
		MEMVAR->a_Id 		+=MEMVAR->b_cDV


		M->cXml := '<NFe xmlns="http://www.portalfiscal.inf.br/nfe">'
		M->cXml += '<infNFe versao="4.00" Id="NFe'+ MEMVAR->a_Id + '">'
		M->cXml += '<ide>'
		M->cXml += XmlTag( 'cUF', FLAG->n_cUF )
		M->cXml += XmlTag( 'cNF', FLAG->n_cNF )		
		M->cXml += XmlTag( 'natOp', 'TRANSFERENCIA PARA FILIAL' )			
		M->cXml += XmlTag( 'mod', '55' )		
		M->cXml += XmlTag( 'serie', ALLTRIM(STR(VAL(FLAG->n_serie))) )	
		M->cXml += XmlTag( 'nNF', ALLTRIM(STR(VAL(MEMVAR->b_nNF ))) )
		M->cXml += XmlTag( 'dhEmi', DateTimeXml(M->DAT_HOJE,TIME() ,FLAG->n_xUF,.T. ) )		
		M->cXml += XmlTag( 'tpNF', '1' )		
		M->cXml += XmlTag( 'idDest', '1' )			
		M->cXml += XmlTag( 'cMunFG', FLAG->n_cMun )		
		M->cXml += XmlTag( 'tpImp', '1' )
		M->cXml += XmlTag( 'tpEmis', '1' )
		M->cXml += XmlTag( 'cDV', MEMVAR->b_cDV )
		M->cXml += XmlTag( 'tpAmb', FLAG->n_tpAmb )
		M->cXml += XmlTag( 'finNFe', '1' )
		M->cXml += XmlTag( 'indFinal', '1' )	
		M->cXml += XmlTag( 'indPres', '1' )
		M->cXml += XmlTag( 'procEmi', '0' )
		M->cXml += XmlTag( 'verProc', 'SGC 4.00' )		
		M->cXml += '</ide>'

RETURN M->cXml
 
*************************************
STATIC FUNCTION EMITENTE(  )
*************************************
		M->cXml := '<emit>'
		M->cXml += XmlTag( 'CNPJ', ALLTRIM(FLAG->n_CNPJ) )
		M->cXml += XmlTag( 'xNome', rtrim(TIRACENTO(FLAG->n_xNome)) )		
		M->cXml += XmlTag( 'xFant', RTRIM(TIRACENTO(FLAG->n_xFant)) )		
		M->cXml += '<enderEmit>'
		M->cXml += XmlTag( 'xLgr', rtrim(TIRACENTO(FLAG->n_xLgr)) )
		M->cXml += XmlTag( 'nro', rtrim(FLAG->n_nro) )		
		M->cXml += XmlTag( 'xCpl', rtrim(FLAG->n_xCpl) )			
		M->cXml += XmlTag( 'xBairro', rtrim(FLAG->n_xBairro) )
		M->cXml += XmlTag( 'cMun', FLAG->n_cMun )		
		M->cXml += XmlTag( 'xMun', rtrim(FLAG->n_xMun) )	
		M->cXml += XmlTag( 'UF', FLAG->n_xUF )
		M->cXml += XmlTag( 'CEP', FLAG->n_CEP )
		M->cXml += XmlTag( 'cPais', FLAG->n_cPais )
		M->cXml += XmlTag( 'xPais', rtrim(FLAG->n_xPais) )
		M->cXml += XmlTag( 'fone', rtrim(FLAG->n_fone) )
		M->cXml += '</enderEmit>'
		M->cXml += XmlTag( 'IE', rtrim(FLAG->n_IE) )
		M->cXml += XmlTag( 'CRT', FLAG->n_CRT )
		M->cXml += '</emit>'		

RETURN 	M->cXml

*************************************
STATIC FUNCTION DESTINATARIO(  )
*************************************
		DBSELECTAREA("CLIENTES")
		Ordsetfocus(1)
		M->cXml := ''
		IF DBSEEK(PEDIDOS->UCLIENTE)
			M->cXml := '<dest>'	
			M->cXml += XmlTag( 'CNPJ', ALLTRIM(CLIENTES->CPFCGC) )
			M->cXml += XmlTag( 'xNome', rtrim(TIRACENTO(CLIENTES->NRAZ_SOC)) )
			M->cXml += '<enderDest>'
			M->cXml += XmlTag( 'xLgr', rtrim(TIRACENTO(CLIENTES->ENDER)) )
			M->cXml += XmlTag( 'nro', rtrim(STR(CLIENTES->NUMERO,9,0)) )
			M->cXml += XmlTag( 'xCpl', rtrim(CLIENTES->COMPLEM) )
			M->cXml += XmlTag( 'xBairro', rtrim(CLIENTES->BAIR) )
			M->cXml += XmlTag( 'cMun', rtrim(CLIENTES->CODMUN) )
			M->cXml += XmlTag( 'xMun', rtrim(CLIENTES->CIDADE) )
			M->cXml += XmlTag( 'UF', CLIENTES->UF )
			M->cXml += XmlTag( 'CEP', SoNumeros( CLIENTES->CEP ) )
			M->cXml += XmlTag( 'cPais', CLIENTES->CODPAIS )				
			M->cXml += XmlTag( 'xPais', rtrim(CLIENTES->PAIS) )
			M->cXml += XmlTag( 'fone', rtrim(CLIENTES->FONE) )
			M->cXml += '</enderDest>'
			M->cXml += XmlTag( 'indIEDest', CLIENTES->ISENTO  )
			M->cXml += XmlTag( 'IE', rtrim(CLIENTES->INSEST)  )
			M->cXml += XmlTag( 'ISUF', rtrim(CLIENTES->SUFRAMA)  )		
			M->cXml += XmlTag( 'IM', rtrim(CLIENTES->INSMUN)  )			
			M->cXml += XmlTag( 'email', rtrim(CLIENTES->EMAIL)  )			
			M->cXml += '</dest>'
		ENDIF
		DBSELECTAREA("PEDIDOS")
RETURN M->cXml

ACBr LIB

Enviado: 12 Nov 2019 16:07
por rubens
Obrigado Fernando...
Já uso alguma coisa da SefazClass... tb..
mas gostaria mesmo era ver o uso da ACBR LIB, visto que quase todo o meu fiscal está voltado para ACBRMonitor..

att..

Rubens

ACBr LIB

Enviado: 12 Nov 2019 17:53
por fladimir
Rubens no SVN do ACBr tem 3 classes completas em PRG e tb cada um com um exemplo já funcionando.

Já tem para NFe, NFCe, SAT e Boleto e não olhei hj mas parece q já ia sair tb de CTe e MDFe

ACBr LIB

Enviado: 12 Nov 2019 18:31
por rubens
Boa tarde..

Tem sim Fladimir... até do boleto já tem...
Mas foi eu mesmo que não consegui compilar por isso tô atrás d um exemplo mais simples...
Mas vou tentando... com a LIB vira outra coisa né... porque não precisa instalar acbrmonitor... não limita a máquina que o ACBR tá instalado e rodando...

vlw..

Rubens

ACBr LIB

Enviado: 24 Nov 2019 10:59
por lucimauro
@Rubens você usa harbour ?

Qual seu o erro na compilação?

ACBr LIB

Enviado: 25 Nov 2019 10:26
por rubens
Bom dia @Lucimauro,

Consegui compilar o exemplo que vem junto. Gerou o executável ACBRNFEDEMO.EXE
Mas quando tento executar retorna o erro da imagem em anexo.
Erro acbrdll.PNG
A DLL está na pasta do executável. Daí como é classe, é praticamente impossível descobrir o erro.
O Ideal seria um programa simples, tipo imprimenfe, daí se der erro fica mais fácil de descobrir e mais fácil de estudar, uma coisa de cada vez.

Att,

Rubens

ACBr LIB

Enviado: 25 Nov 2019 11:26
por MSDN
Rubens,

De onde vc baixou os arquivos de exemplo ?

ACBr LIB

Enviado: 25 Nov 2019 11:28
por JoséQuintas
rubens escreveu:A DLL está na pasta do executável. Daí como é classe, é praticamente impossível descobrir o erro.
Não é impossível.
Provavelmente só tem um único lugar aonde carrega a DLL.
E tenho quase certeza de que precisa ter outras DLLs instaladas pra essa funcionar.

ACBr LIB

Enviado: 25 Nov 2019 11:37
por JoséQuintas
acbr.png

ACBr LIB

Enviado: 25 Nov 2019 11:40
por fladimir
Como o Quintas mostrou, tem q ver se as dependencias da DLL (na pasta do projeto tem) estão na pasta do EXE e tem 2 tipos de Dlls, se não der com 1 tenta com a outra.

ACBr LIB

Enviado: 25 Nov 2019 11:47
por JoséQuintas
O que mata o ACBR é isto: deveriam acabar com tudo isso na versão LIB.
acbr2.png