画面・帳票サポートシステム XMAP3 プログラミングガイド 帳票編

[目次][用語][索引][前へ][次へ]

9.3.9 COBOLでのコントロールブレークを利用した例(ブレーク項目例題

書式オーバレイでは,AP実行時に出力形式を決められます。例えば,キーデータが変わったところで見出しやけい線によって区切りを付けたり,文字サイズを変更したりして印刷できます。

ここでは,書式オーバレイ機能を使用した集計表でブレークキーによって,出力形式を変更する例を示します。

(a) 出力例

図9-13 コントロールブレークで出力される帳票の出力例

[図データ]

書式オーバレイのサイズの目安は,約1KBです。
(b) 処理の流れ

処理の概要を示します。

[図データ]

(c) コーディング

コントロールブレークを利用した書式オーバレイのコーディングパターンの例(一部抜粋)を次に示します。プログラムサイズは,約32KBです。

 
000100************************************************************
000200* <書式ブレークポイント>                                       *
000300************************************************************
000400************************************************************
000500* 指定環境  環境変数    CBLX_PRT001=#PRT                             *
000600* コンパイルオプション  -XMAP,LinePrintまたは-Ks                    *
000700* 書式名                BRK1FC6G.FMP                                 *
000800* 行制御データ          BRK1FC6G.PCI                                 *
000900************************************************************
001000 IDENTIFICATION      DIVISION. 
001100 PROGRAM-ID.         BRKPTFC. 
001200 ENVIRONMENT         DIVISION. 
001300 INPUT-OUTPUT        SECTION.
001400 FILE-CONTROL. 
001500   SELECT  プリンタ  ASSIGN  TO  PRT001 
001600           ORGANIZATION IS SEQUENTIAL 
001700           FILE  STATUS  IS  プリンタ状態. 
001800                       :
001900*       
002000************************************************************
002100*       書式印刷の定義                                               *
002200************************************************************
002300 I-O-CONTROL.  
002400   APPLY  FORMS-OVERLAY  TO  書式名  ON  プリンタ. 
002500*  
002600 DATA  DIVISION. 
002700 FILE  SECTION.
002800************************************************************
002900*       プリンタの定義                                               *
003000************************************************************
003100   FD  プリンタ  IS  GLOBAL 
003200       RECORDING  MODE  IS  F 
003300       LABEL  RECORD  IS  OMITTED 
003400       DATA  RECORD  IS  行データ. 
003500************************************************************
003600*       一行分のデータエリア                                         *
003700************************************************************
003800   01  行データ                PIC  X(71). 
003900*    
004000   FD  伝票ファイル. 
004100*  
004200   FD  商品マスタファイル. 
004300   01  商品レコード. 
004400          :   
004500 WORKING-STORAGE    SECTION. 
004600 01  書式名                    PIC  X(8). 
004700        :  
004800 01   ブレーク行1.  
004900   02   FILLER                 PIC  X(2)    VALUE SPACE. 
005000   02   ハイフンフィールド     PIC  X(66)   VALUE 
005100 '−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
005200 '−'.  
005300                          :
005400 77  明細最終行                PIC  S9(4) VALUE  60. 
005500************************************************************
005600*       プログラムの開始                                             *
005700************************************************************
005800 PROCEDURE          DIVISION. 
005900 帳票処理. 
006000*   
006100*       プリンタのオープン 
006200     OPEN  OUTPUT  プリンタ.  
006300     IF  プリンタ状態  =  正常 
006400       THEN 
006500*        書式マップ名の設定
006600         MOVE  'BRK1FC6G'  TO  書式名
006700*  
006800         PERFORM  ファイルオープン
006900* 
007000*       1ページ分の印刷処理
007100         PERFORM  1ページ印刷  UNTIL  印刷終了 = 1 
007200*    
007300         PERFORM  ファイルクローズ 
007400* 
007500         CLOSE  プリンタ 
007600         IF  プリンタ状態  NOT  =  正常 
007700           THEN 
007800             MOVE  異常  TO  プログラム状態 
007900         END-IF 
008000* 
008100       ELSE 
008200         MOVE  異常  TO  プログラム状態 
008300     END-IF.
008400************************************************************
008500*       プログラムの終了                                             *
008600************************************************************
008700     IF  プログラム状態  =  正常 
008800       THEN  
008900         MOVE  正常終了  TO  RETURN-CODE 
009000       ELSE 
009100         MOVE  異常終了  TO  RETURN-CODE
009200     END-IF. 
009300*  
009400     STOP  RUN. 
009500*  
009600************************************************************
009700*       一ページ印刷                                                *
009800************************************************************
009900 1ページ印刷  SECTION. 
010000* 
010100        :
010200
010300     PERFORM  ヘッダ印刷. 
010400*  
010500     IF  プログラム状態  =  正常 
010600       THEN  
010700         PERFORM  明細印刷
010800     END-IF. 
010900*
011000     IF  プログラム状態  =  正常 
011100       THEN  
011200         PERFORM  トレイラ印刷  
011300     END-IF. 
011400 1ページ印刷-END. 
011500     EXIT. 
011600************************************************************
011700*       ヘッダ印刷処理                                               *
011800************************************************************
011900 ヘッダ印刷  SECTION.  
012000       :
012100 ヘッダ印刷-END. 
012200     EXIT. 
012300************************************************************
012400*       明細印刷処理                                                 *
012500************************************************************
012600 明細印刷  SECTION.  
012700     MOVE  +0  TO  合計. 
012800*   
012900     PERFORM  伝票読み込み
013000     PERFORM  WITH  TEST  BEFORE  
013100          UNTIL  ((伝票ファイルEOF = 1)  OR 
013200                  (プログラム状態  =  異常)  OR 
013300                  (行カウンタ  >  明細最終行)) 
013400       MOVE  SPACE  TO  行データ 
013500* 
013600       PERFORM  ブレーク判定
013700*    
013800       PERFORM  明細行組み立て
013900       COMPUTE    合計  =  合計  +  WK-売上高 
014000       MOVE  明細行  TO  行データ  
014100       MOVE  1  TO  改行数 
014200       PERFORM  行出力 
014300*   
014400       PERFORM  伝票読み込み
014500     END-PERFORM.  
014600*  
014700     IF  伝票ファイルEOF = 1 
014800       THEN 
014900         MOVE  1  TO  合計行出力 
015000         MOVE  1  TO  印刷終了
015100     END-IF. 
015200* 
015300 明細印刷-END.  
015400     EXIT. 
015500************************************************************
015600*       トレイラ印刷処理                                             *
015700************************************************************
015800 トレイラ印刷  SECTION. 
015900       :
016000 トレイラ印刷-END. 
016100     EXIT.  
016200************************************************************
016300*       ブレーク判定処理                                             *
016400************************************************************
016500 ブレーク判定  SECTION. 
016600     IF  地区名  NOT = WK-地区名 
016700       THEN  
016800         IF  WK-地区名  NOT =  HIGH-VALUE
016900           THEN   
017000             MOVE  ブレーク行1  TO  行データ
017100             MOVE  1  TO  改行数  
017200             PERFORM  行出力
017300         END-IF       
017400         MOVE  地区名  TO  WK-地区名   
017500         MOVE  担当者名  TO  WK-担当者名 
017600         MOVE  レベル1ブレーク  TO  ブレークフラグ
017700       ELSE 
017800         IF  担当者名  NOT = WK-担当者名 
017900           THEN  
018000             IF  WK-担当者名  NOT =  HIGH-VALUE
018100               THEN 
018200                 MOVE  ブレーク行2  TO  行データ 
018300                 MOVE  1  TO  改行数
018400                 PERFORM  行出力
018500             END-IF   
018600             MOVE  担当者名  TO  WK-担当者名 
018700             MOVE  レベル2ブレーク  TO  ブレークフラグ 
018800         END-IF  
018900     END-IF. 
019000* 
019100 ブレーク判定-END.  
019200     EXIT. 
019300************************************************************
019400*       行出力処理                                                   *
019500************************************************************
019600 行出力  SECTION. 
019700     WRITE  行データ  BEFORE  ADVANCING   改行数  LINE. 
019800     IF  プリンタ状態  NOT  =  正常 
019900       THEN   
020000         MOVE  異常  TO  プログラム状態 
020100     END-IF.  
020200     COMPUTE  行カウンタ = 行カウンタ + 改行数.
020300*      
020400 行出力-END.   
020500     EXIT.   
020600************************************************************
020700        :
020800        :
020900************************************************************
021000 END  PROGRAM  BRKPTFC.

注※
COBOL2002の場合は-XMAP,LinePrint,COBOL85の場合は-Ksとなります。