ページプリンタのグラフィック帳票を利用した,帳票の出力例について説明します。
グラフィック帳票では,フィールドの表示属性を動的変更(強調,網掛け,抹消線など)できます。この例では,ある条件に見合ったフィールドに対してだけ,各フィールドの表示属性を変更します。
APからフィールドの表示属性を変更するには,フィールド用の制御項目に修飾名を格納します。この例では,売上げが「12」以上のフィールドに対して,「太字」属性を示す「XMAP-FIELD-BL」を格納しています。また,売上げが「4」以上のフィールドに対して,「標準網掛け」属性を示す「XMAP-FIELD-SH」を格納しています。
次にコーディング例を示します。マップ名は,「MDC1PC」です。
プログラムサイズは約28KBです。
000100************************************************************
000200* プログラム名 : ページプリンタ-文字強調変更例題 *
000300* ファイル名 : MDCHRPC *
000400* 説明 : 文字の強調属性を動的に変更する例題です *
000500* グラフィック帳票でのみ使用できます *
000600************************************************************
000700 IDENTIFICATION DIVISION.
000800 PROGRAM-ID. MDCHRPC.
000900*
001100*
001200 DATA DIVISION.
001300*
001400 WORKING-STORAGE SECTION.
001500*
001600* 月次別売上データファイル
001700 01 売上データ.
001800 02 売上データファイル.
001900 03 FILLER PIC X(78)
002000 VALUE ' 10 8 5 13 4 1
002100- ' '.
* (途中省略)
002200 02 FILLER
002300 REDEFINES 売上データファイル OCCURS 12.
002400 03 売上データレコード PIC X(78).
002500
002600 77 正常 PIC X(5) VALUE '00000'.
002700 77 異常 PIC X(2) VALUE X'0001'.
002800 77 月次カウンタ PIC 9(2) COMP.
002900 77 支店カウンタ PIC 9(2) COMP.
003000 77 最小値 PIC ZZZ9.
003100 77 最大値 PIC ZZZ9.
003200*
003300************************************************************
003400* 論理マップと動的変更テーブルの取込み *
003500************************************************************
003600* 論理マップの取り込み
003700 COPY MDC1PCO.
003800
003900*動的変更テーブルの取り込み--"XMAP3インストール先¥INCLUDE"にあります
004000 COPY X3MODTBL.
004100*
004200************************************************************
004300* 通信記述 *
004400************************************************************
004500 COMMUNICATION SECTION.
004600* プリンタに対する通信記述項
004700 CD PRT FOR OUTPUT WS
004800 MAP NAME IS 帳票マップ名
004900 SYMBOLIC TERMINAL IS 帳票端末名
005000 STATUS KEY IS 帳票-RC.
005100************************************************************
005200* プログラム開始 *
005300************************************************************
005400 PROCEDURE DIVISION.
005500*
005600 MOVE 正常 TO 帳票-RC.
005700
005800* 出力先プリンタの設定
005900 MOVE 'PRT001' TO 帳票端末名.
006000
006100* 出力エリアのクリア
006200 MOVE ALL X'1F' TO MDC1PCG.
006300
006400* マップ名の設定
006500 MOVE 'MDC1PC6G' TO 帳票マップ名.
006600
006700* 印字データの設定
006800 PERFORM 印字データ設定処理.
006900
007000* 帳票印刷
007100 SEND PRT FROM MDC1PCO WITH EMI.
007200
007300* 結果確認
007400 IF 帳票-RC = 正常
007500 THEN
007600 CONTINUE
007700 ELSE
007800 DISABLE PRT
007900 MOVE 12 TO RETURN-CODE
008000 STOP RUN
008100 END-IF.
008200*
008300 GO TO 正常終了.
008400
008500************************************************************
008600* プログラムの終了 *
008700************************************************************
008800 正常終了.
008900
009000* プリンタのクローズ
009100 DISABLE PRT.
009200
009300 MOVE +0 TO RETURN-CODE.
009400 STOP RUN.
009500
009600************************************************************
009700* 本来なら,DBファイルなどから入力しますが, *
009800* 本例では固定データをテーブルやファイルから取り込みます *
009900************************************************************
010000 印字データ設定処理 SECTION.
010100
010200* 支店名称の設定
010300 MOVE 1 TO 支店カウンタ.
010400 PERFORM WITH TEST BEFORE UNTIL 支店カウンタ > 6
010500 EVALUATE 支店カウンタ
010600 WHEN 1
010700 MOVE N'港支店' TO MDC1PC-支店名称-O(支店カウンタ)
010800 WHEN 2
010900 MOVE N'練馬支店' TO MDC1PC-支店名称-O(支店カウンタ)
011000 WHEN 3
011100 MOVE N'足立支店' TO MDC1PC-支店名称-O(支店カウンタ)
011200 WHEN 4
011300 MOVE N'豊島支店' TO MDC1PC-支店名称-O(支店カウンタ)
011400 WHEN 5
011500 MOVE N'板橋支店' TO MDC1PC-支店名称-O(支店カウンタ)
011600 WHEN 6
011700 MOVE N'荒川支店' TO MDC1PC-支店名称-O(支店カウンタ)
011800 END-EVALUATE
011900
012000 COMPUTE 支店カウンタ = 支店カウンタ + 1
012100 END-PERFORM.
012200
012300* 月次データの設定(売上明細データをファイルから読み込みます)
012400 PERFORM WITH TEST AFTER
012500 VARYING 月次カウンタ
012600 FROM 1 BY 1 UNTIL (月次カウンタ >= 12)
012700 MOVE 売上データレコード(月次カウンタ)
012800 TO MDC1PC-月次明細-O(月次カウンタ)
012900 END-PERFORM.
013000
013100************************************************************
013200* フィールド属性の動的変更 *
013300* 本来は設定したデータに対してある条件をもとに動的変更を *
013400* 行いますが,ここでは以下のように属性を変更します *
013500* 最小値(4)以下 : 標準属性 → 網掛け属性(XMAP-FIELD-SH) *
013600* 最大値(12)以上 : 標準属性 → 太字属性(XMAP-FIELD-BL) *
013700************************************************************
013800 MOVE 1 TO 月次カウンタ
013900 MOVE 1 TO 支店カウンタ
014000 MOVE 4 TO 最小値
014100 MOVE 12 TO 最大値.
014200 PERFORM WITH TEST BEFORE UNTIL 月次カウンタ > 12
014300 PERFORM WITH TEST BEFORE UNTIL 支店カウンタ > 6
014400
014500* 最小値チェック
014600 IF MDC1PC-月次データ-O(月次カウンタ,支店カウンタ)
014700 <= 最小値
014800 THEN
014900 MOVE XMAP-FIELD-SH TO
015000 MDC1PC-月次データ-A(月次カウンタ,支店カウンタ)
015100 ELSE
015200 CONTINUE
015300 END-IF
015400* 最大値チェック
015500 IF MDC1PC-月次データ-O(月次カウンタ,支店カウンタ)
015600 >= 最大値
015700 THEN
015800 MOVE XMAP-FIELD-BL TO
015900 MDC1PC-月次データ-A(月次カウンタ,支店カウンタ)
016000 ELSE
016100 CONTINUE
016200 END-IF
016300
016400 COMPUTE 支店カウンタ = 支店カウンタ + 1
016500 END-PERFORM
016600
016700 MOVE 1 TO 支店カウンタ
016800 COMPUTE 月次カウンタ = 月次カウンタ + 1
016900
017000 END-PERFORM.
017100
017200 印字データ設定処理-END.
017300 EXIT.
017400************************************************************
017500 END PROGRAM MDCHRPC.