画面・帳票サポートシステム XMAP3 プログラミングガイド 帳票編
書式オーバレイでは,AP実行時に出力形式を決められます。例えば,キーデータが変わったところで見出しやけい線によって区切りを付けたり,文字サイズを変更したりして印刷できます。
ここでは,書式オーバレイ機能を使用した集計表でブレークキーによって,出力形式を変更する例を示します。
図9-13 コントロールブレークで出力される帳票の出力例
処理の概要を示します。
コントロールブレークを利用した書式オーバレイのコーディングパターンの例(一部抜粋)を次に示します。プログラムサイズは,約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.
All Rights Reserved. Copyright (C) 2001, 2006, Hitachi, Ltd.