Eventos
Até agora nos vimos scripts com apenas um procedimento principal que é executado quando o relatório é executado. No procedimento principal é possível efetuar configurações iniciais e inicializar variáveis. No entanto, isso não é suficiente para obter o controle total sobre o processo da geração de relatórios. Para obter o máximo de controle possível sobre a geração de relatórios, cada objeto possui diversos eventos aos quais é possível atribuir manipuladores (ou seja, procedimentos no script). Por exemplo, conectar um manipulador à banda de dados permite a filtragem de registros, de modo que a banda pode ser ocultada ou revelada de acordo com condições específicas.
Vamos demonstrar o processo da criação do relatório e os eventos disparados através de um relatório simples que contém uma página e possui uma banda "Dados Mestre", com dois objetos "Texto" na banda:
Conforme é descrito acima, o procedimento principal do script é chamado no início da execução do relatório. Depois disso começam as partes essenciais da criação do relatório. Primeiro é chamado o evento "OnStartReport" do objeto "Relatório". Então, antes de criar uma página de saída, o evento "OnBeforePrint" é chamado. Este evento é chamado uma vez para cada página de design no modelo do relatório (páginas de design não devem ser confundidas com as páginas de saída de um relatório!). Em nosso exemplo, o evento é chamado uma vez, já que o design do relatório é composto de apenas uma página de design.
Então os eventos das bandas de dados são chamados na seguinte ordem:
o evento "OnBeforePrint" da banda é chamado
o evento "OnBeforePrint" de cada objeto contido na banda é chamado
cada objeto é preenchido com dados (em nosso exemplo, com valore dos campos "Company" e "Addr1")
o evento "OnAfterData" de cada objeto é chamado
ações como posicionar objetos na banda (se houver objetos extensíveis entre eles), calcular a altura da banda e estendê-la (se ela for extensível) são executadas
o evento "OnAfterCalcHeight" da banda é chamado
é criada uma nova página de saída se a banda não possuir espaço suficiente no espaço em branco da página
a banda e todos os seus objetos são exibidos na página de saída
o evento "OnAfterPrint" de cada banda é chamado
o evento "OnAfterPrint" da banda em si é chamado
As bandas continuam a ser impressas enquanto a fonte conectada à banda tiver dados. Depois que a impressão do relatório é concluída, é chamado o evento "OnAfterPrint" da página do relatório, e finalmente o evento "OnStopReport" do objeto "Relatório".
Dessa maneira, ao usar os eventos de objetos diferentes, praticamente cada etapa do processo de criação de um relatório pode ser gerenciado. O mais importante ao usar eventos é um entendimento profundo do processo de saída de bandas, que é discutido nas próximas nove seções. A maior parte das ações pode ser executada usando apenas o evento "OnBeforePrint" da banda; qualquer modificação efetuada em um objeto é exibida imediatamente. No entano, se a banda for extensível, é impossível afirmar em que página será impressa a banda neste evento, já que o cálculo da altura da banda é executada na etapa 5. No entanto, isso pode ser feito no evento "OnAfterCalcHeight" na etapa 6 ou no evento "OnAfterPrint" na etapa 9. Observe que no último evento a banda já vai ter sido exibida, então a modificação de objetos não terá nenhum efeito visível.
É essencial entender claramente "onde e quando" as bandas são exibidas, e entender o timing (ordem de chamada) de cada um de seus eventos. Isso também é válido para cada um dos objetos contidos nas bandas.