020-031 帳票系プログラムその２（集計処理

## 本記事の内容とサンプルコード

本記事では、集計構造を持つ「帳票系プログラム」の解説を行う。
IBM i 上に QEOLFF 環境が存在する場合は`/QEOLFF/QRPGLESRC/BPL030@YU1.RPGLE ,BPL030@YU2.RPGLE` を、環境がない場合でもサンプルコードは次のURLより取得、閲覧可能である。

■例で使用するサンプルコード
- [ 地区別受注一覧表（固定 - /QEOLFF/QRPGLESRC/BPL030@YU1.RPGLE](https://github.com/IBMCJ-2023-C06/020-FF_RPG_samples/blob/main/QRPGLESRC/BPL030%40YU1.RPGLE)
- [ 地区別受注一覧表（ＦＦ - /QEOLFF/QRPGLESRC/BPL030@YU2.RPGLE](https://github.com/IBMCJ-2023-C06/020-FF_RPG_samples/blob/main/QRPGLESRC/BPL030%40YU2.RPGLE)
- [ 地区別受注一覧表（印刷装置 - /QEOLFF/QPRTSRC/BPL030P.PRTF](https://github.com/IBMCJ-2023-C06/020-FF_RPG_samples/blob/main/QPRTSRC/BPL030P.PRTF)
---

■印刷イメージ
![031-010-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520639/a89baf24-08c3-388a-3275-79abe0cb8c12.png)

## 前提条件

以下のリンクより、本コンテンツの **FF-RPG** サンプルコードを閲覧、実行する環境を整備する

- [010-前提条件／環境構築](https://qiita.com/ibm_knowledge_mall/items/0536889104b90990e074)
- [前回の記事）030 帳票系プログラムその１（単純一覧](https://qiita.com/ibm_knowledge_mall/items/5b76d819775941626c63)

## 参考リンク

以下、リンクは OS バージョンが **V7R5** のリンク先となっているが、サイト左の **「バージョンの変更」** より、自身の環境に合ったバージョンへ変更可能。

- [IBM i - ILE RPG 解説書(V7R5)](https://www.ibm.com/docs/ja/i/7.5?topic=rpg-ile-reference)
- [IBM i - DDS 印刷装置ファイル](https://www.ibm.com/docs/ja/i/7.5?topic=dds-printer-files)
- [ＦＦで許可されていない記述集１（ＦＦ - /QEOLFF/QRPGLESRC/@USHIDAY11.RPGLE](https://github.com/IBMCJ-2023-C06/020-FF_RPG_samples/blob/main/QRPGLESRC/%40USHIDAY11.RPGLE)

## 単純一覧と集計一覧の違い

単純一覧 `BPL010@YU2.RPGLE` と集計一覧の `BPL030@YU2.RPGLE` を比較すると、自由形式という観点で見た場合、実はコーディング等に特に違いはない。
むしろこの様な集計一覧の場合は、制作者や会社によって流儀が異なり、文化上どの様なプログラム構造を好むかによって、コーディングが大きく異なる。

基本構造は単純一覧と同じとなるが、次の様なサンプル例の様な箇所で異なるのは以下の点が多い

■自由形式
```RPGLE:BPL030@YU2.RPGLE

  //初回はブレイクさせない
  IF      W#CNTP     <= *ZERO                ;
    EXSR      @SUM1                        ;       //集計処理
    ITER                                   ;
  ENDIF                                      ;

～～～「1.」中略～～～
  //キーブレイクの判定
  IF      JHTIKU     <> W@JHTIKU             ;
    EXSR      @PTOTAL2                     ;       //地区計
  ELSEIF  JHTOKB     <> W@JHTOKB             ;
    EXSR      @PTOTAL1                     ;       //得意先計
  ENDIF                                  ;

～～～「2.」中略～～～
  EXSR      @SUM1                        ;       //集計処理

～～～「3.」中略～～～
//印刷（見出し※０件の場合
IF W#CNTP     <= *ZERO                 ;
  EXSR      @PHEAD1                      ;
ELSE                                   ;
  EXSR      @PTOTAL2                     ;       //地区計
ENDIF                                  ;

```

1. 条件分岐により「小計、中計、総合計」を出力する
2. 「1.」出力時には既に次レコードを参照しているため、 **退避変数等** に出力内容を保存する
3. データ終了時も、**退避変数等** には残存データがあるため、対象レコードが、0件と1件以上で処理が異なる事が多い

## 本サンプルで使用された組み込み関数

ここでは本サンプルで使用された組み込み関数のリンクを掲載する。

■参考リンク
- [%LOOKUPxx (配列要素の検索)](https://www.ibm.com/docs/ja/i/7.5?topic=functions-lookupxx-look-up-array-element)
- [%FOUND (検出条件の戻し)](https://www.ibm.com/docs/ja/i/7.5?topic=functions-found-return-found-condition)

## 終わりに

今回掲載しているサンプルコードは、キーブレイク（期待する連続する並び順にされたキーの切れ目）を判定し集計しているが、これも一つの手段に過ぎない。
学習方法としては、単純一覧でも良いから、多くを作成、数をこなし自由形式に慣れることが重要となる。


## 編集履歴

- 作成日：IBMCJ-2023-C06 (CSC)Y.USHIDA 2023.08.22 16:00 [新規投稿]
- 更新日：IBMCJ-2023-C06 (___)_.______ 20__.__.__ __:__ []

## 資料に関する注意書き

本資料の著作権は、日本アイ・ビー・エム株式会社（IBM Corporationを含み、以下、IBMといいます。）に帰属します。
ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独自の見解を反映したものです。それらは情報提供の目的のみで提供されており、いかなる参加者に対しても法律的またはその他の指導や助言を意図したものではなく、またそのような結果を生むものでもありません。本資料に含まれている情報については、完全性と正確性を期するよう努力しましたが、「現状のまま」提供され、明示または暗示にかかわらずいかなる保証も伴わないものとします。本資料またはその他の資料の使用によって、あるいはその他の関連によって、いかなる損害が生じた場合も、IBMまたはセッション発表者は責任を負わないものとします。 本資料に含まれている内容は、IBMまたはそのサプライヤーやライセンス交付者からいかなる保証または表明を引きだすことを意図したものでも、IBMソフトウェアの使用を規定する適用ライセンス契約の条項を変更することを意図したものでもなく、またそのような結果を生むものでもありません。

本資料でIBM製品、プログラム、またはサービスに言及していても、IBMが営業活動を行っているすべての国でそれらが使用可能であることを暗示するものではありません。本資料で言及している製品リリース日付や製品機能は、市場機会またはその他の要因に基づいてIBM独自の決定権をもっていつでも変更できるものとし、いかなる方法においても将来の製品または機能が使用可能になると確約することを意図したものではありません。本資料に含まれている内容は、参加者が開始する活動によって特定の販売、売上高の向上、またはその他の結果が生じると述べる、または暗示することを意図したものでも、またそのような結果を生むものでもありません。 パフォーマンスは、管理された環境において標準的なIBMベンチマークを使用した測定と予測に基づいています。ユーザーが経験する実際のスループットやパフォーマンスは、ユーザーのジョブ・ストリームにおけるマルチプログラミングの量、入出力構成、ストレージ構成、および処理されるワークロードなどの考慮事項を含む、数多くの要因に応じて変化します。したがって、個々のユーザーがここで述べられているものと同様の結果を得られると確約するものではありません。

記述されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使用したか、またそれらのお客様が達成した結果の実例として示されたものです。実際の環境コストおよびパフォーマンス特性は、お客様ごとに異なる場合があります。

IBM、IBM ロゴは、米国やその他の国におけるInternational Business Machines Corporationの商標または登録商標です。他の製品名およびサービス名等は、それぞれIBMまたは各社の商標である場合があります。現時点での IBM の商標リストについては、ibm.com/trademarkをご覧ください。