7.1.3 データ部(報告書作成機能の拡張)
- 形式
- 構文規則
-
ファイル節の構成は,一般のファイルと同じである。
- 【標準仕様との関連】
-
「COBOL2002 言語 標準仕様編」 「9. データ部(DATA DIVISION)」
- 〈この項の構成〉
-
(1) ファイル記述項
- 形式
- 構文規則
-
-
REPORT句を指定したとき,LINAGE句は指定できない。
-
REPORT句を指定したとき,データ記述項を指定してもよい。
-
- 一般規則
-
-
REPORT句を指定したファイル記述項にDATA RECORD句を指定すると,すなわち,このファイル記述項の後にレコード記述を続けて書くと,一つのファイルに報告書作成機能が作成するレコードと利用者が書き出すレコードの両方を含めることができる。このとき,利用者自身がレコードを書き出すときには,AFTER ADVANCINGを指定したWRITE文を使用しなければならない。
-
RECORD句(「固定長」形式および「固定長あるいは可変長」形式)
印刷行の行送りを制御するための制御用文字の1バイトと,CODE句を指定したときには印刷行を識別するための文字の1バイトを,データレコードのサイズに含める。RECORD句を省略すると,コンパイラはレコードのサイズとして133バイトを仮定する。
可変長レコードでは,各印刷行のサイズはRECORD句で指定したレコード長の最大値であり,空白行のサイズは10バイトである。固定長レコードでは,各印刷行および空白行のサイズがRECORD句で指定したレコード長の最大値となる。
-
(4) CODE句(報告書作成機能の拡張)
- 形式
- 一般規則
-
-
呼び名
一つのファイルに複数個の報告書を収めるときに,各報告書の行を識別するための文字と関連づける。
(a)呼び名は,環境部の特殊名段落で長さ1文字の英数字定数に関係づけた名前でなければならない。
-
(5) CONTROL句(報告書作成機能の拡張)
- 形式
- 一般規則
-
-
データ名は,添字付けできる。
-
このシステムでは,CONTROL HEADING FINALやCONTROL FOOTING FINALの報告集団を指定するときでもCONTROL句でFINALを書く必要はない。
-
(6) PAGE LIMIT句(報告書作成機能の拡張)
- 形式
- 一般規則
-
-
報告書作成とPAGE LIMIT句
・PAGE LIMIT句を指定しないとき
・報告書作成機能は,この報告書に対してPAGE-COUNTERとLINE-COUNTERの特殊レジスタを作成しない。
・すべての報告集団に相対行番号を指定しなければならない。
・この報告書にページ頭書き報告集団が定義されると,最初のGENERATE文によって表示される報告書頭書き報告集団の後に1回だけ表示される。また,ページ脚書き報告集団が定義されると,TERMINATE文によって表示される報告書脚書き報告集団の前に1回だけ表示される。
-
各整数は符号のない1以上の整数で4けた以下でなければならない。
-
(7) 報告集団記述項
- 形式
-
書き方1
書き方2
書き方3
書き方4
報告集団の完全な記述は,次のとおりである。
- 構文規則
-
RESET句を指定するときには,SUM句を指定しなければならない。
- 一般規則
-
-
データ名
書き方1のデータ名には,報告集団名を指定する。その他の書き方のデータ名には,報告書の項目名を指定する。データ名は次の場合以外は,指定する必要はない。指定があってもこのデータ名を環境部,データ部および手続き部で参照できない。
・GENERATE文で参照する明細報告集団の名前。
・SUM句のUPONで参照する明細報告集団の名前。
・USE BEFORE REPORTING文で参照する明細以外の報告集団の名前。
・報告書節のSOURCE句,SUM句または手続きの文で参照する合計カウンタの名前。
・制御脚書き報告集団中の合計カウンタの修飾語として参照する報告集団の名前。
-
報告集団記述項の書き方と各句の関連は次のとおりである。
・書き方1の場合
・報告集団の型をTYPE句で指定する。
・書き方2の場合
・報告集団が複数個の行から成り,各行が複数個の項目を含むとき,この集団項目記述項のLINE NUMBER句で従属する基本項目の行番号を指定する。
・この集団項目記述項でLINE NUMBER句を指定しないで従属する記述項に合計カウンタがないときは,覚え書きとみなす。
・書き方3の場合
・印刷行中の印刷表示しなければならない項目を指定するのに用いる。この場合には,COLUMN NUMBER句とPICTURE句を指定しなければならない。さらに,SOURCE句,VALUE句のうちどれか一つを指定しなければならない。
・明細報告集団中の基本項目で,その報告集団を印刷表示するときに合計値を求める必要がある基本項目を指定するのに用いる。この場合COLUMN NUMBER句とPICTURE句とSOURCE句を指定する。合計項目は印刷表示しない項目であってもよい。
印刷表示しない項目のときは,COLUMN NUMBER句,PICTURE句とを指定しない。
・制御脚書き報告集団中の基本項目で合計カウンタであることを指定するのに用いる。この場合,SUM句とPICTURE句を指定しなければならない。
・書き方4の場合
報告集団が一つの基本項目から成る「書き方3の場合」のどれかの項目であることを指定する。
-
(8) LINE NUMBER句(報告書作成機能の拡張)
- 形式
- 構文規則
-
絶対行番号および相対行番号指定は,すべての報告集団の最初のLINE NUMBER句で指定できる。
NEXT PAGE指定は,報告書の本文と報告書脚書き報告集団の最初のLINE NUMBER句で指定できる。
- 一般規則
-
-
報告集団との関連
各型の報告集団に対してLINE NUMBER句の機能と規則を次の表に示す。
-
整数1,整数2
符号のない1以上の整数でなければならない。また,4けた以下でなければならない。
表7‒1 報告集団の型とLINE NUMBER句の関連(-CompatiV3) 報告集団
絶対行番号
(整数1)指定
相対行番号(整数2)指定
NEXT PAGE指定
報告書頭書き報告集団
報告集団の最初の行に指定できる。
-
報告集団の最初の行に指定できる。
-
相対行番号を指定すると,PAGE句のHEADING整数2を基準に数えた相対行番号に最初の行を印刷する。
指定できない。
ページ頭書き報告集団
報告集団の最初の行に指定できる。
-
報告集団の最初の行に指定できる。
-
相対行番号を指定すると,表示しようとするページに,すでに報告書頭書き報告集団が表示されていれば,LINE-COUNTERの値と相対行番号との和で示される行番号に最初の行を印刷する。その他の場合には,PAGE句のHEADING整数2を基準に数えた相対行番号に最初の行を印刷する。
指定できない。
報告書の本文(制御頭書き,明細,制御脚書き報告集団)
-
報告書最初の行に指定できる。
-
LINE-COUNTERの値がLINE句の整数1より小さいと,報告集団行の最初の行を現在のページの整数1の行に印刷表示する。LINE-COUNTERの値が,LINE句の整数1の値に等しいか大きいと,ページを送って報告集団最初の行を新しいページの整数1の行に印刷表示する。
-
報告集団の最初の行に指定できる。
-
現在のページにすでに報告書の本文を印刷表示してあるときには,LINE-COUNTERの値にLINE句の整数2の値を加えた行に報告集団の最初の行を印刷する。ただし,このページに報告集団全体を印刷表示できないときはページを送って報告書の最初の行を新しいページのPAGE句のFIRST DETAIL整数3の行に印刷表示する。
現在のページにまだ報告書の本文を印刷表示してないときには,報告集団の最初の行を現在のページのPAGE句のFIRST DETAIL整数3の行に印刷する。ただし,LINE-COUNTERの値がPAGE句のFIRST DETAIL整数3の値に等しいか大きいと,報告集団の最初の行を現在のページのLINE-COUNTERの値に1を加えた行に印刷表示する。
このページに報告集団全体を印刷できないときは,ページを送って報告集団の最初の行を新しいページのPAGE句のFIRST DETAIL整数3の行に印刷表示する。LINE-COUNTERの値がPAGE句のFIRST DETAIL整数3の値に等しいか大きくなるのは,直前に印刷した報告書の本文のNEXT GROUP句で絶対行番号を指定した場合,またはPAGE句のFIRST DETAILで1を指定した場合である。
-
指定できる。
-
ページを送って報告集団の最初の行をPAGE句のFIRST DETAIL整数3の行に印刷表示する。ただし,LINE-COUNTERの値がFIRST DETAIL整数3の値に等しいか大きいと,報告集団の最初の行をLINE-COUNTERの値に1を加えた行に印刷表示する。このページに報告集団を印刷できないときは,ページを送って報告集団の最初の行を新しいページのPAGE句のFIRST DETAIL整数3の行に印刷表示する。
LINE-COUNTERの値がPAGE句のFIRST DETAIL整数3の値に等しいか大きくなるのは,直前に印刷表示した報告書の本文のNEXT GROUP句で絶対行番号を指定した場合である。
ページ脚書き報告集団
報告書の最初の行に指定できる。
-
報告集団の最初の行に指定できる。
-
相対番号を指定すると,PAGE句のFOOTING 整数5に1を加えた相対行番号に最初の行を印刷表示する。
指定できない。
報告書脚書き報告集団
報告書の最初の行に指定できる。
-
報告集団の最初の行に指定できる。
-
相対番号を指定すると,LINE-COUNTERの値かまたはPAGE句のFOOTING 整数5の値のどちらか大きい方を基準として数えた相対行番号に報告集団の最初の行を印刷表示する。LINE-COUNTERの値がPAGE句のFOOTING 数整5の値よりも大きくなるのは,ページ脚書き報告集団をこのページに印刷した場合である。
-
NEXT PAGE指定を書くと,報告書脚書き報告集団だけで単独のページを構成する。
-
新しいページのPAGE句のHEADING整数2の行に印刷表示する。
-
-
(9) NEXT GROUP句(報告書作成機能の拡張)
- 構文規則
-
LINE NUMBER句の指定がなくても,NEXT GROUP句の指定はできる。
- 一般規則
-
-
報告集団との関連
ページ頭書き報告集団,ページ脚書き報告集団または報告書脚書き報告集団にはNEXT GROUP句を指定してはならない。
-
整数は4けた以下でなければならない。
-
(10) RESET句(報告書作成機能の拡張)
ここでは,RESET句とSUM句は独立した句として扱う。
- 形式
- 構文規則
-
RESET句は制御脚書き報告集団中でだけ指定でき,SUM句と対にして用いなければならない。
- 一般規則
-
-
データ名1
データ名1で指定した制御用データ項目の制御の切れ目で合計カウンタをゼロに戻す。
・データ名1は,この報告書のCONTROL句で指定したデータ名(制御用データ項目の名前)でなければならない。
・データ名1は,このRESET句を指定した制御脚書き報告集団に関する制御用データ項目よりも,より上位のレベルの制御用データ項目の名前でなければならない。
-
(12) SUM句(報告書作成機能の拡張)
- 形式
- 構文規則
-
-
SUM句は,制御脚書き報告集団中の基本項目にだけ指定できる。
-
SUM句を書いた記述項には,PICTURE句を指定しなければならない。PICTURE句で編集用の文字を指定してもよいし,BLANK WHEN ZERO句などの編集用の句を指定してもよい。これらの編集は合計カウンタを印刷表示するときにだけする。これ以外の場合は,合計カウンタはいつも数字項目を表す。
合計カウンタのサイズは,合計値を求める項目(一意名)の整数部分のけた落ちが生じないよう十分大きくしなければならない。また,関連するデータ項目のけた数+2とする(英数字項目,または英数字編集項目のときは,2となる。数字項目のときは,けた数+2または18けたのどちらか小さい方となる)。
-
SUM句を印刷項目の記述項に書くと,その合計カウンタが源データ項目となり,報告書作成機能は,この合計カウンタの値を表示するために,MOVE文の規則に従って,印刷項目に転記する。
-
- 一般規則
-
-
一意名1
合計値を求めるデータ項目の名前を指定する。
・一意名は,ファイル節,作業場所節,局所場所節,連絡節の数字項目の名前で,かつ源データ項目か,または同じ報告書節の合計カウンタの名前でなければならない。
・UPON指定を省略し,かつSUM句中の一意名が合計カウンタである場合には,その一意名はこのSUM句を含んでいる同じ制御脚書き報告集団か,同じ報告書中のこれより低いレベルの制御脚書き報告集団の,どれかで定義されていなければならない。
・UPON指定したときには,一意名は合計カウンタの名前であってはならない。
・一意名は部分参照できない。
-
UPON指定
UPON指定を書くと,明細集計を選択的にするときに指定する。一つの合計カウンタに対して合計値を求める項目(SOURCE句で源データ項目指定)を複数の明細報告集団中に指定したとき,特定の明細報告集団の処理中にだけ合計値を求める場合には,UPONのデータ名1で,その特定の明細報告集団の名前を指定する。
データ名1は次の規則に従う。
・データ名1は,明細報告集団の名前でなければならない。
・データ名1は,報告書名で修飾してもよい。
-
報告書作成機能とSUM句
・SUM句の指定があると報告書作成機能は仮想データ項目である合計カウンタを作成する。この合計カウンタは数字項目であり,実行時にこの合計カウンタに一意名1の値を加算する。この加算はADD文の規則による。
・GENERATE文またはTERMINATE文の実行中に報告書作成機能は,一意名1の値を合計カウンタに加算する。合計カウンタへの加算の時点は一意名1の特性で異なり,明細集計(subtotaling),横の集計(crossfooting)および縦の集計(rolling counters forward)の三つの場合がある。
(i)一意名1がより低いレベルの制御脚書き報告集団の合計カウンタであるとき,合計カウンタとその一意名1との加算を縦の集計と呼ぶ。これは,制御の切れ目によって,低いレベルの制御脚書き報告集団が処理されるときにされる。
(ii)一意名1が合計カウンタの名前でこのSUM句を書いた制御脚書き報告集団中で定義してあるときは横を集計する。
横の集計は,制御の切れ目が起きたとき,この制御脚書き報告集団の処理中にする。横の集計は,合計カウンタの値を制御脚書き報告集団中で記述した順序(上から下へ,左から右への順序)に従って加算する。すなわち,制御脚書き報告集団の最初の合計カウンタに対して,すべての加算がされ,次に制御脚書き報告集団の2番目の合計カウンタに対して,すべての加算がされる。この手続きは,すべての横の集計が終わるまで繰り返される。
(iii)一意名1が合計カウンタでないとき,合計カウンタとその一意名1との加算を,明細集計と呼ぶ。
SUM句中にUPON指定を書くと,その一意名1は,指定された明細報告集団に対するGENERATE文が実行されるたびに加算される。ただし,一意名1がこの明細報告集団中のSOURCE句の源データ項目でないときには,合計カウンタへの加算はされない。
SUM句中にUPON指定を書かなければその一意名1は,SUM句が書かれた報告書に対するデータ名を指定したすべてのGENERATE文が実行されるたびに加算される。
-
(13) TYPE句(報告書作成機能の拡張)
- 一般規則
-
-
この報告集団がページ頭書き報告集団であることを指定する。
・一つの報告書には,ページ頭書き報告集団は一つしか指定できない。
・報告書作成機能は,ページ頭書き報告集団を各ページの先頭に1回ずつ印刷表示する。ただし,次の場合は例外である。
(例外1)
報告書頭書き報告集団または報告書脚書き報告集団がそれだけで1ページを構成する場合には,そのページにページ頭書き報告集団を印刷表示しない。
(例外2)
報告書頭書き報告集団がそれだけで1ページを構成しない場合には,ページ頭書き報告集団を報告書頭書き報告集団に続く2番目の報告集団として印刷表示する。
(例外3)
PAGE LIMIT句を指定しないとき,最初のGENERATE文によって印刷表示される報告書頭書き報告集団の後に1回だけ印刷表示される。
・ページ頭書き報告集団のSOURCE句は,源データ項目の現在値を用いる。
-
この報告集団が明細報告集団であることを指定する。
・一つの報告書には,複数個の明細報告集団を指定してもよい。
・明細報告集団の印刷表示は,利用者が手続き部のGENERATE文で指定する。
・明細報告集団中のSOURCE句は,源データ項目の現在値を用いる。
-
この報告集団が制御脚書き報告集団であることを指定する。
・一つの報告書には,制御脚書き報告集団は,各制御用データ項目およびFINALに対してそれぞれ一つずつしか指定できない。
・報告書作成機能は,制御脚書き報告集団を制御用データ項目に対応する制御集団の最後に1回ずつ印刷表示する。FINALを指定するとTERMINATE文の実行時に総制御脚書き報告集団を総制御集団の最後に1回だけ印刷表示する。
・GENERATE文の実行中に制御の切れ目が起こると1番低いレベルの制御脚書き報告集団から始めて,制御の切れ目を起こしたレベルの制御脚書き報告集団までをすべてこの順に印刷表示する。
TERMINATE文を実行すると,すべての制御脚書き報告集団を次に示す順序で印刷表示する。
・小制御脚書き
・中制御脚書き
:
・総制御脚書き(報告書中で1回だけ)
・制御脚書き報告集団中のSOURCE句は,源データ項目の現在値を用いる。ただし,源データ項目が制御用データ項目の場合は変化する前の値(その制御集団の最後の明細報告集団に属する値)を用いる。総制御脚書き報告集団の場合は,TERMINATE文実行時に源データ項目の値を用いる。
-
この報告集団がページ脚書き報告集団であることを指定する。
・一つの報告書には,ページ脚書き報告集団は一つしか指定できない。
・報告書作成機能は,ページ脚書き報告集団を各ページの最後に1回ずつ印刷表示する。ただし,次の場合は例外である。
(例外1)
報告書頭書き報告集団または報告書脚書き報告集団がそれだけで1ページを構成する場合には,そのページにページ脚書き報告集団を印刷表示しない。
(例外2)
報告書脚書き報告集団がそれだけで1ページを構成しない場合には,そのページでは,ページ脚書き報告集団を報告書脚書き報告集団に先行する報告集団として印刷する。
(例外3)
PAGE LIMIT句を指定しないとき,TERMINATE文によって印刷表示される報告書脚書き報告集団の前に1回だけ印刷表示される。
・ページ脚書き報告集団のSOURCE句は,源データ項目の現在値を用いる。
-
この報告集団が報告書脚書き報告集団であることを指定する。
・一つの報告書には,報告書脚書き報告集団は一つしか指定できない。
・報告書に対してGENERATE文が少なくとも1回実行されていれば,報告書作成機能は,TERMINATE文の実行中に,報告書脚書き報告集団を報告書の最後に1回だけ印刷表示する。
・報告書脚書き報告集団中のSOURCE句は,TERMINATE文実行時の源データ項目の値を用いる。
-
制御用データ項目を参照したときの値は,次による。
なお,報告書作成機能が制御の切れ目の検出に使った制御用データ項目の保存された値を,古い値という。
・制御脚書き報告集団の制御の切れ目の処理中に,SOURCE句で制御用データ項目を参照すると,古い値が使われる。
・TERMINATE文が実行されたとき,報告書作成機能は,最も高いレベルの制御の切れ目が検出されたとみなす。そして,制御脚書き報告集団中のSOURCE句で制御用データ項目を参照すると,古い値が使われる。ただし,総制御脚書き報告集団の場合は,TERMINATE文実行時の源データ項目の値を用いる。
・制御脚書き報告集団のUSE手続きで制御用データ項目を参照すると,古い値が使われる。
・報告集団でデータ項目を参照すると上記以外は,すべてその報告集団が処理されるときにそのデータ項目に含まれている現在の値が使われる。
-
(処理手順1)
合計カウンタの横を集計する。すなわち,この報告集団中で定義された合計カウンタであって,同じ報告集団中のSUM句の作用対象でもある合計カウンタをすべて,SUM句の主体である合計カウンタに加える。
(処理手順2)
合計カウンタの縦を集計する。すなわち,この報告集団中で定義された合計カウンタであって,これよりもレベルの高い制御脚書き報告集団中のSUM句の作用対象でもあるものをすべて,そのレベルの高い制御脚書き報告集団中の合計カウンタに加える。
(処理手順3)
報告集団のデータ名を参照しているUSE BEFORE REPORTING手続きがあれば,USE手続きを実行する。
(処理手順4)
SUPPRESS文が実行されたか,または報告集団が印刷用でなければ,次に処理手順6を処理する。
(処理手順5)
SUPPRESS文が実行されないで,報告集団が印刷用であれば,印刷行を作成し,報告集団の表示規則に従って,報告集団を表示する。
(処理手順6)
制御階層中のこのレベルを処理するときに,必要によって合計カウンタにゼロを設定する。
-
明細報告集団は,利用者がGENERATE文でその処理時点を指定する。明細以外の報告集団は,報告書作成機能が自動的に処理する。
報告書名を指定したGENERATE文に対応して行う明細に関する処理は,処理手順1による。
(処理手順1)
合計カウンタの明細集計をする。
(処理手順2)
SUPPRESS文が実行されたか,または報告集団が印刷用でなければ,報告集団に対する処理を終了する。
(処理手順3)
明細報告集団の処理が報告書名を指定したGENERATE文による場合,報告集団に対する処理を終了する。
処理手順2でも処理手順3でもなければ,印刷行を作成し,報告集団の表示規則に従って,報告集団を表示する。
-