Ir para conteúdo
Fórum Script Brasil
  • 0

Rel. Lento Na Hora De Imprimir


Eder

Pergunta

Ola..pessoal..

tenho um relatorio...que sai apenas uma unica pagina..porem ele trabalha com mtas variaveis....umas 90 mais ou menos....quando gere ele beleza...demora um pouco...até ai tudo bem pois como são mtas variaveis até limpa-las deve demorar....ai logo após ele aparece no preview do quick..mas na hora que clicko na impressora pra mandar imprimir na folha...ele demora uns 42 segundos pra imprimir...o AGUARDE IMPRESSÃO fica parado e apos 42 segundos ele imprimi.

Parece que ele fica retido....sei lá.....alguém poderia me ajudar.

será que depois do quickrep.preview eu tenho que dar algum comando que libera da memória...ou algo parecido??

muito grato

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Opa

Eu não vou ser a pessoa certa pra te ajudar não uso quickreport mass...

Pra ajudar os que vão te ajudar assim, essas variáveis que você diz

são variáveis de código ou seria variaveis no relatório do quickreport?

Se forem variaveis de código, devem estar em OnBeforePrint, OnBeforePreview

estes tipos de eventos? (detalhe que nem sei o nome dos eventos é apenas

um exemplo já que o Delphi2006 vem sem o Quickreport rs)

Se sim realmente elas vão interferir no processo de impressão, mas nossa

umas 90 variaveis não teria como otmizar isto não?

O teste que você pode fazer é do tipo, pra teste diminuir os dados que vão

ser impressos ou as variaveis, mas com certeza é isso o problema da lentidão

na hora de imprimir...

Fale sobre os Eventos que voce usa e se possível talvez essas 90 variaveis de

codigo possam ser otimizadas, ai se quiser poste essa parte do código aqui..

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Eu não vou ser a pessoa certa pra te ajudar não uso quickreport mass...

Pra ajudar os que vão te ajudar assim, essas variáveis que você diz

são variáveis de código ou seria variaveis no relatório do quickreport?

R. São variaveis do relatorio....elas são totalizadoras..uma totaliza algo, outra faz médias em fim...um monte de calculos.....não achei maneira de otimiza-las...

Somente no BeforePrint do quickrep eu uso este pedaço de codigo:

procedure TForm2.QuickRep1BeforePrint(Sender: TCustomQuickRep;

var PrintReport: Boolean);

begin

ZERO:=0;

// ZERA As variaveis de recebe o valor

TOTALqtdctrc := 0;

TOTALpeso := 0;

TOTALfpeso := 0;

TOTALvm := 0;

TOTALfvalor := 0;

TOTALdespacho := 0;

TOTALicms := 0;

TOTALfrete := 0;

é claro que é só um pedaço...hehehe....é grande o codigo para limpar as variaveis.

o resto eu apenas manipulo os qrlabels no onprint...mais nada.

muito Grato

Link para o comentário
Compartilhar em outros sites

  • 0
Ola..pessoal..

tenho um relatorio...que sai apenas uma unica pagina..porem ele trabalha com mtas variaveis...

A pergunta é:quando você diz que sai apenas uma única página, você está querendo dizer algo tipo, clicar no botão relatório e impremir apenas os dados destas variáveis? Não haveria uma sequência de páginas com as mesmas informações recalculadas, assim como quem lista os dados de uns 10 clientes, por ex.?

Bom, se for, então não utilize o BeforePrint para calcular os valores e atribuí-los aos QRLabels. Faça tudo isso antes da chamada a QuickRe.Preview;

Uma coisa a ser considerada, ao criar qualquer relatório com o QuickReport é que, ao utilizar o Preview (99,99% dos casos utilizamos), quando é acionado o comando de impressão, todo o relatório é novamente gerado - ou seja, reprocessado, deste modo tudo é executado duas vezes da visualização até a impressão final.

Na situação que citei inicialmente, você estará preparando ele, antes mesmo da visualização. Deste modo, quando da visualização e/ou impresso, nenhum processamento extra é realizado.

procedure TForm2.QuickRep1BeforePrint(Sender: TCustomQuickRep;

var PrintReport: Boolean);

begin

ZERO:=0;

// ZERA As variaveis de recebe o valor

TOTALqtdctrc := 0;

TOTALpeso := 0;

TOTALfpeso := 0;

TOTALvm := 0;

TOTALfvalor := 0;

TOTALdespacho := 0;

TOTALicms := 0;

TOTALfrete := 0;

é claro que é só um pedaço...hehehe....é grande o codigo para limpar as variaveis.

Aqui você poderia otimizar sim. Eu não teria o trabalho de inicializar 90 variáveis uma-a-uma ( :blink: haja paciência, não dá nem para copiar/colar). Vai uma dica: declare um record contendo todas as suas variáveis, depois simplesmente inicialize elas com um simples:

FillChar(RecVariaveis, SizeOf(RecVariaveis), 0);

Prontinho ;)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
A pergunta é:quando você diz que sai apenas uma única página, você está querendo dizer algo tipo, clicar no botão relatório e impremir apenas os dados destas variáveis? Não haveria uma sequência de páginas com as mesmas informações recalculadas, assim como quem lista os dados de uns 10 clientes, por ex.?

Bom, se for, então não utilize o BeforePrint para calcular os valores e atribuí-los aos QRLabels. Faça tudo isso antes da chamada a QuickRe.Preview;

Resposta:sim é apenas uma pagina...pra imprimir o conteudo das variaveis....não havera nunca mais de uma. você diz que é pra colocar as variaveis pra zerar antes do quickrep.preview..ok entendi...vou testar.

Uma coisa a ser considerada, ao criar qualquer relatório com o QuickReport é que, ao utilizar o Preview (99,99% dos casos utilizamos), quando é acionado o comando de impressão, todo o relatório é novamente gerado - ou seja, reprocessado, deste modo tudo é executado duas vezes da visualização até a impressão final.
Resposta: esta eu não sabia...novidade pra mim..valeu a dica.

:D

Aqui você poderia otimizar sim. Eu não teria o trabalho de inicializar 90 variáveis uma-a-uma ( haja paciência, não dá nem para copiar/colar). Vai uma dica: declare um record contendo todas as suas variáveis, depois simplesmente inicialize elas com um simples:

FillChar(RecVariaveis, SizeOf(RecVariaveis), 0);

Resposta: esta parte não entendi direito.....no caso eu teria que colocar na uses record e depois colocar este comando acima antes do preview, mas como eu mando imprimir de outro formulario, eu colocaria ssim??

formrelatorio.FillChar(RecVariaveis, SizeOf(RecVariaveis), 0);

mais uma perguntinha.....neste caso eu colocaria assim as variaveis neste comando???(exemplo)

FillChar(var1, var2, var3, SizeOf(var1, var2, var3), 0);

Valeu....muito grato. :)

Editado por Eder
Link para o comentário
Compartilhar em outros sites

  • 0

Opa

O Record Eder que o Micheus se refere é uma estrutura de variáveis e você

define como um Type, baseado nas variáveis que você passou seria...

type

TTotal = record

TOTALqtdctrc: Integer;

TOTALpeso: Integer;

TOTALfpeso: Integer;

TOTALvm: Integer;

TOTALfvalor: Integer;

TOTALdespacho: Integer;

TOTALicms: Integer;

TOTALfrete: Integer;

{... coloque todas}

end;

Neste caso você pode definir também como

type

TTotal = packed record

...

que vai diminuir o tamanho total (SizeOf()) deste record no menor possível...

Só não é recomendável quando se usa classes na escrutura tipo TBitmap, etc...

Depois para limpá-las como o Micheus te passou seria

var

recTotal: TTotal; //Aqui você armazena uma variável do tipo TTotal

begin

FillChar(recTotal, SizeOf(TTotal)); //Aqui você limpa todas as variáveis de recTotal que tem naquele record

Pra usar o ideal é...

with recTotal do

begin

TOTALqtdctrc := query1....

TOTALpeso := query1...

que é o modo mais fácil, mas também pode chamar manualmente uma por uma...

recTotal.TOTALqtdctrc := query1....

recTotal.TOTALpeso := query1...

Quando você digitar recTotal. (ponto) automaticamente o Delphi abre o Code Completation

com as variáveis definidas naquele record...

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...