Gerar NF-e em HB: qual melhor opção para iniciante?

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por JoséQuintas »

Importante também:

O emissor não vai parar em 2017, ele apenas não vai mais ser atualizado.
A nota atual, 3.10, vai ser aceita até dezembro/2017.
A próxima nota, 4.00, só começa em junho/2017.
Mesmo que o governo invente alguma coisa, ele sempre dá um prazo de adaptação.
Então dá pra contar com o emissor por mais uns 3 meses no mínimo, ou até dezembro/2017 no máximo.

Eu diria que fez a parte mais difícil, que exige mais "mão de obra", que tem mais detalhes.

O que o emissor do governo, ou um componente de NFE vão fazer:

pegar seu xml, acrescentar assinatura e enviar pro governo.
Se o governo autorizar, vão acrescentar no seu XML o protocolo de autorização, e vão imprimir o Danfe a partir do seu XML.

Ou seja, está com o principal pronto.
Não tem drama nisso, ao contrário, está mais adiantado do que muitos do fórum que optaram de outra forma.
Já não vai ter nenhum problema do componente estar convertendo errado, que já deve ter visto mensagens desse tipo por aqui.

O que muita gente confunde:
Os problemas que o pessoal enfrenta, não são problemas de XML ou TXT, são problemas de informar o imposto e tudo mais corretamente.
Não é o componente que rejeita, é o governo.
Ao usar TXT ou INI, você "briga" com as mudanças do governo e com compatibilidade com o componente de NFE.
Ao usar XML.... você "briga" só com o governo, apenas informar o que o governo quer.

Preste atenção nos posts sobre problemas com NFE, que vai ver que se trata apenas sobre como preencher os valores, e não sobre complicações de formato.
por exemplo DIFAL, em operações interestaduais: o governo inventou imposto novo, só acrescentar o(s) bloco(s) do imposto novo.
Mas inventou que depende de ser pessoa física, jurídica, não contribuinte, isento.... etc....
Isso tem a ver com preenchimento, não foi a NFE que complicou, foi o conteúdo e o aplicativo fornecer essa informação.
Ué... se vai mexer no aplicativo pra acrescentar essa informação, é só acrescentar no XML.... pronto.

Muitos acham que um componente facilita a vida, mas na prática, todos estão fazendo o trabalho, e não o componente.
O componente apenas vai entregar suas informações na Fazenda e pegar a resposta.
Se as informações estão corretas ok, se estão erradas vai ter que corrigir.
No que o componente ajuda então? talvez só pra dar a sensação de tranquilidade, e a tranquilidade é que se torna a chave pra resolver tudo.

Você mesmo demonstrou isso: "fiz pra poder usar o emissor do governo".
Está correto. Está apenas buscando uma forma de se sentir tranquilo.
Trabalhando tranquilo, tudo vai tranquilo.

Pra ficar tranquilo pode fazer o que mencionei: acrescente a assinatura "fake" (ou falsa, se preferir).
O emissor avisa que é inválida, importa, e remove a assinatura inválida.
Vai fazer todo processo pelo emissor normalmente.

Depois disso, pode começar a escolher o componente NFE, ou até a classe Sefaz.

Se for a classe Sefaz:
Comece pela assinatura, já vai tirar a prova importando no emissor sem a mensagem de "assinatura inválida".
Depois, só transmitir diretamente pela classe Sefaz e ver a resposta.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Araújo
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 02 Abr 2013 22:22
Localização: Recife-PE

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por Araújo »

José Quintas, mais uma vez, obrigado pela atenção e orientações!...
Farei o que você está propondo, vou copiar o trecho da assinatura de um xml válido e colocar em um função que complementa a montagem do xml!... depois posto aqui o resultado!...
JoséQuintas escreveu:Importante também:
Comece pela assinatura, já vai tirar a prova importando no emissor sem a mensagem de "assinatura inválida".
Depois, só transmitir diretamente pela classe Sefaz e ver a resposta.
Não conheço essa classe Sefaz... onde posso ver a sintaxe das funções e como implementá-las no processo!... seria muito bom já poder gerar o xml assinado!...

Grato pela atenção.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por JoséQuintas »

Eu também acabo tendo que olhar na classe, pra lembrar de como é.... rs

se quiser só assinar:

Código: Selecionar todos

oSefaz := SefazClass():New()
oSefaz:AssinaXml( @cXml, cCertificado )
? oSefaz:cXmlRetorno
Completo:

Código: Selecionar todos

oSefaz := SefazClass():New()
oSefaz:NFeLoteEnvia( cXml, cLote, cUF, cCertificado, cAmbiente )
hbNFeDaNFe( oSefaz:cXmlAutorizado )
hb_MemoWrit( "xmlautorizado.xml", oSefaz:cXmlAutorizado )
? oSefaz:cStatus
? oSefaz:cXmlRetorno
? oSefaz:cXmlAutorizado
? oSefaz:cXmlAssinado
cXml - o texto do seu xml, não o nome do arquivo.
cLote - pode ser sempre "1"
cUF - a UF que vai trabalhar, "SP", por exemplo
cCertificado - o nome que está no certificado, como sendo CN
cAmbiente - 1=produção, 2=homologação

oSefaz:cXmlAutorizado - o xml que corresponde à nota autorizada - este é o processo todo finalizado, é a nota em si.
oSefaz:cStatus - o código de status retornado pela fazenda
oSefaz:cXmlRetorno - o xml retornado pela fazenda, ou o texto do erro
oSefaz:cXmlAssinado - o seu xml com assinatura, apenas pra conferência/curiosidade/etc.

vai ver se cStatus é o código de status autorizado, e conforme o que acontecer, vai ver cXmlRetorno pra ver o que deu de errado.
E pode usar as outras variáveis pra ver algum detalhe adicional, essas acima e outras.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Araújo
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 02 Abr 2013 22:22
Localização: Recife-PE

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por Araújo »

JoséQuintas escreveu:Eu também acabo tendo que olhar na classe, pra lembrar de como é.... rs

se quiser só assinar:

Código: Selecionar todos

oSefaz := SefazClass():New()
oSefaz:AssinaXml( @cXml, cCertificado )
? oSefaz:cXmlRetorno
O que deve ter em "cCertificado" exatamente?!..
Tem alguma função que consiga ler o certificado e atribuir o conteúdo a esta variável?!...
JoséQuintas escreveu:Completo:

Código: Selecionar todos

oSefaz := SefazClass():New()
oSefaz:NFeLoteEnvia( cXml, cLote, cUF, cCertificado, cAmbiente )
hbNFeDaNFe( oSefaz:cXmlAutorizado )
hb_MemoWrit( "xmlautorizado.xml", oSefaz:cXmlAutorizado )
? oSefaz:cStatus
? oSefaz:cXmlRetorno
? oSefaz:cXmlAutorizado
? oSefaz:cXmlAssinado
Esta função hbNFeDaNFe( oSefaz:cXmlAutorizado) imprime a danfe?!... tem algum parâmetro para informar em qual impressora e logomarca da empresa?!..


JoséQuintas escreveu: cXml - o texto do seu xml, não o nome do arquivo.
cLote - pode ser sempre "1"
cUF - a UF que vai trabalhar, "SP", por exemplo
cCertificado - o nome que está no certificado, como sendo CN
cAmbiente - 1=produção, 2=homologação

oSefaz:cXmlAutorizado - o xml que corresponde à nota autorizada - este é o processo todo finalizado, é a nota em si.
oSefaz:cStatus - o código de status retornado pela fazenda
oSefaz:cXmlRetorno - o xml retornado pela fazenda, ou o texto do erro
oSefaz:cXmlAssinado - o seu xml com assinatura, apenas pra conferência/curiosidade/etc.

vai ver se cStatus é o código de status autorizado, e conforme o que acontecer, vai ver cXmlRetorno pra ver o que deu de errado.
E pode usar as outras variáveis pra ver algum detalhe adicional, essas acima e outras.
Esse conjunto de funções são nativos no harbour 3.2 (estou usando este!..) ou preciso adicionar alguma lib ao meu arquivo de compilação?!...
Você tem algum material descrevendo o uso dessas funções/!..

Obrigado pela ajuda!..
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por JoséQuintas »

Coloquei errado da Danfe, é pra gerar um PDF, então precisa também do nome do PDF.

O que precisa:

- Pra Danfe, é harupdf, faz parte do Harbour
- Capicom pra assinatura, é da Microsoft, só baixar
- msxml5, pra assinatura/comunicação, é da Microsoft, mas saiu como parte do Office, precisa baixar em separado

Esses dois da Microsoft são DLLs. Não são necessários pra compilar, mas serão necessários na máquina do cliente e na sua.

o CN do certificado, dá pra ver no Internet Explorer, ferramentas, opções de internet, conteúdo, certificados, e em certificados propriedades e detalhes, assim vê o nome exatamente como está.
Tem rotina na classe também pra pegar o nome do certificado, mas no momento o que interessa é emitir nota.

Isso de pegar o nome do certificado vai ser feito uma única vez, se é manual ou automático não é nenhum problema.
Mas tem o exemplo lá na classe.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Araújo
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 02 Abr 2013 22:22
Localização: Recife-PE

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por Araújo »

JoséQuintas escreveu: Pra importar no emissor, em XML, obriga que exista assinatura, mas pode ser qualquer assinatura, não precisa ser válida.
Basta colocar um bloco de outro xml assinado <signature.>...</signature>
Vai acusar assinatura inválida, mas vai importar normalmente, como se fosse o txt.
O próprio emissor vai poder assinar corretamente e fazer todo resto do processo.
Fiz o que você sugeriu, criei uma função para adicionar ao xml a string da assinatura de um xml já autorizado, mas o importador rejeita apesar de apresentar o xml com a indicação de assinado!.. Antes porém submeti o mesmo arquivo ao http://validadornfe.tecnospeed.com.br/ e não apresentou problemas.

Você poderia me ajudar neste ponto?!..

Código: Selecionar todos

/*************************************************************
 * Preenche as tags do grupo ZZ. Informações da Assinatura Digital
 */
Static FUNCTION Fxml_Signature(pXml)
pXml+='<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI="#NFe26160509339936000701550210004831477015570477"><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>AlYzfysIa1TAnyPJB3Yv1qlTI+0=</DigestValue></Reference></SignedInfo><SignatureValue>s/LjeFo6EjcYolMBKA5GLjM7br33Z24hP5nFe4rb4y08lZn/20Tff3VBJjPtBnWbb99H2pDpNuRdKQ/0OLvTi4iPOcrssFCUEt6R3YMgiA/cNkCHsESKMeG7NQwc5y9KdqrbVWlYIRT4v8b0L79+o/Blqvz81JW/h9m+OMoyJnn8H9qFwK63cVX4vw5t/qA8Pt5FqBf/7jW8b1yTM00DuFH4weoPbHCJanFOuLXioEu5Dm2Phv46Wyxji07KdcnYYzNRQ/tb/Y5vxAIe+zyOC248itYLdQchLUtOVM3mJ+WwmjdwJfcsoZpfA3N0ZwU9pkpKblQe2hbO93xDD7zFfg==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIIPTCCBiWgAwIBAgIQT+qUugRzb8WqvZipdL6rMDANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDEtMCsGA1UECxMkQ2VydGlzaWduIENlcnRpZmljYWRvcmEgRGlnaXRhbCBTLkEuMSEwHwYDVQQDExhBQyBDZXJ0aXNpZ24gTXVsdGlwbGEgRzUwHhcNMTUwODEzMDAwMDAwWhcNMTYwODExMjM1OTU5WjCB0zELMAkGA1UEBhMCQlIxEzARBgNVBAoUCklDUC1CcmFzaWwxODA2BgNVBAsUL0F1dGVudGljYWRvIHBvciBDZXJ0aXNpZ24gQ2VydGlmaWNhZG9yYSBEaWdpdGFsMRswGQYDVQQLFBJBc3NpbmF0dXJhIFRpcG8gQTExFTATBgNVBAsUDElEIC0gODg5NTA3NzEdMBsGA1UEAxMUTlMyIENPTSBJTlRFUk5FVCBTIEExIjAgBgkqhkiG9w0BCQEWE2Zpc2NhbEBuZXRzaG9lcy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDd08S0RUeNNy/3pmeQVrsYPf4Tnj9OtX3Zn0jaDlk8ia5dNbnivQ/qJyhvUhHwDWea3/sDJg1DR3HAR/YuaG/GY31rnOPbe/QLi/+JblzNCXus8+3n9emOsHRMOnaq9m3lr+SGRQivhM2xN1mLEiA8SfhdqbnS9zdCzz1Djyb2lWdwJ3bOxJO7qTk9fgN1lIKBbphw3Yj6KCs5lVoZemQEVw3ZEBFDiN7wdXNQIbCk0/QeviEk+lPSeH3ERETThM4B4JE0w+iVP29feDUDuJTC9NKrGPkPJWMYf535DJ3FhrQVC9sT/78Bzkv5VMZQFS1sQif319kNjy+kMpVcsS5pAgMBAAGjggNpMIIDZTCBrwYDVR0RBIGnMIGkoD0GBWBMAQMEoDQEMjIwMDExOTc0MTY4NzY0NDE4NzMwMDAwMDAwMDAwMDAwMDAwMDAyNDEyMjIyMVNTUFNQoBoGBWBMAQMCoBEED01BUkNJTyBLVU1SVUlBTqAZBgVgTAEDA6AQBA4wOTMzOTkzNjAwMDExNqAXBgVgTAEDB6AOBAwwMDAwMDAwMDAwMDCBE2Zpc2NhbEBuZXRzaG9lcy5jb20wCQYDVR0TBAIwADAfBgNVHSMEGDAWgBSdUM+9/yTKr7Ez6xfiQnqOaSqOUzAOBgNVHQ8BAf8EBAMCBeAwgYkGA1UdIASBgTB/MH0GBmBMAQIBCzBzMHEGCCsGAQUFBwIBFmVodHRwOi8vaWNwLWJyYXNpbC5jZXJ0aXNpZ24uY29tLmJyL3JlcG9zaXRvcmlvL2RwYy9BQ19DZXJ0aXNpZ25fTXVsdGlwbGEvRFBDX0FDX0NlcnRpU2lnbk11bHRpcGxhLnBkZjCCASUGA1UdHwSCARwwggEYMFygWqBYhlZodHRwOi8vaWNwLWJyYXNpbC5jZXJ0aXNpZ24uY29tLmJyL3JlcG9zaXRvcmlvL2xjci9BQ0NlcnRpc2lnbk11bHRpcGxhRzUvTGF0ZXN0Q1JMLmNybDBboFmgV4ZVaHR0cDovL2ljcC1icmFzaWwub3V0cmFsY3IuY29tLmJyL3JlcG9zaXRvcmlvL2xjci9BQ0NlcnRpc2lnbk11bHRpcGxhRzUvTGF0ZXN0Q1JMLmNybDBboFmgV4ZVaHR0cDovL3JlcG9zaXRvcmlvLmljcGJyYXNpbC5nb3YuYnIvbGNyL0NlcnRpc2lnbi9BQ0NlcnRpc2lnbk11bHRpcGxhRzUvTGF0ZXN0Q1JMLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwgaAGCCsGAQUFBwEBBIGTMIGQMGQGCCsGAQUFBzAChlhodHRwOi8vaWNwLWJyYXNpbC5jZXJ0aXNpZ24uY29tLmJyL3JlcG9zaXRvcmlvL2NlcnRpZmljYWRvcy9BQ19DZXJ0aXNpZ25fTXVsdGlwbGFfRzUucDdjMCgGCCsGAQUFBzABhhxodHRwOi8vb2NzcC5jZXJ0aXNpZ24uY29tLmJyMA0GCSqGSIb3DQEBCwUAA4ICAQDBWYBEDoZuuKxE9cmp48Gj/s2JO23FDCrFkq3DpvomvAk7UwE3ty+c/e5Wpczc/xrENVwlh5TaYYKx31Mfxn/L/EIZql/mmj/NhLc7ltGEDU0eQZetM/r2N29wB/c2iSpIR+vyzRr17zUqK9ttucG1kcUQ2k4J9pl2/xuK+/4o9CWeonhOb4cJiikjGcteCNm9PnbhIkO8pNKRZiYMlbm9SboCTWWopmQk8YsUUQ4X+PuUCxltb0EN8nqSR6QlmeRxKYX8Qvq4tbKBpGMzRJOovgdH+MfyMGtheYnenHVLoUAJqJg1m+wAXrfHpVaxTNbKlVv6XrMq72U+8lU4Q8jSUm/8kxNKQEsxiiKBjzDCEC4SghCunlE4eWM11MGW4wA5KAkGeMpafXCdMDsYJyV7GtcCrl27xXuAY3/OwSB/h6NhrvsgjTxU5jQ3E3iRqmv+vIwCEskX0TJxabDxMxJZkBnoleKqcEUM3tPMQCvVYcJmHFlDkxO++yDKQaoukBgHKqhFuZOBc13WJNVmM7FBphn/Tkn6NbUlHOFhiS4DHyR12wujeoYMaPtspOjnyWj7zbNnOP8v11HrfbXHdDk44lYMbMuQpYK8BWksYGwjYfsXkpQpL2PGhj/6Ji5QRR24rfttAgX6xdMXE2k+kZOrhNK7qbPVhySvac8Ei0iQTA==</X509Certificate></X509Data></KeyInfo></Signature>'
Return Nil
Anexos
Capture.png
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por JoséQuintas »

Faltou só comparar um XML assinado com um XML não assinado.

Apesar de eu dizer que é acrescentar assinatura, não significa que basta somá-la ao final do XML.
Ela tem um lugar apropriado dentro do XML.

Se não me engano é o último bloco dentro de NFE (não olhei um XML).

Código: Selecionar todos

<NFE... >
   <infNFe...>
   </infNFe>
   <Signature>
   </Signature>
</nFe>
Só olhar um XML assinado, o que vém antes de <Signature> e depois de </Signature>
É só colocar no mesmo lugar.
Se for o </NFE>, de repente:

Código: Selecionar todos

cXml := StrTran( cXml, "</NFE>", Assinatura() + "</NFE>" )
ou

Código: Selecionar todos

cXml := Substr( cXml, 1, At(  "</NFE>", cXml ) - 1 ) + Assinatura() + "</NFE>"
É só confirmar olhando um xml assinado.
Isso vai valer pra qualquer tipo de xml, então acaba sendo interessante dar uma olhada, pra ir se acostumando.
Se achar mais fácil pra visualizar, pode abrir o xml pelo explorer, só pra ficar melhor de visualizar.
lembrando que o explorer mostra cada coisa numa linha, mas dentro do xml é tudo numa linha só.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por JoséQuintas »

Realmente esqueci de um detalhe:

Código: Selecionar todos

FUNCTION FakeSignature( cUri )

   LOCAL cXml

   cUri := iif( cUri == NIL, [#ProjetoChave], cUri )
   cXml := [<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">]
   cXml += [<SignedInfo>]
   cXml += [<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>]
   cXml += [<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>]
   cXml += [<Reference URI="] + cUri + [">]
   cXml += [<Transforms>]
   cXml += [<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>]
   cXml += [<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>]
   cXml += [</Transforms>]
   cXml += [<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>]
cURI é o que vincula a assinatura ao documento.

É praticamente o que está em id=, precedido de #

Código: Selecionar todos

URI="#NFE" + chavedeacesso
Confirme no XML, porque o corretor ortográfico do Windows altera o que é digitado aqui.
Tem mais essa pra atrapalhar..... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Araújo
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 02 Abr 2013 22:22
Localização: Recife-PE

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por Araújo »

Prezado José Quinas, boa tarde!...
Finalmente consegui importar o xml no emissor gratuito, inclui a estrutura abaixo (sugerida por você) na função para compor as tags de assinatura. Importei o xml e foi apresentada mensagem de alerta que a assinatura não é válida mas que poderia importar deixando a nota em digitação. Na sequencia a nota foi importada com sucesso. Consegui ainda validar internamente no emissor, assinar, pré-visualizar a danfe e transmitir com sucesso.
Tudo isso foi feito com a versão de teste do emissor, sem validade jurídica!... Só não consegui ter o retorno de aprovação da NF-e, pois o sefaz retornou a de rejeição: 203-Emissor não habilitado para NF-e. Não sei se esta mensagem se refere ao Emitente ou a versão de teste do aplicativo emissor. Porém, o importante é que o principal está feito: estou conseguindo gerar o xml dentro do processo operacional do sistema e o cliente terá o emissor gratuito para importar, validar, assinar e transmitir...
Agora terei tempo para concluir o tratamento do retorno dentro do sistema: ler o retorno do xml, capturar as informações de autorização e tentar migrar o processo para o ACBr.
Ainda devo postar muitas outras dúvidas aqui, mas desde já lhe agradeço pelas orientações dadas, sem as quais não teria conseguido chegar até aqui!..
Valeu!..


Código: Selecionar todos

Static FUNCTION Fxml_Signature(pXml,pKeyNFe)

pXml += '<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">'
   pXml += '<SignedInfo>'
	   pXml += '<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>'
	   pXml += '<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>'
	   pXml += '<Reference URI="NFe' + pKeyNFe + '">'
		  pXml += '<Transforms>'
			 pXml += '<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>'
			 pXml += '<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>'
		  pXml += '</Transforms>'
	      pXml += '<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>'
	      pXml += '<DigestValue>AlYzfysIa1TAnyPJB3Yv1qlTI+0=</DigestValue>'
	   pXml += '</Reference>'
   pXml += '</SignedInfo>'
   pXml += '<SignatureValue>s/LjeFo6EjcYolMBKA5GLjM7br33Z24hP5nFe4rb4y08lZn/20Tff3VBJjPtBnWbb99H2pDpNuRdKQ/0OLvTi4iPOcrssFCUEt6R3YMgiA/cNkCHsESKMeG7NQwc5y9KdqrbVWlYIRT4v8b0L79+o/Blqvz81JW/h9m+OMoyJnn8H9qFwK63cVX4vw5t/qA8Pt5FqBf/7jW8b1yTM00DuFH4weoPbHCJanFOuLXioEu5Dm2Phv46Wyxji07KdcnYYzNRQ/tb/Y5vxAIe+zyOC248itYLdQchLUtOVM3mJ+WwmjdwJfcsoZpfA3N0ZwU9pkpKblQe2hbO93xDD7zFfg==</SignatureValue>'
   pXml += '<KeyInfo>'
        pXml+= '<X509Data>'
		    pXml += '<X509Certificate>MIIIPTCCBiWgAwIBAgIQT+qUugRzb8WqvZipdL6rMDANBgkqhkiG9w0BAQsFADB0MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDEtMCsGA1UECxMkQ2VydGlzaWduIENlcnRpZmljYWRvcmEgRGlnaXRhbCBTLkEuMSEwHwYDVQQDExhBQyBDZXJ0aXNpZ24gTXVsdGlwbGEgRzUwHhcNMTUwODEzMDAwMDAwWhcNMTYwODExMjM1OTU5WjCB0zELMAkGA1UEBhMCQlIxEzARBgNVBAoUCklDUC1CcmFzaWwxODA2BgNVBAsUL0F1dGVudGljYWRvIHBvciBDZXJ0aXNpZ24gQ2VydGlmaWNhZG9yYSBEaWdpdGFsMRswGQYDVQQLFBJBc3NpbmF0dXJhIFRpcG8gQTExFTATBgNVBAsUDElEIC0gODg5NTA3NzEdMBsGA1UEAxMUTlMyIENPTSBJTlRFUk5FVCBTIEExIjAgBgkqhkiG9w0BCQEWE2Zpc2NhbEBuZXRzaG9lcy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDd08S0RUeNNy/3pmeQVrsYPf4Tnj9OtX3Zn0jaDlk8ia5dNbnivQ/qJyhvUhHwDWea3/sDJg1DR3HAR/YuaG/GY31rnOPbe/QLi/+JblzNCXus8+3n9emOsHRMOnaq9m3lr+SGRQivhM2xN1mLEiA8SfhdqbnS9zdCzz1Djyb2lWdwJ3bOxJO7qTk9fgN1lIKBbphw3Yj6KCs5lVoZemQEVw3ZEBFDiN7wdXNQIbCk0/QeviEk+lPSeH3ERETThM4B4JE0w+iVP29feDUDuJTC9NKrGPkPJWMYf535DJ3FhrQVC9sT/78Bzkv5VMZQFS1sQif319kNjy+kMpVcsS5pAgMBAAGjggNpMIIDZTCBrwYDVR0RBIGnMIGkoD0GBWBMAQMEoDQEMjIwMDExOTc0MTY4NzY0NDE4NzMwMDAwMDAwMDAwMDAwMDAwMDAyNDEyMjIyMVNTUFNQoBoGBWBMAQMCoBEED01BUkNJTyBLVU1SVUlBTqAZBgVgTAEDA6AQBA4wOTMzOTkzNjAwMDExNqAXBgVgTAEDB6AOBAwwMDAwMDAwMDAwMDCBE2Zpc2NhbEBuZXRzaG9lcy5jb20wCQYDVR0TBAIwADAfBgNVHSMEGDAWgBSdUM+9/yTKr7Ez6xfiQnqOaSqOUzAOBgNVHQ8BAf8EBAMCBeAwgYkGA1UdIASBgTB/MH0GBmBMAQIBCzBzMHEGCCsGAQUFBwIBFmVodHRwOi8vaWNwLWJyYXNpbC5jZXJ0aXNpZ24uY29tLmJyL3JlcG9zaXRvcmlvL2RwYy9BQ19DZXJ0aXNpZ25fTXVsdGlwbGEvRFBDX0FDX0NlcnRpU2lnbk11bHRpcGxhLnBkZjCCASUGA1UdHwSCARwwggEYMFygWqBYhlZodHRwOi8vaWNwLWJyYXNpbC5jZXJ0aXNpZ24uY29tLmJyL3JlcG9zaXRvcmlvL2xjci9BQ0NlcnRpc2lnbk11bHRpcGxhRzUvTGF0ZXN0Q1JMLmNybDBboFmgV4ZVaHR0cDovL2ljcC1icmFzaWwub3V0cmFsY3IuY29tLmJyL3JlcG9zaXRvcmlvL2xjci9BQ0NlcnRpc2lnbk11bHRpcGxhRzUvTGF0ZXN0Q1JMLmNybDBboFmgV4ZVaHR0cDovL3JlcG9zaXRvcmlvLmljcGJyYXNpbC5nb3YuYnIvbGNyL0NlcnRpc2lnbi9BQ0NlcnRpc2lnbk11bHRpcGxhRzUvTGF0ZXN0Q1JMLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwgaAGCCsGAQUFBwEBBIGTMIGQMGQGCCsGAQUFBzAChlhodHRwOi8vaWNwLWJyYXNpbC5jZXJ0aXNpZ24uY29tLmJyL3JlcG9zaXRvcmlvL2NlcnRpZmljYWRvcy9BQ19DZXJ0aXNpZ25fTXVsdGlwbGFfRzUucDdjMCgGCCsGAQUFBzABhhxodHRwOi8vb2NzcC5jZXJ0aXNpZ24uY29tLmJyMA0GCSqGSIb3DQEBCwUAA4ICAQDBWYBEDoZuuKxE9cmp48Gj/s2JO23FDCrFkq3DpvomvAk7UwE3ty+c/e5Wpczc/xrENVwlh5TaYYKx31Mfxn/L/EIZql/mmj/NhLc7ltGEDU0eQZetM/r2N29wB/c2iSpIR+vyzRr17zUqK9ttucG1kcUQ2k4J9pl2/xuK+/4o9CWeonhOb4cJiikjGcteCNm9PnbhIkO8pNKRZiYMlbm9SboCTWWopmQk8YsUUQ4X+PuUCxltb0EN8nqSR6QlmeRxKYX8Qvq4tbKBpGMzRJOovgdH+MfyMGtheYnenHVLoUAJqJg1m+wAXrfHpVaxTNbKlVv6XrMq72U+8lU4Q8jSUm/8kxNKQEsxiiKBjzDCEC4SghCunlE4eWM11MGW4wA5KAkGeMpafXCdMDsYJyV7GtcCrl27xXuAY3/OwSB/h6NhrvsgjTxU5jQ3E3iRqmv+vIwCEskX0TJxabDxMxJZkBnoleKqcEUM3tPMQCvVYcJmHFlDkxO++yDKQaoukBgHKqhFuZOBc13WJNVmM7FBphn/Tkn6NbUlHOFhiS4DHyR12wujeoYMaPtspOjnyWj7zbNnOP8v11HrfbXHdDk44lYMbMuQpYK8BWksYGwjYfsXkpQpL2PGhj/6Ji5QRR24rfttAgX6xdMXE2k+kZOrhNK7qbPVhySvac8Ei0iQTA==</X509Certificate>'
        pXml+= '</X509Data>'
   pXml += '</KeyInfo>'		
pXml += '</Signature>'

Return Nil
Mensagem de alerta com opção de importar!...
Mensagem de alerta com opção de importar!...
Anexos
Mensagem de importado com sucesso!...
Mensagem de importado com sucesso!...
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por JoséQuintas »

rejeição: 203-Emissor não habilitado para NF-
Provavelmente é necessário cadastrar a empresa na Fazenda.
Seja homologação ou produção.

No momento você está pronto.
Todo restante que falta sobre NFe geralmente é o componente que faz.
Tem também cancelamento, carta de correção, etc.
Não dá pra testar o resto enquanto não tiver emitido pelo menos uma nota, e puder fazer isso com a Fazenda.
Mas o resto é muito simples, comparado à NFe em si.

Agora é verificar com a Fazenda e providenciar a liberação.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Araújo
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 02 Abr 2013 22:22
Localização: Recife-PE

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por Araújo »

Olá, José Quintas!...
Estou precisando ler o xml de retorno da NFe para capturar os dados do protocolo de autorização e adequar os processos dentro do sistemas. Sei que tem funções no harbour para ler o conteúdo das tags. Você teria algum exemplo ou documentação a respeito?!...
Grato,
Araújo
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por JoséQuintas »

No Emissor, o retorno é a nota autorizada.
Pra nota, tem na classe o XmlToDoc()

Em componente de NFe, depende do componente pra saber que retorno ele usa.

Na classe tem rotinas pra tratar retornos, já que ela faz tudo.
São os retornos oficiais, dos webservices do governo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Araújo
Usuário Nível 1
Usuário Nível 1
Mensagens: 48
Registrado em: 02 Abr 2013 22:22
Localização: Recife-PE

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por Araújo »

JoséQuintas escreveu:No Emissor, o retorno é a nota autorizada.
Pra nota, tem na classe o XmlToDoc()
Não conheço esta função!... Você tem alguma documentação sobre ela?!...
JoséQuintas escreveu: Em componente de NFe, depende do componente pra saber que retorno ele usa.

Na classe tem rotinas pra tratar retornos, já que ela faz tudo.
São os retornos oficiais, dos webservices do governo.
Você tem documentação com exemplos?!..

Grato,

Araújo
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por Fernando queiroz »

Quintas já fiz todo o processo informado acima, estou seguindo vocês nesse post, já tenho o arquivo xml importado corretamente no aplicativo da receita, agora gostaria de partir para a assinatura, mas já tentei via ACBR e não saiu nada, tem como fazer diretamente no meu aplicativo?

Já instalei o meu certificado digital no Windows
USO o harbour 3.2

:% :% :'( :'(
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Gerar NF-e em HB: qual melhor opção para iniciante?

Mensagem por JoséQuintas »

Tá explicado mais acima.

Precisa ter instalado capicom.dll, mscml5.dll.
O ACBR e a classe Sefaz usam esses componentes, se não estiverem instalados na máquina, não funciona.

Diretamente pelo Harbour, sem nenhuma DLL adicional, que eu saiba ainda não dá.
No mínimo é instalar essas duas DLLs.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder