画面・帳票サポートシステム XMAP3 プログラミングガイド


11.3.1 行データの帳票印刷(COBOL)

APから書式印刷をする場合,印刷用ファイルへ行データを出力するためにPROCEDURE DIVISIONで指定する文を次に示します。また,APで行データをコーディングするときに,印刷時のずれを防ぐために設定する行データの属性と指定値について説明します。

〈この項の構成〉

(1) 書式印刷するときのPROCEDURE DIVISIONの指定

表11‒12 PROCEDURE DIVISIONで指定する文

命令文

内容

オープン

OPEN文)

プリンタ出力用ファイルの処理を開始する準備をします

OPEN文のモードに出力専用(OUTPUT)を指定して実行します

出力

WRITE文)

レコードをプリンタ出力用ファイルに書き出します

明示的または間接的にADVANCING指定をします

クローズ

CLOSE文)

プリンタ出力用ファイルの処理を終了します

注※

同じファイルに対するほかのWRITE文にADVANCING指定されていることを意味します。

 PROCEDURE DIVISION.
 OPEN OUTPUT プリンタ.                                 …… 1.
   :
 WRITE 行データ [FROM データ名]
  {AFTER|BEFORE}ADVANCING{n LINE(S)|呼び名|PAGE}.      …… 2.
   :
 CLOSE プリンタ.                                       …… 3.
例の説明
  1. プリンタのオープン

    FILE-CONTROLで指定した出力先のプリンタをオープンします。

  2. プリンタへのレコードの書き出し

    データ名で指定した領域の内容が行データに指定した領域に格納されたあと,行データを出力先のプリンタに書き出します。WRITE文で書き出されたレコードの内容は,使用できなくなります。

    AFTER:ADVANCING以降の記述内容を実行したあとで,WRITE文が実行されます。

    BEFORE:WRITE文を実行したあとで,ADVANCING以降の記述内容が実行されます。

    ADVANCING:行送り(改行)または改ページを指定します。

    n LINE(S):nに指定したページ分だけ改行します。nが1の場合は「1 LINE」になり,nが2以上の場合は「n LINES」になります。

    呼び名:CSP(改行しない),またはC01(改ページする)を指定します。

    PAGE:改ページします。

  3. プリンタのクローズ

    オープンした出力先のプリンタをクローズします。

(2) 行データの属性の設定

書式印刷時にずれを生じさせないように,書式設計前にAPで行データの属性を決定しておきます。APで設定できる行データの属性と指定値を次の表に示します。

表11‒13 行データの属性と指定値

属性

指定値

内容

文字サイズ

5/7/9/12

文字サイズを5,7,9,または12ポイントにして文字を配置します

文字の間隔

0

文字の間隔を空けないで文字を配置します

1〜7

文字の間隔を1〜7ポイントにして文字を配置します

書体

0

文字の書体を元に戻します

1

文字を明朝体にして配置します

2

文字をゴシック体にして配置します

9

文字をOCR体にして配置します

拡大

指定あり

横方向に2倍に拡大した文字を配置します

指定なし

横方向の拡大を解除した文字を配置します

注※

属性の指定がない場合で,上位の項目に属性の指定があるときは,その属性の指定値に戻して文字を配置します。上位の項目に属性の指定がないときは,ドローで定義した属性で文字を配置します。上位の項目とは,レベル番号が上位にあるデータ記述項を示します。

APで属性を設定する場合,レコード名または一意名にCHARACTER TYPE句を指定します。CHARACTER TYPE句の形式を次に示します。

形式
 CHARACTER TYPE IS POINT-l                    …… 1.
            INTERVAL-m                        …… 2.
            FORMAT-n                          …… 3.
            WIDE                              …… 4.
形式の説明
  1. POINT-l

    文字サイズを指定します。lに指定できる文字サイズは,5/7/9/12です。

  2. INTERVAL-m

    文字の間隔(字間値)を指定します。mに指定できる文字の間隔は,0〜7です。

  3. FORMAT-n

    書体を指定します。nに指定できる書体は,0/1/2/9です。

  4. WIDE

    文字を横方向に2倍に拡大します。

CHARACTER TYPE句については,マニュアル「COBOL2002 言語 拡張仕様編」を参照してください。

WRITE文の形式によって,レコード名のCHARACTER TYPE句を有効にするか,一意名のCHARACTER TYPE句を有効にするかが異なります。

(a) 「WRITE レコード名」の場合

「WRITE レコード名」の場合は,レコード名にCHARACTER TYPE句があるときだけ,行データの印刷制御をします。WRITE文と,CHARACTER TYPE句との関係を次の図に示します。

図11‒3 WRITE文と,CHARACTER TYPE句との関係(「WRITE レコード名」の場合)
 FD A-FILE.
 01 A-REC.                                              ……… 1.
  02 A-REC-1 PIC N(10) CHARACTER TYPE IS POINT-7 WIDE.
  02 A-REC-2 PIC N(10) CHARACTER TYPE IS POINT-9 FORMAT-1.
   :
 PROCEDURE DIVISION.
   :
  WRITE A-REC AFTER ADVANCING 1 LINE.                   ……… 2.
   :
  1. レコード名にCHARACTER TYPE句を宣言

    レコード名にCHARACTER TYPE句を宣言して,行データの印刷制御を行います。

  2. プリンタへのレコード書き出し

    1行改行したあとに,行データをプリンタに出力します。行データの印刷制御は,レコード名で宣言したCHARACTER TYPE句での設定を使用します。

(b) 「WRITE レコード名 FROM 一意名」の場合

「WRITE レコード名 FROM 一意名」の場合は,一意名にCHARACTER TYPE句があるときだけ,行データの印刷制御をします。このとき,レコード名にCHARACTER TYPE句があっても無視されます。WRITE文と,CHARACTER TYPE句との関係を次の図に示します。

図11‒4 WRITE文と,CHARACTER TYPE句との関係(「WRITE レコード名 FROM 一意名」の場合)
 FD A-FILE.
 01 A-REC PIC N(80).                                ………… 1.
   :
 WORKING-STORAGE SECTION.
 01 DATA1.                                          ………… 2.
  02 A-REC-1 PIC N(10) CHARACTER TYPE IS POINT-7 WIDE.
  02 A-REC-2 PIC N(10) CHARACTER TYPE IS POINT-9 FORMAT-1.
   :
 PROCEDURE DIVISION.
   :
  WRITE A-REC FROM DATA1 AFTER ADVANCING 1 LINE.    ………… 3.
   :
  1. レコード名の宣言

    レコード名を宣言します。

  2. 一意名にCHARACTER TYPE句を宣言

    一意名にCHARACTER TYPE句を宣言して,行データの印刷制御を行います。

  3. プリンタへのレコードの書き出し

    1行改行したあとに,行データをプリンタに出力します。また,行データの印刷制御は,一意名で宣言したCHARACTER TYPE句での設定を使用します。

(3) 推奨コーディング

行データを出力する場合,行データおよびページデータの上限値によってデータを出力できない場合があります。必要に応じて,推奨コーディングを参考にしてください。

(a) ページ単位で,文字サイズ,間隔,書体,拡張などがすべて同じ場合

ドローの書式作成時に,書式属性ダイアログ,および行データ属性ダイアログで文字サイズなどを設定します。APでCHARACTER TYPE句を指定する必要はありません。

(b) 行単位で,文字サイズ,間隔,書体,拡張などがすべて同じ場合

行データ設定用のテーブルと送信用のテーブルを用意します。WRITE文の直前で,データを送信用のテーブルにコピーしてから,送信用のテーブルを使用して,WRITE文を実行します。

行データ設定用のテーブルは,項目ごとに定義します。送信用のテーブルは,行データ設定用のテーブルの長さを1項目として定義します。CHARACTER TYPE句は,送信用のテーブルに指定します。

図11‒5 推奨コーディング
(例)文字サイズが,7ポイントと9ポイントの行を出力する場合
  :
 DATA DIVISION.
 FILE SECTION.
 FD プリンタ IS GLOBAL
    RECORDING MODE IS F
    LABEL RECORD IS OMITTED
    DATA RECORD IS 行データ.
 
 01  行データ PIC X(12).                      … 1.
  :
 WORKING-STORAGE SECTION.                  ┐
 01  設定用テーブル.                       │
   02  DATA01 PIC X(2).                    ├ … 2.
   02  DATA02 PIC X(8).                    │
   02  DATA03 PIC X(2).                    ┘
 
 01  7ポテーブル CHARACTER TYPE POINT-7.  ┐ … 3.
   02  FILLER PIC X(12).                   ┘
 
 01  9ポテーブル CHARACTER TYPE POINT-9.  ┐ … 4.
   02  FILLER PIC X(12).                   ┘
 
 
  :
 PROCEDURE DIVISION.
  :
 MOVE  '01'        TO  DATA01.
 MOVE  '12345678'  TO  DATA02.
 MOVE  '99'        TO  DATA03.
  :
 MOVE  設定用テーブル  TO  7ポテーブル.      … 5.
 WRITE 行データ FROM7ポテーブル
                BEFORE ADVANCING 1 LINE.      … 6.
 
 MOVE  設定用テーブル  TO  9ポテーブル.      … 7.
 WRITE 行データ FROM 9ポテーブル
                BEFORE ADVANCING 1 LINE.      … 8.
  : 
  1. CHARACTER TYPE句は指定しない

  2. 行データ設定用のテーブルを項目ごとに定義する

  3. 設定用テーブルの全体長を1項目として文字サイズ7ポイントを定義する

  4. 設定用テーブルの全体長を1項目として文字サイズ9ポイントを定義する

  5. 7ポイント用テーブルに内容をコピーする

  6. 印字後,改行する

  7. 9ポイント用テーブルに内容をコピーする

  8. 印字後,改行する

(c) ページ単位または行単位で,文字サイズ,間隔,書体,拡張などがそろっていない場合

1行中の行データを,行データの上限値を超えないようにデータを分けます。改行は,1行中の最終データを出力するときにします。1行中の最終データを出力するまでは,改行しないようにしてください。行データの上限値は,概算式を参考にします。概算式については,「付録B 書式オーバレイの1ページデータ量の制限」を参照してください。

文字サイズなど,同じ項目が連続する場合には,行データ設定用のテーブルと送信用のテーブルを用意します。WRITE文の直前で,送信用のテーブルにデータをコピーしてから,送信用のテーブルを使用してWRITE文を実行します。送信用のテーブルでは,文字サイズなど,同じ項目が連続する領域を一つの項目として定義してください。CHARACTER TYPE句は,送信用のテーブルに指定します。

図11‒6 推奨コーディング
(例)1行データを2回に分け,同じCHARACTER TYPE句を指定する項目が連続する場合
  :
 ENVIRONMENT DIVISION.
 CONFIGURATION SECTION.
 SPECIAL-NAMES.
 CSP IS 改行抑止.                             … 1.
  :
 DATA DIVISION.
 FILE SECTION.
 FD プリンタ IS GLOBAL
    RECORDING MODE IS F
    LABEL RECORD IS OMITTED
    DATA RECORD IS 行データ.
 01  行データ PIC X(150).                     … 2.
  :
 WORKING-STORAGE SECTION.
 01  設定用テーブル.
   02  設定1.
     03  DATA11 PIC X(2).                  ┐
     03  DATA12 PIC X(8).                  ├ … 3.
     03  DATA13 PIC X(4).                  │
    :                                  ┘
   02  設定2.
     03  DATA21 PIC X(4).                  ┐
     03  DATA22 PIC X(4).                  ├ … 4.
     03  DATA23 PIC X(2).                  │
    :                                  ┘
 
 01  送信用テーブル1.                                 ┐
   02  送信1.                                         ├ … 5.
     03  FILLER PIC X(100)  CHARACTER TYPE FORMAT-1.   ┘
 
 01  送信用テーブル2.                                 ┐
   02  前データ.                                       │
     03  FILLER PIC X(100)  VALUE ALL SPACE.           ├ … 6.
   02  送信2.                                         │
     03  FILLER PIC X(20)   CHARACTER TYPE FORMAT-2.   │
     03  FILLER PIC X(30)   CHARACTER TYPE FORMAT-1.   ┘
  :
 PROCEDURE DIVISION.
  :
 MOVE  '01'        TO  DATA11.
 MOVE  '12345678'  TO  DATA12.
 MOVE  '9999'      TO  DATA13.
  :
 MOVE  設定1  TO  送信1.                    … 7.
 WRITE 行データ FROM 送信用テーブル1
                BEFORE ADVANCING 改行抑止.    … 8.
 MOVE  設定2  TO  送信2.                    … 9.
 WRITE 行データ FROM 送信用テーブル2
                BEFORE ADVANCING 1 LINE.      … 10.
  : 
  1. CSP(改行しない指定)を登録する

  2. CHARACTER TYPE句は指定しない

  3. 行データの上限値を超えないように定義する(ここでは100バイトとする)

  4. 行データの上限値を超えないように定義する(ここでは50バイトとする)

  5. 設定1の送信用のテーブルを定義する

    CHARACTER TYPE句が同じ項目を一つの項目にまとめる

  6. 設定2の送信用のテーブルを定義する

    1回目に送信したデータサイズと同じ数のスペースデータを設定する

    CHARACTER TYPE句が同じ項目を一つの項目にまとめる

  7. 送信用のテーブルに内容をコピーする

  8. 印字後,改行しない

  9. 送信用のテーブルに内容をコピーする

  10. 印字後,改行する