| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
egamavido Novato

Registrado: Segunda-Feira, 11 de Abril de 2016 Mensagens: 70
|
Enviada: Qua Abr 11, 2018 10:51 am Assunto: (Resolvido) Acumular relatórios no FastReport |
|
|
Olá pessoal
Preciso gerar vários relatórios que se referem a uma pasta filha, isto é, um pedido possui vários produtos e cada produto, o seu certificado. Para isso, eu faço um laço while que separa cada um dos relatórios e gera corretamente, um por vez, com seguinte código:
| Citação: |
procedure Tfrm_BaixaOC.visualiza;
begin
DMDados.CDSOS.Open;
DMDados.CDSReserva.Filter:= 'codreserva =' + QuotedStr(DMDados.CDSReservacodreserva.Text);
DMDados.CDSReserva.Filtered:=true;
DMDados.CDSRAnaMP.Open;
DMDados.CDSResFilha.First;
while not DMDados.CDSResFilha.Eof do
begin
DMDados.CDSOCNeta.First;
while not DMDados.CDSOCNeta.Eof do
begin
if DMDados.CDSOS.Locate('Lote', DMDados.CDSOCNetalote.Text,[]) then
begin
DMFast.FRCertificado.Variables['LT']:=QuotedStr(DMDados.CDSOCNetalote.Text);
end;
if DMDados.CDSRAnaMP.Locate('NF', DMDados.CDSOCNetalot4e.Text,[])then
begin
DMFast.FRCertificado.Variables['LT']:=QuotedStr(DMDados.CDSOCNetaVLoteMP.Text
+' Ref.: ' + DMDados.CDSOCNetalote.Text);
end;
DMFast.FRCertificado.ShowReport();
DMDados.CDSOCNeta.Next;
end;
DMDados.CDSResFilha.Next;
end;
end;
|
Mas é bem incomodo, porque é necessário imprimir um por vez ou gerar um pdf por vez. O que preciso é acumular tudo em um único documento para uma única impressão ou conversão
Não sei se FastReport tem essa propriedade disponível. Acredito que o caminho seja via código, mas não sei nem por onde começar.
Uso Delphi XE2, Access, FastReport 4.0.
Agradeço desde já pela ajuda.
Editado pela última vez por egamavido em Qui Ago 30, 2018 1:11 pm, num total de 3 vezes |
|
| Voltar ao Topo |
|
 |
egamavido Novato

Registrado: Segunda-Feira, 11 de Abril de 2016 Mensagens: 70
|
Enviada: Qua Abr 11, 2018 2:16 pm Assunto: Re: Acumular relatórios no FastReport? |
|
|
Olá novamente.
Resolvi o problema com a dica existente em nosso forum:
http://www.activedelphi.com.br/forum/viewtopic.php?t=79387&sid=aa1249b9ac0c74d9c94f69d2020e819f
O resultado final ficou assim:
| Citação: |
procedure Tfrm_BaixaOC.visualiza;
begin
DMDados.CDSOS.Open;
DMDados.CDSReserva.Filter:= 'codreserva =' + QuotedStr(DMDados.CDSReservacodreserva.Text);
DMDados.CDSReserva.Filtered:=true;
DMDados.CDSRAnaMP.Open;
DMDados.CDSResFilha.First;
while not DMDados.CDSResFilha.Eof do
begin
DMDados.CDSOCNeta.First;
while not DMDados.CDSOCNeta.Eof do
begin
if DMDados.CDSOS.Locate('Lote', DMDados.CDSOCNetalote.Text,[]) then
begin
DMFast.FRCertificado.Variables['LT']:=QuotedStr(DMDados.CDSOCNetalote.Text);
end;
if DMDados.CDSRAnaMP.Locate('NF', DMDados.CDSOCNetalot4e.Text,[])then
begin
DMFast.FRCertificado.Variables['LT']:=QuotedStr(DMDados.CDSOCNetaVLoteMP.Text
+' Ref.: ' + DMDados.CDSOCNetalote.Text);
end;
DMFast.FRCertificado.PrepareReport(False);
DMDados.CDSOCNeta.Next;
end;
DMDados.CDSResFilha.Next;
end;
DMFast.FRCertificado.ShowPreparedReport;
DMFast.FRCertificado.PrepareReport();
end;
|
Obrigado aos que fizeram vista ao post.
Editado pela última vez por egamavido em Ter Abr 17, 2018 3:28 pm, num total de 2 vezes |
|
| Voltar ao Topo |
|
 |
egamavido Novato

Registrado: Segunda-Feira, 11 de Abril de 2016 Mensagens: 70
|
Enviada: Ter Abr 17, 2018 3:19 pm Assunto: |
|
|
Reabrindo este tópico, Ainda preciso de ajuda.
O problema que me deparei agora é que, quando gero o relatório pela primeira vez ao abrir o form o fastreport se comporta certinho. mas quando gero outra sequencia de relatórios, o programa repete a última folha gerada no preparereport. Em outras palavras, o comando preparedreport() não está limpando completamente o que foi gerado anteriormente.
Alguém tem uma dica? Grato desde já |
|
| Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Ter Abr 17, 2018 4:03 pm Assunto: |
|
|
mestre/detalhe nao resolve o problema? _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
| Voltar ao Topo |
|
 |
egamavido Novato

Registrado: Segunda-Feira, 11 de Abril de 2016 Mensagens: 70
|
Enviada: Ter Abr 17, 2018 5:40 pm Assunto: |
|
|
| joemil escreveu: | | mestre/detalhe nao resolve o problema? |
Amigo Joemil, o documento já está em mestre detalhe.
Especificando: se eu gerar um relatório por vez, vai direitinho; se eu unir todos preparedreport (false)> showpreparedreport > preparedreport (), na primeira operação vai ok também. Dai em diante, ele persiste a ultima folha da junção anterior. |
|
| Voltar ao Topo |
|
 |
egamavido Novato

Registrado: Segunda-Feira, 11 de Abril de 2016 Mensagens: 70
|
Enviada: Qua Abr 18, 2018 8:10 am Assunto: |
|
|
Uma coisa curiosa sobre o problema.
Se eu acrescentar o comando Fastreport.clear, o programa cham a tela cinza do FastReport. Porém se eu pedir Fastreport.clenupinstance ele retorna essa menssagem de erro: 'Erro(s) Encontrado(s): Linguagemnão encontrada'.
Fechando a janela, tudo normaliza. Então pensei, se eu conseguir contornar ou desaparecer com essa mensagem o comando torna-se utilizavel. Eu sei que é gambi... mas já resolve. |
|
| Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Qua Abr 18, 2018 8:48 am Assunto: |
|
|
posta uma foto do relatorio pra facilitar. e uma foto do designer _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
| Voltar ao Topo |
|
 |
egamavido Novato

Registrado: Segunda-Feira, 11 de Abril de 2016 Mensagens: 70
|
Enviada: Qua Abr 18, 2018 12:52 pm Assunto: |
|
|
| joemil escreveu: | | posta uma foto do relatorio pra facilitar. e uma foto do designer |
Desculpe minha falta de conhecimento, mas como postar imagem aqui? |
|
| Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
|
| Voltar ao Topo |
|
 |
egamavido Novato

Registrado: Segunda-Feira, 11 de Abril de 2016 Mensagens: 70
|
Enviada: Qua Abr 18, 2018 4:52 pm Assunto: |
|
|
| joemil escreveu: | | http://tinypic.com/ |
Página do fastreport:
Documento gerado corretamente, isto é, um por vez:
O que eu preciso é unir vários desses certificados gerados e, como eu disse, isso acontece corretamente na primeira vez;
Da segunda solicitação em diante o último documento é capturado da sequencia anterior e se une à nova solicitação de agrupamento.
Então, eu entendo que o comando preparedreport() não está limpando completamente o arquivo anterior e agrupando esse resídual no próximo doc gerado.
Se eu usar FR.Clear , é retornado a famigerada página cinza do FR.
Agora se usar Cleanupinstance na extensão (DMFast.FRCertificado.Cleanupinstance;) dá esse erro abaixo, porém, após fechar a janela de erro o FR volta a agrupar os documentos corretamente.
Confuso...
Mas, se de repente eu conseguir eliminar essa janela/erro, problema resolvido.
Desde já, agradeço atenção |
|
| Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Qui Abr 19, 2018 8:53 am Assunto: |
|
|
existe uma propriedade chamada StartNewPage. seta ela = True na primeira banda Master. e usa PageHeader no lugar de PageTitle.
assim, se vc tiver usando mestre/detalhe, cada vez q imprimir a banda master, vai sair em uma nova pagina _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
| Voltar ao Topo |
|
 |
egamavido Novato

Registrado: Segunda-Feira, 11 de Abril de 2016 Mensagens: 70
|
Enviada: Qui Abr 19, 2018 10:45 am Assunto: |
|
|
| joemil escreveu: | existe uma propriedade chamada StartNewPage. seta ela = True na primeira banda Master. e usa PageHeader no lugar de PageTitle.
assim, se vc tiver usando mestre/detalhe, cada vez q imprimir a banda master, vai sair em uma nova pagina |
Olá Joemil.
Obrigado pela explicação, pois aprimorei o relatório da forma que parece mais correta. Entretanto, o problema persiste.
Na verdade, eu consigo agrupar os relatórios e, na primeira ação ele vem perfeito, e daí em diante, o último relatório é repetido no agrupamento seguinte, desta maneira:
1° Agrupamento (correto)
Cliente 1 --- Produto A
Cliente 1 --- Produto B
Cliente 1 --- Produto C
Cliente 1 --- Produto D
2° Agrupamento (em diante)
Cliente 1 --- Produto D
Cliente 2 --- Produto A
Cliente 2 --- Produto B
Cliente 2 --- Produto C
3° Agrupamento
Cliente 2 --- Produto C
Cliente 3 --- Produto A
Cliente 3 --- Produto A
etc;...
Então me parece que, em algum momento, o comando "preparedreport()" não está limpando o relatório acumulado. Talvez o erro seja no laço while, e já tentei diversas variações sem sucesso e não consigo enxergar o segredo.
Mais uma vez obrigado pela atenção. |
|
| Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Qui Abr 19, 2018 10:55 am Assunto: |
|
|
eu uso os componentes:
PageHeader
GroupHeader (StartNewPage = True)
MasterData
DetailData
GroupFooter
PageFooter
assim cada grupo sai em uma pagina _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
| Voltar ao Topo |
|
 |
egamavido Novato

Registrado: Segunda-Feira, 11 de Abril de 2016 Mensagens: 70
|
Enviada: Seg Abr 23, 2018 5:24 pm Assunto: |
|
|
| joemil escreveu: | eu uso os componentes:
PageHeader
GroupHeader (StartNewPage = True)
MasterData
DetailData
GroupFooter
PageFooter
assim cada grupo sai em uma pagina |
Olá Joemil
Na verdade, meu problema não é sobre os campos Pai e Filha do documento. O relatório em si, sai corretamente se for gerado individualmente. O erro acontece quando eu tento agrupar vários relatórios em um mesmo documento com as linhaso Preparedreport(false) > Showpreparedreport > Preparedreport(). Parece que fica sempre um documento em cache e ele acaba se repetindo na nova agregação. Estou quase acreditando que é falha no próprio FR.
Mais uma vez obrigado. abç |
|
| Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Abr 24, 2018 10:09 am Assunto: |
|
|
O método PreparedReport recebe um parâmetro boolean para que você informe se quer limpar os relatórios anteriores armazenados ou não.
Para o seu caso, você deve no primeiro PreparedReport setar True no parâmetro e nos posteriores setar False.
Exemplo, armazenando 2 relatórios (Clientes e Produtos):
| Código: | With frxReport1 do
Begin
LoadFromFile('Clientes.fr3');
PrepareReport(True); // Prmeiro relatório setar True para limpar todos os anteriores
LoadFromFile('Produtos.fr3');
PrepareReport(false); // Nos demais setar False para ir armazenando
ShowPreparedReport;
End; |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
| Voltar ao Topo |
|
 |
|