Ir para conteúdo
  • Cadastre-se

dev botao

DANFE.FR3 - Alteração/Correção mais 2 páginas.


Antonio Gomes
  • Este tópico foi criado há 4244 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Fiz uma correção na impressão do danfe.fr3, fastreport, na qual quando tinha mais de 2 paginas a impressão do produto parava no final do papel e deixava um espaço em branco no final do mesmo (espaço reservado para informação complementar)

Dei uma modificada também na impressão das duplicadas, pois na versão anterior ocupava espaco demais se tiver mais de 12 parcelas, com isso os produtos tinham um espaço ainda menor.

Alterei também o modo de impressão da informação complementar, passei a impressão para modo manual após finalizar a impressão do produto, pois a banda anterior era a razão de ficar o espaço em branco.

DANFE_QUEBRA_PRODUTO.rar

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

Amigo,

boa alteração, já apliquei aos meus, também realizei algumas alterações, fiz as diferentes para paisagem/retrato, e tratamento de impressões para Danfe em homologação/ cancelada,...

Alterei a procedure CarregaParametros, dentro do ACBRNFeDANFEFRDM conforme segue abaixo.

procedure TdmACBrNFeFR.CarregaParametros;

var

  vChave_Contingencia: String;

  vResumo: String;

begin

  { parâmetros }

  with cdsParametros do

  begin

    Close;

    FieldDefs.Clear;

    FieldDefs.Add('ResumoCanhoto', ftString, 200);

    FieldDefs.Add('Mensagem0', ftString, 60);

    FieldDefs.Add('Imagem', ftString, 256);

    FieldDefs.Add('Sistema', ftString, 60);

    FieldDefs.Add('Usuario', ftString, 60);

    FieldDefs.Add('Fax', ftString, 60);

    FieldDefs.Add('Site', ftString, 60);

    FieldDefs.Add('Email', ftString, 60);

    FieldDefs.Add('Desconto', ftString, 60);

    FieldDefs.Add('ChaveAcesso_Descricao', ftString, 90);

    FieldDefs.Add('Contingencia_ID', ftString, 36);

    FieldDefs.Add('Contingencia_Descricao', ftString, 60);

    FieldDefs.Add('Contingencia_Valor', ftString, 60);

    FieldDefs.Add('LinhasPorPagina', ftInteger);


    CreateDataSet;

    Append;


    vResumo := '';

    if DANFEClassOwner.ExibirResumoCanhoto then

    begin

       if NotaUtil.EstaVazio(DANFEClassOwner.ExibirResumoCanhoto_Texto) then

          vResumo := 'Emissão: ' + NotaUtil.FormatDate(DateToStr(FNFe.Ide.DEmi)) + '  Dest/Reme: ' + FNFe.Dest.XNome + '  Valor Total: ' + NotaUtil.FormatFloat(FNFe.Total.ICMSTot.VNF)

       else

          vResumo := DANFEClassOwner.ExibirResumoCanhoto_Texto;

    end;

    FieldByName('ResumoCanhoto').AsString := vResumo;


    if (FNFe.Ide.TpAmb = taHomologacao) then

    begin

      if (FNFe.Ide.serie = 999) and (FNFe.Ide.tpEmis in [teContingencia,teFSDA,teSCAN, teDPEC]) then

        FieldByName('Mensagem0').AsString := 'NFe em Contingência - HOMOLOGAÇÃO'

      else

      if (FNFe.procNFe.cStat = 101) then

        FieldByName('Mensagem0').AsString := 'NFe Cancelada - HOMOLOGAÇÃO'

      else

        FieldByName('Mensagem0').AsString := 'NFe sem Valor Fiscal - HOMOLOGAÇÃO';

    end

    else

    begin

        //      Alterado por Rômulo Mayworm, sem a necessidade do teste 'Not'

        if (FNFe.Ide.tpEmis in [teContingencia,teFSDA,teSCAN, teDPEC]) then

        begin

          if ((NotaUtil.EstaVazio(FDANFEClassOwner.ProtocoloNFe)) and

            (NotaUtil.EstaVazio(FNFe.procNFe.nProt))) then

            FieldByName('Mensagem0').AsString := 'NFe em Contingência sem Autorização de Uso da SEFAZ'

          else

          if (FNFe.procNFe.cStat = 101) then

            FieldByName('Mensagem0').AsString := 'NFe em Contingência - Cancelada'

          else

            FieldByName('Mensagem0').AsString := 'NFe em Contingência';

        end

        else

        begin

          if (FNFe.procNFe.cStat = 101) then

            FieldByName('Mensagem0').AsString := 'NFe Cancelada'

          else

          if ((NotaUtil.EstaVazio(FDANFEClassOwner.ProtocoloNFe)) and

              (NotaUtil.EstaVazio(FNFe.procNFe.nProt))) then

            FieldByName('Mensagem0').AsString := 'NFe sem Autorização de Uso da SEFAZ'

          else

          begin

  //        Alterado por Rômulo Mayworm - dessa forma as notas não canceladas estavam indo com a tarja "NFe Cancelada"

  //          if FDANFEClassOwner.NFeCancelada then

  //            FieldByName('Mensagem0').AsString := 'NFe Cancelada'

  //          else

              FieldByName('Mensagem0').AsString := '';

          end;

        end;

    end;


    // Carregamento da imagem

    if DANFEClassOwner.Logo <> '' then

      FieldByName('Imagem').AsString := DANFEClassOwner.Logo;


    if FDANFEClassOwner.Sistema <> '' then

      FieldByName('Sistema').AsString := FDANFEClassOwner.Sistema

    else

      FieldByName('Sistema').AsString := 'Projeto ACBr - http://acbr.sf.net';


    if FDANFEClassOwner.Usuario <> '' then

      FieldByName('Usuario').AsString := ' - ' + FDANFEClassOwner.Usuario

    else

      FieldByName('Usuario').AsString := '';


    if FDANFEClassOwner.Fax <> '' then

      FieldByName('Fax').AsString := ' - FAX ' + FDANFEClassOwner.Fax

    else

      FieldByName('Fax').AsString := '';


    FieldByName('Site').AsString := FDANFEClassOwner.Site;

    FieldByName('Email').AsString := FDANFEClassOwner.Email;


    if FDANFEClassOwner.ImprimirDescPorc then

      FieldByName('Desconto').AsString := 'DESC %'

    else

      FieldByName('Desconto').AsString := 'V.DESC.';


    if ((FNFe.Ide.tpEmis=teNormal) or (FNFe.Ide.tpEmis = teSCAN)) then

    begin

      FieldByName('ChaveAcesso_Descricao').AsString := 'CHAVE DE ACESSO';

      FieldByName('Contingencia_ID').AsString := '';


      if ((FDANFEClassOwner.NFeCancelada) or (FNFe.procNFe.cStat=101)) then

        FieldByName('Contingencia_Descricao').AsString := 'PROTOCOLO DE HOMOLOGAÇÃO DO CANCELAMENTO'

      else

        FieldByName('Contingencia_Descricao').AsString := 'PROTOCOLO DE AUTORIZAÇÃO DE USO';


      if NotaUtil.EstaVazio(FDANFEClassOwner.ProtocoloNFe) then

      begin

        if not (FNFe.Ide.tpEmis in [teContingencia, teFSDA]) and NotaUtil.EstaVazio(FNFe.procNFe.nProt) then

          FieldByName('Contingencia_Valor').AsString := 'NFe sem Autorização de Uso da SEFAZ'

        else

          FieldByName('Contingencia_Valor').AsString := FNFe.procNFe.nProt + ' ' + NotaUtil.SeSenao(FNFe.procNFe.dhRecbto <> 0, DateTimeToStr(FNFe.procNFe.dhRecbto), '');

      end

      else

        FieldByName('Contingencia_Valor').AsString := FDANFEClassOwner.ProtocoloNFe;

    end

    else

    begin

      vChave_Contingencia := NotaUtil.GerarChaveContingencia(FNFe);

      FieldByName('ChaveAcesso_Descricao').AsString := 'CHAVE DE ACESSO';

      FieldByName('Contingencia_ID').AsString := vChave_Contingencia;


      if ((FNFe.Ide.tpEmis = teContingencia) or (FNFe.Ide.tpEmis = teFSDA)) then

      begin

        FieldByName('Contingencia_Descricao').AsString := 'DADOS DA NF-E';

        FieldByName('Contingencia_Valor').AsString := NotaUtil.FormatarChaveContigencia(vChave_Contingencia);

      end

      else

      if (FNFe.Ide.tpEmis = teDPEC) then

      begin

        FieldByName('Contingencia_Descricao').AsString := 'NÚMERO DE REGISTRO DPEC';


        //precisa testar

        if notautil.EstaVazio(FDANFEClassOwner.ProtocoloNFe) then

          raise EACBrNFeException.Create('Protocolo de Registro no DPEC não informado.')

        else

          FieldByName('Contingencia_Valor').AsString := FDANFEClassOwner.ProtocoloNFe;

      end;

    end;


    FieldByName('LinhasPorPagina').AsInteger := FDANFEClassOwner.ProdutosPorPagina;

    Post;

  end;

end;

Att.

Rômulo Mayworm

DANFEs_ALTERADO.rar

"Não me envergonho de mudar de opinião, porque não me envergonho de pensar" (Blaise Pascal)

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Bom Dia

Visto que o Rave deixará de acompanhar as novas versões do Delphi, é importante aperfeiçoarmos o Danfe em Fast Report (nomeado o gerenciador de relatório oficial do Delphi XE3).

Pergunto:

1) quais das atualizações solicitadas já foram enviadas para o SVN?

2) os arquivos postados pelo colega FocusRJ já contemplam as atualizações realizadas pelo colega acgubamg?

Eu tentarei acompanhar e commitar as modificações nos arquivos Danfe do FR.

Obrigado.

João Henrique

João Henrique de Souza

 

Manual de como configurar o TortoiseSVN para não ficar mostrando a senha repetidas vezes (somente para commiters):

https://sourceforge.net/p/forge/community-docs/TortoiseSVN/

 

 

Link para o comentário
Compartilhar em outros sites

Bom dia,

2) os arquivos postados pelo colega FocusRJ já contemplam as atualizações realizadas pelo colega acgubamg?

R.: Sim as alterações sugeridas pelo colega já estão inclusas nas que indiquei.

As utilizo em para emissão de pelo menos cerca de 50 Danfes/dia.

Att.

Rômulo Mayworm

"Não me envergonho de mudar de opinião, porque não me envergonho de pensar" (Blaise Pascal)

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Boa Tarde

Pelos meus testes o Danfe que mais se aproxima do que a receita estipula foi oq o Romulo disponibilizou.

Nem oq já esta disponivel no SVN tem um comportamento correto quando tem mais de uma página de impressão. Talvez por isso ainda não tinham reclamado do erro aqui no fórum.

Romulo, alguns pontos que percebi:

1) Ao gerar um PDF, o DANFe fica "verde". Não entendi esse comportamento, só com o seu arquivo aconteceu isso.

2) Quando as Informações complementares não cabem no quadro estipulado, elas são simplesmente ignoradas e não são impressas em uma nova página.

3) Os produtos precisam estar separados por uma linha tracejada ou continua. Exigência contida no manual de integração.

4) O quadro com o ISSQN não precisa ser impresso se não existirem informações para serem impressas ali. Com isso podemos aumentar ou o quadro de produtos ou das informações complementares.

5) As informações complementares devem ser impressas na primeira folha, mesmo que a qtde de produtos estoure a página. Nesse caso temos os seguintes cenários para impressão:

-5.1) Produtos cabem na primeira página mas Inf. Complementares não: Próximas páginas deverão conter somente o restante das informações complementares, pode-se omitir o quadro de produtos

-5.2) Produtos não cabem na primeira página mas Inf. Complementares cabem: Próximas páginas deverão conter somente o restante dos produtos podendo omitir o quadro informações complementares.

-5.3) Produtos e Inf. Complementares não cabem na primeira página: Próximas páginas deverão conter o restante das informações de Produtos e Inf. Complementares.

O quinto caso ao meu ver é o mais chato, mas com o tempo conseguiremos adequar.

[]´s

João Henrique de Souza

 

Manual de como configurar o TortoiseSVN para não ficar mostrando a senha repetidas vezes (somente para commiters):

https://sourceforge.net/p/forge/community-docs/TortoiseSVN/

 

 

Link para o comentário
Compartilhar em outros sites

Boa Tarde

Pelos meus testes o Danfe que mais se aproxima do que a receita estipula foi oq o Romulo disponibilizou.

Nem oq já esta disponivel no SVN tem um comportamento correto quando tem mais de uma página de impressão. Talvez por isso ainda não tinham reclamado do erro aqui no fórum.

Romulo, alguns pontos que percebi:

1) Ao gerar um PDF, o DANFe fica "verde". Não entendi esse comportamento, só com o seu arquivo aconteceu isso.

2) Quando as Informações complementares não cabem no quadro estipulado, elas são simplesmente ignoradas e não são impressas em uma nova página.

3) Os produtos precisam estar separados por uma linha tracejada ou continua. Exigência contida no manual de integração.

4) O quadro com o ISSQN não precisa ser impresso se não existirem informações para serem impressas ali. Com isso podemos aumentar ou o quadro de produtos ou das informações complementares.

5) As informações complementares devem ser impressas na primeira folha, mesmo que a qtde de produtos estoure a página. Nesse caso temos os seguintes cenários para impressão:

-5.1) Produtos cabem na primeira página mas Inf. Complementares não: Próximas páginas deverão conter somente o restante das informações complementares, pode-se omitir o quadro de produtos

Contornável

-5.2) Produtos não cabem na primeira página mas Inf. Complementares cabem: Próximas páginas deverão conter somente o restante dos produtos podendo omitir o quadro informações complementares.

Basta calcular a altura da banda de informacao complementar e considera-la como parte da pagina para impressao do produto.

-5.3) Produtos e Inf. Complementares não cabem na primeira página: Próximas páginas deverão conter o restante das informações de Produtos e Inf. Complementares.

Esse caso é mais chato de controlar, tem que dividir assim como era feito na impressao matricial, antigamente eu controlava isso com o texto numa stringlist na largura da impressao, depois usava o quadro de produto para impressao. No FastReport a impressao desse tipo de dado deve ser manual com stringlist também. Só fico pensando no calculo dos pixels da largura do fonte. Usava o canvas antigamente para calcular isso TextWidth.

O quinto caso ao meu ver é o mais chato, mas com o tempo conseguiremos adequar.

[]´s

Link para o comentário
Compartilhar em outros sites

  • Moderadores

acgubamg...

Sobre o 5.3, eu precisei de algo parecido num relatorio que precisei fazer uma vez. Para solucionar eu convertia as linhas para uma tabela, assim cada linha se tornava um registro e ele era impresso num masterdata...

Sei lá... pode ser um caminho... não entendo muito de FR, confesso, estou aprendendo agora migrando meus relatórios do RAVE. Só posso afirmar que é uma excelente ferramenta. Me arrependo de não ter usado antes.

[]´s

João Henrique de Souza

 

Manual de como configurar o TortoiseSVN para não ficar mostrando a senha repetidas vezes (somente para commiters):

https://sourceforge.net/p/forge/community-docs/TortoiseSVN/

 

 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 4244 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...