Página 1 de 1

Quintas (SefazClass)

Enviado: 14 Mar 2018 16:44
por janio
Quintas,

Preciso usar sua classe apenas para o evento de CANCELAMENTO da NFCe (METHOD NFeEventoCancela)

Eh possível? Quais as dependências? que prg's devo acrescentar ao meu projeto?

Quintas (SefazClass)

Enviado: 14 Mar 2018 18:13
por JoséQuintas
Precisa assinatura e comunicação.
Assinatura: CAPICOM.DLL e MSXML5.DLL

Se compilar a sefazclass como LIB, é só adicionar a LIB na compilação do aplicativo.

Quintas (SefazClass)

Enviado: 14 Mar 2018 18:48
por janio
dei aqui um hbmk2 sefaclass.hbp, nao deu erro nenhum mas tbm nao gerou a bli

algo a mais?

Código: Selecionar todos

C:\Users\Notebook\Downloads\sefazclass-master\sefazclass-master>hbmk2 sefazclass.hbp
Harbour 3.2.0dev (r1705200225)
Copyright (c) 1999-2016, http://harbour-project.org/
Compiling 'source\ze_sefazclass.prg'...
Lines 3066, Functions/Procedures 55
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_sefazclass.c'... Done.
Compiling 'source\ze_sefazcapicom.prg'...
Lines 797, Functions/Procedures 3
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_sefazcapicom.c'... Done.
Compiling 'source\ze_sefazAssina.prg'...
Lines 1275, Functions/Procedures 9
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_sefazAssina.c'... Done.
Compiling 'source\ze_sefazAssinachk.prg'...
Lines 69, Functions/Procedures 1
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_sefazAssinachk.c'... Done.
Compiling 'source\ze_sefazDaCte.prg'...
Lines 2845, Functions/Procedures 6
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_sefazDaCte.c'... Done.
Compiling 'source\ze_sefazDaEvento.prg'...
Lines 2365, Functions/Procedures 8
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_sefazDaEvento.c'... Done.
Compiling 'source\ze_sefazDaMdfe.prg'...
Lines 2191, Functions/Procedures 6
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_sefazDaMdfe.c'... Done.
Compiling 'source\ze_sefazDaNfe.prg'...
Lines 2883, Functions/Procedures 24
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_sefazDaNfe.c'... Done.
Compiling 'source\ze_sefazDaNFCe.prg'...
Lines 2820, Functions/Procedures 17
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_sefazDaNFCe.c'... Done.
Compiling 'source\ze_sefazDadfe.prg'...
Lines 2112, Functions/Procedures 16
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_sefazDadfe.c'... Done.
Compiling 'source\ze_sefazSoapList.prg'...
Lines 1270, Functions/Procedures 1
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_sefazSoapList.c'... Done.
Compiling 'source\ze_sefazxmlclass.prg'...
Lines 2190, Functions/Procedures 33
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_sefazxmlclass.c'... Done.
Compiling 'source\ze_xmlfunc.prg'...
Lines 343, Functions/Procedures 17
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_xmlfunc.c'... Done.
Compiling 'source\ze_miscfunc.prg'...
Lines 34, Functions/Procedures 2
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_miscfunc.c'... Done.
Compiling 'source\ze_xharbour.prg'...
Lines 40, Functions/Procedures 0
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_xharbour.c'... Done.
Compiling 'source\ze_digitodoc.prg'...
Lines 271, Functions/Procedures 12
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_digitodoc.c'... Done.
Compiling 'source\ze_extenso.prg'...
Lines 969, Functions/Procedures 11
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_extenso.c'... Done.
Compiling 'source\ze_inscestadual.prg'...
Lines 879, Functions/Procedures 29
Generating C source output to 'C:\Users\Notebook\AppData\Local\Temp\hbmk_gentd3.dir\ze_inscestadual.c'... Done.

Quintas (SefazClass)

Enviado: 14 Mar 2018 18:55
por JoséQuintas
Como está a variável HB_INSTALL_PREFIX

Se estiver d:\harbour, vai gerar a lib em:

d:\Harbour\add-ons\sefazclass

Se não existir a variável, provavelmente criou em \addons

Quintas (SefazClass)

Enviado: 14 Mar 2018 18:59
por JoséQuintas
Faltou dizer:
Depois de gerado em harbour\addons...
Quando quiser usar a LIB, será só adicionar sefazclass.hbc

Ou aparecerá nas dicas do HBMK2 pra adicionar, quando precisar... :)

Quintas (SefazClass)

Enviado: 14 Mar 2018 19:26
por janio
Ok. faltava defini a variavel HB_INSTALL_PREFIX. caminhando

No parametro certificado deve ser passado o "Numero de Serie do certificado", conforme imagem anexa?

Estou passando esse numero mas esta me retornando: "Erro assinatura: Certificado não encontrado ou vencido"

O certificado esta instalado na maquina e esta funcional

Quintas (SefazClass)

Enviado: 14 Mar 2018 21:06
por JoséQuintas
A Sefazclass trabalha com o nome do certificado, fica em CN=.

Quintas (SefazClass)

Enviado: 14 Mar 2018 21:44
por janio
Quintas,

Me tira so uma duvida, eh que sou meio brabo (burro) nessas coisas.

Quando um xml eh assinado, eh automaticamente acrescentado no seu final todos aqueles dados (caracteres) da assinatura? Ou isso eh opcional?

Estou olhando o seu codigo aqui e me parece que isso nao acontece.

Código: Selecionar todos

METHOD NFeEventoCancela( cChave, nSequencia, nProt, xJust, cCertificado, cAmbiente ) CLASS SefazClass

   hb_Default( @nSequencia, 1 )
   ::cNFCe := iif( DfeModFis( cChave ) == "65", "S", "N" )

   ::Setup( ::UFSigla( Substr( cChave, 1, 2 ) ), cCertificado, cAmbiente, WS_NFE_RECEPCAOEVENTO )

   ::cXmlDocumento := [<evento versao="] + WS_VERSAO_NFEEVENTO + [" ] + WS_XMLNS_NFE + [>]
   ::cXmlDocumento +=    [<infEvento Id="ID110111] + cChave + StrZero( nSequencia, 2 ) + [">]
   ::cXmlDocumento +=       XmlTag( "cOrgao", Substr( cChave, 1, 2 ) )
   ::cXmlDocumento +=       XmlTag( "tpAmb", ::cAmbiente )
   ::cXmlDocumento +=       XmlTag( "CNPJ", DfeEmitente( cChave ) )
   ::cXmlDocumento +=       XmlTag( "chNFe", cChave )
   ::cXmlDocumento +=       XmlTag( "dhEvento", ::DateTimeXml() )
   ::cXmlDocumento +=       XmlTag( "tpEvento", "110111" )
   ::cXmlDocumento +=       XmlTag( "nSeqEvento", Ltrim( Str( nSequencia, 4 ) ) )
   ::cXmlDocumento +=       XmlTag( "verEvento", WS_VERSAO_NFEEVENTO )
   ::cXmlDocumento +=       [<detEvento versao="] + WS_VERSAO_NFEEVENTO + [">]
   ::cXmlDocumento +=          XmlTag( "descEvento", "Cancelamento" )
   ::cXmlDocumento +=          XmlTag( "nProt", Ltrim( Str( nProt ) ) )
   ::cXmlDocumento +=          XmlTag( "xJust", xJust )
   ::cXmlDocumento +=       [</detEvento>]
   ::cXmlDocumento +=    [</infEvento>]
   ::cXmlDocumento += [</evento>]
   IF ::AssinaXml() == "OK"
      ::cXmlEnvio := [<envEvento versao="] + WS_VERSAO_NFEEVENTO + [" ] + WS_XMLNS_NFE + [>]
      ::cXmlEnvio +=    XmlTag( "idLote", DfeNumero( cChave ) ) // usado numero da nota
      ::cXmlEnvio +=    ::cXmlDocumento
      ::cXmlEnvio += [</envEvento>]
      ::XmlSoapPost()
      ::cXmlProtocolo := ::cXmlRetorno
      ::NFeGeraEventoAutorizado( ::cXmlDocumento, ::cXmlProtocolo )
   ENDIF

   RETURN ::cXmlRetorno

Quintas (SefazClass)

Enviado: 14 Mar 2018 21:49
por JoséQuintas
Não olhou direito o IF.

Código: Selecionar todos

IF ::AssinaXml() == "OK"

Quintas (SefazClass)

Enviado: 14 Mar 2018 21:50
por JoséQuintas
E lembrando que como é classe, o ::XmlDocumento já vai estar disponível na rotina de assinatura, por isso não precisa passar em ::AssinaXml()

Quintas (SefazClass)

Enviado: 14 Mar 2018 21:56
por JoséQuintas
No início da classe:

Código: Selecionar todos

   METHOD AssinaXml()  INLINE ::cXmlRetorno := CapicomAssinaXml( @::cXmlDocumento, ::cCertificado,,::cPassword )
Aquele ::AssinaXml() equivale a chamar a rotina de assinatura passando o documento por referência (pra ser alterado), e certificado (senha só se usar o PFX, mas não compensa)