COBOL と帳票ツールの連携方法を教えてください
COBOLから印刷帳票を出力する方法として一般的なのは、
- ページ体裁をLINAGE句で定義した行順編成ファイルへの WRITE AFTER文
- REPORT SECTION構文で定義し GENERATE文で印刷する
でしたが、別の技術情報でも述べているように、Windows上でのプリント出力はすべてプリントマネージャがコントロールすることが標準になっているため、上記のような伝統的な印刷方法では、Windowsの機能のほとんどが使用できません。
Windowsの印刷機能を簡単に活用できるように、多くの帳票ツールがサードベンダーから販売されており、このなかのいくつかは、Micro Focus製品とのインタフェースをサポートしています。ここでは、そのようなツールを使用して、どのように帳票フォームを定義し、どのようにCOBOLプログラムから制御して行くことができるかを解説します。
なお、ここでは一例として 株式会社エイチ・オー・エス様 (https://www.hos.co.jp/) のシー・オー・リポーツ を題材として取り上げます。シー・オー・リポーツについては、エイチ・オー・エス様までお問い合わせ下さい。
帳票レイアウトの定義
ここで取り上げているのは、ページプリンタに印刷される定型フォームを持つ帳票です。まず、定義ツールを使用してレイアウトを定義します。以下に、シー・オー・リポーツが提供するフォームエディタの作業画面の一例を示します。
このような定義ツールを使用して対話式に、各フィールドの位置、属性を定義します。同時に固定テキスト、罫線、バーコードなども定義できます。
COBOLインタフェースの定義
各帳票ツールは、それぞれ独自のプログラミングインタフェースを持っています。定義された帳票レイアウトに COBOLプログラムから印刷するためには、このインタフェースを使用して COBOLプログラムからリクエストを発行する必要があります。通常はシステムサブルーチンの呼び出しを行います。一方で、フォームの可変フィールドにCOBOLプログラムから代入するデータの値を格するための連絡領域を COBOLで宣言しておく必要があります。この宣言の方法もツールによって異なります。シー・オー・リポーツの場合、各印刷フィールドに対して、例えば以下のように宣言します:
01 PRINT-RECORD.
03 TUKI.
05 TUKI-dat pic x(2).
05 filler pic x value low-value.
03 SITEN.
05 SITEN-dat pic x(8).
05 filler pic x value low-value.
03 SIBU.
05 SIBU-dat pic x(6).
05 filler pic x value low-value.
各フィールド毎に宣言されている FILLER項目は、シー・オー・リポーツのランタイムルーチンに渡すデータが ナル文字で止められていなければならないために必要となります。
COBOLアプリケーションの作成
COBOLプログラムの手続き部で、印刷属性の設定を行い、印刷フィールドにデータを渡したうえで、実際の印刷指示を発行します。これらの指示は 各ツールが用意しているプログラミングインタフェースによってなされます。例として シー・オー・リポーツの場合、以下のようなプログラミングになります。
PROCEDURE DIVISION.
MAIN-SHORI.
* 初期化処理
perform SHOKIKA-SHORI.
* フォームの表示を行なう 1st page
call "CO-PRINTFORM" returning ret.
* color-mono
move PRINT-COLOR to nindex.
move COLOR-MONO to param.
call "CO-SETLONG" using CO-SETLONG-PARM
returning ret.
* 保険(サンプル)1st page
move "4" to TUKI-dat.
move "熱田支店" to SITEN-dat.
move "名古屋" to SIBU-dat.
perform SET-DATAFIELD.
* 改頁処理
call "CO-PRINTOUT" returning ret.
* フォームの印刷 2nd page
call "CO-PRINTFORM" returning ret.
* 終了処理
call "CO-TERM" returning ret.
stop run.
* 項目値の設定
SET-DATAFIELD.
move "TUKI" to field
call "CO-PRINTDATAFIELD" using field TUKI returning ret.
move "SITEN" to field
call "CO-PRINTDATAFIELD" using field SITEN returning ret.
move "SIBU" to field
call "CO-PRINTDATAFIELD" using field SIBU returning ret.