Jump to content
Fivewin Brasil

Leaderboard

Popular Content

Showing content with the highest reputation on 03/20/2018 in all areas

  1. Frazato

    Recuperar XML do SAT

    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)
    1 point
×
×
  • Create New...