9.3.5 COBOLによるフィールド属性の動的変更例(文字強調変更例題

ページプリンタのグラフィック帳票を利用した,帳票の出力例について説明します。

グラフィック帳票では,フィールドの表示属性を動的変更(強調,網掛け,抹消線など)できます。この例では,ある条件に見合ったフィールドに対してだけ,各フィールドの表示属性を変更します。

(a) 出力例

[図データ]

物理マップサイズの目安は,約33KBです。
(b) コーディング例

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.