第4章 印刷機能
4.7 フリーフレーム形式の印刷
図4.6 各フレームに定義したパーティション項目群
4.7.1 フレームの基本制御
ヘッダ、フッタ、ボディに定義された項目を出力する場合、パーティション項目群名としてヘッダの場合は'HEAD'、フッタの場合 は'FOOT'、ボディの場合は'BODY'を指定してパーティション出力を行います。なお、これらのパーティションを出力してもフレームに定 義されたパーティションは出力されません。
[利用者プログラムからの出力例]
ps_write_partition(psfile, “HEAD”, PS_WP_POSISION, 1, pRecord); /* ヘッダの出力 */
ps_write_partition(psfile, “BODY”, PS_WP_AFTERFEED, 1, pRecord); /* ボディの出力 */
ps_write_partition(psfile, “FOOT”, PS_WP_AFTERFEED, 1, pRecord); /* フッタの出力 */
* ヘッダの出力
MOVE "HEAD" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "P001" TO PRT-CONTROL.
WRITE SAMP.
* ボディの出力
MOVE "BODY" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "A001" TO PRT-CONTROL.
WRITE SAMP.
* フッタの出力
MOVE "FOOT" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "A001" TO PRT-CONTROL.
WRITE SAMP.
フレームに定義されたフレームパーティションを出力する場合、パーティション項目群名を指定して出力を行います。
例
支給項目のフレームを例にすると以下のようになります。
[利用者プログラムからの出力例]
ps_write_partition(psfile, “CH1”, PS_WP_POSISION, 1, pRecord); /* CH1の出力 */
~ レコード域の支給項目名に"基本給"を設定し、支給金額に金額を設定 ~
ps_write_partition(psfile, “DE”, PS_WP_AFTERFEED, 1, pRecord); /* DEの出力 */
~ レコード域の支給項目名に"時間外手当"を設定し、支給金額に金額を設定 ~
ps_write_partition(psfile, “DE”, PS_WP_AFTERFEED, 1, pRecord); /* DEの出力 */
~ レコード域の支給項目名に"その他"を設定し、支給金額に金額を設定 ~
ps_write_partition(psfile, “DE”, PS_WP_AFTERFEED, 1, pRecord); /* DEの出力 */
~ レコード域の支給合計に合計金額を設定 ~
ps_write_partition(psfile, “CF1”, PS_WP_AFTERFEED, 1, pRecord); /* CF1の出力 */
* 制御頭書きの出力
MOVE "CH1" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "P001" TO PRT-CONTROL.
WRITE SAMP.
* 明細の出力
~ レコード域の支給項目名に"基本給"を設定し、支給金額に金額を設定 ~ MOVE "DE" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "A001" TO PRT-CONTROL.
WRITE SAMP.
~ レコード域の支給項目名に"時間外手当"を設定し、支給金額に金額を設定 ~ MOVE "DE" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "A001" TO PRT-CONTROL.
WRITE SAMP.
~ レコード域の支給項目名に"その他"を設定し、支給金額に金額を設定 ~ MOVE "DE" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "A001" TO PRT-CONTROL.
WRITE SAMP.
* 制御脚書きの出力
MOVE "CF1" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "A001" TO PRT-CONTROL.
WRITE SAMP.
・ 指定されたパーティション項目群名により自動的にフレームが選択され、フレームの位置に出力されます。
浮動パーティションの場合、当該フレームの最初のパーティション出力の場合はフレーム先頭に、また2回目以降の出力の場合 は、前回まで出力していた位置から継続して出力されます。固定パーティションはフレーム内の定義された位置に出力されます。
上記の出力例では"CH1"(浮動パーティション)を指定すると、支給項目のフレームの先頭にCH1が出力され、"DE"(浮動パーティ ション)はCH1に続けて出力されます。
例における「控除項目」「就業項目」のフレームも同様の出力となります。
・ フレームパーティションの出力は、フレーム単位で出力してください。複数のフレームのパーティションを交互に出力した場合、当 該フレームの最初の出力とみなされ、必ずフレームの先頭に出力されてしまいます。
たとえば、支給項目のフレームの"CH1"を出力後, 控除項目のフレームの"CH2"を出力し、次に支給項目のフレームの“DE”を出 力した場合、"DE"は支給項目のフレームの先頭にCH1と重なって出力されます。
従って正しい出力結果を得るためには1個のフレーム内の対象となる処理をすべて完了した後、他のフレームに対する処理を行う 必要があります。
・ ヘッダ、フッタ、ボディの出力とフレームパーティションの出力はどちらを先に行っても構いません。
・ フリーフレーム形式の場合、現在のプリンタヘッドの位置より上に固定パーティションを出力した場合でも改ページは行われませ ん。重ね書きされます。改ページが必要な場合は利用者プログラムで明に改ページ制御を行う必要があります。
・ フレームサイズを超えて項目群を出力するとMEFP_RC_ENDFRAMELINK(6B)のエラーになります。
・ COBOLのFORMAT句付き印刷ファイルで行レコード出力を行うとMEFP_RC_BLOCKLW(6A)のエラーになります。行レコード出
力は行わないでください。
・ COBOLのFORMAT句付き印刷ファイルで改ページや改フレームを行った場合、MEFP_RC_BLOCKLW(6A)のエラーになりま
す。COBOLの表示ファイルで出力するか、フリーフレーム形式以外の定義体に変更してください。
4.7.2 リンクフレーム形式の基本制御
フレームのリンク機能を用いると複数のフレームに同一の浮動パーティションを出力することができます。
図4.7 リンクフレームの例
・ リンクするフレームへの移動は、改フレーム(改ブロック)で行います。リンクするフレームがない場合に、改フレーム(改ブロック)を 指定すると、改ページと同じ扱いとします。なお、オープン直後または帳票定義体の変更直後に、改フレーム(改ブロック)指定を 行った場合は、対象とするフレームが決まっていないので、改ページは行われません。利用者プログラムで印刷制御(改行、改ブ ロック、改ページ)を行う必要があります。印刷制御については、プリンタ装置の制御を参照してください。
・ 固定パーティションはリンクするフレームごとに定義することができます。
・ フレーム枠を超えて項目群を出力すると後続するリンクするフレームがない場合はMEFP_RC_ENDFRAMELINK(6B)のエラーに なり、後続するリンクフレームがある場合は、MEFP_RC_ENDFRAME(6C)のエラーになります。
例
[利用者プログラムからの出力例]
~ボディに定義された項目のレコードデータ(月度、氏名、社員番号)に値を設定~
ps_write_partition(psfile, “BODY”, PS_WP_POSISION, 1, pRecord); /* BODYの出力 */
ps_write_partition(psfile, “CH1”, PS_WP_POSISION, 1, pRecord); /* CH1の出力 */
DEを1ヶ月分の出力するループ
~DEに定義されたレコードデータ(出勤時間、退勤時間、勤務時間)に値を設定~
ps_write_partition(psfile, “DE”, PS_WP_AFTERFEED, 1, pRecord); /* DEの出力 */
~フレームを変更する必要がある場合~
ps_control_printer(psfile, PS_CP_BLOCK, 0, NULL); /* 改ブロック */
ps_write_partition(psfile, “CH1”, PS_WP_POSISION, 1, pRecord); /* CH1の出力 */
* ボディの出力
~ボディに定義された項目のレコードデータ(月度、氏名、社員番号)に値を設定~
MOVE "BODY" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "P001" TO PRT-CONTROL.
WRITE SAMP.
* 制御頭書きの出力
MOVE "CH1" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "P001" TO PRT-CONTROL.
WRITE SAMP.
以下を1ヶ月分繰り返す。
* 明細の出力
~DEに定義されたレコードデータ(出勤時間、退勤時間、勤務時間)に値を設定~
MOVE "DE" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "A001" TO PRT-CONTROL.
WRITE SAMP.
~フレームを変更する必要がある場合~
MOVE "CT" TO PRT-MODE.
MOVE "BLCK" TO PRT-CONTROL.
WRITE SAMP.
MOVE "CH1" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "P001" TO PRT-CONTROL.
WRITE SAMP.
4.7.3 フレームの出力方向
フレームではパーティションの出力方向として「縦」または「横」を指定することができます。「縦」の場合は集計表形式と同様に上から 下にパーティションが出力されます。(ここまでのフリーフレーム形式の説明は「縦」の場合です。)
「横」の場合、パーティションが出力された順に左から右に向かって出力されます。
図4.8 リンクフレームの例
・ 横方向に出力したい場合は、フレームの作成時に出力方向として「横」を指定します。
・ フレームの出力方向が「横」の場合は、パーティション項目群を出力すると次の出力位置が横方向に移動します。
・ パーティション出力で指定される改行数は無視され、必ず直前のパーティションに接して出力されます。
・ フレーム枠を超えて項目群を出力するとMEFP_RC_ENDFRAMELINK(6B)のエラーになります。リンクフレームがある場合は、
MEFP_RC_ENDFRAME(6C)のエラーになります。フレームの形式に縦方向が指定されている場合は縦幅を超えたときに、横方 向が指定されている場合は横幅を超えたときにエラーとなります。
例
[利用者プログラムから出力例]
~ボディに定義された項目のレコードデータ(月度、氏名、社員番号)に値を設定~
ps_write_partition(psfile, “BODY”, PS_WP_POSISION, 1, pRecord); /* BODYの出力 */
ps_write_partition(psfile, “CH1”, PS_WP_POSISION, 1, pRecord); /* CH1の出力 */
DEを1ヶ月分の出力するループ
~DEに定義されたレコードデータ(出勤時間、退勤時間、勤務時間)に値を設定~
ps_write_partition(psfile, “DE”, PS_WP_AFTERFEED, 1, pRecord); /* DEの出力 */
~フレームを変更する必要がある場合~
ps_control_printer(psfile, PS_CP_BLOCK, 0, NULL); /* 改ブロック */
ps_write_partition(psfile, “CH1”, PS_WP_POSISION, 1, pRecord); /* CH1の出力 */
~CF1のレコードデータ(合計時間)に値を設定~
ps_write_partition(psfile, “CF1”, PS_WP_POSISION, 1, pRecord); /* CF1の出力 */
* ボディの出力
~ボディに定義された項目のレコードデータ(月度、氏名、社員番号)に値を設定~
MOVE "BODY" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "P001" TO PRT-CONTROL.
WRITE SAMP.
* 制御頭書きの出力
MOVE "CH1" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "P001" TO PRT-CONTROL.
WRITE SAMP.
明細の出力を1ヶ月分繰り返す。
* 明細の出力
~DEに定義されたレコードデータ(出勤時間、退勤時間、勤務時間)に値を設定~
MOVE "DE" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "A001" TO PRT-CONTROL.
WRITE SAMP.
~フレームを変更する必要がある場合~
MOVE "CT" TO PRT-MODE.
MOVE "BLCK" TO PRT-CONTROL.
WRITE SAMP.
MOVE "CH1" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "P001" TO PRT-CONTROL.
WRITE SAMP.
* 制御脚書きの出力
MOVE "CF1" TO PRT-GROUP.
MOVE "PW" TO PRT-MODE.
MOVE "P001" TO PRT-CONTROL.
WRITE SAMP.