COBOL言語の報告書作成機能とは?使い方を理解しよう|基礎ガイド

COBOL(コボル)言語の報告書作成機能を使った命令文の書き方とは

基礎-報告書作成機能-イメージ

COBOL(コボル)言語の報告書作成機能とは?

報告書作成機能(report writer)とはCOBOLで用意されている独自な機能で、報告書を作成するための形式や体裁を製作者の意図したとおりに作成できます。

報告書作成機能を使用すれば、データの転記や印刷する行の編集、見出し行、頭書き・脚書き行の作成などを毎回コーディングしなくて済むようになります。

COBOL(コボル)言語の報告書の構成

報告集団と制御集団

報告書作成機能は、複数の報告集団と制御集団で構成されます。

■報告集団

  1. 報告書頭書き:報告書の先頭に表紙を指定する
  2. 報告書脚書き:報告書の末尾に裏表紙を指定する
  3. ページ頭書き:ページの上部に見出しを指定する
  4. ページ脚書き:ページの下部に見出しを指定する
  5. 明細:報告書の内容を指定する
  6. 制御頭書き:コントロールブレイク(頭書き)
  7. 制御脚書き:コントロールブレイク(脚書き)

コントロールブレイクとは制御集団の区切りに発生する処理のことを言います。

■制御集団

  1. 小制御:制御用のデータ項目が低い階層の制御
  2. 中制御:制御用のデータ項目が高い階層の制御
  3. 総制御:報告書全体の制御

■報告書機能の全体イメージ

基礎-報告書作成機能-報告書機能イメージ

報告書を作成するには報告書節(REPORT SECTION)に報告書記述項(RD)がいくつか含まれ、報告書を作成します。

報告書節の定義

報告書節(REPORT SECTION)は、データ部(DATA DIVISION)の中に記述します。

■報告書記述項(RD)の書式

基礎-報告書作成機能-報告書記述項書式

報告書名-1:

ファイル記述項(FD)で定義した報告書のファイル名を記述します。

CONTROL:

報告書の制御階層のレベルを指定するためのデータ名を記述します。

FINALは制御データ項目で表せない報告書の制御切れを指定する場合に使用します。

PAGE LIMIT:

ページの中で占める行の位置を指定します。

整数-1にはページの行数を指定します。

省略した場合はページ頭書き、ページ脚書きの報告集団は記述できません。

HEADING:

報告書頭書きの印刷する行の上限を指定します。

省略した場合はデフォルトで1となります。

FIRST DETAIL:

報告書の本文を印刷する行を指定します。

省略した場合はデフォルトで2となります。また、頭書き報告集団は記述できません。

LAST DETAIL:

報告書脚書きの印刷する行の下限を指定します。

■報告集団記述項の書式

<形式1>

01 [ データ名-1]

[ LINE NUMBER句 ]

[ NEXT GROUP句 ]

TYPE句

[ USAGE句 ]

<形式2>

レベル番号 [ データ名-1 ]

[ LINE NUMBER句 ]

[ USAGE句 ]

<形式3>

レベル番号 [ データ名-1 ]

[ BLANK WHEN ZERO句 ]

[ COLUMN NUMBER句 ]

[ GROUP INDICATE句 ]

[ JUSTIFIED句 ]

[ LINE NUMBER句 ]

PICTURE句

[ SIGN句 ]

[ USAGE句 ]

{ SOUCE句 or SUM句 or VALUE句}

データ名-1:

プログラムで参照する必要がある場合に記述します(省略可)

LINE NUMBER句:

項目を印刷するときの絶対行番号、または直前の印刷行からの相対行番号を指定します。

PAGE LIMIT句を指定していない場合は相対行番号(PLUS)を指定します。

NEXT GROUP句:

現在の報告集団印刷時に送る行数を指示します。

送る行数は絶対行番号、相対行番号によって指定します。

NEXT PAGEの指定はページを送ったときに印刷を実行します。

TYPE句:

RH(REPORT HEADING)は報告書頭書きを指定します。

PH(PAGE HEADING)はページ頭書きを指定します。

CH(CONTROL HEADING)は制御頭書きを指定します。

DE(DETAIL)は明細を指定します。

CF(CONTROL FOOTING)は制御脚書きを指定します。

PF(PAGE FOOTING)はページ脚書きを指定します。

RF(REPORT FOOTING)は報告書脚書きを指定します。

COLUMN NUMBER句:

印刷する行内の桁の位置を指定します。

GROUP INDICATE句:

印刷項目の制御切れ目、ページ切れ目後の最初の明細報告集団中にのみ印刷を指示します。

SOURCE句:

報告集団で記述している印刷項目に転記するための転記元のデータ項目を指定します。

SUM句:

合計カウンタを作成し、合計値を求めるためのデータ項目を指定します。

指定したデータ項目は自動で合計値が計算されますので、計算処理は不要です。

VALUE句:

印刷項目の初期値を指定します。

■報告書作成例

以下に報告書を作成するための作成例を紹介します。

(プログラムの詳細な処理内容については、ここでは省略します)

    
  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. REPORT_SAMPLE01.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION
  5. *>----------------------------------------
  6. *> 報告書の定義
  7. *> ファイルの宣言と実ファイル名を記載
  8. *> 順ファイルの印字指定に準じてプリンタを割り当てます。
  9. *>----------------------------------------
  10. FILE-CONTROL.
  11. SELECT SHISYA ASSIGN TO "SHISYA-A.DAT"
  12. FILE STATUS IS SHISYA-STS.
  13. SELECT HOKOKUSHO ASSIGN TO "PRINTER"
  14. FILE STATUS IS HOKOKU-STS.
  15.  
  16. DATA DIVISION.
  17. *>----------------------------------------
  18. *> ファイル節
  19. *>----------------------------------------
  20. FILE SECTION.
  21. *>----------------------------------------
  22. *> ファイル記述項の定義
  23. *>----------------------------------------
  24. FD SHISYA
  25. 01 SHISYA-RECORD.
  26. ...省略...
  27. FD HOKOKUSHO RECORD CONTAINS 80 REPORT IS URIAGE.
  28.  
  29. *>----------------------------------------
  30. *> 作業場所節
  31. *>----------------------------------------
  32. WORKING-STORAGE SECTION.
  33. ...省略...
  34. *>----------------------------------------
  35. *> 報告書節の定義
  36. *>----------------------------------------
  37. REPORT SECTION.
  38. *>----------------------------------------
  39. *> 報告書節記述項(RD)
  40. *>----------------------------------------
  41. RD SHISYA-URIAGE CONTROL FINAL SHISYA-NAME SEIHIN-NAME
  42. PAGE LIMIT 80 *1ページ80行
  43. FIRST DETAIL 3 *最初の本文3行目から
  44. LAST DETAIL 60 *最後の本文60行目まで
  45. *>----------------------------------------
  46. *> 報告書頭書き(RH)報告集団
  47. *> 不要な場合は省略可能
  48. *>----------------------------------------
  49. 01 TYPE RH NEXT GROUP NEXT PAGE.
  50. 05 LINE 15.
  51. 10 COLUMN 37 PIC 9(4) SOURCE YEAR.
  52. 10 COLUMN 41 PIC N(2) VALUE N"年度".
  53. 05 LINE 18.
  54. 10 COLUMN 32 PIC N(9) VALUE N"売上一覧表".
  55. 05 LINE 40.
  56. ...省略...
  57. *>----------------------------------------
  58. *> ページ頭書き(PH)報告集団
  59. *> 報告書本体ページ見出し(ヘッダー)が不要な場合は省略可能
  60. *>----------------------------------------
  61. 01 TYPE PH.
  62. 05 LINE 1.
  63. 10 COLUMN 50 PIC N(4) VALUE N"印刷日:".
  64. 10 COLUMN 58 PIC X(4) SOURCE
  65. ...省略...
  66. *>----------------------------------------
  67. *> ページ脚書き(PF)報告集団
  68. *> 報告書本体ページ末尾見出し(フッター)が不要の場合は省略可能
  69. *>----------------------------------------
  70. 01 ページ脚書き TYPE PF.
  71. 05 LINE 60.
  72. 10 COLUMN 37 PIC N(3) VALUE N"ページ".
  73. 10 COLUMN 43 PIC ZZ9 SOURCE PAGE-COUNTER.
  74. *>----------------------------------------
  75. *> 明細(DE)報告集団
  76. *> 報告書本体ページ末尾見出し(フッター)が不要の場合は省略可能
  77. *>----------------------------------------
  78. 01 売上データ TYPE DE.
  79. 05 LINE PLUS 1.
  80. 10 COLUMN 10 PIC N(4) SOURCE SHISYA-NAME.
  81. 10 COLUMN 20 PIC N(9) SOURCE SEIHIN-NAME.
  82. ...省略...
  83. *>----------------------------------------
  84. *> 総制御頭書き(CH:FINAL)報告集団
  85. *> FINAL指定は一度だけ印刷
  86. *> 不要な場合は省略可
  87. *>----------------------------------------
  88. 01 TYPE CH FINAL.
  89. 10 COLUMN 33 PIC N(7) VALUE N"売上一覧表"..
  90. *>----------------------------------------
  91. *> 中制御頭書き(CH:支社名)報告集団
  92. *> 複数行印刷する際は相対番号を指定する
  93. *> 不要な場合は省略可
  94. *>----------------------------------------
  95. 01 TYPE CH SHISYA-NAME.
  96. 05 LINE PLUS 3.
  97. 10 COLUMN 3 PIC N(1) VALUE N"]".
  98. 10 COLUMN 5 PIC N(4) SOURCE SHISYA-NAME.
  99. 10 COLUMN 13 PIC N(3) VALUE N"売上]".
  100. *>----------------------------------------
  101. *> 小制御頭書き(CH:製品名)報告集団
  102. *> 製品名が変わると印刷
  103. *> 複数行印刷する際は相対番号を指定する
  104. *> 不要な場合は省略可
  105. *>----------------------------------------
  106. 01 TYPE CH SEIHIN-NAME.
  107. 05 LINE PLUS 1.
  108. 10 COLUMN 28 PIC N(1) VALUE N"[".
  109. 10 COLUMN 30 PIC N(9) SOURCE SEIHIN-NAME.
  110. 10 COLUMN 48 PIC N(3) VALUE N"売上]".
  111. 05 LINE PLUS 1.
  112. ...省略...
  113. 05 LINE PLUS 1.
  114. ...省略...
  115. *>----------------------------------------
  116. *> 小制御脚書き(CF:製品名)報告集団
  117. *> 複数行印刷する際は相対番号を指定する
  118. *> 不要な場合は省略可
  119. *>----------------------------------------
  120. 01 TYPE CF SEIHIN-NAME NEXT GROUP PLUS 2.
  121. 05 LINE PLUS 2.
  122. 10 COLUMN 28 PIC N(9) SOURCE SEIHIN-NAME.
  123. 10 COLUMN 46 PIC N(4) VALUE N"小計".
  124. 10 COLUMN 58 PIC \,\\\,\\9 SUM 金額.
  125. *>----------------------------------------
  126. *> 中制御脚書き(CF:支社名)報告集団
  127. *> 不要な場合は省略可
  128. *>----------------------------------------
  129. 01 TYPE CF SHISYA-NAME NEXT GROUP PLUS 2.
  130. 05 LINE PLUS 2.
  131. 10 COLUMN 37 PIC N(4) SOURCE SHISYA-NAME.
  132. 10 COLUMN 45 PIC N(4) VALUE N"中計".
  133. 10 COLUMN 57 PIC PIC \,\\\,\\9 SUM 金額.
  134. *>----------------------------------------
  135. *> 総制御脚書き(CF:FINAL)報告集団
  136. *> FINAL指定は一度だけ印刷
  137. *> 不要な場合は省略可
  138. *>----------------------------------------
  139. 01 TYPE CF FINAL.
  140. 05 LINE PLUS 2.
  141. 10 COLUMN 40 PIC N(6) VALUE N"合計"
  142. 10 COLUMN 56 PIC \,\\\,\\9 SUM 金額.
  143.  
  144. ...省略...

練習問題

ここでは練習問題にチャレンジしてみましょう。

COBOL言語のプログラムにおいて、報告書を作成するために定義する報告書節の名称は?

回答:

REPORT SECTION

報告書の作成や帳票設計は、最近ではGUIベースで行われるようになり、帳票を作成するソフトウェアも使いやすいものが登場してきました。

報告書の作成は表計算ソフトでも可能なことから、今ではCOBOLの報告書作成機能を使用する機会は減ってきていると言っても良いでしょう。

しかし、報告書作成機能は一度設計しておけば何度でも再利用が可能ですので、定型的な報告書を毎回作成する必要があるときに便利です。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門