Página 2 de 2

Transmissor de nota fiscal eletronica free

Enviado: 21 Mai 2016 17:44
por fladimir
É o q o Jairo falou... vc poderá aproveitar seu arquivo de certa forma... ou seja, não poderá mandar ele do jeito q era pro ACBr terá q ver um modelo do arquivo ACBr e moldar o teu nos moldes do ACBr

Vc tem q criar um arquivo ENT.TXT q lá dentro vai ter o "comando" do ACBr + o teu TXT (adaptado digamos assim)...

Então se no teu NFe.TXT q ia pro Emissor gratuito vc tinha: (nao sei se é assim peguei mais ou menos de um manual na net pra ter ideia)

Código: Selecionar todos

A|versao do schema|id
B|cUF|cNF|NatOp|intPag|mod|serie|nNF|dEmi|dSaiEnt|hSaiEnt|tpNF|cMunFG|TpImp|TpEmis|cDV|tpAmb|finNFe|procEmi|VerProc|dh
Cont|xJust|
C|XNome|XFant|IE|IEST|IM|CNAE|CRT|
C05|XLgr|Nro|Cpl|Bairro|CMun|XMun|UF|CEP|cPais|xPais|fone|
H|nItem|infAdProd|
I|CProd|CEAN|XProd|NCM|EXTIPI|CFOP|UCom|QCom|VUnCom|VProd|CEANTrib|UTrib|QTrib|VUnTrib|VFrete|VSeg|VDesc|vOutro|
indTot|xPed|nItemPed|
Z|InfAdFisco|InfCpl|
No ACBr dentro do ENT.TXT vai ter:

ACBr.CriaNFe( E aqui vc coloca o conteudo do teu arquivo TXT adaptado nos moldes do ACBr... ) Exemplo abaixo:


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 necessrio 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 necessrio 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 necessrio 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 necessrio 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 necessrio 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 necessrio 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 necessrio 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 necessrio 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( " necessrio informar uma e-mail vlido ; 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 necessrio 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 necessrio 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 necessrio 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 necessrio 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 necessrio 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 necessrio 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
[]´s

Transmissor de nota fiscal eletronica free

Enviado: 22 Mai 2016 08:18
por Jairo Maia
Olá Porter,
porter escreveu:o arquivo que eu gerava (NFE.TXT) vai dar para ser aproveitado
Usando um dos comandos do ACBr que passei antes, basta enviar seu arquivo ao ACBr para gerar a nota.
porter escreveu:preciso fazer testes sem certificado
Mil desculpas... Esquece. Você precisa de certificado. Isso não é um problema do ACBr, é com a SEFAZ. Sem certificado você não faz testes de NF-e.

NOTA: Observe o exemplo do Fladimir acima, na minha opinião, acho até mais simples montar o .TXT no formato do ACBr do que no formato da SEFAZ-SP.

Tem um exemplo bem didático postado pelo Fladimir explicando como montar o arquivo de envio ao ACBr aqui: ACBrNFeMonitor

Você disse que começou a ler o tutorial do Rubens. Começar não é suficiente. Ganhe tempo lendo e entendendo o tutorial dele de como usar o ACBr. Isso fará com que você ganhe tempo no futuro. Leia e entenda esse tutorial: Tutorial ACBRMonitorPlus

Transmissor de nota fiscal eletronica free

Enviado: 22 Mai 2016 10:22
por JoséQuintas
Desse jeito é muito complicado e trabalhoso.

Código: Selecionar todos

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++ 
Assim é mais interessante.
Lembrando que "?" pula uma linha ANTES de mostrar o texto e não depois, e "??" não pula linha nenhuma, nem antes, nem depois

Código: Selecionar todos

SET DEVICE TO ("arquivo.txt")
SET PRINT ON
SET CONSOLE OFF
?? 'NFE.CriarNFe([Identificacao]'
? 'Emissao=' + Dtoc(dDtNFeEmis)
? 'Codigo='+cNota 
? 'Codigo='+cCodigoRandom
? 'Numero='+cNota
? 'NaturezaOperacao='+ cNaturezaOp
? 'Finalidade=' + if( lComplementar, '2', '1') 
?
SET CONSOLE ON
SET PRINTER OFF
SET PRINTER TO
Ou numa variável

Código: Selecionar todos

cTxt := ""
cTxt += 'NFE.CriarNFe([Identificacao]' + hb_eol()
cTxt += 'Emissao=' + Dtoc(dDtNFeEmis) + hb_eol()
cTxt += 'Codigo='+cNota + hb_eol()
cTxt += 'Codigo='+cCodigoRandom + hb_eol()
cTxt += 'Numero='+cNota + hb_eol()
cTxt += 'NaturezaOperacao='+ cNaturezaOp + hb_eol()
cTxt += 'Finalidade=' + if( lComplementar, '2', '1') + hb_eol()
hb_MemoWrit( "arquivo.txt", cTxt )
Apenas como comentário, pra gerar o XML normal da nota, poderia ser algo parecido com isto.
Por isso não sei até onde vale a pena trabalhar com outros formatos;

Código: Selecionar todos

cXml := ""
cXml += XmlTag( "DtEmis", Dtoc(dDtNFeEmis) )
cXml += XmlTag( "Nota", cNota )
cXml += XmlTag( "Codigo", cCodigoRandom )
cXml += XmlTag( "Natureza", cNaturezaOp )
cXml += XmlTag( "Finalidade", if( lComplementar, '2', '1') )
hb_MemoWrit( "arquivo.xml", cXml )

FUNCTION XmlTag( cTag, cConteudo )
   RETURN "<" + cTag + ">" + cConteudo + "</" + cTag + ">"

Transmissor de nota fiscal eletronica free

Enviado: 22 Mai 2016 11:02
por porter
bom dia pessoal, vou compilar esse exemplo do Fladimir para gerar uma NFE.TXT para o acbrMonitorPlus como modelo, estou procurando um layout, facilitaria bastante, obrigado a todos.

Transmissor de nota fiscal eletronica free

Enviado: 22 Mai 2016 12:26
por fladimir
Obrigado Quintas pela dica...

Qdo eu fiz aproveitei um trecho de um colega q era assim e dei continuidade e ficou assim...

Sempre qdo olho pra esse trecho penso em mudar mas deixo quieto...

Mesmo assim obrigado.

[]´s

Transmissor de nota fiscal eletronica free

Enviado: 22 Mai 2016 13:03
por JoséQuintas
No SPED Contábil, que o tamanho pode ser gigantesco, uso direto pro TXT, nos demais é variável mesmo.

E fica bom pra manutenção dividir por bloco.

https://pctoledo.org/forum/viewto ... 01#p106301

Transmissor de nota fiscal eletronica free

Enviado: 23 Mai 2016 15:48
por filipedoblinski
poster você pode usar o mesmo layout que usa atualmente pra enviar via emissor gratuito sem problema nenhum, inclusive faço desta forma, a unica coisa que você deve se atentar é com a versão do ACBR, nas versões 0.9... usa o layout mais antigo da receita, inclusive o que destaca a partilha de icms nas tags W04 e nas versoes 1.... usa no proprio W02

Transmissor de nota fiscal eletronica free

Enviado: 23 Mai 2016 16:28
por gilbertosilverio
Ola amigos,

Fiz uns teste com o ACBR, e a resposta foi super rápida para o envio de NFe.

Uso o UNINFE e o EMISSOR para as NFes, minha duvida quanto ao ACBR, e se e possível em um servidor trabalhar com mais de uma empresa, como no UNINFE que emito NFes de quatro empresas simultaneamente.

E possível usar o ACBR para mais de uma empresa, e se sim como fazer esta configuração, gostaria de poder testar o ACBR com varias empresas...

Grato.

Gilberto Silverio.

Transmissor de nota fiscal eletronica free

Enviado: 23 Mai 2016 16:43
por filipedoblinski
é possível sim, mas o mais indicado é instalar um ACBR monitor para cada empresa, o tratamento é mais simples, sem grandes problemas também, ai só tem que indicar no acbr que pode ser executada mais de uma instancia.

eu também usava o uninfe, mas pra baratear ao cliente passei para o acbr

Transmissor de nota fiscal eletronica free

Enviado: 24 Mai 2016 09:32
por porter
olá fladimir, bom dia
Estou estudando o codigo GERANFE.prg que você postou, te agradeço, tem como você dizer, a qual pasta se refere o comando abaixo, qual o caminho,
quero ver como é o arquivo que ele gera.

Código: Selecionar todos

nPosIni  := Rat(Alltrim(Caminho->PathNFe) +'RESPOSTA\', cNFeLog)
obrigado.

Transmissor de nota fiscal eletronica free

Enviado: 24 Mai 2016 10:29
por fladimir
Se refere a pasta q vc indicou pro ACBr monitorar...

Exemplo se no ACBr na guia Monitor (caso tenha dúvidas olhe o Tutorial do Rubens sobre o ACBr) vc especifica qual pasta quer monitorar...

Suponhamos q seja:

Código: Selecionar todos

c:\pastadoseusistema\NFe
Então é este caminho q estará na minha chamada

Código: Selecionar todos

Caminho->PathNFe
[]´s

Transmissor de nota fiscal eletronica free

Enviado: 25 Mai 2016 14:54
por porter
olá fladimir, por favor, se você puder responder, tenho uma dúvida, no AcbrMonitor Plus na aba Monitor, está configurado assim:

Monitorar pasta habilitado
Entrada: ACBRMONITORPLUS\ENTNFE.TXT\
Saida: ACBRMONITORPLUS\SAIENT.TXT\

Log de Comandos habilitado

Arquivo: ACBRMONITORPLUS\LOG.TXT

O comando Caminho->PathNFe, qual informação deve ter nesse campo
Creio que Caminho é um arquivo e PathNFe é um campo, qual informação, deve ter nesse campo, estou deixando tentando deixar tudo certo para executar a rotina que você mandou para ver o que acontece nas pastar monitoradas pelo AcbrMonitor.

obrigado.

Transmissor de nota fiscal eletronica free

Enviado: 12 Nov 2016 15:53
por ricardo-barros
Olá, Fladimir.

Primeiro quero lhe agradecer pelos códigos para envio e retorno da NFe, postados por você, para uso com ACBr. Eu os estou adaptando para o meu sistema. Durante este processo a compilação solicitou as seguintes funções:

undefined reference to `HB_FUN_NFE_AUX_STATUSNOTA'
undefined reference to `HB_FUN_NFE_AUX_MUDAXMLIRREGULAR'
undefined reference to `HB_FUN_NFE_AUX_PEGACHAVE'
undefined reference to `HB_FUN_AUX_NFE_PEGAPROTOCOLO'

Por favor você poderia disponibilizá-las?

Eu agradeceria muito por isto também.

Transmissor de nota fiscal eletronica free

Enviado: 12 Nov 2016 17:02
por fladimir
Boa tarde,

Com relação a StatusNota e PegaChave segue link q comentei e postei.

Código: Selecionar todos

********************************************************************************
function NFe_Aux_MudaXMLIrregular()		
	* Muda o XML da Nota colocando em dados adicionais a mensagem q a nota esta com problemas e valida o XML novamente pra ficar ok.
	local cArq 			 := MemoRead(NFe->XMLRETORNO)
	local cCaminhoArqs := Alltrim(Path->PathNFe) + STR(YEAR(NFe->DataEmi),4) + STRZERO(month(NFe->DataEmi),2) + '\'

	local cArquivoMov  := ''
	local cArqMov_READ := ''

	if 'ESTA NF-E ESTA DENEGADA' $ UPPER( cArq )   // Se j  tem informa‡Æo DENEGADA nÆo faz...
	else // se nÆo foi feito ainda... ai altera na pasta Resposta e na pasta resumo do mes
		cArq        := STRTRAN( cArq, '<infAdic><infCpl>', ;
		                              '<infAdic><infCpl>*** ATENÇÃO *** ESTA NF-e ESTA DENEGADA!!!;      *** ATENÇÃO *** ESTA NF-e ESTA DENEGADA!!!;            *** ATENÇÃO *** ESTA NF-e ESTA DENEGADA!!!;;')  // O texto tem q ser em ANSI
		
		if FERASE( NFe->XMLRETORNO ) == 0 // APAGOU ARQUIVO ANTERIOR
			MEMOWRIT( NFe->XMLRETORNO, cArq)
		endif
	endif		

	//--> Fa‡o o mesmo processo acima por‚m no arquivo salvo na pasta resumo mes
	cArquivoMov  += cCaminhoArqs +  NFe_Aux_PegaChave() + '-nfe.xml'
	cArqMov_Read := MEMOREAD( cArquivoMov )
	if 'ESTA NF-E ESTA DENEGADA' $ UPPER( cArqMov_Read )   // Se j  tem informa‡Æo DENEGADA nÆo faz...
	else // se nÆo foi feito ainda... ai altera na pasta Resposta e na pasta resumo do mes
		cArqMov_Read := STRTRAN( cArqMov_Read, '<infAdic><infCpl>', ;
		                              			'<infAdic><infCpl>*** ATENÇÃO *** ESTA NF-e ESTA DENEGADA!!!;      *** ATENÇÃO *** ESTA NF-e ESTA DENEGADA!!!;            *** ATENÇÃO *** ESTA NF-e ESTA DENEGADA!!!;;')  // O texto tem q ser em ANSI
		if FERASE( cArquivoMov ) == 0
			MEMOWRIT( cArquivoMov, cArqMov_Read)
		endif
	endif
return NIL


********************************************************************************
function Aux_NFe_PegaProtocolo( cString )
   local cProtocolo := ''

   cProtocolo := Substr( cString, At('NPROT=', cString)+6, 15)
   cProtocolo := StrTran( cProtocolo, CHR(13),"")
   cProtocolo := Alltrim(StrTran( cProtocolo, CHR(10),""))

return cProtocolo
Atenção: Esses códigos fiz na pressa e alguns anos atrás então com certeza tem coisas repetitivas e acredito pelo q olhei rapidamente q possam ser em muito melhoradas, mas atenderam na época e ainda atendem então já viu... time q ta ganhando não mexe... ta do mesmo jeito...kkk

Espero q te ajude.