From 97478d225dec6f8554aad5e479579418c129e53b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Quintas?= Date: Mon, 12 Feb 2018 18:34:53 -0200 Subject: [PATCH] Rotinas pra pegar dados de chave, CTE evento Desacordo --- source/ze_sefazclass.prg | 65 +++++++++++++++++------ source/ze_sefazdadfe.prg | 6 +-- source/ze_sefazdaevento.prg | 8 +-- source/ze_sefazdanfce.prg | 6 +-- source/ze_sefazxmlclass.prg | 100 +++++++++++++++++++++--------------- 5 files changed, 118 insertions(+), 67 deletions(-) diff --git a/source/ze_sefazclass.prg b/source/ze_sefazclass.prg index 00015e91..8071e741 100644 --- a/source/ze_sefazclass.prg +++ b/source/ze_sefazclass.prg @@ -61,6 +61,7 @@ CREATE CLASS SefazClass METHOD CTeConsultaRecibo( cRecibo, cUF, cCertificado, cAmbiente ) METHOD CTeEventoCancela( cChave, nSequencia, nProt, xJust, cCertificado, cAmbiente ) METHOD CTeEventoCarta( cChave, nSequencia, aAlteracoes, cCertificado, cAmbiente ) + METHOD CTeEventoDesacordo( cChave, nSequencia, cObs, cCertificado, cAmbiente ) METHOD CTeGeraAutorizado( cXmlAssinado, cXmlProtocolo ) METHOD CTeGeraEventoAutorizado( cXmlAssinado, cXmlProtocolo ) METHOD CTeInutiliza( cAno, cCnpj, cMod, cSerie, cNumIni, cNumFim, cJustificativa, cUF, cCertificado, cAmbiente ) @@ -122,7 +123,7 @@ METHOD BpeConsultaProtocolo( cChave, cCertificado, cAmbiente ) CLASS SefazClass ::cXmlEnvio += XmlTag( "xServ", "CONSULTAR" ) ::cXmlEnvio += XmlTag( "chBPe", cChave ) ::cXmlEnvio += [] - IF Substr( cChave, 21, 2 ) != "63" + IF DfeModFis( cChave ) != "63" ::cXmlRetorno := "*ERRO* Chave não se refere a BPE" ELSE ::XmlSoapPost() @@ -153,7 +154,7 @@ METHOD CTeConsultaProtocolo( cChave, cCertificado, cAmbiente ) CLASS SefazClass ::cXmlEnvio += XmlTag( "xServ", "CONSULTAR" ) ::cXmlEnvio += XmlTag( "chCTe", cChave ) ::cXmlEnvio += [] - IF ! Substr( cChave, 21, 2 ) $ "57,67" + IF ! DfeModFis( cChave ) $ "57,67" ::cXmlRetorno := "*ERRO* Chave não se refere a CTE" ELSE ::XmlSoapPost() @@ -191,7 +192,7 @@ METHOD CTeEventoCancela( cChave, nSequencia, nProt, xJust, cCertificado, cAmbien ::cXmlDocumento += [] ::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) ) ::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente ) - ::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) ) + ::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) ) ::cXmlDocumento += XmlTag( "chCTe", cChave ) ::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() ) ::cXmlDocumento += XmlTag( "tpEvento", "110111" ) @@ -226,7 +227,7 @@ METHOD CTeEventoCarta( cChave, nSequencia, aAlteracoes, cCertificado, cAmbiente ::cXmlDocumento += [] ::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) ) ::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente ) - ::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) ) + ::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) ) ::cXmlDocumento += XmlTag( "chCTe", cChave ) ::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml( , ,.F.) ) ::cXmlDocumento += XmlTag( "tpEvento", "110110" ) @@ -265,6 +266,40 @@ METHOD CTeEventoCarta( cChave, nSequencia, aAlteracoes, cCertificado, cAmbiente RETURN ::cXmlRetorno +METHOD CTeEventoDesacordo( cChave, nSequencia, cObs, cCertificado, cAmbiente ) CLASS SefazClass + + hb_Default( @nSequencia, 1 ) + + ::Setup( ::UFSigla( Substr( cChave, 1, 2 ) ), cCertificado, cAmbiente, WS_CTE_RECEPCAOEVENTO ) + + ::cXmlDocumento := [] + ::cXmlDocumento += [] + ::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) ) + ::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente ) + ::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) ) + ::cXmlDocumento += XmlTag( "chCTe", cChave ) + ::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml( , ,.F.) ) + ::cXmlDocumento += XmlTag( "tpEvento", "110110" ) + ::cXmlDocumento += XmlTag( "nSeqEvento", LTrim( Str( nSequencia, 4 ) ) ) + ::cXmlDocumento += [] + ::cXmlDocumento += [] + ::cXmlDocumento += XmlTag( "descEvento", "Prestacao do Servico em Desacordo" ) + ::cXmlDocumento += XmlTag( "indDesacordoOper", "" ) + ::cXmlDocumento += XmlTag( "xOBS", cObs ) + ::cXmlDocumento += [] + ::cXmlDocumento += [] + ::cXmlDocumento += [] + ::cXmlDocumento += [] + IF ::AssinaXml() == "OK" + ::cXmlEnvio := ::cXmlDocumento + ::XmlSoapPost() + ::cXmlProtocolo := ::cXmlRetorno + ::CTeGeraEventoAutorizado( ::cXmlDocumento, ::cXmlProtocolo ) + ENDIF + + RETURN ::cXmlRetorno + + METHOD CTeGeraAutorizado( cXmlAssinado, cXmlProtocolo ) CLASS SefazClass cXmlAssinado := iif( cXmlAssinado == NIL, ::cXmlDocumento, cXmlAssinado ) @@ -410,7 +445,7 @@ METHOD MDFeConsultaProtocolo( cChave, cCertificado, cAmbiente ) CLASS SefazClass ::cXmlEnvio += XmlTag( "xServ", "CONSULTAR" ) ::cXmlEnvio += XmlTag( "chMDFe", cChave ) ::cXmlEnvio += [] - IF Substr( cChave, 21, 2 ) != "58" + IF DfeModFis( cChave ) != "58" ::cXmlRetorno := "*ERRO* Chave não se refere a MDFE" ELSE ::XmlSoapPost() @@ -481,7 +516,7 @@ METHOD MDFeEventoCancela( cChave, nSequencia, nProt, xJust, cCertificado, cAmbie ::cXmlDocumento += [] ::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) ) ::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente ) - ::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) ) + ::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) ) ::cXmlDocumento += XmlTag( "chMDFe", cChave ) ::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() ) ::cXmlDocumento += XmlTag( "tpEvento", "110111" ) @@ -514,7 +549,7 @@ METHOD MDFeEventoEncerramento( cChave, nSequencia , nProt, cUFFim , cMunCarrega ::cXmlDocumento += [] ::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) ) ::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente ) - ::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) ) + ::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) ) ::cXmlDocumento += XmlTag( "chMDFe", cChave ) ::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() ) ::cXmlDocumento += XmlTag( "tpEvento", "110112" ) @@ -549,7 +584,7 @@ METHOD MDFeEventoInclusaoCondutor( cChave, nSequencia, cNome, cCpf, cCertificado ::cXmlDocumento += [] ::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) ) ::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente ) - ::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) ) + ::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) ) ::cXmlDocumento += XmlTag( "chMDFe", cChave ) ::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() ) ::cXmlDocumento += XmlTag( "tpEvento", "110114" ) @@ -702,7 +737,7 @@ METHOD NFeConsultaProtocolo( cChave, cCertificado, cAmbiente ) CLASS SefazClass ::cXmlEnvio += XmlTag( "xServ", "CONSULTAR" ) ::cXmlEnvio += XmlTag( "chNFe", cChave ) ::cXmlEnvio += [] - IF ! Substr( cChave, 21, 2 ) $ "55,65" + IF ! DfeModFis( cChave ) $ "55,65" ::cXmlRetorno := "*ERRO* Chave não se refere a NFE" ELSE ::XmlSoapPost() @@ -749,7 +784,7 @@ METHOD NFeEventoCarta( cChave, nSequencia, cTexto, cCertificado, cAmbiente ) CLA ::cXmlDocumento += [] ::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) ) ::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente ) - ::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) ) + ::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) ) ::cXmlDocumento += XmlTag( "chNFe", cChave ) ::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() ) ::cXmlDocumento += XmlTag( "tpEvento", "110110" ) @@ -772,7 +807,7 @@ METHOD NFeEventoCarta( cChave, nSequencia, cTexto, cCertificado, cAmbiente ) CLA ::cXmlDocumento += [] IF ::AssinaXml() == "OK" ::cXmlEnvio := [] - ::cXmlEnvio += XmlTag( "idLote", Substr( cChave, 26, 9 ) ) // usado numero da nota + ::cXmlEnvio += XmlTag( "idLote", DfeNumero( cChave ) ) // usado numero da nota ::cXmlEnvio += ::cXmlDocumento ::cXmlEnvio += [] ::XmlSoapPost() @@ -792,7 +827,7 @@ METHOD NFeEventoCancela( cChave, nSequencia, nProt, xJust, cCertificado, cAmbien ::cXmlDocumento += [] ::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) ) ::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente ) - ::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) ) + ::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) ) ::cXmlDocumento += XmlTag( "chNFe", cChave ) ::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() ) ::cXmlDocumento += XmlTag( "tpEvento", "110111" ) @@ -807,7 +842,7 @@ METHOD NFeEventoCancela( cChave, nSequencia, nProt, xJust, cCertificado, cAmbien ::cXmlDocumento += [] IF ::AssinaXml() == "OK" ::cXmlEnvio := [] - ::cXmlEnvio += XmlTag( "idLote", Substr( cChave, 26, 9 ) ) // usado numero da nota + ::cXmlEnvio += XmlTag( "idLote", DfeNumero( cChave ) ) // usado numero da nota ::cXmlEnvio += ::cXmlDocumento ::cXmlEnvio += [] ::XmlSoapPost() @@ -836,7 +871,7 @@ METHOD NFeEventoManifestacao( cChave, nSequencia, xJust, cCodigoEvento, cCertifi ::cXmlDocumento += [] ::cXmlDocumento += XmlTag( "cOrgao", Substr( cChave, 1, 2 ) ) ::cXmlDocumento += XmlTag( "tpAmb", ::cAmbiente ) - ::cXmlDocumento += XmlTag( "CNPJ", Substr( cChave, 7, 14 ) ) + ::cXmlDocumento += XmlTag( "CNPJ", DfeEmitente( cChave ) ) ::cXmlDocumento += XmlTag( "chNFe", cChave ) ::cXmlDocumento += XmlTag( "dhEvento", ::DateTimeXml() ) ::cXmlDocumento += XmlTag( "tpEvento", cCodigoEvento ) @@ -852,7 +887,7 @@ METHOD NFeEventoManifestacao( cChave, nSequencia, xJust, cCodigoEvento, cCertifi ::cXmlDocumento += [] IF ::AssinaXml() == "OK" ::cXmlEnvio := [] - ::cXmlEnvio += XmlTag( "idLote", Substr( cChave, 26, 9 ) ) // usado numero da nota + ::cXmlEnvio += XmlTag( "idLote", DfeNumero( cChave ) ) // usado numero da nota ::cXmlEnvio += ::cXmlDocumento ::cXmlEnvio += [] ::XmlSoapPost() diff --git a/source/ze_sefazdadfe.prg b/source/ze_sefazdadfe.prg index 6741e625..4a2da6c0 100644 --- a/source/ze_sefazdadfe.prg +++ b/source/ze_sefazdadfe.prg @@ -158,15 +158,15 @@ METHOD ToPDF( cXmlDocumento, cFilePDF, cXmlAuxiliar ) CLASS hbNFeDaGeral cXmlAuxiliar := MemoRead( cXmlAuxiliar ) ENDIF DO CASE - CASE " 0 + IF DfeModFis( ::cChaveEvento ) == "57" // At( "retEventoCTe",::cXmlEvento) > 0 // NUMERO CTE ::DrawTexto( 391, ::nLinhaPdf, 480, Nil, "NUMERO DO CT-e", HPDF_TALIGN_CENTER, ::oPDFFontNormal, 6 ) ::DrawTexto( 391, ::nLinhaPDF -6, 480, Nil, SubStr( StrZero( Val( ::aIde[ "nNF" ] ), 9 ), 1, 3 ) + "." + SubStr( StrZero( Val( ::aIde[ "nNF" ] ), 9 ), 4, 3 ) + "." + SubStr( StrZero( Val( ::aIde[ "nNF" ] ), 9 ), 7, 3 ), HPDF_TALIGN_CENTER, ::oPDFFontBold, 11 ) diff --git a/source/ze_sefazdanfce.prg b/source/ze_sefazdanfce.prg index d1a898c5..ea5d62b0 100644 --- a/source/ze_sefazdanfce.prg +++ b/source/ze_sefazdanfce.prg @@ -41,7 +41,7 @@ CREATE CLASS hbNFeDaNFCe INHERIT hbNFeDaGeral VAR nItem INIT 0 VAR aICMSTotal VAR aFPags INIT {} - VAR cChaveAcesso + VAR cChave VAR cQRCode VAR aInfProt VAR aInfAdic @@ -96,7 +96,7 @@ METHOD BuscaDadosXML() CLASS hbNFeDaNFCe ::aICMSTotal := XmlToHash( XmlNode( ::cXml, "ICMSTot" ), { "vProd", "vFrete", "vSeg", "vOutro", "vDesc", "vNF", "vTotTrib" } ) ::aInfProt := XmlToHash( XmlNode( ::cXml, "infProt" ), { "nProt", "dhRecbto" } ) ::aInfAdic := XmlToHash( XmlNode( ::cXml, "infAdic" ), { "infAdFisco", "infCpl" } ) - ::cChaveAcesso := AllTrim( Substr( XmlElement( ::cXml, "Id" ), 4 ) ) + ::cChave := AllTrim( Substr( XmlElement( ::cXml, "Id" ), 4 ) ) ::cQRCode := XmlToString( XmlNode( XmlNode( ::cXml, "infNFeSupl" ), "qrCode" ) ) // Produtos / Servicos @@ -435,7 +435,7 @@ METHOD ConsultaChaveAcesso() CLASS hbNFeDaNFCe ENDIF ::DrawTexto( 6, ::nLinhaPDF - 10, 220, NIL, "CHAVE DE ACESSO", HPDF_TALIGN_CENTER, ::oPDFFontBold, 8 ) - ::DrawTexto( 6, ::nLinhaPDF - 20, 220, NIL, Transform( ::cChaveAcesso, "@R 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999" ), HPDF_TALIGN_CENTER, ::oPDFFontNormal, 8 ) + ::DrawTexto( 6, ::nLinhaPDF - 20, 220, NIL, Transform( ::cChave, "@R 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999 9999" ), HPDF_TALIGN_CENTER, ::oPDFFontNormal, 8 ) ::DrawTexto( 6, ::nLinhaPDF - 25, 220, NIL, Replicate( "-", 80 ), HPDF_TALIGN_CENTER, ::oPDFFontNormal, 8 ) ::nLinhaPDF -= 25 diff --git a/source/ze_sefazxmlclass.prg b/source/ze_sefazxmlclass.prg index b27b9239..b85bd536 100644 --- a/source/ze_sefazxmlclass.prg +++ b/source/ze_sefazxmlclass.prg @@ -217,8 +217,8 @@ CREATE CLASS NfeDuplicataClass STATIC CREATE CLASS DocSpedClass STATIC - VAR ChaveAcesso INIT "" - VAR cTipoDoc INIT "" // 2014.11.20 + VAR cChave INIT "" + VAR cModFis INIT "" // 2014.11.20 VAR TipoNFe INIT "" // 2018.01.23 Jackson VAR TipoEmissao INIT "" // 2018.01.23 Jackson VAR cEvento INIT "" // 2014.11.20 @@ -274,56 +274,56 @@ FUNCTION XmlToDoc( cXmlInput ) oDocSped := DocSpedClass():New() DO CASE CASE "Cancelamento" $ cXmlInput - oDocSped:cTipoDoc := "55" + oDocSped:cModFis := "55" oDocSped:cEvento := "110111" XmlToDocNfeCancel( cXmlInput, @oDocSped ) CASE "CANCELAR" $ cXmlInput - oDocSped:cTipoDoc := "55" + oDocSped:cModFis := "55" oDocSped:cEvento := "110111" XmlToDocNFECancel( cXmlInput, @oDocSped ) CASE "Cancelamento" $ cXmlInput - oDocSped:cTipoDoc := "57" + oDocSped:cModFis := "57" oDocSped:cEvento := "110111" XmlToDocCTeCancel( cXmlInput, @oDocSped ) CASE "Carta de Correcao" $ cXmlInput - oDocSped:cTipoDoc := "55" + oDocSped:cModFis := "55" oDocSped:cEvento := "110110" XmlToDocNfeCCe( cXmlInput, @oDocSped ) CASE "Cancelamento" $ cXmlInput - oDocSped:cTipoDoc := "58" + oDocSped:cModFis := "58" oDocSped:cEvento := "110111" XmlToDocMDFECancel( cXmlInput, @oDocSped ) CASE "Encerramento" $ cXmlInput - oDocSped:cTipoDoc := "58" + oDocSped:cModFis := "58" oDocSped:cEvento := "110112" XmlToDocMDFEEnc( cXmlInput, @oDocSped ) CASE " "12" + CASE Substr( oDocSped:cChave, 5, 2 ) < "01" .OR. Substr( oDocSped:cChave, 5, 2 ) > "12" oDocSped:cErro := "Mes da chave inválido" - CASE ! ValidCnpjCpf( Substr( oDocSped:ChaveAcesso, 7, 14 ) ) + CASE ! ValidCnpjCpf( DfeEmitente( oDocSped:cChave ) ) oDocSped:cErro := "CNPJ inválido na chave de acesso" CASE Val( oDocSped:Protocolo ) == 0 oDocSped:cErro := "Sem protocolo" @@ -356,8 +356,8 @@ FUNCTION XmlToDoc( cXmlInput ) oDocSped:cErro := "Número de documento vazio" ENDCASE IF ! Empty( oDocSped:cErro ) - oDocSped:cTipoDoc := "XX" - oDocSped:cEvento := "XXXXXX" + oDocSped:cModFis := "XX" + oDocSped:cEvento := "XXXXXX" ENDIF RETURN oDocSped @@ -379,7 +379,7 @@ STATIC FUNCTION XmlToDocNfeEmi( cXmlInput, oDocSped ) oDocSped:cErro := "Chave de Acesso Inválida" RETURN NIL ENDIF - oDocSped:ChaveAcesso := cBlocoChave + oDocSped:cChave := cBlocoChave oDocSped:cAssinatura := XmlNode( cXmlInput, "Signature" ) cBlocoIde := XmlNode( cXmlInput, "ide" ) oDocSped:cNumDoc := XmlNode( cBlocoIde, "nNF" ) @@ -408,7 +408,7 @@ STATIC FUNCTION XmlToDocNfeEmi( cXmlInput, oDocSped ) oDocSped:InfAdicionais := XmlNode( cBlocoInfAdic, "InfCpl" ) cBlocoEmit := XmlNode( cXmlInput, "emit" ) - oDocSped:Emitente:Cnpj := Transform( Substr( oDocSped:ChaveAcesso, 7, 14 ), "@R 99.999.999/9999-99" ) + oDocSped:Emitente:Cnpj := Transform( DfeEmitente( oDocSped:cChave ), "@R 99.999.999/9999-99" ) oDocSped:Emitente:Nome := Upper( XmlNode( cBlocoEmit, "xNome" ) ) oDocSped:Emitente:InscricaoEstadual := XmlNode( cBlocoEmit, "IE" ) cBlocoEndereco := XmlNode( cBlocoEmit, "enderEmit" ) @@ -610,11 +610,11 @@ STATIC FUNCTION XmlToDocNfeCancel( cXmlInput, oDocSped ) oDocSped:cErro := "Sem chave de acesso" RETURN .F. ELSE - oDocSped:ChaveAcesso := mChave + oDocSped:cChave := mChave oDocSped:Protocolo := mProtocolo oDocSped:cAmbiente := XmlNode( cXmlInput, "tpAmb" ) - oDocSped:Emitente:Cnpj := Transform( Substr( mChave, 7, 14 ), "@R 99.999.999/9999-99" ) - oDocSped:cNumDoc := Substr( mChave, 26, 9 ) + oDocSped:Emitente:Cnpj := Transform( DfeEmitente( mChave ), "@R 99.999.999/9999-99" ) + oDocSped:cNumDoc := DfeNumero( mChave ) oDocSped:cAssinatura := XmlNode( cXmlInput, "Signature" ) oDocSped:Status := "111" ENDIF @@ -631,7 +631,7 @@ STATIC FUNCTION XmlToDocNfeCce( XmlInput, oDocSped ) oDocSped:cAmbiente := XmlNode( mXmlInfEvento, "tpAmb" ) oDocSped:Emitente:Cnpj := Transform( XmlNode( mXmlInfEvento, "CNPJ" ), "@R 99.999.999/9999-99" ) oDocSped:Destinatario:Cnpj := oDocSped:Emitente:Cnpj - oDocSped:ChaveAcesso := XmlNode( mXmlInfEvento, "chNFe" ) + oDocSped:cChave := XmlNode( mXmlInfEvento, "chNFe" ) //oDocSped:TipoEvento := XmlNode( mXmlInfEvento, "tpEvento" ) oDocSped:cSequencia := StrZero( Val( XmlNode( mXmlInfEvento, "nSeqEvento" ) ), 2 ) // mXmldetEvento := XmlNode( mXmlInfEvento, "detEvento" ) @@ -660,7 +660,7 @@ STATIC FUNCTION XmlToDocMDFEEmi( cXmlInput, oMDFE ) oMDFE:cErro := "Chave de acesso inválida" RETURN NIL ENDIF - oMDFE:ChaveAcesso := cBlocoChave + oMDFE:cChave := cBlocoChave oMDFE:cAssinatura := XmlNode( cXmlInput, "Signature" ) cBlocoIde := XmlNode( cXmlInput, "ide" ) oMDFE:cNumDoc := XmlNode( cBlocoIde, "nMDF" ) @@ -705,7 +705,7 @@ STATIC FUNCTION XmlToDocMDFEEnc( XmlInput, oDocSped ) oDocSped:cAmbiente := XmlNode( mXmlInfEvento, "tpAmb" ) oDocSped:Emitente:Cnpj := Transform( XmlNode( mXmlInfEvento, "CNPJ" ), "@R 99.999.999/9999-99" ) oDocSped:Destinatario:Cnpj := oDocSped:Emitente:Cnpj - oDocSped:ChaveAcesso := XmlNode( mXmlInfEvento, "chMDFe" ) + oDocSped:cChave := XmlNode( mXmlInfEvento, "chMDFe" ) //oDocSped:TipoEvento := XmlNode( mXmlInfEvento, "tpEvento" ) oDocSped:cSequencia := StrZero(Val( XmlNode( mXmlInfEvento, "nSeqEvento" ) ), 2 ) // mXmldetEvento := XmlNode( mXmlInfEvento, "detEvento" ) @@ -730,10 +730,10 @@ STATIC FUNCTION XmlToDocMDFECancel( cXmlInput, oDocSped ) ELSE oDocSped:cAmbiente := XmlNode( cXmlInput, "tpAmb" ) oDocSped:cSequencia := StrZero( Val( XmlNode( cXmlInput, "nSeqEvento" ) ), 2 ) - oDocSPed:ChaveAcesso := mChave + oDocSPed:cChave := mChave oDocSped:Protocolo := mProtocolo - oDocSped:Emitente:Cnpj := Transform( Substr( mChave, 7, 14 ), "@R 99.999.999/9999-99" ) - oDocSPed:cNumDoc := Substr( mChave, 26, 9 ) + oDocSped:Emitente:Cnpj := Transform( DfeEmitente( mChave ), "@R 99.999.999/9999-99" ) + oDocSPed:cNumDoc := DfeNumero( mChave ) oDocSped:cAssinatura := XmlNode( cXmlInput, "Signature" ) oDocSped:Status := "111" ENDIF @@ -751,9 +751,9 @@ STATIC FUNCTION XmlToDocCteEmi( XmlInput, oDocSped ) XmlCte := XmlNode( XmlProc, "CTe" ) XmlInfCteComTag := XmlNode( XmlProc, "CTe", .T. ) XmlInfCte := XmlNode( XmlCte, "infCte" ) - oDocSped:ChaveAcesso := Substr( XmlElement( XmlInfCteComTag, "id" ), 4 ) // id minusculo - IF Empty( oDocSped:ChaveAcesso ) - oDocSped:ChaveAcesso := Substr( XmlElement( XmlInfCteComTag, "Id" ), 4 ) // id maiusculo + oDocSped:cChave := Substr( XmlElement( XmlInfCteComTag, "id" ), 4 ) // id minusculo + IF Empty( oDocSped:cChave ) + oDocSped:cChave := Substr( XmlElement( XmlInfCteComTag, "Id" ), 4 ) // id maiusculo ENDIF XmlIde := XmlNode( XmlInfCte, "ide" ) oDocSped:cNumDoc := StrZero( Val( XmlNode( XmlIde, "nCT" ) ), 9 ) @@ -830,11 +830,11 @@ STATIC FUNCTION XmlToDocCteCancel( cXmlInput, oDocSped ) mProtocolo := XmlNode( mXmlInfCanc, "nProt" ) ENDIF IF Len( Trim( mChave ) ) != 0 - oDocSped:ChaveAcesso := mChave + oDocSped:cChave := mChave oDocSped:Protocolo := mProtocolo oDocSped:cAmbiente := XmlNode( cXmlInput, "tpAmb" ) - oDocSped:Emitente:Cnpj := Transform( Substr( mChave, 7, 14 ), "@R 99.999.999/9999-99" ) - oDocSped:cNumDoc := Substr( mChave, 26, 9 ) + oDocSped:Emitente:Cnpj := Transform( DfeEmitente( mChave ), "@R 99.999.999/9999-99" ) + oDocSped:cNumDoc := DfeNumero( mChave ) oDocSped:cAssinatura := XmlNode( cXmlInput, "Signature" ) oDocSped:Status := "111" ENDIF @@ -844,3 +844,19 @@ STATIC FUNCTION XmlToDocCteCancel( cXmlInput, oDocSped ) FUNCTION PicNfe( cChave ) RETURN Transform( cChave, "@R 99-99/99-99.999.999/9999-99.99.999.999999999.9.99999999.9" ) + +FUNCTION DfeModFis( cKey ) + + RETURN Substr( cKey, 21, 2 ) + +FUNCTION DfeSerie( cKey ) + + RETURN Substr( cKey, 23, 3 ) + +FUNCTION DfeNumero( cKey ) + + RETURN Substr( cKey, 26, 9 ) + +FUNCTION DfeEmitente( cKey ) + + RETURN Substr( cKey, 7, 14 )