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

16/12/2021

7

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

Posts

16/12/2021

Emerson Nascimento

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.
Responder

16/12/2021

Emerson Nascimento

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

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.
Responder

22/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.


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

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

Aceitar