RPG

68. 複数のスプールをひとつにまとめるには?

請求書や伝票出力において表紙(鑑)の部分は、あるRPGで出力しているが
明細部分は別の異なるRPGによって印刷している。
そして合計行のフッター部分はさらに別のRPGによって印刷出力している。
これらを単に印刷する目的であれば何の問題も無かったのだが
PDFに保管したい場合は3つの部分がバラバラではどうにも扱いにくいし
取引先などに渡すには不向きである。
できるだけ簡単に3つのRPGによるスプールをひとつにまとめる方法はないだろうか?

それには印刷ファイルを3つのPGMの実行でオープンにしたままで
連続して実行して次々と同じスプールに追加していくことで、ひとつのスプールに
まとめることができる。

OVRPRTF FILE(QPRINT) SECURE(*YES) OVRSCODE(*JOB) SHARE(*YES) .... 1

CALL MYLIB/PRTHED   ......
CALL MYLIB/PRTDETAIL     :・・・・2
CALL MYLIB/PRTEND   ・・・・・・

DLTOVR FILE(QPRINT) LVL(*JOB) ................ 3
【解説】
  1. 共通して使用する印刷ファイルQPRINT を3つのプログラムで共用できるように
    SHARE(*YES) を指定する。SECURE(*YES) は上位の他の一時変更からの保護。
    OVRSCODE(*JOB) はV3R2M0 以降では明示的に指定しないとOVRPRTF
    効かない場合がある。
  2. 各印刷PGMを実行するが最初の2つのPGM : PRTHEDPRTDETAIL では
    LR標識を ONにしないで処理を終了するようにしておく。
    LR標識をONにすると印刷ファイルがクローズされてしまうからである。
    最後の PRTEND では LR標識をONにして終了する。
    これによって印刷ファイルがクローズされる。
  3. 印刷ファイルの一時変更を解除する。