Relatórios com tiOPF

77 views
Skip to first unread message

sdw

unread,
Jan 2, 2007, 8:52:18 AM1/2/07
to tiOPF.br
Bom dia,

Estou concluíndo um exemplo (que será disponibilizado tão logo
esteja pronto) e gostaria de implementar um relatório de exemplo.
Pesquisei alguma coisa sobre uma classe tiOPFDataset. Em que unit isso
está implementado na versão 2 do tiOPF.
Existe alguma outra forma de implementar relatórios com tiOPF sem ser
através dessa classe?

Um abraço.

Diogo Augusto Pereira

unread,
Jan 2, 2007, 10:52:54 AM1/2/07
to tiOPF.br
Para qual gerador de relatórios tu pretende montar o exemplo?

O problema é que todos os geradores de relatórios listam os dados a
partir de um dataset.

O FastReport ( http://fast-report.com/en/ ) tem um datasource que
permite passar os dados de qualquer tipo de lista (lista de objetos,
array, etc) para o relatório, assim fica bem fácil de imprimir uma
lista de objetos, por exemplo.

Não tenho certeza agora, mas acho que o ReportBuilder também possui
algo assim.

Para usar outros geradores de relatórios, os dados de objetos devem
ser "convertidos" para um dataset, senão não tem como ligá-los ao
report. Eu tenho aqui um componente bem simples que é herdado da
JvMemoryData, eu passo para ele a lista de objetos que quero listar e
ele copia os dados via RTTI.

sdw

unread,
Jan 2, 2007, 11:54:58 AM1/2/07
to tiOPF.br
Eu uso o FastReport.
Percebi esse componente, no entanto não achei exemplos de como
usá-lo.
Olhando por cima, acredito que no campo fields eu crio os campos que
existirão no relatorio (um por linha) e nos metodos ongetvalue e
onnext é realizado o mapeamento dos valores da lista de objetos e
navegação, respectivamente.
Se tiver maiores detalhes, por favor compartilhe.

Diogo Augusto Pereira

unread,
Jan 2, 2007, 12:34:59 PM1/2/07
to tiOPF.br
Para usar o FastReport com o tiOPF ou qualquer outra fonte de dados:

1. Colocar um componente "TfrxUserDataSet" no form.

2. Selecionar o dataset no FastReport.

3. Indicar a quantidade de registros que serão impressos.
Exemplo:
frxUserDataSet.RangeEndCount:= Lista.Count;

4. Passar os dados para o report no evento "OnGetValue".
Exemplo:
if CompareText(VarName, 'Valor') = 0 then
Value:= Lista.Items[frxUserDataSet.RecNo].Valor;

5. Definir as variáveis no report. No exemplo acima, incluir um
componente TfrxMemoView e digitar o nome do campo entre colchetes.
Exemplo: "[Valor]"

E é isso! Agora é só chamar o relatório.

Diogo Augusto Pereira

unread,
Jan 2, 2007, 12:40:26 PM1/2/07
to tiOPF.br
Só para complementar, nos demos do FastReports tem um que faz
exatamente isso. Ele está na pasta "PrintArray".

sdw

unread,
Jan 2, 2007, 2:10:48 PM1/2/07
to tiOPF.br
No teu exemplo ainda é necessário alterar a propriedade RangeEnd do
componente TfrxUserDataSet para reCount.
Também dá pra controlar a iteração via OnCheckEOF.

Reply all
Reply to author
Forward
0 new messages