Clipper On Line • Ver Tópico - Novidades/Como usar

Novidades/Como usar

Projeto hbNFe (Nota Fiscal Eletronica/Danfe) para [x]Harbour

Moderador: Moderadores

 

Novidades/Como usar

Mensagempor JoséQuintas » 17 Set 2016 22:04

No momento o uso está assim, considerando que sempre desse certo:

Autorizar NFE:

oSefaz := SefazClass():New()
oSefaz:NfeLoteEnvia( cXml, "1", "SP", "nomecertificado", "1" )
hb_MemoWrit( "NFE-Autorizado.xml", oSefaz:cXmlAutorizado )


Autorizar CTE:
oSefaz := SefazClass():New()
oSefaz:CteLoteEnvia( cXml, "1", "SP", "nomecertificado", "1" )
hb_MemoWrit( "CTE-Autorizado.xml", oSefaz:cXmlAutorizado )


Autorizar MDFE:

oSefaz := SefazClass():New()
oSefaz:MDFeLoteEnvia( cXml, "1", "SP", "nomecertificado", "1" )
hb_MemoWrit( "MDFE-Autorizado.xml", oSefaz:cXmlAutorizado )


Carta de Correção NFE:

oSefaz := SefazClass():New()
pSefaz:NfeEventoCce( "chave", cXml, "nomecertificado", "1" )
hb_MemoWrit( "NFE-Carta-Autorizado.xml", oSefz:cXmlAutorizado )


Cancelamento:

oSefaz := SefazClass():New()
oSefaz:NfeEventoCancela( "chave", cXml, "nomecertificado", "1" )
hb_MemoWrit( "NFE-Cancelamento-Autorizado.xml", oSefaz:cXmlAutorizado )


E se precisar dos "arquivos temporários", ou configurar antes de começar, ou configuração detalhada, ou algo mais, só olhar o que tem disponível.

CREATE CLASS SefazClass

   /* configuração */
   VAR    cProjeto       INIT WS_PROJETO_NFE          /* Modificada conforme método */
   VAR    cAmbiente      INIT WS_AMBIENTE_PRODUCAO
   VAR    cVersao        INIT "3.10"                  /* Modificada conforme método */
   VAR    cScan          INIT "N"                     /* Indicar se for SCAN/SVAN, ainda não testado */
   VAR    cUF            INIT "SP"                    /* Modificada conforme método */
   VAR    cCertificado   INIT ""                      /* Nome do certificado */
   VAR    cIndSinc       INIT INDSINC_RETORNA_RECIBO  /* Poucas UFs opção de protocolo */
   VAR    nTempoEspera   INIT 7                       /* intervalo entre envia lote e consulta recibo */
   VAR    cUFTimeZone    INIT "SP"                    /* Para DateTimeXml() Obrigatório definir UF default */
   /* XMLs de cada etapa */
   VAR    cXmlDados      INIT ""                      /* usado pra criar/complementar XML do documento */
   VAR    cXmlRetorno    INIT "Erro Desconhecido"     /* Retorno do webservice e/ou rotina */
   VAR    cXmlRecibo     INIT ""                      /* XML recibo (obtido no envio do lote) */
   VAR    cXmlProtocolo  INIT ""                      /* XML protocolo (obtido no consulta recibo e/ou envio de outros docs) */
   VAR    cXmlAutorizado INIT ""                      /* XML autorizado, caso tudo ocorra sem problemas */
   VAR    cStatus        INIT ""                      /* Status obtido da resposta final da Fazenda */
   VAR    cRecibo        INIT ""                      /* Número do recibo */
   VAR    cMotivo        INIT ""                      /* Motivo constante no Recibo */
   /* uso interno */
   VAR    cVersaoXml     INIT ""                      /* Apenas versão usada no XML */
   VAR    cServico       INIT ""                      /* Operação existente no webservice */
   VAR    cSoapAction    INIT ""                      /* Ação solicitada ao webservice */
   VAR    cWebService    INIT ""                      /* Endereço de webservice */
   VAR    cXmlSoap       INIT ""                      /* XML completo enviado pra Sefaz, incluindo informações do envelope */


Exemplo:
oSefaz := SefazClass():New()
oSefaz:cCertificado := "nomecertificado"
oSefaz:cAmbiente := "1"
oSefaz:cUF := "SP"
oSefaz:NfeLoteEnvia( cXml )
IF oSefaz:cStatus $ "100,102"
   hb_MemoWrit( "XmlAutorizado.xml", oSefaz:cXmlAutorizado )
   MsgExclamation( iif( oSefaz:cStatus == "100", ""Nota autorizada", "Nota Denegada"  )
ELSE
   hb_MemoWrit( "XmlDados.xml", oSefaz:cXmlDados )
   hb_MemoWrit( "XmlRetorno.xml", oSefaz:cXmlRetorno )
   hb_MemoWrit( "XmlProtocolo.xml", oSefaz:cXmlProtocolo )
   hb_MwmoWrit( cServico", oSefaz:cServico )
   hb_MemoWrit( "WebService", oSefaz:cWebService )
   hb_MemoWrit( "SoapAction", oSefaz:cSoapAction )
   hb_MemoWrit( "XmlSoap", oSefaz:cXmlSoap )
   IF .NOT. Empty( oSefaz:cMotivo )
      MsgExclamation( "Problema " + oSefaz:cMotivo )
   ELSE
      MsgExclamation( "Erro " + oSefaz:cXmlRetorno )
   ENDIF
ENDIF


Não existe arquivo, cada um grava o que quiser, aonde quiser, com o nome que quiser, do jeito que quiser.
Para o aplicativo Harbour, para a classe, para a assinatura, e para a Fazenda, tudo é string.
Arquivo temporário serve apenas pra transferir entre aplicativos, ou para nós resolvermos algum problema tendo os detalhes do que aconteceu.

Se quiser alterar alguma coisa ou adicionar alguma coisa na classe: um exemplo com Herança, alterando o NfeLoteEnvia() pra gravar arquivos

PROCEDURE Main
   
   oSefaz := MySefazClass():New()
   oSefaz:NfeLoteEnvia( "NumeroNota", cXml, "1", "SP", "nomecertificado", "1"  )

   RETURN

CREATE MySefazClass INHERIT SefazClass

   METHOD NfeLoteEnvia( cNumeroNota, ... )

   END CLASS

METHOD NfeLoteEnvia( cNumeroNota, ... ) CLASS Sefazclass
   ::SUPER:NfeLoteEnvia( ... ) // aqui chama o método original
   IF ::cStatus $ "100,102"
      hb_MemoWrit( "NFE-" + cNumeroNota + "-Autorizado.xml", ::cXmlAutorizado )
   ELSE
       hb_MemoWrit( "NFE-" + cNumeroNota + "-Dados.xml", ::cXmlDados )
       hb_MemoWrit( "NFE-" + cNumeroNota + "-Retorno.xml", ::cXmlRetorno )
       hb_MemoWrit( "NFE-" + cNumeroNota + "-Protocolo.xml", ::cXmlProtocolo )
       hb_MwmoWrit( "NFE-" + cNumeroNota + "-Servico", ::cServico )
       hb_MemoWrit( "NFE-" + cNumeroNota + "-WebService", ::cWebService )
       hb_MemoWrit( "NFE-" + cNumeroNota + "-SoapAction", ::cSoapAction )
       hb_MemoWrit( "NFE-" + cNumeroNota + "-Soap", ::cXmlSoap )
   ENDIF
   RETURN ::cXmlRetorno


Nota: editado depois pra corrigir exemplo de herança.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Novidades/Como usar

Mensagempor JoséQuintas » 19 Set 2016 18:13

Aconteceu uma coisa curiosa:

Colocando <?xml version="1.00"?> no MDFE autorizado, tanto o explorer quanto o emissor gratuito rejeitam o XML.
Bastou retirar isso, e tudo bem.

Fiquei confuso porque o mesmo não acontece com NFE.
Não sei se retiro isso de CTE e NFE autorizados.

Se alguém mais puder confirmar.
É a primeira coisa do XML.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Novidades/Como usar

Mensagempor runner » 22 Set 2016 18:26

Olá, José Quintas.

Confirmei nos meus xmls do CTe e realmente não tem está tag no inicio. O melhor é seguir o padrão.
Harbour 3.2 + Minigui Extended 16 + xDev
runner
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 69
Data de registro: 03 Ago 2007 05:17
Cidade/Estado: GUARULHOS-SP
Curtiu: 0 vez
Mens.Curtidas: 3 vezes

Novidades/Como usar

Mensagempor JoséQuintas » 22 Set 2016 20:20

Qualquer coisa dá pra criar uma rotina em Harbour pra colocar/tirar isso, não é a parte mais difícil.

Por exemplo, o explorer mostra automaticamente isso se não existir.
Mas se existir, ele rejeita mostrar o XML.... rs

Parece que depende do XML.

É confirmar aonde rejeita ou não.
Qualquer coisa, basta uma rotina em Harbour pra acrescentar/tirar isso depois, pra fazer alteração em massa..
Isso não interfere na assinatura digital, em termos de assinatura digital, dá pra tirar/colocar que não tem problema.
A assinatura é referente ao bloco de informações do XML, e isso fica na parte de fora.

É mais pra já deixar resolvido, pra evitar algum inconveniente depois.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Projeto hbNFe

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro