Ferramentas de Relatórios
Existem algumas diretrizes especiais para ferramentas de relatórios para garantir que elas sejam executadas em um modo compatível com o uniGUI. Algumas ferramentas de relatórios têm configurações específicas para aplicações multithread. Em muitos casos você precisa desabilitar diálogos visuais e outros formulários relacionados ao VCL de serem exibidos enquanto o mecanismo de relatórios está em execução. Como no uniGUI você não pode exibir formulários VCL, será necessário exportar o relatório para um arquivo. Um formato comumente usado é PDF, que pode ser incorporado em uma janela do navegador ou em um iframe.
No uniGUI, o método recomendado para criar um relatório é convertê-lo em um arquivo PDF e exibi‑lo dentro de um controle TUniUrlFrame. Para cada ferramenta de relatórios existem caminhos diferentes para alcançar isso. Nesta seção abordaremos brevemente algumas ferramentas de relatórios. Você também pode carregar e executar os demos relacionados para ver como isso é feito na prática.
Importante: Como descrito nas seções anteriores, existem alguns problemas comuns em ferramentas de relatórios que podem afetar a estabilidade e a escalabilidade da aplicação uniGUI. Versões iniciais de ferramentas de relatórios foram criadas apenas para aplicações desktop. Com o tempo elas evoluíram e passaram a suportar aplicações servidor; no entanto, ainda podem conter componentes ou partes de código que não são compatíveis com aplicações servidor multithread. Algumas ferramentas de relatórios geram o relatório usando controles VCL que o renderizam em um canvas antes de exportá‑lo para um arquivo PDF.
Esteja ciente de que algumas ferramentas de relatórios renderizam seus relatórios usando o controle TRichEdit com todos os problemas descritos em outros locais. Esse tipo de ferramenta de relatórios não pode ser usado dentro da aplicação uniGUI, mas poderia ser usado por algum serviço web externo. Um serviço web “printing server” poderia gerar processos externos para exportar relatórios em PDF, mas essa solução requer algum banco de dados central onde as informações necessárias para o relatório estejam armazenadas (de forma que a aplicação uniGUI possa solicitar um relatório específico e receber o arquivo PDF como resultado).
Para testar completamente a compatibilidade de uma ferramenta de relatórios com sua aplicação, você deve executar um Stress Test e analisar totalmente o comportamento da sua aplicação: https://unigui.com/doc/online_help/stress-test-tool.htm. É importante garantir que tanto sua ferramenta de relatórios em particular quanto o design do seu relatório possam escalar quando o servidor estiver sob carga.
Outro ponto importante é garantir que a criação dos componentes do relatório e a geração do relatório aconteçam no mesmo evento. Alguns componentes de relatório internamente usam controles VCL que precisam criar handles de Janela. Esses handles devem ser criados e liberados na mesma thread, portanto é necessário criar e destruir os componentes do relatório em uma única chamada de evento. A melhor maneira de conseguir isso é colocar os componentes do relatório em um Free DataModule. O free data module será criado quando o relatório precisar ser gerado. Após o relatório ser criado, o data module deve ser liberado.
O código abaixo é retirado do nosso demo do FastReport:
procedure TUniForm1.UniFormBeforeShow(Sender: TObject);
var
dm : TfrDM;
RepUrl : string;
begin
dm := TfrDM.Create(nil);
try
RepUrl := dm.GenReportPDF(InvNum);
finally
dm.Free;
end;
UniURLFrame1.URL := RepUrl; // exibe o PDF gerado dentro de um frame
end;No código acima o data module é criado sob demanda, o link do relatório é gerado e o data module é destruído em seguida.
Abaixo está o free data module real que é usado para gerar o relatório:

Um Free DataModule para geração de relatórios
Leitura adicional e tópicos relacionados:
Free DataModule: https://unigui.com/doc/online_help/free-datamodule.htm
Stress Test Tool: https://unigui.com/doc/online_help/stress-test-tool.htm