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)