技術情報 - Net Express - 2.5 Micro Focus COBOLと帳票ツールとの連携

COBOLから印刷帳票を出力する方法として一般的なのは、

  • ページ体裁をLINAGE句で定義した行順編成ファイルへの WRITE AFTER文
  • REPORT SECTION構文で定義し GENERATE文で印刷する

でしたが、別の技術情報でも述べているように、Windows上でのプリント出力はすべてプリントマネージャがコントロールすることが標準になっているため、上記のような伝統的な印刷方法では、Windowsの機能のほとんどが使用できません。

Windowsの印刷機能を簡単に活用できるように、多くの帳票ツールがサードベンダーから販売されており、このなかのいくつかは、Micro Focus製品とのインタフェースをサポートしています。ここでは、そのようなツールを使用して、どのように帳票フォームを定義し、どのようにCOBOLプログラムから制御して行くことができるかを解説します。

なお、ここでは一例として 株式会社エイチ・オー・エス様のシー・オー・リポーツ を題材として取り上げます。シー・オー・リポーツについては、エイチ・オー・エス様までお問い合わせ下さい。

帳票レイアウトの定義

ここで取り上げているのは、ページプリンタに印刷される定型フォームを持つ帳票です。まず、定義ツールを使用してレイアウトを定義します。以下に、シー・オー・リポーツが提供するフォームエディタの作業画面の一例を示します。

CO Reports Form Editer

このような定義ツールを使用して対話式に、各フィールドの位置、属性を定義します。同時に固定テキスト、罫線、バーコードなども定義できます。

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.

戻る

-----