ACBrNFeMonitor

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

ACBrNFeMonitor

Mensagem por ANDRIL »

Voce pode usar o ACBRMonitorPlus.exe que aceita passar comandos via socket ou via arquivo TXT. Este aplicativo é resultado da junção do ACBRMonitor (ECF) e ACBRNFeMonitor( NFe), não haverá versões individuais daqui para frente somente o PLUS.

Caso não queira usar o EXE, tem opção de baixar os fontes em DELPHI ou LASARUS, só que ai tem que entender um pouco para poder isolar somente o que voce quer constar no EXE final e saber o principal, compilar o pacote.

Tem a versão paga do EXE (é um suporte a dúvidas) que é opcional e tem a versão free, esta é atualizada geralmente a cada 3 meses, já a paga se não me engano semanalmente.
Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

ACBrNFeMonitor

Mensagem por rubens »

Bom dia..

Infelizmente que eu saiba não existe módulo independente para cada função. Vai ter que usar o AcbrMonitorPlus. Que é uma suíte com tudo o que eles tem.
Tem uma compilação semanal com todas as correções/implementações.

Quanto a questão de ser pago ou não é o seguinte:
Para você ter acesso as compilações semanais ou seja a mais recente. Você tem que ser usuário SAC e paga 120,00 mensais no plano básico.
Se você não quiser ser usuário SAC pode baixar o acbrmonitorplus aberto que atualiza de 03 em 03 meses.
Aí vai do conceito de cada um, eu considero pago porque tem que pagar mensal se quiser ter sempre a última atualização. Para mim compensa e resolve, porque não consigo desenvolver o que eles me oferecem.

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

ACBrMonitorPlus

Mensagem por ricardo-barros »

Como o lugab eu uso o programa da Sefaz para gerenciar e transmitir Nfe pois o meu sistema só gera o txt. Terei que substituir o emissor gratuito pelo ACBrMonitorPlus e fiquei curioso com estas "coisas que eles oferecem" via SAC pois talvez me falte tempo para desenvolvê-las.

Que coisas são essas, Rubens? Dependendo do que sejam pode ser interessante pagar por elas.
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

ACBrNFeMonitor

Mensagem por rubens »

Bom dia Ricardo...

Diferente daqui, independente de ser usuário SAC ou não você tem que ter uma certa cautela na formulação das suas perguntas, com o uso irá perceber isso.

Como a versão free só é liberada de 03 em 03 meses, melhorias e correções você só receberá a cada três meses, se quiser estar sempre atualizado com o componente, senão pode baixar o projeto e compilar, tarefa que não é simples.
Então se dentro desses 03 meses surgir alguma obrigatoriedade por parte da sefaz você será obrigado a assinar o SAC para ter a última atualização ou aguardar vencer o prazo de 03 meses para ter acesso a essa última atualização.

De repente você percebe um bug e relata o bug no fórum, o desenvolvedor responsável por aquele módulo do acbr vai corrigir e disponibilizar. Na versão SAC é corrigido semanalmente, na versão free não, então terá que esperar 90 dias para obter aquela atualização.

Não saberia te dizer exatamente o que um tem que o outro tem, acho que nada, mas o conceito é esse aí. Ah a versão SAC segundo eles, você tem uma certa prioridade na resolução do problema relatado.

É simples, se você depende do ACBR para o bom andamento do seu sistema, tem que ser usuário SAC.

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

ACBrNFeMonitor

Mensagem por ricardo-barros »

Obrigado, Rubens.

Baixei o ACBrMonitorPLUS-0.1.12.9 e vi que só tem programas exemplo para usar em ECF. Preciso de exemplos para Nfe. Eles fornecem isto pra quem assina o SAC?
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

ACBrNFeMonitor

Mensagem por rubens »

Bom dia Ricardo

Procura na aba DFe.

Vou ver se hoje consigo montar um tutorial ensinado usar o ACBR.

Tô vendo alguma pessoas precisando usar..

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

ACBrNFeMonitor

Mensagem por ricardo-barros »

Sua iniciativa é nobre, digna de aplauso e de nossa gratidão, Rubens!

A quantidade de pessoas precisando disso é bem maior do que parece e vai aumentar até o fim do ano, pois a Sefaz, numa decisão equivocada, julgou que o emissor disponibilizado por eles não é mais necessário. Eu sei de dezenas de empresas que o utilizam como única solução Nfe e de outras mais além dos meus clientes que integram seus ERP com o emissor gratuito através de arquivos texto e de XML; todos os contadores que eu conheço fazem uso frequente dele e sua utilidade é demonstrada inclusive na hora de aferir os emissores de terceiros.

Obrigado por manifestar ajuda.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

ACBrNFeMonitor

Mensagem por fladimir »

Ricardo se vc se refere a exemplo de como usar o ACBr com NFe via Socket é a mesma coisa do q tem para ECF basta mudar os comandos pelos da NFe.

Se vc se refere a exemplo de como usar o ACBr para NFe resume-se em montar um arquivo texto e mandar dentro do comando ACBrNFe.CriaNFe( Conteudo do Arquivo )
Depois ler o arquivo de retorno e depois dar sequencia...

Não pesquisei, mas pelo q me lembro tem aqui no fórum exemplos sobre o assunto... pesquise como ACBrNFeMonitor, q antes de unificar era através dele, agora é pelo Plus, mas os comandos são os mesmos, muda apenas o programa q gerencia a troca de arquivos.

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

ACBrNFeMonitor

Mensagem por ricardo-barros »

Fladimir,

Me refiro a como usar o ACBr para NFe e eu pensava que bastaria o meu ERP gravar o arquivo texto em uma pasta do ACBrMonitorPlus e ele importaria, geraria, validaria e enviaria a NFe para a Sefaz.

O comando ACBrNFe.CriaNFe( Conteudo do Arquivo ) me parece ser um método. Neste caso ele está implementado em alguma classe do Harbour? Onde eu encontro a classe ou este método? Já procurei em todas as pastas do ACBrMonitorPlus e não achei.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

ACBrNFeMonitor

Mensagem por fladimir »

Não é uma classe é uma PONTE q pega os arquivos texto q geramos e manda pra SEFAZ e devolve o REToRNO via arquivo Texto pra analisarmos... tipo o Observer da dAruma...

Segue um modelo pra vc ter uma ideia... tirei as partes de Banco de Dados e deixei mais a parte da montagem do arquivo (a grosso modo) e como enviar para o ACBr

Código: Selecionar todos

procedure GeraNFe()

			... 'Confirma a gera‡„o da NF-e', {'Sim','N„o'}
	
			**********************************************************
			// Gera Arquivo para NFe na pasta q esta sendo monitorada pelo ACBr
				
			   Mensag('Aguarde..., O t‚rmino da gera‡„o da NF-e!!')
	 			

				ferase('ENTNFe'+cNrMaq+'.TXT')

			   cArq:='ENTNFe'+cNrMaq+'.CMD'

			   SET DEVICE TO PRINTER
			   SET PRINTER TO (cArq)
			   SET PRINTER ON

			   nLin :=0
	
			   //-- Identifica‡Æo
			   @ nLin,0 say 'NFE.CriarNFe([Identificacao]'      ;      nLin++
			   @ nLin,0 say 'Emissao=' + Dtoc(dDtNFeEmis)       ;      nLin++
				@ nLin,0 say 'Codigo='+cNota                     ;      nLin++
				@ nLin,0 say 'Codigo='+cCodigoRandom             ;      nLin++
				@ nLin,0 say 'Numero='+cNota                     ;      nLin++
			   @ nLin,0 say 'NaturezaOperacao='+	cNaturezaOp  ;      nLin++
		   	@ nLin,0 say 'Finalidade=' +	if( lComplementar, '2', '1') 
      		nLin++
			   
				@ nLin,0 say 'Modelo=55'                         ;      nLin++
			   @ nLin,0 say 'Serie='   + cSerie                           ;      nLin++
			   @ nLin,0 say 'Saida='   + Dtoc(dDtNFeSaid)         ;      nLin++
			   @ nLin,0 say 'hSaiEnt=' + Time() 
		      @ nLin,0 say 'Tipo='    + if( cTipoOPF_ES=='E', '0', '1')  ; nLin++
				@ nLin,0 say 'idDest=' + if( lInterEstadual, '2', '1')        ;    nLin++
				@ nLin,0 say 'indFinal=' + if( lConsumidorFinal, '1', '0') // 0 Normal e 1 Consumidor Final 				
			   @ nLin,0 say '[infNFe]'                                             ;    nLin++
			   @ nLin,0 say 'versao=3.10'	                                         ;    nLin++
				

			   //-- Emitente
			   @ nLin,0 say '[Emitente]'                                           ;    nLin++
			   @ nLin,0 say 'CNPJ='			+ TiraVirgNFe(DadosEmp->CGC      )           ;    nLin++
			   @ nLin,0 say 'IE='			+ TiraVirgNFe(DadosEmp->InscrEst )           ;    nLin++
			   @ nLin,0 say 'Razao='		+ TiraVirgNFe(DadosEmp->Nome 	  )           ;    nLin++
			   @ nLin,0 say 'Fantasia='	+ TiraVirgNFe(DadosEmp->Nome 	  )           ;    nLin++
			   @ nLin,0 say 'Fone='			+ TiraVirgNFe(DadosEmp->Telefone )           ;    nLin++
			   @ nLin,0 say 'CEP='			+ TiraVirgNFe(StrTran(DadosEmp->Cep,'-','')) ;    nLin++
			   @ nLin,0 say 'Logradouro=' + TiraVirgNFe(DadosEmp->Endereco )           ;    nLin++
			   @ nLin,0 say 'Numero='     + TiraVirgNFe(DadosEmp->Numero   )           ;    nLin++
			   @ nLin,0 say 'Complemento='                                         ;    nLin++
			   @ nLin,0 say 'Bairro='     + TiraVirgNFe(DadosEmp->Bairro   )           ;    nLin++
		      @ nLin,0 say 'CidadeCod='  + allstr(cCodCidE)                 ;    nLin++
		      @ nLin,0 say 'Cidade='     + TiraVirgNFe(DadosEmp->Cidade)              ;    nLin++
		      @ nLin,0 say 'UF='         + cUFTabE                                ;    nLin++
		      @ nLin,0 say 'PaisCod=1058'                                         ;    nLin++
		      @ nLin,0 say 'Pais=BRASIL'                                          ;    nLin++
		
			   @ nLin,0 say 'CRT='+ cTipoCRT 								  		       ;    nLin++

			   //-- Destinatario
			   @ nLin,0 say '[Destinatario]'                                      ;    nLin++

				if 'ISENTO' $ Upper(cDoc2)
					@ nLin,0 say 'indIEDest=2' // 2=Contribuinte ISENTO de IE no cadastro do ICMS  
				else
					@ nLin,0 say 'indIEDest=1' //	1=Contribuinte ICMS (informar a IE do destinatario)
					                           // 9=Nao Contribuinte, que pode ou nao possuir IE no Cadastro do ICMS; 
														// Nota 1: No caso de NFC-e informar indIEDest=9 e nao informar a tag IE do destinatario;
				endif
				nLin++
			   
				if !empty(cDoc1)
					@ nLin,0 say 'CNPJ='+if(Sistema->NFeHomolog='S','99999999000191',Alltrim(cDoc1)) ;    nLin++
				endif
			   
				@ nLin,0 say 'IE='+  if(Sistema->NFeHomolog='S',Alltrim(cDoc2),Alltrim(cDoc2))               ;    nLin++
		      @ nLin,0 say 'NomeRazao='+ cNomeCli  ;    nLin++
			   @ nLin,0 say 'Fone='+ TiraVirgNFe(Strtran(cFone,'-',''))           ;    nLin++
			   @ nLin,0 say 'CEP=' + TiraVirgNFe(StrTran(cCEP,'-',''))            ;    nLin++
			   @ nLin,0 say 'Logradouro='+ TiraVirgNFe(cEnd)                      ;    nLin++
	         @ nLin,0 say 'Numero=' + alltrim(cNumeroDest)                      ;    nLin++
	         @ nLin,0 say 'Complemento='                                        ;    nLin++
	         @ nLin,0 say 'Bairro=' + cBairro                                   ;    nLin++
	         @ nLin,0 say 'CidadeCod='+allstr(cCodCid)                    ;    nLin++
	         @ nLin,0 say 'Cidade=' + cCidade                                   ;    nLin++
	         @ nLin,0 say 'UF='     + cUFTab                                    ;    nLin++
	         @ nLin,0 say 'Email='  + TiraVirgNFe(alltrim(Pessoas->Email))     ;    nLin++
            @ nLin,0 say 'PaisCod=1058'                                        ;    nLin++
            @ nLin,0 say 'Pais=BRASIL'                                         ;    nLin++
	
	         //-- Produto XXXX
	         Pedido->(DBGOTOP())
	         while Pedido->(!EOF())

	            @ nLin,0 say '[Produto'+StrZero(nContador,3)+']'                 ;   nLin++
	            @ nLin,0 say 'CFOP='+Pedido->CFOP                                ;   nLin++
	            @ nLin,0 say 'Codigo=' + Pedido->Codigo                          ;   nLin++
	            @ nLin,0 say 'Descricao='+TiraVirgNFe(Pedido->Descricao)         ;   nLin++
	            @ nLin,0 say 'vTotTrib=' + Alltrim( str( Pedido->vTotTrib, 12,2)) ; nLin++
	            @ nLin,0 say 'NCM='          + StrZero(Val(TiraPontVirg(Pedido->NCM)),8); 	nLin++
	            @ nLin,0 say 'CEST=' + alltrim(TiraPontVirg(Pedido->CEST))    ; 	nLin++
	            @ nLin,0 say 'EAN='          + if( Len(alltrim(pedido->ean))==13, TiraPontVirg(Pedido->EAN), '') ; nLin++
	            @ nLin,0 say 'Unidade='      + Pedido->Unidade                           ;  nLin++
	            @ nLin,0 say 'Quantidade='   + allstr( Pedido->Qtde)             ;  nLin++
	            @ nLin,0 say 'ValorUnitario='+ Alltrim(Str( (Pedido->Preco),12,4))         ;  nLin++
	            @ nLin,0 say 'ValorTotal='   + Alltrim(Str((Pedido->Total + Pedido->DescItem),12,3 )) ;  nLin++
	            @ nLin,0 say 'ValorDesconto='+ Alltrim(Str( Pedido->DescItem, 12,3))            ;  nLin++
					@ nLin,0 say 'vFrete='    + Alltrim( Str(  if( (nRestFrete- nVlrFreteRat)>=0, nVlrFreteRat, nRestFrete), 12, 2) )                       	;  nLin++
	            @ nLin,0 say 'qTrib='  + allstr( Pedido->Qtde)        ; nLin++
	            @ nLin,0 say 'vUnTrib='+ Alltrim(Str( (Pedido->Preco),12,4))           ; nLin++
				   @ nLin,0 say 'vOutro=' + Alltrim( Str( (nVOutrasDesp),12,2 ) )   	;  nLin++
	            @ nLin,0 say 'indTot=1'                                           ;  nLin++
	
               @ nLin,0 say "[ICMS"  + StrZero(nContador,3)+"]"                 ;	         nLin++
               @ nLin,0 say 'Origem='+ Left(Pedido->CST,1)                      ;	         nLin++
					@ nLin,0 say 'CSOSN=' + Alltrim(Pedido->CSOSN)                   ;	         nLin++
               @ nLin,0 say 'ValorBase=0'             ;	nLin++  //- pMVAST
               @ nLin,0 say 'PercentualReducao=0'     ; nLin++  //- pRedBC
               @ nLin,0 say 'Aliquota='    + Alltrim(str(Pedido->ALIQICMS,10,2))    ; nLin++  //- pICMSST
               @ nLin,0 say 'Valor=0'                                               ; nLin++  //- vICMSST
               @ nLin,0 say 'ModalidadeST=4'                                          ;	nLin++
               @ nLin,0 say 'PercentualMargemST='  + Alltrim( str(Pedido->MVA,10,2))              ;	nLin++  //- pMVAST
               @ nLin,0 say 'PercentualReducaoST=' + Alltrim( str(Pedido->RedBC,10,2))    ; nLin++            //+ allstr(Pedido->RedBC) //- pRedBC
               @ nLin,0 say 'ValorBaseST='         + Alltrim( str(Pedido->BCICMST,12,2))          ; nLin++    //- vBCST
               @ nLin,0 say 'AliquotaST='          + Alltrim( str(Pedido->ALIQICMSST,10,2))         ; nLin++    //- pICMSST
               @ nLin,0 say 'ValorST='  + Pedido->VlrST

               if Pedido->VlrIPI>0
                  @ nLin,0 say "[IPI"+StrZero(nContador,3)+"]"                     ;	    nLin++
                  @ nLin,0 say 'CST='+Right(Pedido->CST,2)                         ;	    nLin++
                  @ nLin,0 say 'ValorBase=' + Alltrim(Str(Pedido->BCICMS, 12,2))   ;	    nLin++
                  @ nLin,0 say 'Aliquota='  + Alltrim(Str(Pedido->AliqIPI,10,2))   ;	    nLin++
                  @ nLin,0 say 'Valor='     + Alltrim(Str(Pedido->VlrIPI, 12,2))   ;	    nLin++
               endif
	
					*-- Partilha ICMS
					if lConsumidorFinal .and. lInterEstadual
						@ nLin,0 say "[ICMSUFDest"    + StrZero(nContador,3) + "]"        ;  	       nLin++
	               @ nLin,0 say 'vBCUFDest='     + NumACBr(vBCUFDest, 12,2)          ;            nLin++
	               @ nLin,0 say 'pFCPUFDest='    + NumACBr(pFCPUFDest,     12, 2)    ;            nLin++
	               @ nLin,0 say 'pICMSUFDest='   + NumACBr(pICMSUFDest,    12, 2)    ;            nLin++
	               @ nLin,0 say 'pICMSInter='    + NumACBr(pICMSInter,     12, 2)    ;            nLin++
	               @ nLin,0 say 'pICMSInterPart='+ NumACBr(pICMSInterPart, 12, 2)    ;            nLin++
	               @ nLin,0 say 'vFCPUFDest='    + NumACBr(vFCPUFDest,     12, 2)    ;            nLin++
	               @ nLin,0 say 'vICMSUFDest='   + NumACBr(vICMSUFDest,  12, 2)     ;            nLin++
	               @ nLin,0 say 'vICMSUFRemet='  + NumACBr(vICMSUFRemet, 12, 2)     ;            nLin++
					endif
					*------------------------------------------------------------------------------------------- // Final Grupo ICMS Destino
   
               nContador++
	            Pedido->(DbSkip())
	         end

	         //-- Total da NF-e
	         @ nLin,0 say "[Total]"                                                       					;  nLin++

				*-- Partilha ICMS
				if lConsumidorFinal .and. lInterEstadual
	               @ nLin,0 say 'vFCPUFDest='    + NumACBr(nTotFCP,        12, 2)    ;            nLin++
	               @ nLin,0 say 'vICMSUFDest='   + NumACBr(nTotICMSUFDest, 12, 2)    ;            nLin++
	               @ nLin,0 say 'vICMSUFRemet='  + NumACBr(nTotICMSUFRemet,12, 2)    ;            nLin++
				endif
				*-------------------------------------------------------------------
				
				@ nLin,0 say 'BaseICMS='              + Alltrim( Str( n_BCICMS,  12, 2) )                ;  nLin++
			   @ nLin,0 say 'ValorICMS='             + Alltrim( Str( n_VlrICMS, 12, 2) )                ;  nLin++

	         @ nLin,0 say 'BaseICMSSubstituicao='  + Alltrim( Str( nT_BCICMSST,12,2)   )  				;  nLin++
				@ nLin,0 say 'ValorICMSSubstituicao=' + Alltrim( Str( nT_VlrICMST, 12, 2)    )  				;  nLin++

	         @ nLin,0 say 'ValorIPI='      + Alltrim( Str( nTotIPI,10,2)    )     							;  nLin++
	         @ nLin,0 say 'ValorProduto='  + Alltrim( Str( (nTotProd + nDescTot),12,2)    ) 				;  nLin++
	         @ nLin,0 say 'ValorFrete='    + Alltrim( Str(  nVlrFrete,12,2) )                       	;  nLin++
	         @ nLin,0 say 'ValorDesconto=' + Alltrim( Str(  nDescTot,12,2) )           	            ;  nLin++
				@ nLin,0 say 'ValorOutrasDespesas=' + Alltrim( Str(  nVOutrasDesp,12,2) )           	            ;  nLin++
				@ nLin,0 say 'ValorNota='     + Alltrim( Str( (nVlrNota + nVlrFrete + nTotIPI + nVOutrasDesp),12,2 ) )   	;  nLin++
	         @ nLin,0 say 'vTotTrib=' + Alltrim( str( nTot_vTotTrib, 12,2)) ; nLin++
	
	
	         //-- Transportador
	         @ nLin,0 say "[Transportador]"                                  		;  nLin++
	         @ nLin,0 say 'FretePorConta='+alltrim(cTipo)                    		;  nLin++
            @ nLin,0 say 'NomeRazao='+ alltrim(TiraVirgNFe(cNomeTransp)) 		;  nLin++
            @ nLin,0 say 'CnpjCpf='  + alltrim(TiraVirgNFe(cDoc1Transp))   	;  nLin++
            @ nLin,0 say 'IE='       + alltrim(TiraVirgNFe(cDoc2Transp))      ;  nLin++
            @ nLin,0 say 'CFOP='     + alltrim(cCFOPTransp)                   ;  nLin++
            @ nLin,0 say 'Endereco=' + alltrim(TiraVirgNFe(cEndeTransp))  		;  nLin++
            @ nLin,0 say 'CidadeCod='+ allstr(cCodCidTransp)      		;  nLin++
            @ nLin,0 say 'Cidade='   + alltrim(TiraVirgNFe(cCidTransp))     	;  nLin++
            @ nLin,0 say 'UF='       + alltrim(cEstTransp)                 	;  nLin++
            @ nLin,0 say 'UFPlaca='  + alltrim(cEstVeicul)                 	;  nLin++
            @ nLin,0 say 'Placa='    + STRTRAN( alltrim(cPlacTransp), '-','') ;  nLin++
            @ nLin,0 say 'RNTC='     + alltrim(cCodigoANTT)                  	;  nLin++
			   //--/ Transportador
			
			
				//--> Volumes
				if nPesoVolume == 2
		         @ nLin,0 say "[Volume001]"                                  		;  nLin++
		         @ nLin,0 say 'Quantidade='  + allstr(nVol_Qtd)          		;  nLin++
		         @ nLin,0 say 'Especie='     + Alltrim(cVol_Espec)                 ;  nLin++
		         @ nLin,0 say 'Marca='       + Alltrim(cVol_Marca)                 ;  nLin++
		         @ nLin,0 say 'Numeracao='   + Alltrim(cVol_Numer)                 ;  nLin++
		         @ nLin,0 say 'PesoLiquido=' + Alltrim(Str(nVol_PLiq, 12,3))   		;  nLin++
		         @ nLin,0 say 'PesoBruto='   + Alltrim(Str(nVol_PBrut,12,3))   		;  nLin++
				endif
	         //--/ Volumes                                     	
	
				//-- Fatura
	         if nTipoPagto == 2  // A Prazo
	            @ nLin,0 say '[Fatura]' 														;  nLin++
	            @ nLin,0 say 'Numero='         + STRZERO(Val(cNota),9) 				;  nLin++
	            @ nLin,0 say 'ValorOriginal='  + Alltrim(Str(nVlrNota, 10,3))		;  nLin++
	            @ nLin,0 say 'ValorDesconto=0'  												;  nLin++
	            @ nLin,0 say 'ValorLiquido='   + Alltrim(Str(nVlrNota, 10,3)) 		; 	nLin++
	         endif
	
	         //-- Dados Adicionais
	         @ nLin,0 say "[DadosAdicionais]"       			;  nLin++
				@ nLin,0 say 'Complemento='+ cMsgNFe + ')' 									;  nLin++

	         DBCLEARREL()
	         SET PRINTER TO 
				PRINTOFF()


         	Aux_NFe_ArqEntACBr( cArq, 'Gerando NF-e', 3)  // MANDA ARQUIVO PARA ACBRNFEMONITOR

	         lSai :=.F.
	         while .T.

	            if file( Alltrim(Caminho->PathNFe) + 'SAINFE' + cNrMaq + '.TXT'  )

	               cNFeLog := alltrim(upper(memoread( Alltrim(Caminho->PathNFe) + 'SAINFE' + cNrMaq + '.TXT' )))
	
	               if 'OK:' $ cNFeLog

	                  nPosIni    := Rat(Alltrim(Caminho->PathNFe) +'RESPOSTA\', cNFeLog)
	                  nPosFim    := RAt('XML', cNFeLog) + 3 // devido ter q considerar os caracteres 'XML' tb
	                  nTotSubstr := nPosFim - nPosIni
	
	                  cRetorno := Substr( cNFeLog, nPosIni, nTotSubstr )
	                  cRetorno :=         StrTran( cRetorno, 'OK:','')
	                  cRetorno :=         StrTran( cRetorno, ' ','')
	                  cRetorno :=         StrTran( cRetorno, 'C:\ACBR\NFE\',Alltrim(Caminho->PathNFe))
	                  cRetorno :=         StrTran( cRetorno, CHR(13),'')
	                  cRetorno := Alltrim(StrTran( cRetorno, CHR(10),''))

	                  Nota->XMLRETORNO := cRetorno 		// ,'C', 70, 0},;
	                  Nota->STATUS     := 'GERADA'		// ,'C', 20, 0},;
	
	                  cRetorno:= StrTran( cRetorno, Alltrim(Caminho->PathNFe) +'RESPOSTA\','')
	
	                  lSai := .t.
	
	                  *-- Valida, Envia e Consulta.

	                  * Validar
	                  lErro:=.F.
	                  Mensag('*** VALIDANDO *** NF-e', 'W+/R')

	                  NFe_ValidarNFe( cRetorno )
	
							*-- Enviar
	                  if lErro
	                     Alert('Erro na Validacao, entre em contato com o Suporte')
	                  else
                        Mensag('*** ENVIANDO *** NF-e', 'N/GR*')
                        NFe_EnviarNFe(cRetorno)

                        if 'NEGAD' $ UPPER(NOTA->STATUS)  // NAO CONSULTA
								elseif lErro
                           Alert('Erro no Envio, Inutilize a NF-e SE NAO ESTIVER DUPLICADA ou entre em contato com o Suporte')
                        else
                           * Consultar Situacao
                           Mensag('*** CONSULTANDO *** NF-e', 'W+/G')
                           Nfe_ConsultarNFe(cRetorno, cEmailx)
                        endif
					      endif
	               elseif 'ERRO' $ cNFeLog
	                  Alert( 'AtencÆo!!! Por problemas de comunica‡„o; n„o foi possivel gerar a NFe;'+ ' Sera necessario refazer a NFe!;;' , {' Pressione Enter '},vcr)
							Aux_NFe_MostraRetACBr()
	                  lSai := .F.
	               endif
	               FERASE(Alltrim(Caminho->PathNFe) +'SAINFE'+cNrMaq+'.TXT')
	               EXIT
	            else
	               lErro:=.T.
	               EXIT
	            endif
	         end		
return 1



********************************************************************************
procedure __________Etapas_NFe
********************************************************************************
return





*************************************************
procedure NFe_ValidarNFe( cXML )
************************************************
	
	FERASE("ENTNFe"+cNrMaq+".TXT")

	cArq:="ENTNFe"+cNrMaq+".CMD"

	SET DEVICE TO PRINTER
	SET PRINTER TO (cArq)
	SET PRINTER ON
	SETPRC(0,0)
	nLin :=0
							
	@ nLin,0 say "NFE.ValidarNFe("+chr(34)+alltrim(nota->xmlretorno)+chr(34)+")"
							
	DBCLEARREL()
	SET PRINTER TO ; PRINTOFF()
							
	Aux_NFe_ArqEntACBr(cArq,,,3) // Envia Arq Gerado para ACBrNFeMonitor
							
	While .T.

		if file( Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT"  )
		   cNFeLog := alltrim(upper(memoread( Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT" )))
	
	      if "OK:" $ cNFeLog
	         lErro:=.F.
	
				NFe_Aux_StatusNota("VALIDADA")		
	  			return
	
	      elseif "ERRO" $ cNFeLog

	         lErro:=.T.
				Alert( 'Aten‡„o!!! N„o foi poss¡vel Validar a NF-e;' +;
				         ' Verifique o Retorno da SEFAZ;' + ' Sera necess rio validar a NF-e!;;' , {" Pressione Enter "},vcr)
	         Aux_NFe_MostraRetACBr()

	      endif

			FERASE(Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT")
			EXIT

		else

	      lErro:=.T.
	      EXIT

		endif
	END

return


*************************************************************
function NFe_EnviarNFe( cArquivo, nLote, nAssina, nImprime )
	
	local lJaConsultouNFe := .F.
	local cEmail          := SPACE(50)
	
	FERASE("ENTNFe"+cNrMaq+".TXT")

	cArq:="ENTNFe"+cNrMaq+".CMD"

	SET DEVICE TO PRINTER
	SET PRINTER TO (cArq)
	SET PRINTER ON

	SETPRC(0,0)

	nLin :=0
							
	@ nLin,0 say "NFE.EnviarNFe("+chr(34)+alltrim(nota->xmlretorno)+chr(34)+","+alltrim(nota->nFiscal)+",1,0)"
							
	DBCLEARREL()
	SET PRINTER TO
	PRINTOFF()
	
	Aux_NFe_ArqEntACBr(cArq, 'Aguarde..., Tentando Envio NF-e / Este processo pode demorar!', 30, , ,'CHAVE',,.T.)

	while .T.						

		if FILE( Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT"  )
	   	cNFeLog := alltrim(upper(memoread( Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT" )))
			cNFeLog := substr( cNFeLog, at("RETORNO",cNFeLog)+7) // Pega a segunda parte do xml Retorno da Sefaz
	
			if ( ("ERRO" $ cNFeLog)  .or. ("REJEICAO" $ cNFeLog) .or. ('DENEGADO' $ cNFeLog) .or. ('NEGADA' $ cNFeLog) .or. ('IRREGULARIDADE FISCAL DO DESTINATARIO' $ cNFeLog) )
				lErro := .T.		
				if 'DUPLICIDADE' $ cNFeLog

					NFe_Aux_StatusNota("DUPLICIDADE")

			   elseif ('DENEGADO' $ cNFeLog) .and. ('IRREGULARIDADE FISCAL DO DESTINATARIO' $ cNFeLog)
					ALERT('Irregularidade Fiscal do Destinatario, NFe foi DENEGADA!')

					NFe_Aux_StatusNota("DENEGADA")
					lErro := .F.

					NFe_Aux_MudaXMLIrregular() // Aki eu coloco no XML em Dados Adicionais a mensagem que a NFe esta denegada		
				endif
	
	         Alert( "Atencao!!! Nao foi possivel Enviar a NF-e;"+ " Verifique o Retorno da SEFAZ;"+ " Sera necess rio Enviar novamente a NF-e!;;" , {" Pressione Enter "}, vcr)
	         Aux_NFe_MostraRetACBr()
	
	   	elseif ("AUTORIZADO" $ cNFeLog)
				lErro:=.F.

				NFe_Aux_StatusNota("ENVIADA")

			endif
	      FERASE(Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT")
	      EXIT
		else
	      lErro:=.T.
	      Alert( "Atencao!!!;; Ser  necess rio refazer o procedimento!;;" , {" Pressione Enter "},vcr)
	      EXIT
		endif
	END
return Nil


********************************************************************************
function NFe_ConsultarNFe( cNFe, cEmail, lDuplicada )
********************************************************************************
   local i, nRecPosNota, cDefaultPrinter
   local cChaveNFe := ''

   FERASE("ENTNFe"+cNrMaq+".TXT")
   cArq:="ENTNFe"+cNrMaq+".CMD"
   SET DEVICE TO PRINTER
   SET PRINTER TO (cArq)
   SET PRINTER ON
   SETPRC(0,0)
   nLin :=0

   ChaveRetorno:= nota->xmlretorno
   ChaveRetorno:= Alltrim(ChaveRetorno)

   @ nLin,0 say "NFE.ConsultarNFe("+chr(34)+ChaveRetorno+chr(34)+")"

   DBCLEARREL()
   SET PRINTER TO ; PRINTOFF()

   Aux_NFe_ArqEntACBr( cArq, , ,3)
						
   while .T.

      if file( Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT"  )
         cNFeLog := alltrim(upper(memoread( Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT" )))
         if "OK:" $ cNFeLog
            if ("REJEICAO" $ cNFeLog) .or. ('DENEGADO' $ cNFeLog) .or. ('IRREGULARIDADE FISCAL DO DESTINATARIO' $ cNFeLog)
               lErro:=.T.
               if 'DUPLICIDADE' $ cNFeLog
                  Alert( "AtencÆo!!! Foi verificado DUPLICIDADE no retorno do SEFAZ;"+ " Verifique o Retorno da SEFAZ;"+ " Sera necess rio Corrigir a NF-e ou Tentar novamente!;;" , {" Pressione Enter "},vcr)

						NFe_Aux_StatusNota("DUPLICIDADE")

               else
                  Alert( "Aten‡„o!!! N„o foi Autorizada a NF-e;"+ " Verifique o Retorno da SEFAZ;"+ " Sera necess rio Corrigir a NF-e ou Tentar novamente!;;" , {" Pressione Enter "},vcr)
                  Aux_NFe_MostraRetACBr()
               endif
            else
               lErro:=.F.
					
               Nota->STATUS     := "AUTORIZADA"

               cChaveNFe := NFe_Aux_PegaChave()

               NFe_ImprimirDANFE() // Imprimir DANFE

               NFe_EnviarEmail( cChaveNFe+'-NFe.XML', cEmailx )

            endif
         else // cStat Error    if ("ERRO" $ cNFeLog)  .or. ("REJEICAO" $ cNFeLog) .or. ('DENEGADO' $ cNFeLog) .or. ('IRREGULARIDADE FISCAL DO DESTINATARIO' $ cNFeLog)
            lErro:=.T.
            if 'DUPLICIDADE' $ cNFeLog
               Alert( "Atencäo!!! Foi verificado DUPLICIDADE no retorno do SEFAZ;"+ " Verifique o Retorno da SEFAZ;"+ " Sera necess rio Corrigir a NF-e ou Tentar novamente!;;" , {" Pressione Enter "},vcr)
					NFe_Aux_StatusNota("DUPLICIDADE")

            else
               Alert( "Aten‡„o!!! N„o foi Autorizada a NF-e;"+ " Verifique o Retorno da SEFAZ;"+ " Sera necess rio Corrigir a NF-e ou Tentar novamente!;;" , {" Pressione Enter "},vcr)
               Aux_NFe_MostraRetACBr()
            endif
         endif
         FERASE(Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT")
         EXIT
      else  // Sem retorno ACBr
         lErro:=.T.
         Alert( "Atencao!!!;; Ser  necess rio refazer o procedimento!;;" , {" Pressione Enter "},vcr)
         EXIT
      endif
   END
return NIL


********************************************************************************
function NFe_EnviarEmail( cXML, cEmail )
********************************************************************************
	local cChaveNFe := '', cPara, cCopia, cTituloEmail, cTelaCancNfe, getlist:={}
	local lSaiLacoEmail:=.F.
	
	FERASE("ENTNFe"+cNrMaq+".TXT")
	cArq:="ENTNFe"+cNrMaq+".CMD"
	cPara := if( cEmail==NIL, space(40), cEmail)
	
	cPara := PADR(cPara, 40, ' ')
	
	/* if len(alltrim(cPara))<2
			cPara:=space(40)
		endif
	 */
	cCopia:=space(40)
	
	cTituloEmail := if( !VarExist('cNomUser'), '', Alltrim(cNomUser)) + " - NF-e " + Nota->NFiscal + Space(11)
	
	While .T.
		cTelaCancNfe := SaveScreen(s_geral)	
		Caixa(07,15,11,69,frame2,vcn,"Enviar E-mail NF-e","W+/R")
		@ 08,17 say "Para....: " Get cPara  valid !empty(cPara)
		@ 09,17 say "C¢pia...: " Get cCopia
		read
		
		if LastKey()=27
			if Alert('Deseja Sair sem Enviar o Email', {'Nao','Sim'})=2
				return NIL
			else
				Loop
			endif
		endif
		
		cPara  := Lower(Alltrim(cPara))
		cCopia := Lower(Alltrim(cCopia))
		
		if "@" $ cPara
		   lSaiLacoEmail := .T.
		else
		   Alert( " necess rio informar uma e-mail v lido ; para que seja enviada a NF-e!;;" , {" Pressione Enter "},vcr)
			RestScreen(s_geral, cTelaCancNfe)
		   Loop
		endif
		if "@" $ cCopia
		   //Blz
		else
		  cCopia:=""
		endif
		@ 10,17 say "Assunto.: " Get cTituloEmail PICTURE "@K!S40"
		read
		RestScreen(s_geral, cTelaCancNfe)
		if lSaiLacoEmail
			Exit
		endif
	End
	
	SET DEVICE TO PRINTER
	SET PRINTER TO (cArq)
	SET PRINTER ON
	SETPRC(0,0)
	nLin :=0
	
	@ nLin,0 say "NFE.EnviarEmail("+cPara+ "," + Alltrim(nota->xmlretorno)+",1,"+ cTituloEmail+","+cCopia+")"
	
	DBCLEARREL()
	SET PRINTER TO ; PRINTOFF()
		
	Aux_NFe_ArqEntACBr( cArq, , , 3)
	
	While .T.
		if file( Alltrim(Caminho->PathNFe) + "SAINFe"+cNrMaq+".TXT"  )
		   cNFeLog := alltrim(upper(memoread( Alltrim(Caminho->PathNFe) + "SAINFe"+cNrMaq+".TXT" )))
	
	      if "OK:" $ cNFeLog
				
	         cChaveNFe := NFe_Aux_PegaChave()
				Alert( "E-mail Enviado com Sucesso!;"+ "XML - Protocolo Gerado:;"+ cChaveNFe +";;" , +		{" Pressione Enter "},vcr)
	
				
	      elseif "ERRO" $ cNFeLog
	         Alert( "Aten‡„o!!! N„o foi possivel Enviar o E-mail ;"+ " Verifique o Retorno da SEFAZ;"+ " Sera necess rio Tentar novamente!;;" , {" Pressione Enter "},vcr)
	         Aux_NFe_MostraRetACBr()
	      endif
	      FERASE(Alltrim(Caminho->PathNFe) + "SAINFe"+cNrMaq+".TXT")
	      Exit
		endif
	END
return NIL



********************************************************************************
function NFe_ImprimirDANFe( cXML )
********************************************************************************
   local aTitles := {}
   local nQtsCopias
   //local cChave := ''

   FERASE("ENTNFe"+cNrMaq+".TXT")
   cArq:="ENTNFe"+cNrMaq+".CMD"
   SET DEVICE TO PRINTER
   SET PRINTER TO (cArq)
   SET PRINTER ON
   SETPRC(0,0)
   nLin :=0

   ChaveRetorno:= nota->xmlretorno
   ChaveRetorno:= Alltrim(ChaveRetorno)

   @ nLin,0 say "NFE.ImprimirDANFE("+chr(34)+ChaveRetorno+chr(34)+")"

   DBCLEARREL()
   SET PRINTER TO ; PRINTOFF()

   // O Arquivo foi gerado
   nQtsCopias := 1 //Alert('Quantas Copias?', {'1','2'}, vcr)
   While nQtsCopias>0

      Aux_NFe_ArqEntACBr( cArq,,,3)

      While .T.
         if file( Alltrim(Caminho->PathNFe) + "SAINFe"+cNrMaq+".TXT"  )
            cNFeLog := alltrim(upper(memoread( Alltrim(Caminho->PathNFe) + "SAINFe"+cNrMaq+".TXT" )))

            if "OK:" $ cNFeLog

               if nQtsCopias=2
                  Exit
               endif

               FileDelete( cArq )

            elseif "ERRO" $ cNFeLog
               Alert( "Aten‡„o!!! N„o foi poss¡vel Imprimir o DANFE;"+ " Verifique o Retorno da SEFAZ;"+ " Sera necess rio Tentar novamente!;;" , {" Pressione Enter "},vcr)
               Aux_NFe_MostraRetACBr()
            endif
            FERASE(Alltrim(Caminho->PathNFe) + "SAINFe"+cNrMaq+".TXT")
            Exit
         endif
      END
      nQtsCopias--
   End
   FileDelete( cArq )
return NIL



********************************************************************************
function NFe_CancelarNFe( cNFe )
********************************************************************************
   local   cChaveNFe     := ''
   local   cProtocolo    := ''
   local lExtemporaneo   := .F.

   local getlist:={}, cTelaCanc, nHoraFinal, nHora_1, nHora_2, cJustificativa, cTelaCancNfe
   local lRefresh

	* 24horas pra cancelar NF
	cTelaCanc := SaveScreen(s_geral)	

	//-- Se data atual menos data emissao nota maior q 1 dia nÆo pode cancelar
	if (date() - nota->datasai) > 1
		if Alert('Ja faz mais de 24h que esta nota foi emitida; Nao ‚ permitido o cancelamento....;;'+;
					  'Deseja fazer o CANCELAMENTO EXTEMPORANEO?;; VERIFIQUE SE SUA SITUA€ŽO PERMITE!', {'1. SAIR', '2. CONTINUAR'}, vcw) < 2		 //  Alert('Ja faz mais de 24h que esta nota foi emitida; Nao ‚ permitido o cancelamento....')		
			Restscreen(s_geral, cTelaCanc)
			return NIL
		endif
		if !SenhaGer('Cancelamento Extemporaneo',,,,'NF-e')
			Restscreen(s_geral, cTelaCanc)
			return NIL
		endif	
		lExtemporaneo := .T.		
	elseif (date() - nota->datasai) == 1  .or. (date() - nota->dataemi) == 0  // Se ta no dia
		nHora_1 := timetosec("23:59:59") - timetosec(nota->horaemi)
      nHora_2 := timetosec(time()) - timetosec("00:00:01")
		nHoraFinal := nHora_1 + nHora_2
      if (date() - nota->datasai) == 0
      	nHoraFinal := timetosec(time()) - timetosec(nota->horaemi)
		endif
		
      if nHoraFinal > 86000
			if Alert('Ja faz mais de 24h que esta nota foi emitida; Nao ‚ permitido o cancelamento....;;Deseja fazer o CANCELAMENTO EXTEMPORANEO?;; VERIFIQUE SE SUA SITUA€ŽO PERMITE!', {'1. SAIR', '2. CONTINUAR'}, vcw) < 2		
				Restscreen(s_geral, cTelaCanc)
				return NIL
			endif
			if !SenhaGer('Cancelamento Extemporaneo',,,,'NF-e')
				Restscreen(s_geral, cTelaCanc)
				return NIL
			endif			
			lExtemporaneo := .T.		
		endif
	elseif (date()- nota->dataemi)<0
		Alert('Periodo invalido entre em contato com o suporte!!!')
		Restscreen(s_geral, cTelaCanc)
		return NIL
	endif


	FERASE("ENTNFe"+cNrMaq+".TXT")
	cArq:="ENTNFe"+cNrMaq+".CMD"
	SET DEVICE TO PRINTER
	SET PRINTER TO (cArq)
	SET PRINTER ON
	SETPRC(0,0)
	nLin :=0
	
	cChaveNFe := NFe_Aux_PegaChave()
	@ nLin,0 say "NFE.CancelarNFE("+chr(34) + cChaveNFe +chr(34)+","+chr(34)+cJustificativa+chr(34)+")"
							
	DBCLEARREL()
	SET PRINTER TO ; PRINTOFF()
	
	Aux_NFe_ArqEntACBr(cArq, 'Arguarde..., Tentando Cancelar NF-e / Este processo pode demorar!',30,,,'CHAVE',,.T.)
	
	while .T.
		if file( Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT"  )
		   cNFeLog := alltrim(upper(memoread( Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT" )))
	
	      if "OK:" $ cNFeLog .and. !("REJEICAO" $ cNFeLog)

            cProtocolo := Aux_NFe_PegaProtocolo(cNFeLog)
	         Alert( "Cancelamento da NF-e Homologado com Sucesso!!!;"+ "Protocolo Gerado:;"+ cProtocolo +";;" , + {" Pressione Enter "},vcr)
            Aux_NFe_MostraRetACBr()
	
		      Nota->STATUS     := "CANCELADA"
	         lRefresh:= .T.
							
	      elseif ("ERRO" $ cNFeLog) .or. ("REJEICAO" $ cNFeLog)
	         Alert( "Aten‡„o!!! N„o foi poss¡vel Efetivar o Cancelamento da NF-e;"+ " Verifique o Retorno da SEFAZ;"+ " Sera necess rio Tentar novamente!;;" , {" Pressione Enter "},vcr)
            Aux_NFe_MostraRetACBr()
	      endif
	      FERASE(Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT")
	      EXIT
		endif
	END
	RESTSCREEN(s_geral, cTelaCanc)
return NIL

********************************************************************************
function NFe_InutilizarNFe( cCNPJ, cJustificativa, nAno, nModelo, nSerie, nNumInicial, nNumFinal )
********************************************************************************
   local cProtocolo := '', getList:={}, xTela

   FERASE("ENTNFe"+cNrMaq+".TXT")

   cArq:="ENTNFe"+cNrMaq+".CMD"

   SET DEVICE TO PRINTER
   SET PRINTER TO (cArq)
   SET PRINTER ON
   SETPRC(0,0)

   nLin :=0

   cCNPJ          := TiraVirgNFe(DadosEmp->CGC)  //if(cCNPJ=nil,"XXXXXXXXXXXXXX",cCNPJ)

   nAno           := str(Year(Nota->DataEmi)) //str( nAno )
   nModelo        := '55' //str( nModelo )
   nSerie         := Nota->Serie  //'1'  //str( nSerie )
   nNumInicial    := str(val(Nota->NFiscal))   //str( nNumInicial )
   nNumFinal      := str(val(Nota->NFiscal)) //str( nNumfinal )
   cCmd           := ["]+cCNPJ+[","]+cJustificativa+[",]+nAno+[,]+nModelo+[,]+nSerie+[,]+nNumInicial+[,]+nNumFinal

   @ nLin,0 say "NFE.InutilizarNFe("+cCmd+")"

   DBCLEARREL()
   SET PRINTER TO ; PRINTOFF()

   Aux_NFe_ArqEntACBr( cArq, 'Aguarde..., Tentando Inutilizar Nr. NF-e / Este processo pode demorar !', 30,,,'CHAVE',,.T.)

   While .T.						
      if file( Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT"  )
         cNFeLog := alltrim(upper(memoread( Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT" )))

         if "OK:" $ cNFeLog
            if "REJEICAO" $ cNFeLog
               Alert( "Aten‡„o!!! N„o foi poss¡vel Enviar a NF-e;"+ " Verifique o Retorno da SEFAZ;"+ " Sera necess rio Enviar novamente a NF-e!;;" , {" Pressione Enter "},vcr)
               Aux_NFe_MostraRetACBr()
            else

					NFe_Aux_StatusNota("INUTILIZAD")

               cProtocolo := Aux_NFe_PegaProtocolo(cNFeLog)
               Alert( "Nr. NF-e INUTILIZADO com Sucesso!!!;"+ "Protocolo Gerado:;"+ cProtocolo + ";;" , {" Pressione Enter "},vcr)
               Aux_NFe_MostraRetACBr()

            endif	
         elseif "ERRO" $ cNFeLog .or. "REJEICAO" $ cNFeLog
            Alert( "Atencao!!! Nao foi poss¡vel Enviar a NF-e;"+ " Verifique o Retorno da SEFAZ;"+ " Sera necess rio Enviar novamente a NF-e!;;" , {" Pressione Enter "},vcr)
            Aux_NFe_MostraRetACBr()
         endif
         FERASE(Alltrim(Caminho->PathNFe) + "SAINFE"+cNrMaq+".TXT")
         Exit
      else
         lErro:=.T.
         Alert( "AtencÆo!!!;; Ser  necess rio refazer o procedimento!;;" , {" Pressione Enter "},vcr)
         EXIT
      endif
   END
return NIL

********************************************************************************
function Aux_NFe_ArqEntACBr( cArq, cTextoPisc, nTempoPisc, nEsperaInk, nTempMyWait, cIdxMyWait, cDadosMyWait, lWaitCmds )
* Envia Arq Gerado para ACBrNFeMonitor
********************************************************************************
	local cDirDoMonitor   := ""
	
	default cTextoPisc   to ''
	default nTempoPisc   to 1
	default nEsperaInk   to 0
	default lWaitCmds    to .F.
	
	cDirDoMonitor := Alltrim(Caminho->PathNFe) + ''

	*-- Apaga Arq Enviado para ACBrNFeMonitor
	FERASE( cDirDoMonitor + '\ENTNFE' + cNrMaq + '.TXT' )
	if lWaitCmds
		MyWaitNFe(2)
	endif  

	*-- Apaga Poss¡vel retorno dao ACBrMonitor
	FERASE( cDirDoMonitor + '\SAINFE' + cNrMaq + '.TXT' ) 		 						  											 
	if lWaitCmds
		MyWaitNFe(2)
	endif

	*-- Cria Arq para ACBrNFeMonitor Ler
   FILECOPY( cArq,  cDirDoMonitor + 'ENTNFe' + cNrMaq + '.CMD' )

	if lWaitCmds
		MyWaitNFe(2)
	endif

	*-- Apaga Arq de comando que j  foi copiado para o ACBrNFeMonitor
	FILEDELETE( cArq )																																			                    

	*-- Renomeia o Arquivo de Comando para a ExtensÆo lida pelo ACBrNFeMonitor
   FRENAME( cDirDoMonitor + 'ENTNFe' + cNrMaq + '.CMD',;
				 Alltrim(Caminho->PathNFe) + 'ENTNFe' + cNrMaq + '.TXT' ) 

	if lWaitCmds
		MyWaitNFe(3)
	endif  

	if nEsperaInk > 0
		INKEY(nEsperaInk)
	endif
	
   if !EMPTY( cTextoPisc )
		MensagPisc(cTextoPisc, nTempoPisc)
	endif
	
   MyWaitNFe(nTempMyWait, cIdxMyWait, cDadosMyWait)

return NIL



*---------------------------------------------------------------------------*
*-- Executa comando X, parametro Y
function Aux_NFe_Monitor(cComando, xPar)
	local lOk := .F.,;
			cArquivo := 'ENTNFe' + cNrMaq,;
   		nLin :=0, ;
			cDirDoMonitor := ''
	
   *-- Apaga o arquivo de comando
	FERASE( cArquivo + '.TXT')
	FERASE( cArquivo + '.CMD')

   SET DEVICE TO PRINTER
   SET PRINTER TO (cArquivo + '.CMD')
   SET PRINTER ON

   @ nLin,0 say cComando + '(' + chr(34) + xPar + chr(34) + ')'

   DBCLEARREL()
   SET PRINTER TO
	PRINTOFF()

	AbreParam()

	*-- Apaga Arquivos na pasta do ACBrNFeMonitor
	cDirDoMonitor := Alltrim(Caminho->PathNFe) + ''
	FERASE( cDirDoMonitor + '\ENTNFE' + cNrMaq + '.TXT' ) // Envio
	FERASE( cDirDoMonitor + '\SAINFE' + cNrMaq + '.TXT' ) // Retorno 		 						  											 
	inkey(0.5)

	*-- Cria Arq para ACBrNFeMonitor Ler
   FILECOPY( cArquivo + '.CMD',  cDirDoMonitor + cArquivo + '.CMD' ) ;  inkey(0.5)

	*-- Troca para a ExtensÆo lida pelo ACBrNFeMonitor
   FRENAME( cDirDoMonitor + cArquivo + '.CMD', Alltrim(Caminho->PathNFe) + cArquivo + '.TXT' ) 
	INKEY(2)

	*-- Apaga Arquivos
	FILEDELETE( cArquivo         ) // Arquivo Comando local																																			                    
	FERASE(     cArquivo + '.TXT') // Arquivo ACBr
	FERASE(     cArquivo + '.CMD') // Arquivo Comando pasta ACBr
	
return lOk




********************************************************************************
function Aux_NFe_MostraRetACBr()
* Mostra Retorno SEFAZ caso exista arquivo de retorno
   local cTelaMsg := SaveScreen(s_geral), ;
			cArqRet := '',;
			cConteudoArqRet := ''
   
   
   if Select('Param') == 0
      AbreParam()
   endif

	cArqRet := Alltrim(Caminho->PathNFe) + 'sainfe' + cNrMaq + '.txt'
   if file(cArqRet)
   	cConteudoArqRet := MemoRead( cArqRet )
		cConteudoArqRet := substr(cConteudoArqRet, AT('[RETORNO]', upper(cConteudoArqRet))) // coloquei em fev/2016 para pegar a parte do retorno
  	endif
   
   if !empty( cConteudoArqRet )
		ferase('retacbr'+cNrMaq + '.txt')
		memowrit('retacbr'+cNrMaq + '.txt', cConteudoArqRet)
		MostraTex('retacbr'+cNrMaq+'.txt', ' RETORNO SEFAZ ', 3,12,20,67) // abre arquivo de Retorno na tela
   endif
	RestScreen(s_geral, cTelaMsg)
return NIL
* Atenção * Alguns trechos de código foram retirados, então o código acima é pra ter uma noção geral da geração do arquivo para o ACBr e das etapas e uma ideia de como trabalhar.

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

ACBrNFeMonitor

Mensagem por ricardo-barros »

:)) Isto será uma grande ajuda!

Acabo de ler todo o código que você postou e agora compreendo como funciona o ACBr. É muito mais que uma idéia: é o caminho das pedras. Com certeza vai servir como modelo para todos aqueles que pretendem substituir o Emissor gratuito que está com os dias contados.

O Rubens também está preparando algo neste sentido (pelo que nós migrantes também agradecemos). Neste momento toda ajuda é muito apreciada e se soma umas às outras até que completemos o trabalho de combinar as melhores técnicas.


Muito obrigado, Fladimir. E parabéns pela generosidade de compartilhar este código :-Y
Responder