wmixvideo / nfe

Nota Fiscal Eletrônica em Java.
Apache License 2.0
648 stars 377 forks source link

Gerar Danfe a partir do Xml da nota #121

Closed fincatto closed 6 years ago

fincatto commented 8 years ago

Dado um XML, gerar um Danfe padronizado.

klutzer commented 8 years ago

Sim, depois disso acabei vendo essa questão da fonte novamente, porém não reajustei pq não sabia como tinha ficado o padrão para o projeto (qual delas utilizar? quanto a licença fica tranquilo pra usarmos?).. Eu posso reajustar isso aqui e começar a lidar nessas mudanças que falei..

higomatos commented 8 years ago

qual delas utilizar? particularmente não tenho preferência sobre a tipografia quanto a licença fica tranquilo pra usarmos? não faço a menor ideia, mas se o governo determinou e der um problema acho que podemos culpá-los ;-) kkkkk

Tenho uma grande curiosidade: Como vocês que emitem NFes com este projeto emitem os DANFes?

caiocteodoro commented 8 years ago

Utilizo o ireport passando o xml com o protocolo de autorização já incluso na estrutura.

Em 27 de julho de 2016 19:22, higomatos notifications@github.com escreveu:

qual delas utilizar? particularmente não tenho preferência sobre a tipografia quanto a licença fica tranquilo pra usarmos? não faço a menor ideia, mas se o governo determinou e der um problema acho que podemos culpá-los ;-) kkkkk

Tenho uma grande curiosidade: Como vocês que emitem NFes com este projeto emitem os DANFes?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-235739887, or mute the thread https://github.com/notifications/unsubscribe-auth/AD4-msDLuWPt7hpzsHPyXmdAamZtOoaNks5qZ9ohgaJpZM4IHxbz .

klutzer commented 8 years ago

Qual fonte usa? Você não acha mais interessante trabalhar com um objeto NFNotaProcessada do que o XML direto? Digo isso pois acredito que teremos vantagens lidando com objeto pq caso mude alguma nomenclatura/estrutura do XML pela receita, a gente continua dependendo apenas da estrutura das próprias classes do projeto

felipewmartins commented 8 years ago

Bom dia @klutzer https://github.com/klutzer, eu tive alguns problemas de tempo pra avançar mais. Mas se puder gerar o subreport fico grato.

Em 28 de julho de 2016 07:51, Érico Knapp Lutzer notifications@github.com escreveu:

Qual fonte usa? Você não acha mais interessante trabalhar com um objeto NFNotaProcessada do que o XML direto? Digo isso pois acredito que teremos vantagens lidando com objeto pq caso mude alguma nomenclatura/estrutura do XML pela receita, a gente continua dependendo apenas da estrutura das próprias classes do projeto

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-235863006, or mute the thread https://github.com/notifications/unsubscribe-auth/AE95ngdNKKa8caIZAQUWUVPhpUqGOzlSks5qaImrgaJpZM4IHxbz .

Felipe Wender Mendonça Martins

Github: https://github.com/felipewmartins

blog: http://felipewmartins.github.io/

caiocteodoro commented 8 years ago

Utilizo a sans serif, poderia até ser Érico mais acho muito difícil eles mudarem de repente o nome das tags na estrutura do xml, e para o DANFE são determinadas tags que busco para gerar o relatório. Deu bastante trabalho para estruturar, mas faz tempo que já utilizo assim sem ter que dar manutenção alguma.

Em 28 de julho de 2016 07:51, Érico Knapp Lutzer notifications@github.com escreveu:

Qual fonte usa? Você não acha mais interessante trabalhar com um objeto NFNotaProcessada do que o XML direto? Digo isso pois acredito que teremos vantagens lidando com objeto pq caso mude alguma nomenclatura/estrutura do XML pela receita, a gente continua dependendo apenas da estrutura das próprias classes do projeto

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-235863006, or mute the thread https://github.com/notifications/unsubscribe-auth/AD4-ml16A3XYzyPeZ3pQrfUAifo6hQE-ks5qaImpgaJpZM4IHxbz .

klutzer commented 8 years ago

Tem um outro detalhe de se usar o XML: ele sai do padrão adotado no restante do projeto, que fica responsável por fazer o parse de/para objetos e a partir daí é trabalhado de forma orientada, afinal não teria porquê lidarmos com as tags do xml uma vez que temos as mesmas devidamente convertidas pra objetos.. Essa mesma lógica seria utilizada também para a DANF-e..

O que você acha @fincatto?

De qualquer forma, caso a gente adote a estrutura por XML, você poderia adequar o seu layout ao projeto? Estamos trabalhando com essas alterações na branch "danfe"

caiocteodoro commented 8 years ago

Se optarem pela estrutura do XML, posso adequar sim o layout para contribuir com projeto.

Em 28 de julho de 2016 08:22, Érico Knapp Lutzer notifications@github.com escreveu:

Tem um outro detalhe de se usar o XML: ele sai do padrão adotado no restante do projeto, que fica responsável por fazer o parse de/para objetos e a partir daí é trabalhado de forma orientada, afinal não teria porquê lidarmos com as tags do xml uma vez que temos as mesmas devidamente convertidas pra objetos.. Essa mesma lógica seria utilizada também para a DANF-e..

O que você acha @fincatto https://github.com/fincatto?

De qualquer forma, caso a gente adote a estrutura por XML, você poderia adequar o seu layout ao projeto? Estamos trabalhando com essas alterações na branch "danfe"

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-235868240, or mute the thread https://github.com/notifications/unsubscribe-auth/AD4-mvUS4BaX9J_qBzdExsjZundgvpjKks5qaJEGgaJpZM4IHxbz .

klutzer commented 8 years ago

Acho interessante termos o seu layout também, já temos um hoje que utiliza XML mas precisam alguns ajustes para ficar ok.. O seu, que já está sendo utilizado em produção, seria de grande ajuda, com certeza (independente de qual abordagem adotarmos)

higomatos commented 8 years ago

Concordo com o @klutzer se o @caiocteodoro disponibilizar o JRXML poderíamos agilizar muito a conclusão desta issue.

XML ou objeto: Neste ponto eu prefiro a abordagem do XML pois assim as pessoas poderiam utilizar o projeto para imprimir DANFe independente de ter emitido a NF-e pelo projeto ou mesmo ter se aprofundado em como funciona a questão dos objetos. Ficaria algo muito desacoplado e genérico o que pra mim parece interessante.

fincatto commented 8 years ago

Eu concordo com o @higomatos, se a geracao do relatorio puder ser feita usando somente o xml, poderá ser usada em outros projetos sem a necessidade de agregar o nosso projeto de comunicação (desde que separemos em dois projetos, comunicacao e geracao de danfes, como ja foi proposto anteriormente por alguns colegas).

klutzer commented 8 years ago

Beleza, acho que acaba sendo melhor mesmo, por essa questão de desacoplamento..

Então @caiocteodoro você faz essa adequação do seu layout ao projeto?

caiocteodoro commented 8 years ago

Posso fazer sim!

Em 28 de julho de 2016 10:38, Érico Knapp Lutzer notifications@github.com escreveu:

Beleza, acho que acaba sendo melhor mesmo, por essa questão de desacoplamento..

Então @caiocteodoro https://github.com/caiocteodoro você faz essa adequação do seu layout ao projeto?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-235896638, or mute the thread https://github.com/notifications/unsubscribe-auth/AD4-mq-_0TdLMjjRhAeReK9yhWy_1pU4ks5qaLC5gaJpZM4IHxbz .

klutzer commented 8 years ago

Beleza! Atualmente a classe que gera a DANF-e é a NFDanfeReport.. basicamente seria apenas colocar o JRXML e o jasper nos resources/danfe e chamá-lo nesta classe

caiocteodoro commented 8 years ago

Vou ter tempo só no final de semana, mas se preferir posso te passar os arquivos! Com certeza @klutzer , você já está acostumado com a estrutura do projeto e vai levar menos tempo nessa modificação. Poderia fazer?

2016-07-28 16:06 GMT-03:00 Érico Knapp Lutzer notifications@github.com:

Beleza! Atualmente a classe que gera a DANF-e é a NFDanfeReport.. basicamente seria apenas colocar o JRXML e o jasper nos resources/danfe e chamá-lo nesta classe

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-235993929, or mute the thread https://github.com/notifications/unsubscribe-auth/AD4-mtKnxBnLqnmg3q0og0ZAG3rhM7Dnks5qaP2vgaJpZM4IHxbz .

klutzer commented 8 years ago

Pode ser também, manda o JRXML e a classe/método em que você chama ele que posso adaptar ela aqui

caiocteodoro commented 8 years ago

Segue em anexo os JRXML utilizados para gerar o DANFE em modo retrato.

Em 28 de julho de 2016 16:18, Érico Knapp Lutzer notifications@github.com escreveu:

Pode ser também, manda o JRXML e a classe/método em que você chama ele que posso adaptar ela aqui

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-235997021, or mute the thread https://github.com/notifications/unsubscribe-auth/AD4-mpffINYvpw1YviZCl29ZY4dV0Bouks5qaQB6gaJpZM4IHxbz .

klutzer commented 8 years ago

@caiocteodoro os anexos não vieram (nem sei se vão vir por aqui..). Se não quiser upar no seu fork, pode mandar pro meu e-mail erico.klutzer@gmail.com

klutzer commented 8 years ago

Olá pessoal! Fiz os ajustes aqui e já estou usando no meu sistema, imprimindo tanto DANF-e NF-e quanto DANF-e NFCe utilizando NFDanfeReport.. Ficou bem simples de gerar:

//DANF-e NF-e
NFDanfeReport danfe = new NFDanfeReport(notaProcessada);
byte[] report = danfe.gerarDanfeNFe(logoDaEmpresaEmBytes);

//DANF-e NFC-e
NFDanfeReport danfe = new NFDanfeReport(notaProcessada);
byte[] report = danfe.gerarDanfeNFCe(informacoesComplementaresAdicionais, mostrarMsgFinalizacao, pagamentos);

Os pagamentos no caso da DANF-e NFC-e são informados externamente também, pois incluem troco, pagamento em dinheiro e etc, e cada um pode tratar como quiser estas informações, basta para isso informar uma lista de pagamentos (valor e descrição)

PR #200

Valeu!

caiocteodoro commented 8 years ago

Foi fácil adaptar os arquivos @klutzer ?

klutzer commented 8 years ago

Foi sim.. o principal ali foi a adaptação da classe NFDanfeReport, responsável por gerar as DANFEs. Quanto ao template fiz algumas correções pequenas e os ajustes necessários na compilação dele com Java ao invés de Groovy, como estava no template que você mandou.

Percebam que deixei o método de criação do JasperPrint separado e público, o motivo disso é cada um poder tratar a impressão/geração do jeito que quiser. Por exemplo no meu caso o sistema é desktop, então a NFC-e mando direto pra impressora não fiscal e a NF-e visualizo com o próprio JasperViewer..

cristianoAbudu commented 8 years ago

Boa tarde pessoal, tudo bem?

Estou gerando o jasper da DANFE usando a API, basicamente adaptei um layout que encontrei no GUJ já quase pronto, só precisei adequar algumas coisas, depois fiz um método que converte a partir do objeto da API para os DTOs que representam os dados do Jasper.

Seguem arquivos anexos

DANFE.zip

rafaelTartigrado commented 8 years ago

Bom dia pessoal,

Estou fazendo testes no DANFE e ao gerar o pdf verifiquei que a fonte não está Times New Roman, alguém está tendo o mesmo problema?

Utilizo o OS X El Capitan com Java 8.

klutzer commented 8 years ago

É necessário incorporar a fonte junto com o projeto e fazê-la reconhecer com o jasper.. Já estou ajustando aqui, em breve crio o PR.

klutzer commented 8 years ago

PR #203 @rafaelTartigrado faz o teste aí

rafaelTartigrado commented 8 years ago

Obrigado @klutzer,

Ao testar verifiquei que logo abaixo dos dados do emitente apareceu um espaço e alguns dados.

Estou enviando o arquivo em anexo.

danfe.pdf

klutzer commented 8 years ago

Estranho.. aqui gerou certo.. vi também que o subrelatório de duplicatas saiu com SansSerif e um pouco cortada no final, vou fazer uns ajustes aqui e crio um novo PR

klutzer commented 8 years ago

@rafaelTartigrado Manda o XML desta nota que você gerou a DANF-e, se possível

rafaelTartigrado commented 8 years ago

@klutzer utilizei a classe de teste com.fincatto.nfe310.danfe.NFDanfeReportTest

klutzer commented 8 years ago

Corrigido no #204

waldandrade commented 8 years ago

Boa tarde

Existe um passo a passo para que eu possa utilizar este módulo?

klutzer commented 8 years ago

Da uma olhada na classe de testes NFDanfeReportTest

rafaelTartigrado commented 8 years ago

@klutzer fiz um pull request com ajustes no DANF-e NF-e retrato. Preciso fazer uma compilação com iReport 5.6 para manter retrocompatibilidade? Se sim, por que?

klutzer commented 8 years ago

Acho importante, pq além de mim sei que mais gente usa o iReport 5.6 (que é a última versão antes de migrarem pro JasperStudio), e como não tem nada específico pro 6 (que tenha que ser compilado para rodar apenas com as bibliotecas do 6), não teria problema.. Mas eu posso fazer a compilação aqui e fazer outro PR, assim que o seu for mesclado..

parg-programador commented 8 years ago

Boa tarde pessoal,

Eu acabei de encontrar o projeto wmixvideo/nfe no Google e comecei a ler todos os issues abertos e alguns post no disqus e acabei ficando na dúvida quanto a DANFE, estou finalizando um projeto de um ERP aqui na empresa onde eu trabalho e somente está faltando NFe, queria saber se eu consigo gerar o xml e validar e depois gerar o PDF da DANFE com a biblioteca?

E se vocês me recomendam usar a biblioteca para um projeto que vai estar em produção?

Obs: O ERP está em Java Web usando somente JSP.

jefperito commented 8 years ago

E se vocês me recomendam usar a biblioteca para um projeto que vai estar em produção?

Sim, desde que utilize a versão de release, a versão de snapshot é a que está sendo desenvolvida no momento.

fincatto commented 8 years ago

O danfe ainda não gera, está e desenvolvimento. Quanto a ao processo em si, estamos com ele há anos em produção numa grande empresa e atende perfeitamente, pode ir sem medo! Abs On Mon, Aug 22, 2016 at 6:31 PM Jeferson Viana Perito < notifications@github.com> wrote:

E se vocês me recomendam usar a biblioteca para um projeto que vai estar em produção?

Sim, desde que utilize a versão de release, a versão de snapshot é a que está sendo desenvolvida no momento.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/wmixvideo/nfe/issues/121#issuecomment-241557289, or mute the thread https://github.com/notifications/unsubscribe-auth/AADj8Lpp9yE0NlCWX5Q-6b4zIzy8SCj2ks5qihUfgaJpZM4IHxbz .

klutzer commented 8 years ago

@parg-programador Se quiser um snapshot relativamente estável, e que gera DANFe, pode usar a branch danfe. Atualmente já a utilizo para o que preciso, em produção..

parg-programador commented 8 years ago

Valeu! Quero elogiar vocês pela iniciativa e é legal ver projetos como esse que se mantém com a colaboração de todos, não sou um bom programador como vocês, mas vou tentar ajudar como eu poder.

higomatos commented 8 years ago

Pessoal, discutiremos questões sobre DANFE NFC-e nesta issue?

Observei que o modelo de DANFE NFC-e está em desacordo com o Manual de Especificações Técnicas do DANFE NFC-e e QR Code - versão 3.5 (http://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=A3Bd/m6qGPM=) que entra em vigor obrigatoriamente a partir de 01/09/2016.

A principal dúvida que tenho é que a documentação não cita nem o tipo, nem o tamanho da fonte a ser utilizada, então gostaria de saber qual a opinião sobre isto?

Se observarem no anexo embora não seja definido um tamanho de fonte pelos modelos que constam na documentação parece que ela deveria ser não serifada e de tamanho reduzido.

modelo oficial nfc-e

rafaelTartigrado commented 8 years ago

Iniciando adequações do DANFE NFC-e para o manual versão 3.5 #218

higomatos commented 8 years ago

Pessoal, fiz um questionamento sobre a fonte e ninguém respondeu então dei alguns encaminhamentos.

As impressoras de recibo (impressoras não-fiscais comumente utilizadas para imprimir NFC-e) tem fontes embarcadas pelo fabricante de modo que se utilizarmos a impressão direta (mandar texto puro direto para a interface serial) ela irá imprimir com a tipografia padrão. Nestes casos não precisaremos de um relatório no iReport pois até a pouca formatação permitida é passada como parâmetros/comandos para a porta serial. A utilização do iReport faz sentido quando, por exemplo, quisermos enviar o NFC-e por e-mail ou mesmo quando não quisermos utilizar a impressão direta. A fabricante Bematech desenvolveu uma metodologia de impressão chamada "Spooler" que nada mais é que criar uma impressora windows que enviará as impressões que chegarem na impressora virtual para a impressora de recibos, esta metodologia abstrai todas as especificidades do fabricante e, neste caso, faz sentido utilizar um PDF pois a impressão será por bitmap (pelo que entendi).

Minha ideia então é criar um PDF que seja relativamente parecido com uma impressão nativa porém para isto eu precisaria saber a tipografia exata que o fabricante embarcou.

Explicado o contexto entrei em contato com a Bematech para saber qual a fonte embarcada em suas Mini Printers - MP e eles informaram que é uma fonte própria que não está disponível (o técnico até ventilou a possibilidade de no futuro exportar ela em formato True Type para liberar aos desenvolvedores que queiram utiliza-la). Olhando as fontes mais comuns que nós utilizamos identifiquei que a Arial Narrow é parecida com a impressão no formato condensado do fabricante e, por isto, sugiro que na impressão em PDF/bitmap utilizemos esta fonte.

higomatos commented 8 years ago

Hoje entra em vigor as novas regras do Manual de Especificações Técnicas do DANFE NFC-e e QR Code - versão 3.5 http://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=A3Bd/m6qGPM=

Este novo DANFE NFC-e é bem diferente do anterior pois tem como principal princípio economizar papel. Alguns campos foram suprimidos, alguns textos foram eliminados. Além do @klutzer alguém mais utiliza o modelo atual do NFC-e?

O @rafaelTartigrado fará um PR com o novo modelo e precisaremos que os atuais utilizadores façam a devida validação e sugestões. É importante ressaltar que o PR seguiu ESTRITAMENTE o que está no Manual.

higomatos commented 8 years ago

Segue modelo do DANFE NFC-e em conformidade com a versão 3.5 do Manual nfce.pdf

klutzer commented 8 years ago

Eu acho que seria interessante, de qualquer forma, manter os modelos que vão sendo criados, com a opção do desenvolvedor escolher o modelo a ser impresso ao utilizar a NFDanfeReport, pois realmente aqui no RS cada empresa que emite é um padrão diferente, e eu já estou emitindo o modelo que está atualmente no projeto (pego o JasperPrint separado e mando diretamente pra impressora não fiscal instalada no windows, independente da marca/modelo que ela seja)..

Uma foto de como fica essa impressão está no #218

higomatos commented 8 years ago

@klutzer, minha grande preocupação é realmente você e os demais que já utilizam pois realmente a mudança é grande. Acredito que o @fincatto ou o @jefperito (pelo que entendi são os únicos que fazem merge) deveriam analisar este caso e a sua sugestão para chegarmos numa situação ideal.

fincatto commented 8 years ago

Nós não utilizamos o NFC-e, portanto aqui vão minhas idéias. Se for possível gerar um padrão que possa ser usado por todos, ele deve ser adicionado na biblioteca (preferencialmente em PDF, via bite[], que cada um faz o que quer. funciona pra sistemas web, desktop, etc). Se não for possível gerar um padrão, então que se crie um projeto a parte com esses padrões, para não inchar a biblioteca desnecessariamente. Expor classes como JasperPrint ou outra qualquer para dar o encaminhamento necessário, eu já não acho que seja uma boa idéia.

higomatos commented 8 years ago

@fincatto, assim como o DANFE da NF-e o DANFE da NFC-e é padronizado, ou seja, o padrão existe e não vejo dificuldade técnica em termos um único modelo, o que está havendo é uma transição entre modelos válidos.

@klutzer, você poderia analisar visualmente o PDF que enviei e verificar se há algum impedimento para você migrar para o novo modelo?

Com relação a exposição da classe JasperPrint não analisei ainda, mas depois de fechar o modelo visual também sugiro que passemos um XML para a impressão do NFC-e ao invés de objetos (do mesmo modo que o DANFE da NF-e) assim teríamos uma padronização e um desacoplamento maior de modo que alguém com um XML de NFC-e poderia consumir a impressão diretamente.

klutzer commented 8 years ago

Na verdade se vc olhar a classe NFDanfeReport que criei ela já exporta o PDF pra byte, o único detalhe é que coloquei o método que gera o JasperPrint como public, pq eu o utilizo e esse simples fato dele estar como public me permite enviar a impressão direto pra impressora, sendo que se eu fosse abrir o PDF o processo seria bem burocrático para o usuário (no caso específico do meu sistema).. Então não é uma funcionalidade a menos, mas sim a mais, que não afeta quem quer o PDF gerado, e em byte[]

klutzer commented 8 years ago

Quanto ao modelo acredito não ser problema, porém como no meu caso mando direto pra impressora, se não tiver aqueles espaçamentos do lado e embaixo, o spooler do windows corta algumas informações.. Quem quiser fazer o teste é só instalar qualquer impressora não fiscal como uma impressora normal do windows e mandar uma impressão diretamente nela