宣言部分
本章では、報告書作成プログラムで使用される手続き部の宣言部分について説明します。
1. USE BEFORE REPORTING
USE BEFORE REPORTING文は、指定された報告書グループが生成される直前に、手続き部の宣言部分にあるセクション(以下、USE BEFORE REPORTINGセクション)が自動で実行されるようにします。
USE BEFORE REPORTINGセクションには、報告書作成プログラムで使用されるINITIATE、GENERATE、TERMINATEステートメントが含まれてはなりません。
-
宣言セクションの形式
宣言セクション
USE BEFORE REPORTINGセクションを記述するために、該当するグループにレベル01のデータ名があるか確認して報告書グループ名として参照します。
USE BEFORE REPORTINGセクションは他のセクションをPERFORMできます。一般的に宣言部分にある他のセクションを実行できます。このような目的でUSEステートメントがない宣言部分内に追加セクションを記述できます。また、手続き部のメインラインにあるセクションをPERFORMできます。
以下の例では、2つの報告書グループのうち1つを作成しようとするときに実行する1つのセクションを記述する方法を示しています。
... 01 A-REPORT TYPE CH FOR A-CODE. ... 01 B-REPORT TYPE CH FOR B-CODE. ... PROCEDURE DIVISION. DECLARATIVES. CHANGE-A SECTION. USE BEFORE REPORTING A-REPORT. CHA-000. PERFORM CHANGE-A-B. CHANGE-B SECTION. USE BEFORE REPORTING B-REPORT. CHB-000. PERFORM CHANGE-A-B. CHANGE-A-B SECTION. CAB-000. ... END DECLARATIVES.
オペレーション
報告書グループの1つにUSE BEFORE REPORTINGセクションがある場合、報告書作成プログラムは報告書グループを処理する間にこのセクションを暗黙的に実行します。
報告書に可能なすべての機能があると仮定したら、以下のような場合にセクションが暗黙的に実行されます。
-
該当するグループが明細報告書グループの場合、制御切れを確認し、制御脚書きおよび制御頭書き報告書グループを作成した後に実行されます。
-
グループの総計を計算した後に実行されます。(したがって、USE BEFORE REPORTINGセクションでそれを参照可能)
-
該当するグループが本体グループの場合、ページ領域を確認し、ページ脚書きおよびページ頭書き報告書グループを作成する前に実行されます。
-
グループの行にSOURCEフィールド、SUMフィールドを設定する前に実行されます。(したがって、グループに表示される元のフィールドを変更可能)
グループの出力を防止するために、USE BEFORE REPORTING文にSUPPRESS PRINTINGステートメントやMOVE 1 TO PRINT-SWITCHを含むことができます。
USE BEFORE REPORTINGセクションはANS-68およびANS-74 COBOL報告書作成プログラムでよく使用されました。該当する機能の多くは、現在PRESENT WHEN節とPRESENT AFTER節によって実行されますが、以下のような機能は継続して使用できます。
-
他のファイルに対して追加のレコードを記録するために宣言セクションを使用できます。
-
新しい制御値が始まるたびに追加のレコードを読み取るために、制御頭書き報告書グループに対するUSE BEFORE REPORTINGセクションを使用できます。
-
特定の複雑な状況では、新しいページで制御頭書き報告書グループを強制的に開始できます。
2. DEBUGGING
DEBUGGINGセクションは、ネストされたプログラムで使用されるプロシージャでは動作せず、最外部のプログラムのプロシージャでのみ動作します。
DEBUGGINGセクションを有効にするには、環境部の構成セクションのSOURCE-COMPUTER段落にWITH DEBUGGING MODEを指定する必要があります。
-
宣言セクションの形式
宣言セクション
すべてのDEBUGGING文は、DECLARATIVESキーワードのすぐ後に作成します。
以下は、DEBUGGINGセクションの設定項目についての説明です。
-
procedure-name-1
-
procedure-name-1は、DEBUGGINGセクションで宣言されてはなりません。
-
与えられたプロシージャ名は1つのUSE FOR DEBUGGING文でのみ指定することができ、当該文では一度のみ指定できます。
-
最外部のプログラムのプロシージャに対してのみすべてのプロシージャ名を指定できます。
-
-
ALL PROCEDURES
-
ALL PROCEDURES句は、プログラムで一度のみ指定できます。
-
ALL PROCEDURES句を指定する場合、最外部のプログラムの全体プロシージャに対してのみデバッグを実行します。
-
宣言部分にDEBUGGINGセクションを宣言すると、DEBUG-ITEM特殊レジスターが生成されます。
01 DEBUG-ITEM. 02 DEBUG-LINE PICTURE IS X(6). 02 FILLER PICTURE IS X VALUE SPACE. 02 DEBUG-NAME PICTURE IS X(30). 02 FILLER PICTURE IS X VALUE SPACE. 02 DEBUG-SUB-1 PICTURE IS S9999 SIGN IS LEADING SEPARATE CHARACTER. 02 FILLER PICTURE IS X VALUE SPACE. 02 DEBUG-SUB-2 PICTURE IS S9999 SIGN IS LEADING SEPARATE CHARACTER. 02 FILLER PICTURE IS X VALUE SPACE. 02 DEBUG-SUB-3 PICTURE IS S9999 SIGN IS LEADING SEPARATE CHARACTER. 02 FILLER PICTURE IS X VALUE SPACE. 02 DEBUG-CONTENTS PICTURE IS X(n).