Relatórios Fast Report podem ser afetados por conflito de telas?
16/12/2021
0
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
Post mais votado
16/12/2021
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
Mais Posts
16/12/2021
Wanderson Pinheiro
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.
16/12/2021
Emerson Nascimento
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.
22/12/2021
Wanderson Pinheiro
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.
05/08/2022
Miro Callai
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.
05/08/2022
Miro Callai
"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
11/06/2024
Evandro Almeida
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.
12/06/2024
Arthur Heinrich
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..
Clique aqui para fazer login e interagir na Comunidade :)