Ir para conteúdo
  • Cadastre-se

dev botao

ACBrNFeDANFEFR - Lento / Otimização


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

Recommended Posts

Ola!

Anexo XML com 88 itens.

 

Aqui na empresa demora 30 segundos para carregar o xml e iniciar a impressão (usando o fr3 padrão do ACBr), no cliente demora 1:50 (um minuto e meio) para imprimir com 99 itens.

Depois de muitos debugs, inclusive no fast report (usamos a versão 5) um colega aqui na empresa chegou na seguinte solução:

Arquivo: ACBrNFeDANFEFRDM

procedure TACBrNFeFRClass.frxReportBeforePrint(Sender: TfrxReportComponent);

Alterar de:

 

if Assigned(CpQrCode) then
 PintarQRCode( qrcode, TfrxPictureView(CpQrCode).Picture );

para:

if (Sender.Name = 'ImgQrCode') then
  PintarQRCode( qrcode, TfrxPictureView(Sender).Picture );

 

Com esta alteração o QRCode só é "impresso" quando o componente for realmente o esperado, e não a cada item. Acredito que este método possa ser utilizado para as demais situações, evitando ao máximo os frxReport.FindObject

Em testes internos aqui é "clicar e imprimir", sem ter de ficar esperando.

Oque acham ? Quais impactos pode haver? Alguma outra sugestão?

 

 

 

 

 

 

 

 

41160712951895000129650010000067051018615557-nfce.xml

-=Ma®©oS=-

Link para o comentário
Compartilhar em outros sites

Só alterei esta linha que citei mesmo. O desempenho da impressão ficou incomparável.

Acredito que seja possível  otimizar ainda mais, evitando os "FindObject".

Não alterei mais pq quero uma opinião dos mais experientes no componente.

EDIT:

Report padrão do ACBr que utilizamos: DANFeNFCe.fr3

 

ACBrNFeDANFEFRDM.pas

Editado por -=Ma®©oS=-

-=Ma®©oS=-

Link para o comentário
Compartilhar em outros sites

  • Moderadores
Em 06/07/2016 at 17:11, -=Ma®©oS=- disse:

Só alterei esta linha que citei mesmo. O desempenho da impressão ficou incomparável.

Acredito que seja possível  otimizar ainda mais, evitando os "FindObject".

Não alterei mais pq quero uma opinião dos mais experientes no componente.

EDIT:

Report padrão do ACBr que utilizamos: DANFeNFCe.fr3

Por favor , faça alguns testes .. com o arquivo anexo.

 

ACBrNFeDANFEFRDM.pas

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

Link para o comentário
Compartilhar em outros sites

Essa flag cheira a POG... sem falar que ela pode impedir que o OnBeforePrint() do relatório seja executado diante de um Refresh() (Two Pass por exemplo).

O OnBeforePrint() é chamado em um laço interno no momento de "pintar" cada componente visível do relatório, portanto, usando o "if correto", ele será executado apenas uma vez.

A solução muito mais eficiente, portanto, é verificar se o componente do relatório pintado da vez é o que queremos processar:

Diff:

https://gist.github.com/dipold/1bf92b32c326b415449096c08f8d4c11/revisions?diff=split

Arquivo cru modificado:

https://gist.githubusercontent.com/dipold/1bf92b32c326b415449096c08f8d4c11/raw/36cf01696da7a04f9c399a149aef4332bab4993e/ACBrNFeDANFEFRDM.pas

A propósito, o modelo simplificado não deve estar exibindo a logomarca, pois ele só é visível quando o:

[...].Visible := cdsParametros.FieldByName('Imagem').AsString = '';

Em vez de:

[...].Visible := cdsParametros.FieldByName('Imagem').AsString <> '';

Como ocorre no modelo 65.

Link para o comentário
Compartilhar em outros sites

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