zSpedXML.prw 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //Bibliotecas
  2. #Include "Protheus.ch"
  3. /*/{Protheus.doc} zSpedXML
  4. Função que gera o arquivo xml da nota (normal ou cancelada) através do documento e da série disponibilizados
  5. @author Atilio
  6. @since 25/07/2017
  7. @version 1.0
  8. @param cDocumento, characters, Código do documento (F2_DOC)
  9. @param cSerie, characters, Série do documento (F2_SERIE)
  10. @param cArqXML, characters, Caminho do arquivo que será gerado (por exemplo, C:\TOTVS\arquivo.xml)
  11. @param lMostra, logical, Se será mostrado mensagens com os dados (erros ou a mensagem com o xml na tela)
  12. @type function
  13. @example Segue exemplo abaixo
  14. u_zSpedXML("000000001", "1", "C:\TOTVS\arquivo1.xml", .F.) //Não mostra mensagem com o XML
  15. u_zSpedXML("000000001", "1", "C:\TOTVS\arquivo2.xml", .T.) //Mostra mensagem com o XML
  16. /*/
  17. User Function zSpedXML(cDocumento, cSerie, cArqXML, lMostra)
  18. Local aArea := GetArea()
  19. Local cURLTss := PadR(GetNewPar("MV_SPEDURL","http://"),250)
  20. Local oWebServ
  21. Local cIdEnt := &("StaticCall(SPEDNFE, GetIdEnt)")
  22. Local cTextoXML := ""
  23. Default cDocumento := ""
  24. Default cSerie := ""
  25. Default cArqXML := GetTempPath()+"arquivo_"+cSerie+cDocumento+".xml"
  26. Default lMostra := .F.
  27. //Se tiver documento
  28. If !Empty(cDocumento)
  29. cDocumento := PadR(cDocumento, TamSX3('F2_DOC')[1])
  30. cSerie := PadR(cSerie, TamSX3('F2_SERIE')[1])
  31. //Instancia a conexão com o WebService do TSS
  32. oWebServ:= WSNFeSBRA():New()
  33. oWebServ:cUSERTOKEN := "TOTVS"
  34. oWebServ:cID_ENT := cIdEnt
  35. oWebServ:oWSNFEID := NFESBRA_NFES2():New()
  36. oWebServ:oWSNFEID:oWSNotas := NFESBRA_ARRAYOFNFESID2():New()
  37. aAdd(oWebServ:oWSNFEID:oWSNotas:oWSNFESID2,NFESBRA_NFESID2():New())
  38. aTail(oWebServ:oWSNFEID:oWSNotas:oWSNFESID2):cID := (cSerie+cDocumento)
  39. oWebServ:nDIASPARAEXCLUSAO := 0
  40. oWebServ:_URL := AllTrim(cURLTss)+"/NFeSBRA.apw"
  41. //Se tiver notas
  42. If oWebServ:RetornaNotas()
  43. //Se tiver dados
  44. If Len(oWebServ:oWsRetornaNotasResult:OWSNOTAS:oWSNFES3) > 0
  45. //Se tiver sido cancelada
  46. If oWebServ:oWsRetornaNotasResult:OWSNOTAS:oWSNFES3[1]:oWSNFECANCELADA != Nil
  47. cTextoXML := oWebServ:oWsRetornaNotasResult:OWSNOTAS:oWSNFES3[1]:oWSNFECANCELADA:cXML
  48. //Senão, pega o xml normal
  49. Else
  50. cTextoXML := oWebServ:oWsRetornaNotasResult:OWSNOTAS:oWSNFES3[1]:oWSNFE:cXML
  51. EndIf
  52. //Gera o arquivo
  53. MemoWrite(cArqXML, cTextoXML)
  54. //Se for para mostrar, será mostrado um aviso com o conteúdo
  55. If lMostra
  56. Aviso("zSpedXML", cTextoXML, {"Ok"}, 3)
  57. EndIf
  58. //Caso não encontre as notas, mostra mensagem
  59. Else
  60. ConOut("zSpedXML > Verificar parâmetros, documento e série não encontrados ("+cDocumento+"/"+cSerie+")...")
  61. If lMostra
  62. Aviso("zSpedXML", "Verificar parâmetros, documento e série não encontrados ("+cDocumento+"/"+cSerie+")...", {"Ok"}, 3)
  63. EndIf
  64. EndIf
  65. //Senão, houve erros na classe
  66. Else
  67. ConOut("zSpedXML > "+IIf(Empty(GetWscError(3)), GetWscError(1), GetWscError(3))+"...")
  68. If lMostra
  69. Aviso("zSpedXML", IIf(Empty(GetWscError(3)), GetWscError(1), GetWscError(3)), {"Ok"}, 3)
  70. EndIf
  71. EndIf
  72. EndIf
  73. RestArea(aArea)
  74. Return