Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Moderadores
Postado (editado)

Segue refatoração da Revisão 

- Incluída a variavél sQuebraLinha : String;

    sQuebraLinha := QuebraLinha;

- Incluída a Função Quebralinha.

Para Fast :

Function .TACBrNFeFRClass.QuebraLinha : String;
begin
  if fQuebraLinhaEmDetalhamentoEspecifico then
    Result := ';'
  else
    Result := ' - ';
end;

Para Fortes :

Function TfrlDANFeRL.QuebraLinha : String;
begin
  if fQuebraLinhaEmDetalhamentoEspecifico then
    Result := #13#10
  else
    Result := ' - ';
end;

== == unit ===

DAnfes.rar

========

Editado por hleorj
  • Curtir 2
Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

  • Membros Pro
Postado

Estive ausente nos últimos dois dias e só agora pude baixar e testar as mudanças feitas e unificação das propriedades QuebraLinhaEm... para uma genérica, ficou melhor sim, mas fiz outras modificações:

1) No Fortes, modelo Paisagem, não havia sido aplicada a refatoração para o detalhamento dos medicamentos.

2) No caso específico de Medicamentos, quando estiver configurado para não efetuar a quebra de linha, abreviei as strings fixas, pois como o objetivo é fazer com que o detalhamento ocupe o menor número de linhas possível, as strings originais acabavam ocupando vários caracteres quebrando automaticamente em várias linhas as informações. Com isso, um danfe em formato paisagem (por ex) com apenas dois ou três produtos acaba gerando duas páginas, mesmo com a quebra linha configurada para "false".

Pessoalmente, abreviado achei que ficou mais eficiente, pois em alguns clientes que usam medicamentos, passou a gerar mais uma página desnecessariamente quando as strings estão completas.

Se for possível subir no SVN assim eu ficaria grato!

Espero ter contribuído com o projeto!

Segue anexo arquivos alterados.

[]s

Luis

ACBrNFeDANFeRLRetrato.pas

ACBrNFeDANFeRLPaisagem.pas

  • Curtir 2
  • Moderadores
Postado

Estive ausente nos últimos dois dias e só agora pude baixar e testar as mudanças feitas e unificação das propriedades QuebraLinhaEm... para uma genérica, ficou melhor sim, mas fiz outras modificações:

1) No Fortes, modelo Paisagem, não havia sido aplicada a refatoração para o detalhamento dos medicamentos.

2) No caso específico de Medicamentos, quando estiver configurado para não efetuar a quebra de linha, abreviei as strings fixas, pois como o objetivo é fazer com que o detalhamento ocupe o menor número de linhas possível, as strings originais acabavam ocupando vários caracteres quebrando automaticamente em várias linhas as informações. Com isso, um danfe em formato paisagem (por ex) com apenas dois ou três produtos acaba gerando duas páginas, mesmo com a quebra linha configurada para "false".

Pessoalmente, abreviado achei que ficou mais eficiente, pois em alguns clientes que usam medicamentos, passou a gerar mais uma página desnecessariamente quando as strings estão completas.

Se for possível subir no SVN assim eu ficaria grato!

Espero ter contribuído com o projeto!

Segue anexo arquivos alterados.

[]s

Luis

ACBrNFeDANFeRLRetrato.pas

ACBrNFeDANFeRLPaisagem.pas

Pode abrir o projeto em Fast e aplicar as mesmas configurações .. 

Mesmo não usando Danfe Fast  ser  pode alterar o código fonte :) ( ACBrNFeDANFEFRDM.pas )

E de interesse que Danfe Fast e Forte.. tenham o mesmo tratamento.

Com relação ao seu codigo :

        if fQuebraLinhaEmDetalhamentoEspecifico then
        begin
          if dm_nLote in FDetMedicamentos then Result := Result + ACBrStr('NÚMERO DO LOTE: ') + med.Items[i].nLote + sQuebraLinha;
          if dm_qLote in FDetMedicamentos then Result := Result + ACBrStr('QUANTIDADE DO LOTE: ' )+ FormatFloat('###,##0.000', med.Items[i].qLote) + sQuebraLinha;
          if dm_dFab  in FDetMedicamentos then Result := Result + ACBrStr('DATA DE FABRICAÇÃO: ') + DateToStr(med.Items[i].dFab) + sQuebraLinha;
          if dm_dVal  in FDetMedicamentos then Result := Result + ACBrStr('DATA DE VALIDADE: ')   + DateToStr(med.Items[i].dVal) + sQuebraLinha;
          if dm_vPMC  in FDetMedicamentos then Result := Result + ACBrStr('PREÇO MÁX. CONSUMIDOR: R$ ') + FormatFloat('###,##0.00', med.Items[i].vPMC) + #13#10;
        end
        else
        begin
          if dm_nLote in FDetMedicamentos then Result := Result + ACBrStr('LOTE:') + med.Items[i].nLote + ' ';
          if dm_qLote in FDetMedicamentos then Result := Result + ACBrStr('QTD:' )+ FormatFloat('###,##0.000', med.Items[i].qLote) + ' ';
          if dm_dFab  in FDetMedicamentos then Result := Result + ACBrStr('FAB:') + DateToStr(med.Items[i].dFab) + ' ';
          if dm_dVal  in FDetMedicamentos then Result := Result + ACBrStr('VAL:')   + DateToStr(med.Items[i].dVal) + ' ';
          if dm_vPMC  in FDetMedicamentos then Result := Result + ACBrStr('PREÇO MÁX. CONSUMIDOR: R$ ') + FormatFloat('###,##0.00', med.Items[i].vPMC) + #13#10;
        end;

Poderia fornecer arquivo xml com dados de medicamentos  para se fazer um estudo  , pois o código acima não esta seguindo o padrão de quebralinhaDetalhamentosEspecifico de outras rotinas. 

Obrigado por qualquer coisa. 

 

  • Curtir 1
Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

  • Moderadores
Postado

No svn lembrando que se alguém ver que não pode ser assim abreviado será retornado!

Pode reverter para a versão anterior..para manter o padrão de outras rotinas.

Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

  • Membros Pro
Postado

Pode abrir o projeto em Fast e aplicar as mesmas configurações .. 

Mesmo não usando Danfe Fast  ser  pode alterar o código fonte :) ( ACBrNFeDANFEFRDM.pas )

E de interesse que Danfe Fast e Forte.. tenham o mesmo tratamento.

Com relação ao seu codigo :

Poderia fornecer arquivo xml com dados de medicamentos  para se fazer um estudo  , pois o código acima não esta seguindo o padrão de quebralinhaDetalhamentosEspecifico de outras rotinas. 

Obrigado por qualquer coisa. 

 

Bom dia Henrique!

Desculpe novamente na demora em responder, estou com um familiar hospitalizado e minha rotina diária está um pouco alterada.

Vou verificar para alterar para Fast também e depois eu posto aqui.

Com relação ao código abreviado, realmente ficou fora do padrão, mas como comentei, foi a melhor forma que encontrei para minimizar o número de linhas que ocupa no Danfe, e, acredite, cada caracter a mais estava fazendo uma grande diferença.

Segue em anexo um XML que poderá usar para estudo e alguns DANFe em PDF que gerei com todas as possibilidade (abreviado no padrão, sem abreviar e abreviado como eu tinha proposto). Veja que embora só tinha 5 produtos na nota, em alguns casos passou a imprimir 2 paginas de DANFe. No cliente mesmo acontece de ter notas com 20 ou mais itens.

O que eu imaginei e até me proponho a fazer é o seguinte:

- Criar uma nova propriedade, chamada "SeparadorDetalhamentosEspecifico", que por padrão será a string " - ". Assim, continuaria a ter um "IF", mas somente para abreviar.

- E se for generalizar mais ainda, também daria para criar uma outra propriedade "AbreviarDetalhamentosEspecifico", e com isso aplicar o mesmo funcionamento para os outros tipos de detalhamento também.

Vejam o que acham melhor que me proponho a modificar, mas penso que é muito viável mesmo a impressão abreviada, pelo menos nos medicamentos.

[]'s

XML e Testes com DANFe.zip

  • Curtir 1
  • Moderadores
Postado (editado)

Adorei o abreviar detalhamento. Ter um padrão será sempre o objetivo. Tenho certeza que sua ideia com o desenvolvimento será padrão. 

PS : trabalhe para ter um padrão que não seje refatorado. :-D

Editado por hleorj
Equipe ACBr Henrique Leonardo
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Tecnólogo em processamento de dados

E-mail [email protected] - Skype : hleorj

  • Este tópico foi criado há 3319 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.