Jump to content
Fivewin Brasil

Recuperar XML do SAT


Luiz Fernando

Recommended Posts

  • 1 year later...
 

O site da Receita infelizmente permite baixar o lote dos arquivos XMLs, e não os arquivos XMLs dos cupons fiscais que foram gerados.
Em nossa empresa perdemos muitos arquivos xmls em um acidente e só conseguimos recuperar os arquivos xmls dos cupons fiscais direto da receita baixando os arquivos XMLs do lote do site da receita e utilizando em conjunto o sistema dessa empresa chamada xxxxxxx, que lê esses arquivos de lote baixados da receita e converte nos arquivos XMLs dos cupons fiscais que precisamos.

Se interessar a alguém o site da empresa é esse:
http://www.....
Espero ter ajudado.

Olá Jorge, você é o George Santos, correto?

Link to comment
Share on other sites

Bom dia! tive esse mesmo problema mais consegui pegar no site os lotes e enviados e apartir deles gerei os arquivos dos cupons   com a rotina abaixo:

 


#include "inkey.ch"
#INCLUDE "FILEIO.CH"

/* Compile usando
   Hbmk2 desdobra hbct.hbc
   By Frazato : frazato@ibest.com.br

*/ 

Function Main()
SetMode(23,80)
Clear
@ 00,00 say Padc('...### DESDOBRA DE ARQUIVO SAT(Direto Sefaz)###...',MaxCol()) Color('w+/r')
@ 01,00 say Padc('...### By Frazato (14) 99714-0865 ###...',MaxCol())
@ 02,00 say replica('_',MaxCol())

mListaArq  := Directory("*.xml","N")
@ 03,00 say 'Total de Arquivo(s) sefaz.....'+Str(Len(mListaArq),7) 
nLin := 4
wValorArq := 0
wValorArq := 0
wQtdArq   := 0


For i:= 1 to Len(mListaArq)
    cArquivo := mListaArq[i,1]
    MostraItens(cArquivo,nLin++)
    *Delete File to (cArquivo)
    If nLin >= MaxCol()-2
       nLin := 4
    Endif
Next
mListaArqSaidas  := Directory("CFe\*.xml","N")
cMsg1  := 'Total de Arquivo(s) Gerado(s)..'+Str(Len(mListaArqSaidas),15)
Alert('Processo terminado!'+cMsg1)
Return nil

//--------------------------------------------------------------------------------
Function MostraItens(cFileDanfe,nLinhaTela)
cPastaSaida := 'CFe\'
nRet        := DirMake('CFe')
    if !file(cFileDanfe)  
       alert('Arquivo nao esta na pasta....'+cFileDanfe)
    Endif
     

    Linha       := Memoread(cFileDanfe)
    nLinhalidas := 0
    Linhatotal  := Len(Linha)
    cLinhaTxt   := Linha
    cArqXmlLido := Linha

    Do While .t.
            cLidos := PegaDados('CFe',Alltrim(cLinhaTxt),.t.,'CFe' )
            Linha  := cLidos
                    
            cArqSaida := PegaNomeXmlChave(cLidos)
            If cArqSaida#'ERROXML'
                GravaSaida(cPastaSaida+'CFe'+cArqSaida+'.xml',cLidos)
                
                cArquivo_ := cPastaSaida+'CFe'+cArqSaida+'.xml'
                wQtdArq   := PegaValorCupom( PegaDados('total',Alltrim(cLidos),.t.,'total') )
                wValorArq += wQtdArq 
                
                @ nLinhaTela,00 say 'Desdobrando....'+cArquivo_ + Space(10) + Str(wQtdArq,5)+Space(5)+Transf(wValorArq,'@EZ 9999,999.99')
                @ 03,50 say 'R$ Pasta....'+Transf(wValorArq,'@EZ 9999,999.99')
    
            Endif
            cDadosItem := cLidos
            If Linha=='0'
               Exit
            Endif
            nSize         := Linhatotal-nLinhaLidas
            cLinha        := Right(cLinhaTxt,nSize)
            cLinhaTxt     := cLinha
            If nLinhaLidas >= Linhatotal
               Exit
            Endif
    Enddo
Return nil
//------------------------------------------------------
Function GravaSaida(cArq,cTexto)
Local Handle := FCreate(cArq)
             If Ferror() # 0
                   Alert("Impossivel Criar o Arquivo:"+Chr(10)+;
                         cArq   )

              Endif
              Fwrite(Handle,'<CFe'+Alltrim(cTexto)+'</CFe>')
              FClose(Handle)
Return nil
              
//------------------------------------------------------
Function PegaNomeXmlChave(cLinha)
Local nPosIni  := At([Id="CFe],cLinha)
If nPosIni==0
   Return 'ERROXML'
Endif
cRet := Substr(cLinha,nPosIni+7,44)
Return  ( cRet)
    
//------------------------------------------------------
Function PegaDados(cProc,cLinha,lItem,cTexto2)
Local InicioDoDado :=Iif(cTexto2==Nil,"<"+cProc+">" , "<"+cProc )
Local FinalDoDado := Iif(cTexto2==Nil,"</"+cProc+">",'</'+cTexto2+'>')
Local nPosIni     := At(InicioDoDado,cLinha)
Local nPosFim     := At(FinalDoDado,cLinha)
Local cRet        := '0'
Local x
If nPosIni==0 .or. nPosFim==0
   Return cRet
Endif
cRet := Substr(cLinha,nPosIni+Len(IniciodoDado),nPosFim-nPosIni-Len(FinalDoDado)+1)
If lItem ==.t.
   nLinhalidas  += nPosFim
Endif
Return  ( cRet)
//------------------------------------------------------------
Static Function PegaValorCupom(cLinha)
Local nPos1  := At('<vCFe>',cLinha)
Local nPos2  := At('</vCFe>',cLinha)
Local cTraco := Substr(cLinha,nPos1+6,nPos2)
Return Val(cTraco)

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...