Relatórios Fast Report podem ser afetados por conflito de telas?

16/12/2021

0

Bom dia,

Eu estou dando uma manutenção em um sistema com relatórios em fast report que apresenta o seguinte cenário:

- Janela01 com DBGrid que apresenta dados possui um botão que chama a impressão do relatório;
- Janela02 modal que é acessada via menu- item- relatórios para impressão do relatório filtrado ;

O problema é que se a Janela01 estiver aberta com dados os filtros da Janela02 não surtem efeito e prevalece a consulta da Janela01.
Ambos acessam as mesma tabelas: empresas e contas a receber;
Janela01 (aba TDI):
1: TFrxDBDataSet - > TFDQuery ( tabela empresa)
1: TFrxDBDataSet - > TFDQuery ( tabela contareceber);
1: TFrxReport (vinculado a ambos TFrxDBDataSet );

Janela02 (Modal):
1: TFrxDBDataSet - > TFDQuery ( tabela empresa)
1: TFrxDBDataSet - > TFDQuery ( tabela contareceber);
1: TFrxReport (vinculado a ambos TFrxDBDataSet );

Observação ambos os relatórios funcionam, porém apenas há conflito caso a Janela01 estiver aberta. Talvez seja algum mecanismo dinâmico de gestão de fonte de dados do fast report.

Alguém sabe algo que eu possa testar aqui?
Wanderson Pinheiro

Wanderson Pinheiro

Responder

Post mais votado

16/12/2021

Pela forma que você explicou dá a entender que cada form tem seu próprio FDQuery, mas não deve ser o caso, certo? Se fosse assim não daria "conflito". Então imagino que os dois forms apontam para os mesmos FDQuery, provavelmente estão num Datamodule.

Não vou falar sobre certo e errado.
Vou falar como eu faço.

Eu nunca acesso diretamente os datasets de um Datamodule. Sempre tenho um datasetprovider vinculado ao dataset.
Em cada form eu tenho um clientdataset (ligado ao datasetprovider pertinente) e um datasource, e todo o trabalho no form é feito em cima dessa dupla clientdataset/datasource do próprio form.

Se, por exemplo, um relatório for executado e os dados a imprimir sejam os que estão sendo apresentados no form eu faço, em tempo de execução, a associação dos dados do relatório ao clientdataset/datasource do form.

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

16/12/2021

Wanderson Pinheiro

Pela forma que você explicou dá a entender que cada form tem seu próprio FDQuery, mas não deve ser o caso, certo? Se fosse assim não daria "conflito". Então imagino que os dois forms apontam para os mesmos FDQuery, provavelmente estão num Datamodule.

Não vou falar sobre certo e errado.
Vou falar como eu faço.

Eu nunca acesso diretamente os datasets de um Datamodule. Sempre tenho um datasetprovider vinculado ao dataset.
Em cada form eu tenho um clientdataset (ligado ao datasetprovider pertinente) e um datasource, e todo o trabalho no form é feito em cima dessa dupla clientdataset/datasource do próprio form.

Se, por exemplo, um relatório for executado e os dados a imprimir sejam os que estão sendo apresentados no form eu faço, em tempo de execução, a associação dos dados do relatório ao clientdataset/datasource do form.

Sim . Cada form tem seu FDquery em datamodules diferentes.
Responder

16/12/2021

Emerson Nascimento

Se cada form tem seus FDQuery e os relatórios estão vinculados a esses datasets, o problema que você reportou não faz muito sentido.

De qualquer forma tente, ao executar o relatório (isso na chamada de cada uma das telas), em tempo de execução, associar o relatório ao dataset (FDQuery/Datasource) da tela que o estiver executando.
Responder

22/12/2021

Wanderson Pinheiro

Se cada form tem seus FDQuery e os relatórios estão vinculados a esses datasets, o problema que você reportou não faz muito sentido.

De qualquer forma tente, ao executar o relatório (isso na chamada de cada uma das telas), em tempo de execução, associar o relatório ao dataset (FDQuery/Datasource) da tela que o estiver executando.


Bom dia,


Solução:
Alterar o nome da propriedade UserName dos FrxDbDataSet e fazer as devidas alterações no arquivo fr3.

Resolvido !

Obrigado Emerson Nascimento por estar respondendo ao tópico.
Responder

05/08/2022

Miro Callai

Se cada form tem seus FDQuery e os relatórios estão vinculados a esses datasets, o problema que você reportou não faz muito sentido.

De qualquer forma tente, ao executar o relatório (isso na chamada de cada uma das telas), em tempo de execução, associar o relatório ao dataset (FDQuery/Datasource) da tela que o estiver executando.


Bom dia,


Solução:
Alterar o nome da propriedade UserName dos FrxDbDataSet e fazer as devidas alterações no arquivo fr3.

Resolvido !

Obrigado Emerson Nascimento por estar respondendo ao tópico.
Responder

05/08/2022

Miro Callai

Estou com o mesmo Problema, mas não queria fazer assim:
"Alterar o nome da propriedade UserName dos FrxDbDataSet e fazer as devidas alterações no arquivo fr3."

Pois queria usar o mesmo FR3 para varios formularios
A questão é que os FR3 podem ser personaliados/formatados pelo usuario no sistema,
e se for alterar os UserName dos FrxDbDataSet, teria de ter um FR3 para cada impressão
Responder

11/06/2024

Evandro Almeida

Resolvi da seguinte forma:

no Create do componente.
Report := TfrxReport.Create(AOwner);
Report.EngineOptions.UseGlobalDataSetList := False;

no método de adicionar os datasets

frxDB.DataSet := CdsDAtaSet;
frxDB.UserName := 'Dados';

Report.Clear;
Report.EnabledDataSets.Clear;
Report.EnabledDataSets.Add(frxDB);
lobjteste.report.EnabledDataSets.Add(frxDBCabecalho);
lobjTeste.Report.Preview := lteste.frxpreview;
lobjTeste.Report.LoadFromFile('C:\\Users\\EVANDRO\\Desktop\\novo 15.txt');
lobjTeste.Report.ShowReport();


Segundo o phind:
A propriedade UseGlobalDataSetList no contexto do FastReport serve para controlar o comportamento de busca de conjuntos de dados (TfrxDBDataSet) durante a execução de um relatório. De acordo com a documentação do FastReport 4.6, esta propriedade está ativada por padrão e, quando ativada, faz com que o FastReport procure sempre o primeiro TfrxDBDataSet criado na lista global de conjuntos de dados 4.



Responder

12/06/2024

Arthur Heinrich

Pode ser que o Form2 seja um form exclusivo para a geração de relatórios, onde você escolhe os parâmetros e ele faz o serviço.

Ao desenvolver o Form1, de consulta, talvez tenham criado o botão de imprimir o relatório, que utiliza internamente o Form2, que já está pronto. Mas, pode estar modificando dinamicamente a origem dos dados do relatório, para os componentes do Form1, ignorando os parâmetros do Form2, que atua sobre as queries e componentes locais..
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar