11.3.1 行データの帳票印刷(COBOL)
APから書式印刷をする場合,印刷用ファイルへ行データを出力するためにPROCEDURE DIVISIONで指定する文を次に示します。また,APで行データをコーディングするときに,印刷時のずれを防ぐために設定する行データの属性と指定値について説明します。
(1) 書式印刷するときのPROCEDURE DIVISIONの指定
命令文 |
内容 |
---|---|
オープン |
プリンタ出力用ファイルの処理を開始する準備をします OPEN文のモードに出力専用(OUTPUT)を指定して実行します |
出力 |
レコードをプリンタ出力用ファイルに書き出します 明示的または間接的※にADVANCING指定をします |
クローズ |
プリンタ出力用ファイルの処理を終了します |
- 例
PROCEDURE DIVISION. OPEN OUTPUT プリンタ. …… 1. : WRITE 行データ [FROM データ名] {AFTER|BEFORE}ADVANCING{n LINE(S)|呼び名|PAGE}. …… 2. : CLOSE プリンタ. …… 3.
- 例の説明
-
-
プリンタのオープン
-
プリンタへのレコードの書き出し
データ名で指定した領域の内容が行データに指定した領域に格納されたあと,行データを出力先のプリンタに書き出します。WRITE文で書き出されたレコードの内容は,使用できなくなります。
AFTER:ADVANCING以降の記述内容を実行したあとで,WRITE文が実行されます。
BEFORE:WRITE文を実行したあとで,ADVANCING以降の記述内容が実行されます。
ADVANCING:行送り(改行)または改ページを指定します。
n LINE(S):nに指定したページ分だけ改行します。nが1の場合は「1 LINE」になり,nが2以上の場合は「n LINES」になります。
-
プリンタのクローズ
オープンした出力先のプリンタをクローズします。
-
(2) 行データの属性の設定
書式印刷時にずれを生じさせないように,書式設計前にAPで行データの属性を決定しておきます。APで設定できる行データの属性と指定値を次の表に示します。
属性 |
指定値 |
内容 |
---|---|---|
文字サイズ※ |
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.
- 形式の説明
-
-
POINT-l
文字サイズを指定します。lに指定できる文字サイズは,5/7/9/12です。
-
INTERVAL-m
文字の間隔(字間値)を指定します。mに指定できる文字の間隔は,0〜7です。
-
FORMAT-n
書体を指定します。nに指定できる書体は,0/1/2/9です。
-
WIDE
文字を横方向に2倍に拡大します。
-
CHARACTER TYPE句については,マニュアル「COBOL2002 言語 拡張仕様編」を参照してください。
WRITE文の形式によって,レコード名のCHARACTER TYPE句を有効にするか,一意名のCHARACTER TYPE句を有効にするかが異なります。
(a) 「WRITE レコード名」の場合
「WRITE レコード名」の場合は,レコード名にCHARACTER TYPE句があるときだけ,行データの印刷制御をします。WRITE文と,CHARACTER TYPE句との関係を次の図に示します。
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. : |
-
レコード名にCHARACTER TYPE句を宣言
レコード名にCHARACTER TYPE句を宣言して,行データの印刷制御を行います。
-
プリンタへのレコード書き出し
1行改行したあとに,行データをプリンタに出力します。行データの印刷制御は,レコード名で宣言したCHARACTER TYPE句での設定を使用します。
(b) 「WRITE レコード名 FROM 一意名」の場合
「WRITE レコード名 FROM 一意名」の場合は,一意名にCHARACTER TYPE句があるときだけ,行データの印刷制御をします。このとき,レコード名にCHARACTER TYPE句があっても無視されます。WRITE文と,CHARACTER TYPE句との関係を次の図に示します。
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. : |
-
レコード名の宣言
レコード名を宣言します。
-
一意名にCHARACTER TYPE句を宣言
一意名にCHARACTER TYPE句を宣言して,行データの印刷制御を行います。
-
プリンタへのレコードの書き出し
1行改行したあとに,行データをプリンタに出力します。また,行データの印刷制御は,一意名で宣言したCHARACTER TYPE句での設定を使用します。
(3) 推奨コーディング
行データを出力する場合,行データおよびページデータの上限値によってデータを出力できない場合があります。必要に応じて,推奨コーディングを参考にしてください。
(a) ページ単位で,文字サイズ,間隔,書体,拡張などがすべて同じ場合
ドローの書式作成時に,書式属性ダイアログ,および行データ属性ダイアログで文字サイズなどを設定します。APでCHARACTER TYPE句を指定する必要はありません。
(b) 行単位で,文字サイズ,間隔,書体,拡張などがすべて同じ場合
行データ設定用のテーブルと送信用のテーブルを用意します。WRITE文の直前で,データを送信用のテーブルにコピーしてから,送信用のテーブルを使用して,WRITE文を実行します。
行データ設定用のテーブルは,項目ごとに定義します。送信用のテーブルは,行データ設定用のテーブルの長さを1項目として定義します。CHARACTER TYPE句は,送信用のテーブルに指定します。
(例)文字サイズが,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. : |
-
CHARACTER TYPE句は指定しない
-
行データ設定用のテーブルを項目ごとに定義する
-
設定用テーブルの全体長を1項目として文字サイズ7ポイントを定義する
-
設定用テーブルの全体長を1項目として文字サイズ9ポイントを定義する
-
7ポイント用テーブルに内容をコピーする
-
印字後,改行する
-
9ポイント用テーブルに内容をコピーする
-
印字後,改行する
(c) ページ単位または行単位で,文字サイズ,間隔,書体,拡張などがそろっていない場合
1行中の行データを,行データの上限値を超えないようにデータを分けます。改行は,1行中の最終データを出力するときにします。1行中の最終データを出力するまでは,改行しないようにしてください。行データの上限値は,概算式を参考にします。概算式については,「付録B 書式オーバレイの1ページデータ量の制限」を参照してください。
文字サイズなど,同じ項目が連続する場合には,行データ設定用のテーブルと送信用のテーブルを用意します。WRITE文の直前で,送信用のテーブルにデータをコピーしてから,送信用のテーブルを使用してWRITE文を実行します。送信用のテーブルでは,文字サイズなど,同じ項目が連続する領域を一つの項目として定義してください。CHARACTER TYPE句は,送信用のテーブルに指定します。
(例)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. : |
-
CSP(改行しない指定)を登録する
-
CHARACTER TYPE句は指定しない
-
行データの上限値を超えないように定義する(ここでは100バイトとする)
-
行データの上限値を超えないように定義する(ここでは50バイトとする)
-
設定1の送信用のテーブルを定義する
CHARACTER TYPE句が同じ項目を一つの項目にまとめる
-
設定2の送信用のテーブルを定義する
1回目に送信したデータサイズと同じ数のスペースデータを設定する
CHARACTER TYPE句が同じ項目を一つの項目にまとめる
-
送信用のテーブルに内容をコピーする
-
印字後,改行しない
-
送信用のテーブルに内容をコピーする
-
印字後,改行する