Clipper On Line • Ver Tópico - NFe - Toda ajuda sempre é bem vinda, então...

NFe - Toda ajuda sempre é bem vinda, então...

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

 

NFe - Toda ajuda sempre é bem vinda, então...

Mensagempor rochinha » 25 Mar 2009 18:09

Amiguinhos,

Os termos NFe, XML, etc estão em alta e pauta.

Para tanto o que não faltam são utilitarios que facilitem o trabalho arduo de assinatura, validação, envio e retorno de informações para nossos sistemas.

Eu sempre apostei no trabalho do pessoal envolvido no ACBr e suas infinidades de funções.

Este projeto conta tambe´m com uma ferramenta para o desenvolvedor que auxilia o intercambio com Nota Fiscal Eletronica através do ACBrNFe Monitor.

Para ajudar os amigos a implementa-lo em seus sistemas bolei estas funções para uso com Fivewin.

Não tive a oportunidade de testar entre o monitor e o SEFAZ, mas testei entre o sistema e o monitor:

#include "fivewin.ch"

/////////////////////////////////////////////////////////////////////////////
//
// ACBR - Funcoes Compativeis com Monitor ACBr NFe
//
//         Autor: Jose Carlos da Rocha
//          Data: 24/03/2009
//         Email: irochinha@itelefonica.com.br
//           MSN: fivolution@hotmail.com
//     Linguagem: xBase
//       Prefixo: ACBR_NFE_
//   Plataformas: DOS, Windows
// Requerimentos: Harbour/xHarbour( Para uso com Clipper eliminar Prefixo )
//
/////////////////////////////////////////////////////////////////////////////
function ACBR_NFE_StatusServico()
   cCmd           := ""
   ACBR_NFE_Comando( "NFE.StatusServico", ["]+cCmd+["] )
   MyWait(2)
   retorno := ACBR_NFE_Retorno()
   return retorno

function ACBR_NFE_AssinarNFe( cXML )
   cCmd           := iif(cXML=nil,"",cXML)
   ACBR_NFE_Comando( "ECF.AssinarNFe", ["]+cCmd+["] )
   MyWait(2)
   retorno := ACBR_NFE_Retorno()
   return retorno

function ACBR_NFE_ValidarNFe( cXML )
   cCmd           := iif(cXML=nil,"",cXML)
   ACBR_NFE_Comando( "ECF.ValidarNFe", ["]+cCmd+["] )
   MyWait(2)
   retorno := ACBR_NFE_Retorno()
   return retorno

function ACBR_NFE_ConsultarNFe( cNFe )
   cCmd           := iif(cNFe=nil,"",cNFe)
   ACBR_NFE_Comando( "ECF.ConsultarNFe", ["]+cCmd+["] )
   MyWait(2)
   retorno := ACBR_NFE_Retorno()
   return retorno

function ACBR_NFE_CancelarNFe( cNFe )
   cCmd           := iif(cNFe=nil,"",cNFe)
   ACBR_NFE_Comando( "ECF.CancelarNFe", ["]+cCmd+["] )
   MyWait(2)
   retorno := ACBR_NFE_Retorno()
   return retorno

function ACBR_NFE_ImprimirDANFe( cXML )
   cCmd           := iif(cXML=nil,"",cXML)
   ACBR_NFE_Comando( "ECF.ImprimirDANFe", ["]+cCmd+["] )
   MyWait(2)
   retorno := ACBR_NFE_Retorno()
   return retorno

function ACBR_NFE_InutilizarNFe( cCNPJ, cJustificativa, nAno, nModelo, nSerie, nNumInicial, nNumFinal )
   cCNPJ          := iif(cCNPJ=nil,"XXXXXXXXXXXXXX",cCNPJ)
   cJustificativa := iif(cJustificativa=nil,"TESTE NFE",cJustificativa)
   nAno           := str( nAno )
   nModelo        := str( nModelo )
   nSerie         := str( nSerie )
   nNumInicial    := str( nNumInicial )
   nNumFinal      := str( nNumfinal )
   cCmd           := ["]+cCNPJ+[","]+cJustificativa+[",]+nAno+[,]+nModelo+[,]+nSerie+[,]+nNumInicial+[,]+nNumFinal
   ACBR_NFE_Comando( "ECF.InutilizarNFe", cCmd )
   MyWait(2)
   retorno := ACBR_NFE_Retorno()
   return retorno

function ACBR_NFE_EnviarNFe( cArquivo, nLote, nAssina, nImprime )
   nLote          := str( nLote )
   nAssina        := str( nAssina )
   nImprime       := str( nImprime )
   cCmd           := ["]+cArquivo+[",]+nLote+[,]+nAssina+[,]+nImprime
   ACBR_NFE_Comando( "ECF.EnviarNFe", cCmd )
   MyWait(2)
   retorno := ACBR_NFE_Retorno()
   return retorno

function ACBR_NFE_Comando( cIndice, cDados )
   local ret_line := "chr(13)+chr(10)"
   cPath         := cFilePath( GetModuleFileName( GetInstance() ) )
   cDirDoMonitor := VerifyINI( "ACBrNFe", "REMESSA" , cPath+"\REM", cPath+"ACBrNFe.ini", .f. )
   if ! MsgYesNo( "Continua salvando em "+alltrim(cDirDoMonitor)+"?" )
      cDirDoMonitor := cGetDir("Salvar NFE na pasta",cDirDoMonitor) + "\"
   endif
   cDirDoMonitor := VerifyINI( "ACBrNFe", "REMESSA" , cPath+"\REM", cPath+"ACBrNFe.ini", .t. )
   errfile  := "ENT.CMD"
   cDados   := iif(ValType(cDados)#"C","",cDados)
   errhandle := FCREATE(errfile)
   cBuffer := cIndice + iif( len( cDados )=0,"()","(" + cDados + ")")
   FWRITE(errhandle,cBuffer+&ret_line.)
   FCLOSE(errhandle)
   //
   FERASE( cDirDoMonitor+"\ENTNFE.TXT" )
   FERASE( cDirDoMonitor+"\SAINFE.TXT" )
   MyWait(2)
   if !file(cDirDoMonitor+"\Monitor.exe")
      MsgStop( "Monitor da ACBRNFe nao encontrado em "+cDirDoMonitor )
      return .t.
   endif
   MyCopyFile( "ENT.CMD", cDirDoMonitor+"\ENT.CMD" )
   MyWait(2)
   FRENAME( cDirDoMonitor+"\ENT.CMD",cDirDoMonitor+"\ENTNFE.TXT" )
   MyWait(3)
   return .t.

function ACBR_NFE_Retorno(lMostra)
   _vezes_ := 5
   cPath         := cFilePath( GetModuleFileName( GetInstance() ) )
   cDirDoMonitor := VerifyINI( "ACBrNFe", "REMESSA" , cPath+"\REM", cPath+"ACBrNFe.ini", .f. )
   do while _vezes_>0
      // Verifica se o arquivo Status.txt existe.
      // Este arquivo que contém o estado de execução do comando
      // enviado.
      if file( cDirDoMonitor+"\SAINFE.TXT" ) //.and. freadstr( cDirDoMonitor+"\Status.txt" ) <> "0"
         cECFLOG := memoread( cDirDoMonitor+"\SAINFE.TXT" )
         if "ERRO" $ Upper(cECFLOG)
            //MsgStop( cECFLOG )
            //return StrTran( cECFLOG, "ERRO:", "" )
         endif
         if "OK" $ Upper(cECFLOG)
            return StrTran( cECFLOG, "OK:", "" )
         else
            MsgStop( cECFLOG )
         endif
      endif
      MyWait(1)
      _vezes_--
   enddo
   return ""

function VerifyINI( _section_, _entry_, _var_, _inifile_, _grava_ )
   oIni := TIni():New( _inifile_ )
   if _grava_ = .t.
      oIni:Set( _section_, _entry_, _var_ )
   endif
   return oIni:Get( _section_, _entry_, _var_, _var_ )


Para auxiliar, disponibilizei um arquivo contendo o monitor e seus arquivos em:

NFe Monitor

Boa sorte.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes



Retornar para FiveWin

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 11 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro