Transmissor de nota fiscal eletronica free

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Transmissor de nota fiscal eletronica free

Mensagem 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
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.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Transmissor de nota fiscal eletronica free

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Transmissor de nota fiscal eletronica free

Mensagem 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 + ">"
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Transmissor de nota fiscal eletronica free

Mensagem 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.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Transmissor de nota fiscal eletronica free

Mensagem 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
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.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Transmissor de nota fiscal eletronica free

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
filipedoblinski
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 21 Ago 2014 17:07
Localização: São Paulo / SP

Transmissor de nota fiscal eletronica free

Mensagem 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
gilbertosilverio
Usuário Nível 3
Usuário Nível 3
Mensagens: 339
Registrado em: 18 Jan 2009 10:39
Localização: Ribeirao Pires - SP

Transmissor de nota fiscal eletronica free

Mensagem 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.
GilbertoSilverio
gilbertosilverio@gmail.com
gilbertosilverio2003@yahoo.com.br
filipedoblinski
Usuário Nível 1
Usuário Nível 1
Mensagens: 11
Registrado em: 21 Ago 2014 17:07
Localização: São Paulo / SP

Transmissor de nota fiscal eletronica free

Mensagem 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
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Transmissor de nota fiscal eletronica free

Mensagem 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.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Transmissor de nota fiscal eletronica free

Mensagem 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
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.
porter
Usuário Nível 5
Usuário Nível 5
Mensagens: 1057
Registrado em: 10 Dez 2009 16:44
Localização: OLIMPIA-SP

Transmissor de nota fiscal eletronica free

Mensagem 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.
ricardo-barros
Usuário Nível 3
Usuário Nível 3
Mensagens: 104
Registrado em: 29 Out 2009 20:12
Localização: Fortaleza

Transmissor de nota fiscal eletronica free

Mensagem 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.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Transmissor de nota fiscal eletronica free

Mensagem 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.
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.
Responder