#INCLUDE "PROTHEUS.CH"
#INCLUDE "RWMAKE.CH"
#INCLUDE "FWPrintSetup.ch"
#INCLUDE "topconn.ch"
#INCLUDE "RPTDEF.CH"
#INCLUDE "FILEIO.CH"
#INCLUDE "TOTVS.CH"
/*__________________________________________________________________________
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¦¦+-----------------------------------------------------------------------+¦¦
¦¦¦Funçäo ¦ DANFEPDF ¦ Autor ¦ Lucilene Mendes ¦ Data ¦19.07.19 ¦¦¦
¦¦+----------+------------------------------------------------------------¦¦¦
¦¦¦Descriçäo ¦ Geração da DANFE em pdf ¦¦¦
¦¦+-----------------------------------------------------------------------+¦¦
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
User Function DANFEPDF(nRecSF2,cDirDoc, cFilePrint)
Local lRet :=.T.
Local oSetup
Local oDanfe
Local lAdjustToLegacy := .F. //DEFAULT .F., NAO CALCULA
Local lDisableSetup := .T.
Local cIdEnt := ""
//Posiciona na NF
dbSelectArea("SF2")
SF2->(dbGoTo(nRecSF2))
nFlags := PD_DISABLEORIENTATION
//nFlags := PD_ISTOTVSPRINTER+ PD_DISABLEORIENTATION + PD_DISABLEPAPERSIZE + PD_DISABLEPREVIEW + PD_DISABLEMARGIN
// inicio - define impressão
oDanfe := FWMSPrinter():New(cFilePrint+'.pdf', IMP_PDF, lAdjustToLegacy, cDirDoc, lDisableSetup, , ,"PDF", , , , .F.)
oDanfe:SetResolution(78) //Tamanho estipulado para a Danfe
oDanfe:SetPortrait()
oDanfe:SetPaperSize(9)
oDanfe:cPathPDF := cDirDoc
MV_PAR01 := SF2->F2_DOC
MV_PAR02 := SF2->F2_DOC
MV_PAR03 := SF2->F2_SERIE
MV_PAR04 := 2 //2 [Operacao] NF de Saida
MV_PAR05 := 2 //Imprime no verso ? 1=sim, 2=nao
MV_PAR06 := 2 //2[DANFE simplificado] Nao
//Se já existir o arquivo, apaga para recriar
If File(cDirDoc+cFilePrint+'.pdf')
fErase(cDirDoc+cFilePrint+'.pdf')
Endif
cIdEnt:= GetIdEnt()
Conout("cIdEnt: "+cIdEnt)
aSf2:= (GetArea())
//gera o arquivo .xml
SpedPExp(cIdEnt,MV_PAR03,mv_par01,MV_PAR02,cDirDoc,.f. ,SF2->F2_EMISSAO-30,SF2->F2_EMISSAO+30,Space(14),Space(14),,,,cFilePrint)
RestArea(aSf2)
//gera o arquivo .pdf
//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.
lRet := U_DANFE_P1( cIdEnt, mv_par01, mv_par01, oDanfe,oSetup, .F.,cDirDoc+cFilePrint)
// SpedPExp( cIdEnt,cSerie ,cNotaIni ,cNotaFim ,cDirDest,lEnd,dDataDe ,dDataAte ,cCnpjDIni ,cCnpjDFim ,nTipo,lCTe,cSerMax)
Return lRet
Static Function GetIdEnt(lUsaColab)
local cIdEnt := ""
local cError := ""
Default lUsaColab := .F.
cIdEnt := getCfgEntidade(@cError)
if(empty(cIdEnt))
//Aviso("SPED", cError, {STR0114}, 3)
Conout("GetIdEnt - Entidade não encontrada")
endif
Return(cIdEnt)
Static Function SpedPExp(cIdEnt,cSerie,cNotaIni,cNotaFim,cDirDest,lEnd,dDataDe,dDataAte,cCnpjDIni,cCnpjDFim,nTipo,lCTe,cSerMax,cFilePrint)
Local aDeleta := {}
Local cAlias := GetNextAlias()
Local cAnoInut := ""
Local cAnoInut1 := ""
Local cCanc := ""
Local cChvIni := ""
Local cChvFin := ""
Local cChvNFe := ""
Local cCNPJDEST := Space(14)
Local cCondicao := ""
Local cDestino := ""
Local cDrive := ""
Local cIdflush := cSerie+cNotaIni
Local cModelo := ""
Local cNFes := ""
Local cPrefixo := ""
Local cURL := PadR(GetNewPar("MV_SPEDURL","http://"),250)
Local cXmlInut := ""
Local cXml := ""
Local cWhere := ""
Local cXmlProt := ""
local cAviso := ""
local cErro := ""
local cTab := ""
local cCmpNum := ""
local cCmpSer := ""
local cCmpTipo := ""
local cCmpLoja := ""
local cCmpCliFor:= ""
local cCnpj := ""
Local cEventoCTe := ""
Local cRetEvento := ""
Local cRodapCTe :=""
local cCabCTe :=""
Local cIdEven := ""
local cVerMDfe := ""
local cNumMdfe := ""
Local lOk := .F.
Local lFlush := .T.
Local lFinal := .F.
Local lClearFilter:= .F.
Local lExporta := .F.
Local lUsaColab := .F.
Local lSdoc := TamSx3("F2_SERIE")[1] == 14
Local nHandle := 0
Local nX := 0
Local nY := 0
local nZ := 0
Local aInfXml := {}
Local oRetorno
Local oWS
Local oXML
Local lOkCanc := .f.
Default nTipo := 1
Default cNotaIni:=""
Default cNotaFim:=""
Default dDataDe:=CtoD(" / / ")
Default dDataAte:=CtoD(" / / ")
Default lCTe := IIf (FunName()$"SPEDCTE,TMSA200,TMSAE70,TMSA500,TMSA050",.T.,.F.)
Default cSerMax := cSerie
lUsaColab := UsaColaboracao( IIF(lCte,"2","1") )
If nTipo == 3
If !Empty( GetNewPar("MV_NFCEURL","") )
cURL := PadR(GetNewPar("MV_NFCEURL","http://"),250)
Endif
Endif
If IntTMS() .and. lCTe//Altera o conteúdo da variavel quando for carta de correção para o CTE
cTipoNfe := "SAIDA"
EndIf
ProcRegua(Val(cNotaFim)-Val(cNotaIni))
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Corrigi diretorio de destino ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
SplitPath(cDirDest,@cDrive,@cDestino,"","")
cDestino := cDrive+cDestino
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Inicia processamento ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If ( nTipo == 1 .And. !lUsaColab ).Or. nTipo == 3 .Or. nTipo == 4 .Or. nTipo == 5
oWS:= WSNFeSBRA():New()
oWS:cUSERTOKEN := "TOTVS"
oWS:cID_ENT := cIdEnt
oWS:_URL := AllTrim(cURL)+"/NFeSBRA.apw"
oWS:cIdInicial := IIf(nTipo==4,'58'+cIdflush,cIdflush) // cNotaIni
oWS:cIdFinal := IIf(nTipo==4,'58'+cSerMax+cNotaFim,cSerMax+cNotaFim)
oWS:dDataDe := dDataDe
oWS:dDataAte := dDataAte
oWS:cCNPJDESTInicial := cCnpjDIni
oWS:cCNPJDESTFinal := cCnpjDFim
oWS:nDiasparaExclusao := 0
lOk:= oWS:RETORNAFX()
oRetorno := oWS:oWsRetornaFxResult
lOk := iif( valtype(lOk) == "U", .F., lOk )
If lOk
ProcRegua(Len(oRetorno:OWSNOTAS:OWSNFES3))
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Exporta as notas ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
For nX := 1 To Len(oRetorno:OWSNOTAS:OWSNFES3)
//Ponto de Entrada para permitir filtrar as NF
If ExistBlock("SPDNFE01")
If !ExecBlock("SPDNFE01",.f.,.f.,{oRetorno:OWSNOTAS:OWSNFES3[nX]})
loop
Endif
Endif
oXml := oRetorno:OWSNOTAS:OWSNFES3[nX]
oXmlExp := XmlParser(oRetorno:OWSNOTAS:OWSNFES3[nX]:OWSNFE:CXML,"","","")
cXML := ""
If Type("oXmlExp:_NFE:_INFNFE:_DEST:_CNPJ")<>"U"
cCNPJDEST := AllTrim(oXmlExp:_NFE:_INFNFE:_DEST:_CNPJ:TEXT)
ElseIF Type("oXmlExp:_NFE:_INFNFE:_DEST:_CPF")<>"U"
cCNPJDEST := AllTrim(oXmlExp:_NFE:_INFNFE:_DEST:_CPF:TEXT)
Else
cCNPJDEST := ""
EndIf
cVerNfe := IIf(Type("oXmlExp:_NFE:_INFNFE:_VERSAO:TEXT") <> "U", oXmlExp:_NFE:_INFNFE:_VERSAO:TEXT, '')
cVerCte := Iif(Type("oXmlExp:_CTE:_INFCTE:_VERSAO:TEXT") <> "U", oXmlExp:_CTE:_INFCTE:_VERSAO:TEXT, '')
cVerMDfe:= Iif(Type("oXmlExp:_MDFE:_INFMDFE:_VERSAO:TEXT") <> "U", oXmlExp:_MDFE:_INFMDFE:_VERSAO:TEXT, '')
If !Empty(oXml:oWSNFe:cProtocolo)
cNotaIni := oXml:cID
cIdflush := cNotaIni
cNFes := cNFes+cNotaIni+CRLF
cChvNFe := NfeIdSPED(oXml:oWSNFe:cXML,"Id")
cModelo := cChvNFe
cModelo := StrTran(cModelo,"NFe","")
cModelo := StrTran(cModelo,"CTe","")
cModelo := StrTran(cModelo,"MDFe","")
cModelo := SubStr(cModelo,21,02)
Do Case
Case cModelo == "57"
cPrefixo := "CTe"
Case cModelo == "65"
cPrefixo := "NFCe"
Case cModelo == "58"
cPrefixo := "MDFe"
OtherWise
if '301' $ oXml:oWSNFe:cxmlPROT .or. '302' $ oXml:oWSNFe:cxmlPROT
cPrefixo := "den"
else
cPrefixo := "NFe"
endif
EndCase
cChvNFe := iif( cModelo == "58", SubStr(cChvNFe,5,44), SubStr(cChvNFe,4,44) )
//--------------------------------------------------
// Exporta MDFe - (Autorizada)
//--------------------------------------------------
if ( (cModelo=="58") .and. alltrim(FunName()) == 'SPEDMDFE' )
nHandle := 0
nHandle := FCreate(cDestino+cChvNFe+"-"+cPrefixo+".xml")
if nHandle > 0
cCab1 := ''
cCab1 += ''
cRodap := '
FWrite(nHandle,AllTrim(cCab1))
FWrite(nHandle,AllTrim(oXml:oWSNFe:cXML))
FWrite(nHandle,AllTrim(oXml:oWSNFe:cXMLPROT))
FWrite(nHandle,AllTrim(cRodap))
FClose(nHandle)
aadd(aDeleta,oXml:cID)
cNumMdfe += cIdflush+CRLF
endif
//--------------------------------------------------
// Exporta Legado
//--------------------------------------------------
elseif alltrim(FunName()) <> 'SPEDMDFE'
nHandle := FCreate(cDestino+cFilePrint+".xml")
If nHandle > 0
cCab1 := ''
If cModelo == "57"
//cCab1 += ''
cCab1 += ''
cRodap := ''
Else
Do Case
Case cVerNfe <= "1.07"
cCab1 += ''
Case cVerNfe >= "2.00" .And. "cancNFe" $ oXml:oWSNFe:cXML
cCab1 += ''
OtherWise
cCab1 += ''
EndCase
cRodap := ''
EndIf
FWrite(nHandle,AllTrim(cCab1))
FWrite(nHandle,AllTrim(oXml:oWSNFe:cXML))
FWrite(nHandle,AllTrim(oXml:oWSNFe:cXMLPROT))
FWrite(nHandle,AllTrim(cRodap))
FClose(nHandle)
aadd(aDeleta,oXml:cID)
cXML := AllTrim(cCab1)
cXML += AllTrim(oXml:oWSNFe:cXML)
cXML += AllTrim(oXml:oWSNFe:cXMLPROT)
cXML += AllTrim(cRodap)
If !Empty(cXML)
If ExistBlock("FISEXPNFE")
ExecBlock("FISEXPNFE",.f.,.f.,{cXML})
Endif
EndIF
EndIf
endif
EndIf
//----------------------------------------
// Exporta MDF-e (Eventos)
//----------------------------------------
if (alltrim(FunName()) == 'SPEDMDFE')
if ( (cModelo=="58") .and. (!empty(cChvNFe)) )
//----------------------------------------
// Executa o metodo NfeRetornaEvento()
//----------------------------------------
oWS:= WSNFeSBRA():New()
oWS:cUSERTOKEN := "TOTVS"
oWS:cID_ENT := cIdEnt
oWS:_URL := AllTrim(cURL)+"/NFeSBRA.apw"
oWS:cEvenChvNFE := cChvNFe
lOk := oWS:NFERETORNAEVENTO()
if lOk
if valType(oWS:oWsNfeRetornaEventoResult:oWsNfeRetornaEvento) <> "U"
aDados := oWS:oWsNfeRetornaEventoResult:oWsNfeRetornaEvento
for nZ := 1 to len( aDados )
//Zerando variaveis
nHandle := 0
nHandle := FCreate(cDestino + cChvNFe + "-" + cPrefixo + "_evento_" + alltrim(str(nZ)) + ".xml")
if nHandle > 0
cCab1 := ''
cCab1 += ''
cRodap := '
fWrite(nHandle,allTrim(cCab1))
fWrite(nHandle,allTrim(aDados[nZ]:cXML_RET))
fWrite(nHandle,allTrim(aDados[nZ]:cXML_SIG))
fWrite(nHandle,allTrim(cRodap))
fClose(nHandle)
aAdd(aDeleta,oXml:cID)
endif
next nZ
endif
endif
endif
else
If ( oXml:OWSNFECANCELADA <> Nil .And. !Empty(oXml:oWSNFeCancelada:cProtocolo) )
cChave := oXml:OWSNFECANCELADA:CXML
If cModelo == "57" .and. cVerCte >='2.00'
cChaveCc1 := At("",cChave)+7
else
cChaveCc1 := At("",cChave)+7
endif
cChaveCan := SubStr(cChave,cChaveCc1,44)
oWS:= WSNFeSBRA():New()
oWS:cUSERTOKEN := "TOTVS"
oWS:cID_ENT := cIdEnt
oWS:_URL := AllTrim(cURL)+"/NFeSBRA.apw"
oWS:cID_EVENTO := "110111"
oWS:cChvInicial := cChaveCan
oWS:cChvFinal := cChaveCan
lOkCanc := oWS:NFEEXPORTAEVENTO()
oRetEvCanc := oWS:oWSNFEEXPORTAEVENTORESULT
if lOkCanc
ProcRegua(Len(oRetEvCanc:CSTRING))
//---------------------------------------------------------------------------
//| Exporta Cancelamento do Evento da Nf-e |
//---------------------------------------------------------------------------
For nY := 1 To Len(oRetEvCanc:CSTRING)
cXml := SpecCharc(oRetEvCanc:CSTRING[nY])
oXmlExp := XmlParser(cXml,"_",@cErro,@cAviso)
If cModelo == "57" .and. cVerCte >='2.00'
if Type("oXmlExp:_PROCEVENTONFE:_RETEVENTO:_CTERECEPCAOEVENTORESULT:_RETEVENTOCTE:_INFEVENTO:_CHCTE")<>"U"
cIdEven := 'ID'+oXmlExp:_PROCEVENTONFE:_RETEVENTO:_CTERECEPCAOEVENTORESULT:_RETEVENTOCTE:_INFEVENTO:_CHCTE:TEXT
elseIf Type("oXmlExp:_PROCEVENTONFE:_RETEVENTO:_RETEVENTOCTE:_INFEVENTO:_CHCTE")<>"U"
cIdEven := 'ID'+oXmlExp:_PROCEVENTONFE:_RETEVENTO:_RETEVENTOCTE:_INFEVENTO:_CHCTE:TEXT
endif
If (Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE")<>"U") .and. (Type("oXmlExp:_PROCEVENTONFE:_RETEVENTO:_CTERECEPCAOEVENTORESULT:_RETEVENTOCTE")<>"U")
cCabCTe := ''
cEventoCTe:= XmlSaveStr(oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE,.F.)
cRetEvento:= XmlSaveStr(oXmlExp:_PROCEVENTONFE:_RETEVENTO:_CTERECEPCAOEVENTORESULT:_RETEVENTOCTE,.F.)
cRodapCTe := ''
CxML:= cCabCTe+cEventoCTe+cRetEvento+cRodapCTe
ElseIf (Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE")<>"U") .and. (Type("oXmlExp:_PROCEVENTONFE:_RETEVENTO:_RETEVENTOCTE:_INFEVENTO")<>"U")
cCabCTe := ''
cEventoCTe:= XmlSaveStr(oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE,.F.)
cRetEvento:= XmlSaveStr(oXmlExp:_PROCEVENTONFE:_RETEVENTO:_RETEVENTOCTE,.F.)
cRodapCTe := ''
CxML:= cCabCTe+cEventoCTe+cRetEvento+cRodapCTe
EndIf
else
if Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_ENVEVENTO:_EVENTO:_INFEVENTO:_ID")<>"U"
cIdEven := oXmlExp:_PROCEVENTONFE:_EVENTO:_ENVEVENTO:_EVENTO:_INFEVENTO:_ID:TEXT
else
if Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_INFEVENTO:_ID")<>"U"
cIdEven := oXmlExp:_PROCEVENTONFE:_EVENTO:_INFEVENTO:_ID:TEXT
EndIf
endif
endif
nHandle := FCreate(cDestino+SubStr(cIdEven,3)+"-Canc.xml")
if nHandle > 0
FWrite(nHandle,AllTrim(cXml))
FClose(nHandle)
endIf
Next nY
Else
cChvNFe := NfeIdSPED(oXml:oWSNFeCancelada:cXML,"Id")
cNotaIni := oXml:cID
cIdflush := cNotaIni
cNFes := cNFes+cNotaIni+CRLF
If !"INUT"$oXml:oWSNFeCancelada:cXML
nHandle := FCreate(cDestino+SubStr(cChvNFe,3,44)+"-ped-can.xml")
If nHandle > 0
cCanc := oXml:oWSNFeCancelada:cXML
If cModelo == "57"
oXml:oWSNFeCancelada:cXML := '' + oXml:oWSNFeCancelada:cXML + ""
Else
oXml:oWSNFeCancelada:cXML := '' + oXml:oWSNFeCancelada:cXML + ""
EndIf
FWrite(nHandle,oXml:oWSNFeCancelada:cXML)
FClose(nHandle)
aadd(aDeleta,oXml:cID)
EndIf
nHandle := FCreate(cDestino+"\"+SubStr(cChvNFe,3,44)+"-can.xml")
If nHandle > 0
If cModelo == "57"
FWrite(nHandle,'' + cCanc + oXml:oWSNFeCancelada:cXMLPROT + "")
Else
FWrite(nHandle,'' + cCanc + oXml:oWSNFeCancelada:cXMLPROT + "")
EndIF
FClose(nHandle)
EndIf
Else
// If Type("oXml:OWSNFECANCELADA:CXML")<>"U"
cXmlInut := oXml:OWSNFECANCELADA:CXML
cAnoInut1 := At("",cXmlInut)+5
cAnoInut := SubStr(cXmlInut,cAnoInut1,2)
cXmlProt := EncodeUtf8(oXml:oWSNFeCancelada:cXMLPROT)
// EndIf
nHandle := FCreate(cDestino+SubStr(cChvNFe,3,2)+cAnoInut+SubStr(cChvNFe,5,39)+"-ped-inu.xml")
If nHandle > 0
FWrite(nHandle,oXml:OWSNFECANCELADA:CXML)
FClose(nHandle)
aadd(aDeleta,oXml:cID)
EndIf
nHandle := FCreate(cDestino+"\"+cAnoInut+SubStr(cChvNFe,5,39)+"-inu.xml")
If nHandle > 0
FWrite(nHandle,cXmlProt)
FClose(nHandle)
EndIf
EndIf
EndIf
EndIf
endif
IncProc()
Next nX
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Exclui as notas ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If !Empty(aDeleta) .And. GetNewPar("MV_SPEDEXP",0)<>0
oWS:= WSNFeSBRA():New()
oWS:cUSERTOKEN := "TOTVS"
oWS:cID_ENT := cIdEnt
oWS:nDIASPARAEXCLUSAO := GetNewPar("MV_SPEDEXP",0)
oWS:_URL := AllTrim(cURL)+"/NFeSBRA.apw"
oWS:oWSNFEID := NFESBRA_NFES2():New()
oWS:oWSNFEID:oWSNotas := NFESBRA_ARRAYOFNFESID2():New()
For nX := 1 To Len(aDeleta)
aadd(oWS:oWSNFEID:oWSNotas:oWSNFESID2,NFESBRA_NFESID2():New())
Atail(oWS:oWSNFEID:oWSNotas:oWSNFESID2):cID := aDeleta[nX]
Next nX
If !oWS:RETORNANOTAS()
//Aviso("SPED",IIf(Empty(GetWscError(3)),GetWscError(1),GetWscError(3)),{STR0046},3)
lFlush := .F.
EndIf
EndIf
aDeleta := {}
If ( Len(oRetorno:OWSNOTAS:OWSNFES3) == 0 .And. Empty(cNfes) )
//Aviso("SPED",STR0106,{"Ok"}) // "Não há dados"
lFlush := .F.
EndIf
Else
//Aviso("SPED",IIf(Empty(GetWscError(3)),GetWscError(1),GetWscError(3))+CRLF+STR0046,{"OK"},3)
lFinal := .T.
EndIf
If lSdoc
cIdflush := AllTrim(Substr(cIdflush,1,14) + Soma1(AllTrim(substr(cIdflush,15))))
Else
cIdflush := AllTrim(Substr(cIdflush,1,3) + Soma1(AllTrim(substr(cIdflush,4))))
EndIf
If lOk
lFlush := .F.
/*If cIdflush <= AllTrim(cNotaIni) .Or. Len(oRetorno:OWSNOTAS:OWSNFES3) == 0 .Or. Empty(cNfes) .Or. ;
cIdflush <= If(lSdoc,Substr(cNotaIni,1,14)+Replicate('0',Len(AllTrim(mv_par02))-Len(Substr(Rtrim(cNotaIni),15)))+Substr(Rtrim(cNotaIni),15),;
Substr(cNotaIni,1,3)+Replicate('0',Len(AllTrim(mv_par02))-Len(Substr(Rtrim(cNotaIni),4)))+Substr(Rtrim(cNotaIni),4))// Importou o range completo
lFlush := .F.
If !Empty(cNfes)
If Aviso("SPED",STR0152,{"Sim","Não"}) == 1 //"Solicitação processada com sucesso."
if alltrim(FunName()) == 'SPEDMDFE'
if empty(cNumMdfe)
Aviso("SPED",STR0106,{"Ok"}) // "Não há dados"
else
Aviso(STR0126,STR0151+" "+Upper(cDestino)+CRLF+CRLF+cNumMdfe,{"Ok"})
endif
else
// Exporta Legado
Aviso(STR0126,STR0151+" "+Upper(cDestino)+CRLF+CRLF+cNFes,{"Ok"})//STR0151-"XML Exportados para", "XML's Exportados para"
endif
EndIf
else
Aviso("SPED",STR0106,{"Ok"}) // "Não há dados"
EndIf
EndIf
*/
Else
lFlush := .F.
Endif
delclassintf()
ElseIf nTipo == 2 .Or. lUsaColab //Carta de Correcao e NF-e(QUANDO FOR TOTVS COLABORAÇÃO 2.0)
cWhere:="D_E_L_E_T_=' '"
If !Empty(cSerie)
If lSdoc
If cTipoNfe == "SAIDA"
cWhere += " AND F2_SDOC ='"+SubStr(cSerie,1,3)+"'"
cCondicao += AllTrim("F2_SDOC ='"+SubStr(cSerie,1,3)+"'")
Else
cWhere += " AND F1_SDOC ='"+SubStr(cSerie,1,3)+"'"
cCondicao += AllTrim("F1_SDOC ='"+SubStr(cSerie,1,3)+"'")
Endif
Else
If cTipoNfe == "SAIDA"
cWhere += " AND F2_SERIE ='"+cSerie+"'"
cCondicao += AllTrim("F2_SERIE ='"+cSerie+"'")
Else
cWhere += " AND F1_SERIE ='"+cSerie+"'"
cCondicao += AllTrim("F1_SERIE ='"+cSerie+"'")
Endif
EndIf
EndIf
If !Empty(cNotaIni)
If cTipoNfe == "SAIDA"
cWhere += " AND F2_DOC >='"+cNotaIni+"'"
cCondicao += AllTrim(" .AND. F2_DOC >='"+cNotaIni+"'")
Else
cWhere += " AND F1_DOC >='"+cNotaIni+"'"
cCondicao += AllTrim(" .AND. F1_DOC >='"+cNotaIni+"'")
Endif
EndIf
If !Empty(cNotaFim)
If cTipoNfe == "SAIDA"
cWhere += " AND F2_DOC <='"+cNotaFim+"'"
cCondicao += AllTrim(" .AND. F2_DOC <='"+cNotaFim+"'")
Else
cWhere += " AND F1_DOC <='"+cNotaFim+"'"
cCondicao += AllTrim(" .AND. F1_DOC <='"+cNotaFim+"'")
Endif
EndIf
If !Empty(dDataDe)
If cTipoNfe == "SAIDA"
cWhere += " AND F2_EMISSAO >='"+DtoS(dDataDe)+"'"
cCondicao += " .AND. DTOS(F2_EMISSAO) >='"+DtoS(dDataDe)+"'"
Else
cWhere += " AND F1_EMISSAO >='"+DtoS(dDataDe)+"'"
cCondicao += " .AND. DTOS(F1_EMISSAO) >='"+DtoS(dDataDe)+"'"
Endif
EndIf
If !Empty(dDataAte)
If cTipoNfe == "SAIDA"
cWhere += " AND F2_EMISSAO <='"+DtoS(dDataAte)+"'"
cCondicao += " .AND. DTOS(F2_EMISSAO) <='"+DtoS(dDataAte)+"'"
Else
cWhere += " AND F1_EMISSAO <='"+DtoS(dDataAte)+"'"
cCondicao += " .AND. DTOS(F1_EMISSAO) <='"+DtoS(dDataAte)+"'"
Endif
EndiF
cWhere:="%"+cWhere+"%"
#IFDEF TOP
If cTipoNfe == "SAIDA"
if lUsaColab
BeginSql Alias cAlias
SELECT F2_DOC, F2_SERIE, F2_TIPO, F2_CLIENTE, F2_LOJA
FROM %Table:SF2%
WHERE F2_FILIAL= %xFilial:SF2%
AND %Exp:cWhere%
EndSql
lExporta:=!(cAlias)->(Eof())
else
BeginSql Alias cAlias
SELECT MIN(R_E_C_N_O_) AS RECINI,MAX(R_E_C_N_O_) AS RECFIN
FROM %Table:SF2%
WHERE F2_FILIAL= %xFilial:SF2%
AND %Exp:cWhere%
EndSql
SF2->(dbGoTo((cAlias)->RECINI))
cChvIni := SF2->F2_CHVNFE
SF2->(dbGoTo((cAlias)->RECFIN))
cChvFin := SF2->F2_CHVNFE
lExporta:=!(cAlias)->(Eof())
endif
Else
if lUsaColab
BeginSql Alias cAlias
SELECT F1_DOC, F1_SERIE, F1_TIPO, F1_FORNECE, F1_LOJA
FROM %Table:SF1%
WHERE F1_FILIAL= %xFilial:SF1%
AND %Exp:cWhere%
EndSql
lExporta:=!(cAlias)->(Eof())
else
BeginSql Alias cAlias
SELECT MIN(R_E_C_N_O_) AS RECINI,MAX(R_E_C_N_O_) AS RECFIN
FROM %Table:SF1%
WHERE F1_FILIAL= %xFilial:SF1%
AND %Exp:cWhere%
EndSql
SF1->(dbGoTo((cAlias)->RECINI))
cChvIni := SF1->F1_CHVNFE
SF1->(dbGoTo((cAlias)->RECFIN))
cChvFin := SF1->F1_CHVNFE
lExporta:=!(cAlias)->(Eof())
endif
Endif
#ELSE
If cTipoNfe == "SAIDA"
cAlias := "SF2"
dbSetFilter({|| &cCondicao},cCondicao)
if !lUsaColab
(cAlias)->(dbGotop())
cChvIni := SF2->F2_CHVNFE
(cAlias)->(DbGoBottom())
cChvFin := SF2->F2_CHVNFE
lExporta:=!SF2->(Eof())
(cAlias)->(dbClearFilter())
else
lClearFilter := .T.
lExporta:=!SF2->(Eof())
endif
Else
cAlias := "SF1"
dbSetFilter({|| &cCondicao},cCondicao)
If !lUsaColab
(cAlias)->(dbGotop())
cChvIni := SF1->F1_CHVNFE
(cAlias)->(DbGoBottom())
cChvFin := SF1->F1_CHVNFE
lExporta:=!SF1->(Eof())
(cAlias)->(dbClearFilter())
else
lClearFilter := .T.
lExporta:=!SF1->(Eof())
endif
Endif
#ENDIF
If lExporta
If lUsaColab
cCnpjDFim := iif(empty(cCnpjDFim),"99999999999999", cCnpjDFim)
(cAlias)->(dbGoTop())
While !(cAlias)->(Eof())
if cTipoNfe == "SAIDA"
cTab := 'F2_'
cCmpCliFor := cTab+'CLIENTE'
else
cTab := 'F1_'
cCmpCliFor := cTab+'FORNECE'
endif
cCmpNum := cTab+'DOC'
cCmpSer := cTab+'SERIE'
cCmpTipo := cTab+'TIPO'
cCmpLoja := cTab+'LOJA'
cPrefix := iif(nTipo == 1,IIF(lCTe,"CTe","NFe"),"CCe")
//Tratamento para verificar se o CNPJ está no range inserido pelo usuário.
lCnpj := .F.
if cPrefix $ "CCe"
lCnpj := .T.
else
If cTipoNfe == "SAIDA"
if (cAlias)->&cCmpTipo $ 'D|B'
cCnpj := Posicione("SA2",1,xFilial("SA2")+(cAlias)->&cCmpCliFor+(cAlias)->&cCmpLoja,"A2_CGC")
else
cCnpj := Posicione("SA1",1,xFilial("SA1")+(cAlias)->&cCmpCliFor+(cAlias)->&cCmpLoja,"A1_CGC")
endif
else
if (cAlias)->&cCmpTipo $ 'D|B'
cCnpj := Posicione("SA1",1,xFilial("SA1")+(cAlias)->&cCmpCliFor+(cAlias)->&cCmpLoja,"A1_CGC")
else
cCnpj := Posicione("SA2",1,xFilial("SA2")+(cAlias)->&cCmpCliFor+(cAlias)->&cCmpLoja,"A2_CGC")
endif
endif
if cCnpj >= cCnpjDIni .And. cCnpj <= cCnpjDFim
lCnpj := .T.
endif
endif
If lCnpj
cXML := ""
aInfXml := {}
aInfXml := ColExpDoc((cAlias)->&cCmpSer,(cAlias)->&cCmpNum,iif(nTipo == 1,IIF(lCTe,"CTE","NFE"),"CCE"),@cXml)
/*
aInfXml
[1] - Logico se encotra documento .T.
[2] - Chave do documento
[3] - XML autorização - someente se autorizado
[4] - XML Cancelamento Evento- somente se autorizado
[5] - XML Ped. Inutilização - somente se autorizado
[6] - XML Prot. Inutilização - somente se autorizado
*/
//Ponto de Entrada para permitir filtrar as NF
If ExistBlock("SPDNFE01")
If !ExecBlock("SPDNFE01",.f.,.f.,{aInfXml})
(cAlias)->(dbSkip())
loop
Endif
Endif
//Encontrou documento
if aInfXMl[1]
if cPrefix == "CCe" .And. !Empty( aInfXMl[3] )
nHandle := FCreate(cDestino+SubStr(aInfXMl[2],3)+"-CCe.xml")
cXML := aInfXMl[3]
If nHandle > 0
FWrite(nHandle,AllTrim(cXml))
FClose(nHandle)
EndIf
cNFes+=SubStr((cAlias)->&cCmpSer,1,3)+"/"+(cAlias)->&cCmpNum+CRLF
elseif cPrefix $ "NFe|CTe"
//Iinutilização
if !Empty( aInfXMl[5] )
cXmlInut := aInfXMl[5]
cAnoInut1 := At("",cXmlInut)+5
cAnoInut := SubStr(cXmlInut,cAnoInut1,2)
cXmlProt := aInfXMl[6]
nHandle := FCreate(cDestino+SubStr(aInfXMl[2],3,2)+cAnoInut+SubStr(aInfXMl[2],5,39)+"-ped-inu.xml")
If nHandle > 0
FWrite(nHandle,oXml:OWSNFECANCELADA:CXML)
FClose(nHandle)
aadd(aDeleta,oXml:cID)
EndIf
nHandle := FCreate(cDestino+"\"+cAnoInut+SubStr(aInfXMl[2],5,39)+".xml")
If nHandle > 0
FWrite(nHandle,cXmlProt)
FClose(nHandle)
EndIf
cNFes+=SubStr((cAlias)->&cCmpSer,1,3)+"/"+(cAlias)->&cCmpNum+CRLF
endif
//Cancelamento
if !Empty( aInfXMl[4] )
cXml := SpecCharc(aInfXMl[4])
nHandle := FCreate(cDestino+SubStr(aInfXMl[2],3)+"-canc.xml")
if nHandle > 0
FWrite(nHandle,AllTrim(cXml))
FClose(nHandle)
endIf
cNFes+=SubStr((cAlias)->&cCmpSer,1,3)+"/"+(cAlias)->&cCmpNum+CRLF
endif
if !Empty( aInfXML[3] )
cXml := SpecCharc(aInfXMl[3])
If ExistBlock("FISEXPNFE")
ExecBlock("FISEXPNFE",.f.,.f.,{cXML})
EndIF
nHandle := FCreate(cDestino+cFilePrint+".xml")
if nHandle > 0
FWrite(nHandle,AllTrim(cXml))
FClose(nHandle)
endIf
cNFes+=SubStr((cAlias)->&cCmpSer,1,3)+"/"+(cAlias)->&cCmpNum+CRLF
endif
endif
IncProc()
endif
endif
(cAlias)->(dbSkip())
enddo
If !Empty(cNfes)
//If Aviso("SPED",STR0152,{"Sim","Não"}) == 1 //"Solicitação processada com sucesso."
// Aviso(STR0126,STR0151+" "+Upper(cDestino)+CRLF+CRLF+cNFes,{STR0114},3)//STR0151-"XML Exportados para", "XML's Exportados para"
//EndIf
endif
delclassintf()
else
oWS:= WSNFeSBRA():New()
oWS:cUSERTOKEN := "TOTVS"
oWS:cID_ENT := cIdEnt
oWS:_URL := AllTrim(cURL)+"/NFeSBRA.apw"
oWS:cChvInicial := cChvIni
oWS:cChvFinal := cChvFin
lOk:= oWS:NFEEXPORTAEVENTO()
oRetorno := oWS:oWSNFEEXPORTAEVENTORESULT
If lOk
ProcRegua(Len(oRetorno:CSTRING))
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Exporta as cartas ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
For nX := 1 To Len(oRetorno:CSTRING)
cXml := oRetorno:CSTRING[nX]
cXml := EncodeUTF8(cXml)
oXmlExp := XmlParser(cXml,"_",@cErro,@cAviso)
If Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_ENVEVENTO:_EVENTO:_INFEVENTO:_ID")<>"U"
cIdCCe := oXmlExp:_PROCEVENTONFE:_EVENTO:_ENVEVENTO:_EVENTO:_INFEVENTO:_ID:TEXT
Elseif Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_INFEVENTO:_ID:TEXT")<> "U"
cIdCCe := oXmlExp:_PROCEVENTONFE:_EVENTO:_INFEVENTO:_ID:TEXT
Else
cIdCCe := oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE:_INFEVENTO:_ID:TEXT
Endif
If (Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE")<>"U") .and. (Type("oXmlExp:_PROCEVENTONFE:_RETEVENTO:_RETEVENTOCTE:_INFEVENTO")<>"U")
cVerCte := Iif(Type("oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE:_VERSAO:TEXT ") <> "U", oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE:_VERSAO:TEXT , '')
cCabCTe := ''
cEventoCTe:= XmlSaveStr(oXmlExp:_PROCEVENTONFE:_EVENTO:_EVENTOCTE,.F.)
cRetEvento:= XmlSaveStr(oXmlExp:_PROCEVENTONFE:_RETEVENTO:_RETEVENTOCTE,.F.)
cRodapCTe := ''
cXml:= cCabCTe+cEventoCTe+cRetEvento+cRodapCTe
EndIf
nHandle := FCreate(cDestino+SubStr(cIdCCe,3)+"-CCe.xml")
If nHandle > 0
FWrite(nHandle,AllTrim(cXml))
FClose(nHandle)
EndIf
IncProc()
cNFes+=SubStr(cIdCCe,31,3)+"/"+SubStr(cIdCCe,34,9)+CRLF
Next nX
//If Aviso("SPED",STR0152,{"Sim","Não"}) == 1 //"Solicitação processada com sucesso."
// Aviso(STR0126,STR0151+" "+Upper(cDestino)+CRLF+CRLF+cNFes,{STR0114},3) //STR0151-"XML Exportados para", "XML's Exportados para"
//EndIf
Else
Aviso("SPED",IIf(Empty(GetWscError(3)),GetWscError(1),GetWscError(3)),{"OK"},3)
lFinal := .T.
EndIF
delclassintf()
endif
EndIf
#IFDEF TOP
If select (cAlias)>0
(cAlias)->(dbCloseArea())
EndIf
#ENDIF
lFlush := .F.
EndIF
Return(.T.)