イベント
これまでは、レポートの実行を開始したときに実行されるメイン プロシージャのみを含んでいるスクリプトについて見てきました。メイン プロシージャでは、初期設定を行い、変数を初期化することができます。しかし、これでは、レポート生成のプロセスを全面的に制御するには十分ではありません。
レポート生成全体についてできるだけ多くの制御を可能にするために、すべてのオブジェクトには、ハンドラー(つまり、スクリプト内のプロシージャ)を割り当てることができるイベントがいくつかあります。たとえば、データ バンドにハンドラーを接続すると、レコードのフィルタリングが可能になります。特定の条件に一致するかどうかに応じて、バンドを表示したり非表示にしたりすることができます。
レポート作成のプロセスとトリガーされるイベントについて、シンプルなレポートを使って説明しましょう。このレポートには 1 つのページ、1 つのマスター データ バンドが含まれており、バンドには 2 つのテキスト オブジェクトがあります。

上述のとおり、スクリプトのメイン プロシージャは、レポートを実行して一番最初に呼び出されます。その後、レポート構築の必須要素が開始されます。
初めに、Report オブジェクトの OnStartReport イベントが呼び出されます。それから、出力ページが作成される前には、OnBeforePrint ページ イベントが呼び出されます。このイベントは、レポート テンプレートのデザイン ページごとに 1 回呼び出されます(デザイン ページをレポートの出力ページと混同しないでください)。この例の場合、レポートのデザインは 1 つのデザイン ページだけで構成されているため、イベントは 1 回呼び出されます。
その後、データ バンドのイベントが次の順序で呼び出されます。
バンドの OnBeforePrint イベントが呼び出される
バンドに含まれる各オブジェクトの OnBeforePrint イベントが呼び出される
各オブジェクトにデータが入る(この例では、DB の Company および Addr1 フィールドの値)
各オブジェクトの OnAfterData イベントが呼び出される
バンド上のオブジェクトの位置決め(オブジェクトの中に引き伸ばし可能なものがある場合)や、バンドの高さの計算、引き伸ばし(引き伸ばし可能な場合)などの操作が実行される
バンドの OnAfterCalcHeight イベントが呼び出される
ページの余白にバンドが入るだけのスペースがない場合は、新しい出力ページが作成される
バンドと、そのバンドのすべてのオブジェクトが出力ページに表示される
各バンド オブジェクトの OnAfterPrint イベントが呼び出される
バンド自体の OnAfterPrint イベントが呼び出される
バンドは、そのバンドに接続されているソースにデータがある限り、出力され続けます。その後、レポートの出力が停止し、レポート ページの OnAfterPrint イベントが呼び出されて、最後に Report オブジェクトの OnStopReport イベントが呼び出されます。
このように、さまざまなオブジェクトのイベントを使用することによって、実質的にレポート作成プロセスのあらゆる段階を管理することができます。イベントを使用するカギは、以下の 9 つのセクションで説明されている、バンドの出力プロセスを十分に理解することです。
ほとんどの操作は、バンドの OnBeforePrint イベントを使用すれば実行できます。オブジェクトに加えたすべての変更が直ちに表示されます。ただし、バンドが引き伸ばし可能である場合、バンドの高さの計算は手順 5 で実行されるため、バンドがどのページに出力されるかをこのイベントで断言することはできません。
しかし、それは手順 6 の OnAfterCalcHeight イベント、または手順 9 の OnAfterPrint イベントのいずれかで実行できます。最後のイベントでは、バンドは既に出力済みになってしまうため、オブジェクトへの変更は目に見える効果として現れないので注意してください。
「いつどこに」バンドが出力されるのかを明確に理解し、それらの各イベントが発生するタイミング(呼び出し順序)を理解することが不可欠です。バンドに含まれる各オブジェクトについても、同様のことを理解する必要があります。