DANFEPDF.prw 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882
  1. #INCLUDE "PROTHEUS.CH"
  2. #INCLUDE "RWMAKE.CH"
  3. #INCLUDE "FWPrintSetup.ch"
  4. #INCLUDE "topconn.ch"
  5. #INCLUDE "RPTDEF.CH"
  6. #INCLUDE "FILEIO.CH"
  7. #INCLUDE "TOTVS.CH"
  8. /*__________________________________________________________________________
  9. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  10. ¦¦+-----------------------------------------------------------------------+¦¦
  11. ¦¦¦Funçäo ¦ DANFEPDF ¦ Autor ¦ Lucilene Mendes ¦ Data ¦19.07.19 ¦¦¦
  12. ¦¦+----------+------------------------------------------------------------¦¦¦
  13. ¦¦¦Descriçäo ¦ Geração da DANFE em pdf ¦¦¦
  14. ¦¦+-----------------------------------------------------------------------+¦¦
  15. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  16. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  17. User Function DANFEPDF(nRecSF2,cDirDoc, cFilePrint)
  18. Local lRet :=.T.
  19. Local oSetup
  20. Local oDanfe
  21. Local lAdjustToLegacy := .F. //DEFAULT .F., NAO CALCULA
  22. Local lDisableSetup := .T.
  23. Local cIdEnt := ""
  24. //Posiciona na NF
  25. dbSelectArea("SF2")
  26. SF2->(dbGoTo(nRecSF2))
  27. nFlags := PD_DISABLEORIENTATION
  28. //nFlags := PD_ISTOTVSPRINTER+ PD_DISABLEORIENTATION + PD_DISABLEPAPERSIZE + PD_DISABLEPREVIEW + PD_DISABLEMARGIN
  29. // inicio - define impressão
  30. oDanfe := FWMSPrinter():New(cFilePrint+'.pdf', IMP_PDF, lAdjustToLegacy, cDirDoc, lDisableSetup, , ,"PDF", , , , .F.)
  31. oDanfe:SetResolution(78) //Tamanho estipulado para a Danfe
  32. oDanfe:SetPortrait()
  33. oDanfe:SetPaperSize(9)
  34. oDanfe:cPathPDF := cDirDoc
  35. MV_PAR01 := SF2->F2_DOC
  36. MV_PAR02 := SF2->F2_DOC
  37. MV_PAR03 := SF2->F2_SERIE
  38. MV_PAR04 := 2 //2 [Operacao] NF de Saida
  39. MV_PAR05 := 2 //Imprime no verso ? 1=sim, 2=nao
  40. MV_PAR06 := 2 //2[DANFE simplificado] Nao
  41. //Se já existir o arquivo, apaga para recriar
  42. If File(cDirDoc+cFilePrint+'.pdf')
  43. fErase(cDirDoc+cFilePrint+'.pdf')
  44. Endif
  45. cIdEnt:= GetIdEnt()
  46. Conout("cIdEnt: "+cIdEnt)
  47. aSf2:= (GetArea())
  48. //gera o arquivo .xml
  49. SpedPExp(cIdEnt,MV_PAR03,mv_par01,MV_PAR02,cDirDoc,.f. ,SF2->F2_EMISSAO-30,SF2->F2_EMISSAO+30,Space(14),Space(14),,,,cFilePrint)
  50. RestArea(aSf2)
  51. //gera o arquivo .pdf
  52. //lRet := U_PrtNfeSef(cIdEnt, mv_par01, mv_par01, oDanfe,oSetup, cDirDoc+cFilePrint , .T.) //passado .T. para que não abra a tela de perguntas, depois e retornado para .F.
  53. lRet := U_DANFE_P1( cIdEnt, mv_par01, mv_par01, oDanfe,oSetup, .F.,cDirDoc+cFilePrint)
  54. // SpedPExp( cIdEnt,cSerie ,cNotaIni ,cNotaFim ,cDirDest,lEnd,dDataDe ,dDataAte ,cCnpjDIni ,cCnpjDFim ,nTipo,lCTe,cSerMax)
  55. Return lRet
  56. Static Function GetIdEnt(lUsaColab)
  57. local cIdEnt := ""
  58. local cError := ""
  59. Default lUsaColab := .F.
  60. cIdEnt := getCfgEntidade(@cError)
  61. if(empty(cIdEnt))
  62. //Aviso("SPED", cError, {STR0114}, 3)
  63. Conout("GetIdEnt - Entidade não encontrada")
  64. endif
  65. Return(cIdEnt)
  66. Static Function SpedPExp(cIdEnt,cSerie,cNotaIni,cNotaFim,cDirDest,lEnd,dDataDe,dDataAte,cCnpjDIni,cCnpjDFim,nTipo,lCTe,cSerMax,cFilePrint)
  67. Local aDeleta := {}
  68. Local cAlias := GetNextAlias()
  69. Local cAnoInut := ""
  70. Local cAnoInut1 := ""
  71. Local cCanc := ""
  72. Local cChvIni := ""
  73. Local cChvFin := ""
  74. Local cChvNFe := ""
  75. Local cCNPJDEST := Space(14)
  76. Local cCondicao := ""
  77. Local cDestino := ""
  78. Local cDrive := ""
  79. Local cIdflush := cSerie+cNotaIni
  80. Local cModelo := ""
  81. Local cNFes := ""
  82. Local cPrefixo := ""
  83. Local cURL := PadR(GetNewPar("MV_SPEDURL","http://"),250)
  84. Local cXmlInut := ""
  85. Local cXml := ""
  86. Local cWhere := ""
  87. Local cXmlProt := ""
  88. local cAviso := ""
  89. local cErro := ""
  90. local cTab := ""
  91. local cCmpNum := ""
  92. local cCmpSer := ""
  93. local cCmpTipo := ""
  94. local cCmpLoja := ""
  95. local cCmpCliFor:= ""
  96. local cCnpj := ""
  97. Local cEventoCTe := ""
  98. Local cRetEvento := ""
  99. Local cRodapCTe :=""
  100. local cCabCTe :=""
  101. Local cIdEven := ""
  102. local cVerMDfe := ""
  103. local cNumMdfe := ""
  104. Local lOk := .F.
  105. Local lFlush := .T.
  106. Local lFinal := .F.
  107. Local lClearFilter:= .F.
  108. Local lExporta := .F.
  109. Local lUsaColab := .F.
  110. Local lSdoc := TamSx3("F2_SERIE")[1] == 14
  111. Local nHandle := 0
  112. Local nX := 0
  113. Local nY := 0
  114. local nZ := 0
  115. Local aInfXml := {}
  116. Local oRetorno
  117. Local oWS
  118. Local oXML
  119. Local lOkCanc := .f.
  120. Default nTipo := 1
  121. Default cNotaIni:=""
  122. Default cNotaFim:=""
  123. Default dDataDe:=CtoD(" / / ")
  124. Default dDataAte:=CtoD(" / / ")
  125. Default lCTe := IIf (FunName()$"SPEDCTE,TMSA200,TMSAE70,TMSA500,TMSA050",.T.,.F.)
  126. Default cSerMax := cSerie
  127. lUsaColab := UsaColaboracao( IIF(lCte,"2","1") )
  128. If nTipo == 3
  129. If !Empty( GetNewPar("MV_NFCEURL","") )
  130. cURL := PadR(GetNewPar("MV_NFCEURL","http://"),250)
  131. Endif
  132. Endif
  133. If IntTMS() .and. lCTe//Altera o conteúdo da variavel quando for carta de correção para o CTE
  134. cTipoNfe := "SAIDA"
  135. EndIf
  136. ProcRegua(Val(cNotaFim)-Val(cNotaIni))
  137. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  138. //³ Corrigi diretorio de destino ³
  139. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  140. SplitPath(cDirDest,@cDrive,@cDestino,"","")
  141. cDestino := cDrive+cDestino
  142. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  143. //³ Inicia processamento ³
  144. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  145. If ( nTipo == 1 .And. !lUsaColab ).Or. nTipo == 3 .Or. nTipo == 4 .Or. nTipo == 5
  146. oWS:= WSNFeSBRA():New()
  147. oWS:cUSERTOKEN := "TOTVS"
  148. oWS:cID_ENT := cIdEnt
  149. oWS:_URL := AllTrim(cURL)+"/NFeSBRA.apw"
  150. oWS:cIdInicial := IIf(nTipo==4,'58'+cIdflush,cIdflush) // cNotaIni
  151. oWS:cIdFinal := IIf(nTipo==4,'58'+cSerMax+cNotaFim,cSerMax+cNotaFim)
  152. oWS:dDataDe := dDataDe
  153. oWS:dDataAte := dDataAte
  154. oWS:cCNPJDESTInicial := cCnpjDIni
  155. oWS:cCNPJDESTFinal := cCnpjDFim
  156. oWS:nDiasparaExclusao := 0
  157. lOk:= oWS:RETORNAFX()
  158. oRetorno := oWS:oWsRetornaFxResult
  159. lOk := iif( valtype(lOk) == "U", .F., lOk )
  160. If lOk
  161. ProcRegua(Len(oRetorno:OWSNOTAS:OWSNFES3))
  162. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  163. //³ Exporta as notas ³
  164. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  165. For nX := 1 To Len(oRetorno:OWSNOTAS:OWSNFES3)
  166. //Ponto de Entrada para permitir filtrar as NF
  167. If ExistBlock("SPDNFE01")
  168. If !ExecBlock("SPDNFE01",.f.,.f.,{oRetorno:OWSNOTAS:OWSNFES3[nX]})
  169. loop
  170. Endif
  171. Endif
  172. oXml := oRetorno:OWSNOTAS:OWSNFES3[nX]
  173. oXmlExp := XmlParser(oRetorno:OWSNOTAS:OWSNFES3[nX]:OWSNFE:CXML,"","","")
  174. cXML := ""
  175. If Type("oXmlExp:_NFE:_INFNFE:_DEST:_CNPJ")<>"U"
  176. cCNPJDEST := AllTrim(oXmlExp:_NFE:_INFNFE:_DEST:_CNPJ:TEXT)
  177. ElseIF Type("oXmlExp:_NFE:_INFNFE:_DEST:_CPF")<>"U"
  178. cCNPJDEST := AllTrim(oXmlExp:_NFE:_INFNFE:_DEST:_CPF:TEXT)
  179. Else
  180. cCNPJDEST := ""
  181. EndIf
  182. cVerNfe := IIf(Type("oXmlExp:_NFE:_INFNFE:_VERSAO:TEXT") <> "U", oXmlExp:_NFE:_INFNFE:_VERSAO:TEXT, '')
  183. cVerCte := Iif(Type("oXmlExp:_CTE:_INFCTE:_VERSAO:TEXT") <> "U", oXmlExp:_CTE:_INFCTE:_VERSAO:TEXT, '')
  184. cVerMDfe:= Iif(Type("oXmlExp:_MDFE:_INFMDFE:_VERSAO:TEXT") <> "U", oXmlExp:_MDFE:_INFMDFE:_VERSAO:TEXT, '')
  185. If !Empty(oXml:oWSNFe:cProtocolo)
  186. cNotaIni := oXml:cID
  187. cIdflush := cNotaIni
  188. cNFes := cNFes+cNotaIni+CRLF
  189. cChvNFe := NfeIdSPED(oXml:oWSNFe:cXML,"Id")
  190. cModelo := cChvNFe
  191. cModelo := StrTran(cModelo,"NFe","")
  192. cModelo := StrTran(cModelo,"CTe","")
  193. cModelo := StrTran(cModelo,"MDFe","")
  194. cModelo := SubStr(cModelo,21,02)
  195. Do Case
  196. Case cModelo == "57"
  197. cPrefixo := "CTe"
  198. Case cModelo == "65"
  199. cPrefixo := "NFCe"
  200. Case cModelo == "58"
  201. cPrefixo := "MDFe"
  202. OtherWise
  203. if '<cStat>301</cStat>' $ oXml:oWSNFe:cxmlPROT .or. '<cStat>302</cStat>' $ oXml:oWSNFe:cxmlPROT
  204. cPrefixo := "den"
  205. else
  206. cPrefixo := "NFe"
  207. endif
  208. EndCase
  209. cChvNFe := iif( cModelo == "58", SubStr(cChvNFe,5,44), SubStr(cChvNFe,4,44) )
  210. //--------------------------------------------------
  211. // Exporta MDFe - (Autorizada)
  212. //--------------------------------------------------
  213. if ( (cModelo=="58") .and. alltrim(FunName()) == 'SPEDMDFE' )
  214. nHandle := 0
  215. nHandle := FCreate(cDestino+cChvNFe+"-"+cPrefixo+".xml")
  216. if nHandle > 0
  217. cCab1 := '<?xml version="1.0" encoding="UTF-8"?>'
  218. cCab1 += '<mdfeProc xmlns="http://www.portalfiscal.inf.br/mdfe" versao="'+cVerMDfe+'">'
  219. cRodap := '</mdfeProc>
  220. FWrite(nHandle,AllTrim(cCab1))
  221. FWrite(nHandle,AllTrim(oXml:oWSNFe:cXML))
  222. FWrite(nHandle,AllTrim(oXml:oWSNFe:cXMLPROT))
  223. FWrite(nHandle,AllTrim(cRodap))
  224. FClose(nHandle)
  225. aadd(aDeleta,oXml:cID)
  226. cNumMdfe += cIdflush+CRLF
  227. endif
  228. //--------------------------------------------------
  229. // Exporta Legado
  230. //--------------------------------------------------
  231. elseif alltrim(FunName()) <> 'SPEDMDFE'
  232. nHandle := FCreate(cDestino+cFilePrint+".xml")
  233. If nHandle > 0
  234. cCab1 := '<?xml version="1.0" encoding="UTF-8"?>'
  235. If cModelo == "57"
  236. //cCab1 += '<cteProc xmlns="http://www.portalfiscal.inf.br/cte" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.portalfiscal.inf.br/cte procCTe_v'+cVerCte+'.xsd" versao="'+cVerCte+'">'
  237. cCab1 += '<cteProc xmlns="http://www.portalfiscal.inf.br/cte" versao="'+cVerCte+'">'
  238. cRodap := '</cteProc>'
  239. Else
  240. Do Case
  241. Case cVerNfe <= "1.07"
  242. cCab1 += '<nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.portalfiscal.inf.br/nfe procNFe_v1.00.xsd" versao="1.00">'
  243. Case cVerNfe >= "2.00" .And. "cancNFe" $ oXml:oWSNFe:cXML
  244. cCab1 += '<procCancNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="' + cVerNfe + '">'
  245. OtherWise
  246. cCab1 += '<nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="' + cVerNfe + '">'
  247. EndCase
  248. cRodap := '</nfeProc>'
  249. EndIf
  250. FWrite(nHandle,AllTrim(cCab1))
  251. FWrite(nHandle,AllTrim(oXml:oWSNFe:cXML))
  252. FWrite(nHandle,AllTrim(oXml:oWSNFe:cXMLPROT))
  253. FWrite(nHandle,AllTrim(cRodap))
  254. FClose(nHandle)
  255. aadd(aDeleta,oXml:cID)
  256. cXML := AllTrim(cCab1)
  257. cXML += AllTrim(oXml:oWSNFe:cXML)
  258. cXML += AllTrim(oXml:oWSNFe:cXMLPROT)
  259. cXML += AllTrim(cRodap)
  260. If !Empty(cXML)
  261. If ExistBlock("FISEXPNFE")
  262. ExecBlock("FISEXPNFE",.f.,.f.,{cXML})
  263. Endif
  264. EndIF
  265. EndIf
  266. endif
  267. EndIf
  268. //----------------------------------------
  269. // Exporta MDF-e (Eventos)
  270. //----------------------------------------
  271. if (alltrim(FunName()) == 'SPEDMDFE')
  272. if ( (cModelo=="58") .and. (!empty(cChvNFe)) )
  273. //----------------------------------------
  274. // Executa o metodo NfeRetornaEvento()
  275. //----------------------------------------
  276. oWS:= WSNFeSBRA():New()
  277. oWS:cUSERTOKEN := "TOTVS"
  278. oWS:cID_ENT := cIdEnt
  279. oWS:_URL := AllTrim(cURL)+"/NFeSBRA.apw"
  280. oWS:cEvenChvNFE := cChvNFe
  281. lOk := oWS:NFERETORNAEVENTO()
  282. if lOk
  283. if valType(oWS:oWsNfeRetornaEventoResult:oWsNfeRetornaEvento) <> "U"
  284. aDados := oWS:oWsNfeRetornaEventoResult:oWsNfeRetornaEvento
  285. for nZ := 1 to len( aDados )
  286. //Zerando variaveis
  287. nHandle := 0
  288. nHandle := FCreate(cDestino + cChvNFe + "-" + cPrefixo + "_evento_" + alltrim(str(nZ)) + ".xml")
  289. if nHandle > 0
  290. cCab1 := '<?xml version="1.0" encoding="UTF-8"?>'
  291. cCab1 += '<mdfeProc xmlns="http://www.portalfiscal.inf.br/mdfe" versao="'+cVerMDfe+'">'
  292. cRodap := '</mdfeProc>
  293. fWrite(nHandle,allTrim(cCab1))
  294. fWrite(nHandle,allTrim(aDados[nZ]:cXML_RET))
  295. fWrite(nHandle,allTrim(aDados[nZ]:cXML_SIG))
  296. fWrite(nHandle,allTrim(cRodap))
  297. fClose(nHandle)
  298. aAdd(aDeleta,oXml:cID)
  299. endif
  300. next nZ
  301. endif
  302. endif
  303. endif
  304. else
  305. If ( oXml:OWSNFECANCELADA <> Nil .And. !Empty(oXml:oWSNFeCancelada:cProtocolo) )
  306. cChave := oXml:OWSNFECANCELADA:CXML
  307. If cModelo == "57" .and. cVerCte >='2.00'
  308. cChaveCc1 := At("<chCTe>",cChave)+7
  309. else
  310. cChaveCc1 := At("<chNFe>",cChave)+7
  311. endif
  312. cChaveCan := SubStr(cChave,cChaveCc1,44)
  313. oWS:= WSNFeSBRA():New()
  314. oWS:cUSERTOKEN := "TOTVS"
  315. oWS:cID_ENT := cIdEnt
  316. oWS:_URL := AllTrim(cURL)+"/NFeSBRA.apw"
  317. oWS:cID_EVENTO := "110111"
  318. oWS:cChvInicial := cChaveCan
  319. oWS:cChvFinal := cChaveCan
  320. lOkCanc := oWS:NFEEXPORTAEVENTO()
  321. oRetEvCanc := oWS:oWSNFEEXPORTAEVENTORESULT
  322. if lOkCanc
  323. ProcRegua(Len(oRetEvCanc:CSTRING))
  324. //---------------------------------------------------------------------------
  325. //| Exporta Cancelamento do Evento da Nf-e |
  326. //---------------------------------------------------------------------------
  327. For nY := 1 To Len(oRetEvCanc:CSTRING)
  328. cXml := SpecCharc(oRetEvCanc:CSTRING[nY])
  329. oXmlExp := XmlParser(cXml,"_",@cErro,@cAviso)
  330. If cModelo == "57" .and. cVerCte >='2.00'
  331. if Type("oXmlExp:_PROCEVENTONFE:_RETEVENTO:_CTERECEPCAOEVENTORESULT:_RETEVENTOCTE:_INFEVENTO:_CHCTE")<>"U"
  332. cIdEven := 'ID'+oXmlExp:_PROCEVENTONFE:_RETEVENTO:_CTERECEPCAOEVENTORESULT:_RETEVENTOCTE:_INFEVENTO:_CHCTE:TEXT
  333. elseIf Type("oXmlExp:_PROCEVENTONFE:_RETEVENTO:_RETEVENTOCTE:_INFEVENTO:_CHCTE")<>"U"
  334. cIdEven := 'ID'+oXmlExp:_PROCEVENTONFE:_RETEVENTO:_RETEVENTOCTE:_INFEVENTO:_CHCTE:TEXT
  335. endif
  336. If (Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE")<>"U") .and. (Type("oXmlExp:_PROCEVENTONFE:_RETEVENTO:_CTERECEPCAOEVENTORESULT:_RETEVENTOCTE")<>"U")
  337. cCabCTe := '<procEventoCTe xmlns="http://www.portalfiscal.inf.br/cte" versao="'+cVerCte+'">'
  338. cEventoCTe:= XmlSaveStr(oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE,.F.)
  339. cRetEvento:= XmlSaveStr(oXmlExp:_PROCEVENTONFE:_RETEVENTO:_CTERECEPCAOEVENTORESULT:_RETEVENTOCTE,.F.)
  340. cRodapCTe := '</procEventoCTe>'
  341. CxML:= cCabCTe+cEventoCTe+cRetEvento+cRodapCTe
  342. ElseIf (Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE")<>"U") .and. (Type("oXmlExp:_PROCEVENTONFE:_RETEVENTO:_RETEVENTOCTE:_INFEVENTO")<>"U")
  343. cCabCTe := '<procEventoCTe xmlns="http://www.portalfiscal.inf.br/cte" versao="'+cVerCte+'">'
  344. cEventoCTe:= XmlSaveStr(oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE,.F.)
  345. cRetEvento:= XmlSaveStr(oXmlExp:_PROCEVENTONFE:_RETEVENTO:_RETEVENTOCTE,.F.)
  346. cRodapCTe := '</procEventoCTe>'
  347. CxML:= cCabCTe+cEventoCTe+cRetEvento+cRodapCTe
  348. EndIf
  349. else
  350. if Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_ENVEVENTO:_EVENTO:_INFEVENTO:_ID")<>"U"
  351. cIdEven := oXmlExp:_PROCEVENTONFE:_EVENTO:_ENVEVENTO:_EVENTO:_INFEVENTO:_ID:TEXT
  352. else
  353. if Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_INFEVENTO:_ID")<>"U"
  354. cIdEven := oXmlExp:_PROCEVENTONFE:_EVENTO:_INFEVENTO:_ID:TEXT
  355. EndIf
  356. endif
  357. endif
  358. nHandle := FCreate(cDestino+SubStr(cIdEven,3)+"-Canc.xml")
  359. if nHandle > 0
  360. FWrite(nHandle,AllTrim(cXml))
  361. FClose(nHandle)
  362. endIf
  363. Next nY
  364. Else
  365. cChvNFe := NfeIdSPED(oXml:oWSNFeCancelada:cXML,"Id")
  366. cNotaIni := oXml:cID
  367. cIdflush := cNotaIni
  368. cNFes := cNFes+cNotaIni+CRLF
  369. If !"INUT"$oXml:oWSNFeCancelada:cXML
  370. nHandle := FCreate(cDestino+SubStr(cChvNFe,3,44)+"-ped-can.xml")
  371. If nHandle > 0
  372. cCanc := oXml:oWSNFeCancelada:cXML
  373. If cModelo == "57"
  374. oXml:oWSNFeCancelada:cXML := '<procCancCTe xmlns="http://www.portalfiscal.inf.br/cte" versao="' + cVerCte + '">' + oXml:oWSNFeCancelada:cXML + "</procCancCTe>"
  375. Else
  376. oXml:oWSNFeCancelada:cXML := '<procCancNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="' + cVerNfe + '">' + oXml:oWSNFeCancelada:cXML + "</procCancNFe>"
  377. EndIf
  378. FWrite(nHandle,oXml:oWSNFeCancelada:cXML)
  379. FClose(nHandle)
  380. aadd(aDeleta,oXml:cID)
  381. EndIf
  382. nHandle := FCreate(cDestino+"\"+SubStr(cChvNFe,3,44)+"-can.xml")
  383. If nHandle > 0
  384. If cModelo == "57"
  385. FWrite(nHandle,'<procCancCTe xmlns="http://www.portalfiscal.inf.br/cte" versao="' + cVerCte + '">' + cCanc + oXml:oWSNFeCancelada:cXMLPROT + "</procCancCTe>")
  386. Else
  387. FWrite(nHandle,'<procCancNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="' + cVerNfe + '">' + cCanc + oXml:oWSNFeCancelada:cXMLPROT + "</procCancNFe>")
  388. EndIF
  389. FClose(nHandle)
  390. EndIf
  391. Else
  392. // If Type("oXml:OWSNFECANCELADA:CXML")<>"U"
  393. cXmlInut := oXml:OWSNFECANCELADA:CXML
  394. cAnoInut1 := At("<ano>",cXmlInut)+5
  395. cAnoInut := SubStr(cXmlInut,cAnoInut1,2)
  396. cXmlProt := EncodeUtf8(oXml:oWSNFeCancelada:cXMLPROT)
  397. // EndIf
  398. nHandle := FCreate(cDestino+SubStr(cChvNFe,3,2)+cAnoInut+SubStr(cChvNFe,5,39)+"-ped-inu.xml")
  399. If nHandle > 0
  400. FWrite(nHandle,oXml:OWSNFECANCELADA:CXML)
  401. FClose(nHandle)
  402. aadd(aDeleta,oXml:cID)
  403. EndIf
  404. nHandle := FCreate(cDestino+"\"+cAnoInut+SubStr(cChvNFe,5,39)+"-inu.xml")
  405. If nHandle > 0
  406. FWrite(nHandle,cXmlProt)
  407. FClose(nHandle)
  408. EndIf
  409. EndIf
  410. EndIf
  411. EndIf
  412. endif
  413. IncProc()
  414. Next nX
  415. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  416. //³ Exclui as notas ³
  417. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  418. If !Empty(aDeleta) .And. GetNewPar("MV_SPEDEXP",0)<>0
  419. oWS:= WSNFeSBRA():New()
  420. oWS:cUSERTOKEN := "TOTVS"
  421. oWS:cID_ENT := cIdEnt
  422. oWS:nDIASPARAEXCLUSAO := GetNewPar("MV_SPEDEXP",0)
  423. oWS:_URL := AllTrim(cURL)+"/NFeSBRA.apw"
  424. oWS:oWSNFEID := NFESBRA_NFES2():New()
  425. oWS:oWSNFEID:oWSNotas := NFESBRA_ARRAYOFNFESID2():New()
  426. For nX := 1 To Len(aDeleta)
  427. aadd(oWS:oWSNFEID:oWSNotas:oWSNFESID2,NFESBRA_NFESID2():New())
  428. Atail(oWS:oWSNFEID:oWSNotas:oWSNFESID2):cID := aDeleta[nX]
  429. Next nX
  430. If !oWS:RETORNANOTAS()
  431. //Aviso("SPED",IIf(Empty(GetWscError(3)),GetWscError(1),GetWscError(3)),{STR0046},3)
  432. lFlush := .F.
  433. EndIf
  434. EndIf
  435. aDeleta := {}
  436. If ( Len(oRetorno:OWSNOTAS:OWSNFES3) == 0 .And. Empty(cNfes) )
  437. //Aviso("SPED",STR0106,{"Ok"}) // "Não há dados"
  438. lFlush := .F.
  439. EndIf
  440. Else
  441. //Aviso("SPED",IIf(Empty(GetWscError(3)),GetWscError(1),GetWscError(3))+CRLF+STR0046,{"OK"},3)
  442. lFinal := .T.
  443. EndIf
  444. If lSdoc
  445. cIdflush := AllTrim(Substr(cIdflush,1,14) + Soma1(AllTrim(substr(cIdflush,15))))
  446. Else
  447. cIdflush := AllTrim(Substr(cIdflush,1,3) + Soma1(AllTrim(substr(cIdflush,4))))
  448. EndIf
  449. If lOk
  450. lFlush := .F.
  451. /*If cIdflush <= AllTrim(cNotaIni) .Or. Len(oRetorno:OWSNOTAS:OWSNFES3) == 0 .Or. Empty(cNfes) .Or. ;
  452. cIdflush <= If(lSdoc,Substr(cNotaIni,1,14)+Replicate('0',Len(AllTrim(mv_par02))-Len(Substr(Rtrim(cNotaIni),15)))+Substr(Rtrim(cNotaIni),15),;
  453. Substr(cNotaIni,1,3)+Replicate('0',Len(AllTrim(mv_par02))-Len(Substr(Rtrim(cNotaIni),4)))+Substr(Rtrim(cNotaIni),4))// Importou o range completo
  454. lFlush := .F.
  455. If !Empty(cNfes)
  456. If Aviso("SPED",STR0152,{"Sim","Não"}) == 1 //"Solicitação processada com sucesso."
  457. if alltrim(FunName()) == 'SPEDMDFE'
  458. if empty(cNumMdfe)
  459. Aviso("SPED",STR0106,{"Ok"}) // "Não há dados"
  460. else
  461. Aviso(STR0126,STR0151+" "+Upper(cDestino)+CRLF+CRLF+cNumMdfe,{"Ok"})
  462. endif
  463. else
  464. // Exporta Legado
  465. Aviso(STR0126,STR0151+" "+Upper(cDestino)+CRLF+CRLF+cNFes,{"Ok"})//STR0151-"XML Exportados para", "XML's Exportados para"
  466. endif
  467. EndIf
  468. else
  469. Aviso("SPED",STR0106,{"Ok"}) // "Não há dados"
  470. EndIf
  471. EndIf
  472. */
  473. Else
  474. lFlush := .F.
  475. Endif
  476. delclassintf()
  477. ElseIf nTipo == 2 .Or. lUsaColab //Carta de Correcao e NF-e(QUANDO FOR TOTVS COLABORAÇÃO 2.0)
  478. cWhere:="D_E_L_E_T_=' '"
  479. If !Empty(cSerie)
  480. If lSdoc
  481. If cTipoNfe == "SAIDA"
  482. cWhere += " AND F2_SDOC ='"+SubStr(cSerie,1,3)+"'"
  483. cCondicao += AllTrim("F2_SDOC ='"+SubStr(cSerie,1,3)+"'")
  484. Else
  485. cWhere += " AND F1_SDOC ='"+SubStr(cSerie,1,3)+"'"
  486. cCondicao += AllTrim("F1_SDOC ='"+SubStr(cSerie,1,3)+"'")
  487. Endif
  488. Else
  489. If cTipoNfe == "SAIDA"
  490. cWhere += " AND F2_SERIE ='"+cSerie+"'"
  491. cCondicao += AllTrim("F2_SERIE ='"+cSerie+"'")
  492. Else
  493. cWhere += " AND F1_SERIE ='"+cSerie+"'"
  494. cCondicao += AllTrim("F1_SERIE ='"+cSerie+"'")
  495. Endif
  496. EndIf
  497. EndIf
  498. If !Empty(cNotaIni)
  499. If cTipoNfe == "SAIDA"
  500. cWhere += " AND F2_DOC >='"+cNotaIni+"'"
  501. cCondicao += AllTrim(" .AND. F2_DOC >='"+cNotaIni+"'")
  502. Else
  503. cWhere += " AND F1_DOC >='"+cNotaIni+"'"
  504. cCondicao += AllTrim(" .AND. F1_DOC >='"+cNotaIni+"'")
  505. Endif
  506. EndIf
  507. If !Empty(cNotaFim)
  508. If cTipoNfe == "SAIDA"
  509. cWhere += " AND F2_DOC <='"+cNotaFim+"'"
  510. cCondicao += AllTrim(" .AND. F2_DOC <='"+cNotaFim+"'")
  511. Else
  512. cWhere += " AND F1_DOC <='"+cNotaFim+"'"
  513. cCondicao += AllTrim(" .AND. F1_DOC <='"+cNotaFim+"'")
  514. Endif
  515. EndIf
  516. If !Empty(dDataDe)
  517. If cTipoNfe == "SAIDA"
  518. cWhere += " AND F2_EMISSAO >='"+DtoS(dDataDe)+"'"
  519. cCondicao += " .AND. DTOS(F2_EMISSAO) >='"+DtoS(dDataDe)+"'"
  520. Else
  521. cWhere += " AND F1_EMISSAO >='"+DtoS(dDataDe)+"'"
  522. cCondicao += " .AND. DTOS(F1_EMISSAO) >='"+DtoS(dDataDe)+"'"
  523. Endif
  524. EndIf
  525. If !Empty(dDataAte)
  526. If cTipoNfe == "SAIDA"
  527. cWhere += " AND F2_EMISSAO <='"+DtoS(dDataAte)+"'"
  528. cCondicao += " .AND. DTOS(F2_EMISSAO) <='"+DtoS(dDataAte)+"'"
  529. Else
  530. cWhere += " AND F1_EMISSAO <='"+DtoS(dDataAte)+"'"
  531. cCondicao += " .AND. DTOS(F1_EMISSAO) <='"+DtoS(dDataAte)+"'"
  532. Endif
  533. EndiF
  534. cWhere:="%"+cWhere+"%"
  535. #IFDEF TOP
  536. If cTipoNfe == "SAIDA"
  537. if lUsaColab
  538. BeginSql Alias cAlias
  539. SELECT F2_DOC, F2_SERIE, F2_TIPO, F2_CLIENTE, F2_LOJA
  540. FROM %Table:SF2%
  541. WHERE F2_FILIAL= %xFilial:SF2%
  542. AND %Exp:cWhere%
  543. EndSql
  544. lExporta:=!(cAlias)->(Eof())
  545. else
  546. BeginSql Alias cAlias
  547. SELECT MIN(R_E_C_N_O_) AS RECINI,MAX(R_E_C_N_O_) AS RECFIN
  548. FROM %Table:SF2%
  549. WHERE F2_FILIAL= %xFilial:SF2%
  550. AND %Exp:cWhere%
  551. EndSql
  552. SF2->(dbGoTo((cAlias)->RECINI))
  553. cChvIni := SF2->F2_CHVNFE
  554. SF2->(dbGoTo((cAlias)->RECFIN))
  555. cChvFin := SF2->F2_CHVNFE
  556. lExporta:=!(cAlias)->(Eof())
  557. endif
  558. Else
  559. if lUsaColab
  560. BeginSql Alias cAlias
  561. SELECT F1_DOC, F1_SERIE, F1_TIPO, F1_FORNECE, F1_LOJA
  562. FROM %Table:SF1%
  563. WHERE F1_FILIAL= %xFilial:SF1%
  564. AND %Exp:cWhere%
  565. EndSql
  566. lExporta:=!(cAlias)->(Eof())
  567. else
  568. BeginSql Alias cAlias
  569. SELECT MIN(R_E_C_N_O_) AS RECINI,MAX(R_E_C_N_O_) AS RECFIN
  570. FROM %Table:SF1%
  571. WHERE F1_FILIAL= %xFilial:SF1%
  572. AND %Exp:cWhere%
  573. EndSql
  574. SF1->(dbGoTo((cAlias)->RECINI))
  575. cChvIni := SF1->F1_CHVNFE
  576. SF1->(dbGoTo((cAlias)->RECFIN))
  577. cChvFin := SF1->F1_CHVNFE
  578. lExporta:=!(cAlias)->(Eof())
  579. endif
  580. Endif
  581. #ELSE
  582. If cTipoNfe == "SAIDA"
  583. cAlias := "SF2"
  584. dbSetFilter({|| &cCondicao},cCondicao)
  585. if !lUsaColab
  586. (cAlias)->(dbGotop())
  587. cChvIni := SF2->F2_CHVNFE
  588. (cAlias)->(DbGoBottom())
  589. cChvFin := SF2->F2_CHVNFE
  590. lExporta:=!SF2->(Eof())
  591. (cAlias)->(dbClearFilter())
  592. else
  593. lClearFilter := .T.
  594. lExporta:=!SF2->(Eof())
  595. endif
  596. Else
  597. cAlias := "SF1"
  598. dbSetFilter({|| &cCondicao},cCondicao)
  599. If !lUsaColab
  600. (cAlias)->(dbGotop())
  601. cChvIni := SF1->F1_CHVNFE
  602. (cAlias)->(DbGoBottom())
  603. cChvFin := SF1->F1_CHVNFE
  604. lExporta:=!SF1->(Eof())
  605. (cAlias)->(dbClearFilter())
  606. else
  607. lClearFilter := .T.
  608. lExporta:=!SF1->(Eof())
  609. endif
  610. Endif
  611. #ENDIF
  612. If lExporta
  613. If lUsaColab
  614. cCnpjDFim := iif(empty(cCnpjDFim),"99999999999999", cCnpjDFim)
  615. (cAlias)->(dbGoTop())
  616. While !(cAlias)->(Eof())
  617. if cTipoNfe == "SAIDA"
  618. cTab := 'F2_'
  619. cCmpCliFor := cTab+'CLIENTE'
  620. else
  621. cTab := 'F1_'
  622. cCmpCliFor := cTab+'FORNECE'
  623. endif
  624. cCmpNum := cTab+'DOC'
  625. cCmpSer := cTab+'SERIE'
  626. cCmpTipo := cTab+'TIPO'
  627. cCmpLoja := cTab+'LOJA'
  628. cPrefix := iif(nTipo == 1,IIF(lCTe,"CTe","NFe"),"CCe")
  629. //Tratamento para verificar se o CNPJ está no range inserido pelo usuário.
  630. lCnpj := .F.
  631. if cPrefix $ "CCe"
  632. lCnpj := .T.
  633. else
  634. If cTipoNfe == "SAIDA"
  635. if (cAlias)->&cCmpTipo $ 'D|B'
  636. cCnpj := Posicione("SA2",1,xFilial("SA2")+(cAlias)->&cCmpCliFor+(cAlias)->&cCmpLoja,"A2_CGC")
  637. else
  638. cCnpj := Posicione("SA1",1,xFilial("SA1")+(cAlias)->&cCmpCliFor+(cAlias)->&cCmpLoja,"A1_CGC")
  639. endif
  640. else
  641. if (cAlias)->&cCmpTipo $ 'D|B'
  642. cCnpj := Posicione("SA1",1,xFilial("SA1")+(cAlias)->&cCmpCliFor+(cAlias)->&cCmpLoja,"A1_CGC")
  643. else
  644. cCnpj := Posicione("SA2",1,xFilial("SA2")+(cAlias)->&cCmpCliFor+(cAlias)->&cCmpLoja,"A2_CGC")
  645. endif
  646. endif
  647. if cCnpj >= cCnpjDIni .And. cCnpj <= cCnpjDFim
  648. lCnpj := .T.
  649. endif
  650. endif
  651. If lCnpj
  652. cXML := ""
  653. aInfXml := {}
  654. aInfXml := ColExpDoc((cAlias)->&cCmpSer,(cAlias)->&cCmpNum,iif(nTipo == 1,IIF(lCTe,"CTE","NFE"),"CCE"),@cXml)
  655. /*
  656. aInfXml
  657. [1] - Logico se encotra documento .T.
  658. [2] - Chave do documento
  659. [3] - XML autorização - someente se autorizado
  660. [4] - XML Cancelamento Evento- somente se autorizado
  661. [5] - XML Ped. Inutilização - somente se autorizado
  662. [6] - XML Prot. Inutilização - somente se autorizado
  663. */
  664. //Ponto de Entrada para permitir filtrar as NF
  665. If ExistBlock("SPDNFE01")
  666. If !ExecBlock("SPDNFE01",.f.,.f.,{aInfXml})
  667. (cAlias)->(dbSkip())
  668. loop
  669. Endif
  670. Endif
  671. //Encontrou documento
  672. if aInfXMl[1]
  673. if cPrefix == "CCe" .And. !Empty( aInfXMl[3] )
  674. nHandle := FCreate(cDestino+SubStr(aInfXMl[2],3)+"-CCe.xml")
  675. cXML := aInfXMl[3]
  676. If nHandle > 0
  677. FWrite(nHandle,AllTrim(cXml))
  678. FClose(nHandle)
  679. EndIf
  680. cNFes+=SubStr((cAlias)->&cCmpSer,1,3)+"/"+(cAlias)->&cCmpNum+CRLF
  681. elseif cPrefix $ "NFe|CTe"
  682. //Iinutilização
  683. if !Empty( aInfXMl[5] )
  684. cXmlInut := aInfXMl[5]
  685. cAnoInut1 := At("<ano>",cXmlInut)+5
  686. cAnoInut := SubStr(cXmlInut,cAnoInut1,2)
  687. cXmlProt := aInfXMl[6]
  688. nHandle := FCreate(cDestino+SubStr(aInfXMl[2],3,2)+cAnoInut+SubStr(aInfXMl[2],5,39)+"-ped-inu.xml")
  689. If nHandle > 0
  690. FWrite(nHandle,oXml:OWSNFECANCELADA:CXML)
  691. FClose(nHandle)
  692. aadd(aDeleta,oXml:cID)
  693. EndIf
  694. nHandle := FCreate(cDestino+"\"+cAnoInut+SubStr(aInfXMl[2],5,39)+".xml")
  695. If nHandle > 0
  696. FWrite(nHandle,cXmlProt)
  697. FClose(nHandle)
  698. EndIf
  699. cNFes+=SubStr((cAlias)->&cCmpSer,1,3)+"/"+(cAlias)->&cCmpNum+CRLF
  700. endif
  701. //Cancelamento
  702. if !Empty( aInfXMl[4] )
  703. cXml := SpecCharc(aInfXMl[4])
  704. nHandle := FCreate(cDestino+SubStr(aInfXMl[2],3)+"-canc.xml")
  705. if nHandle > 0
  706. FWrite(nHandle,AllTrim(cXml))
  707. FClose(nHandle)
  708. endIf
  709. cNFes+=SubStr((cAlias)->&cCmpSer,1,3)+"/"+(cAlias)->&cCmpNum+CRLF
  710. endif
  711. if !Empty( aInfXML[3] )
  712. cXml := SpecCharc(aInfXMl[3])
  713. If ExistBlock("FISEXPNFE")
  714. ExecBlock("FISEXPNFE",.f.,.f.,{cXML})
  715. EndIF
  716. nHandle := FCreate(cDestino+cFilePrint+".xml")
  717. if nHandle > 0
  718. FWrite(nHandle,AllTrim(cXml))
  719. FClose(nHandle)
  720. endIf
  721. cNFes+=SubStr((cAlias)->&cCmpSer,1,3)+"/"+(cAlias)->&cCmpNum+CRLF
  722. endif
  723. endif
  724. IncProc()
  725. endif
  726. endif
  727. (cAlias)->(dbSkip())
  728. enddo
  729. If !Empty(cNfes)
  730. //If Aviso("SPED",STR0152,{"Sim","Não"}) == 1 //"Solicitação processada com sucesso."
  731. // Aviso(STR0126,STR0151+" "+Upper(cDestino)+CRLF+CRLF+cNFes,{STR0114},3)//STR0151-"XML Exportados para", "XML's Exportados para"
  732. //EndIf
  733. endif
  734. delclassintf()
  735. else
  736. oWS:= WSNFeSBRA():New()
  737. oWS:cUSERTOKEN := "TOTVS"
  738. oWS:cID_ENT := cIdEnt
  739. oWS:_URL := AllTrim(cURL)+"/NFeSBRA.apw"
  740. oWS:cChvInicial := cChvIni
  741. oWS:cChvFinal := cChvFin
  742. lOk:= oWS:NFEEXPORTAEVENTO()
  743. oRetorno := oWS:oWSNFEEXPORTAEVENTORESULT
  744. If lOk
  745. ProcRegua(Len(oRetorno:CSTRING))
  746. //ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
  747. //³ Exporta as cartas ³
  748. //ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
  749. For nX := 1 To Len(oRetorno:CSTRING)
  750. cXml := oRetorno:CSTRING[nX]
  751. cXml := EncodeUTF8(cXml)
  752. oXmlExp := XmlParser(cXml,"_",@cErro,@cAviso)
  753. If Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_ENVEVENTO:_EVENTO:_INFEVENTO:_ID")<>"U"
  754. cIdCCe := oXmlExp:_PROCEVENTONFE:_EVENTO:_ENVEVENTO:_EVENTO:_INFEVENTO:_ID:TEXT
  755. Elseif Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_INFEVENTO:_ID:TEXT")<> "U"
  756. cIdCCe := oXmlExp:_PROCEVENTONFE:_EVENTO:_INFEVENTO:_ID:TEXT
  757. Else
  758. cIdCCe := oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE:_INFEVENTO:_ID:TEXT
  759. Endif
  760. If (Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE")<>"U") .and. (Type("oXmlExp:_PROCEVENTONFE:_RETEVENTO:_RETEVENTOCTE:_INFEVENTO")<>"U")
  761. cVerCte := Iif(Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE:_VERSAO:TEXT ") <> "U", oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE:_VERSAO:TEXT , '')
  762. cCabCTe := '<procEventoCTe xmlns="http://www.portalfiscal.inf.br/cte" versao="'+cVerCte+'">'
  763. cEventoCTe:= XmlSaveStr(oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE,.F.)
  764. cRetEvento:= XmlSaveStr(oXmlExp:_PROCEVENTONFE:_RETEVENTO:_RETEVENTOCTE,.F.)
  765. cRodapCTe := '</procEventoCTe>'
  766. cXml:= cCabCTe+cEventoCTe+cRetEvento+cRodapCTe
  767. EndIf
  768. nHandle := FCreate(cDestino+SubStr(cIdCCe,3)+"-CCe.xml")
  769. If nHandle > 0
  770. FWrite(nHandle,AllTrim(cXml))
  771. FClose(nHandle)
  772. EndIf
  773. IncProc()
  774. cNFes+=SubStr(cIdCCe,31,3)+"/"+SubStr(cIdCCe,34,9)+CRLF
  775. Next nX
  776. //If Aviso("SPED",STR0152,{"Sim","Não"}) == 1 //"Solicitação processada com sucesso."
  777. // Aviso(STR0126,STR0151+" "+Upper(cDestino)+CRLF+CRLF+cNFes,{STR0114},3) //STR0151-"XML Exportados para", "XML's Exportados para"
  778. //EndIf
  779. Else
  780. Aviso("SPED",IIf(Empty(GetWscError(3)),GetWscError(1),GetWscError(3)),{"OK"},3)
  781. lFinal := .T.
  782. EndIF
  783. delclassintf()
  784. endif
  785. EndIf
  786. #IFDEF TOP
  787. If select (cAlias)>0
  788. (cAlias)->(dbCloseArea())
  789. EndIf
  790. #ENDIF
  791. lFlush := .F.
  792. EndIF
  793. Return(.T.)