練習問題(繰り返し処理)
20.3 練習問題(繰り返し処理)
3. 練習問題(繰り返し処理)
本章で習った内容を元にプログラムを作成してみましょう。
この練習問題プログラムでは、繰り返し処理 について理解できているか確認します。
なお、練習問題プログラムは、以下の条件で作成しましょう。
プログラムID :ZRYYMMnnn_xxx_(任意)
※YYは年度 MMは月 nnnは氏名(ローマ字) xxxは任意の数値
概要
選択画面から指定された「品目コード」(範囲指定)を抽出条件として、
売上テーブル:ZT200400101と仕入テーブル:ZT200400102を結合し、
仕入テーブルのみもしくは両方のテーブルに存在するデータを取得する。
対象データが存在しない場合は、エラーメッセージを出力し、選択画面に戻る。
対象データが存在する場合は、対象データ全件が画面に出力する。
処理が完了したら、終了メッセージを出力する。
上記、対象データ全件が出力できるように繰り返し処理を作成
処理フロー
実行結果例
使用プログラム
*&---------------------------------------------------------------------* *& プログラムID:ZR2004001_0202_LOOP *& プログラム名:練習問題(繰り返し処理) *& 概要 :選択画面に指定された品目コードと一致する売上テーブル、 *& 仕入テーブルを外部結合で取得し、全件画面に出力する。 *& 作成日付 :YYYY/MM/DD *& 作成者 :作成者名(受講生No xxxxxx ) *&---------------------------------------------------------------------* REPORT ZRyymmnnn_xxx_PRACTICE. *&---------------------------------------------------------------------* * 型定義 *&---------------------------------------------------------------------* TYPES: *売上テーブル、仕入テーブル格納用 BEGIN OF TYP_GET_TABLE, MATNR TYPE ZT200400102-MATNR, TEXT TYPE ZT200400102-ZTEXT, AMT_SAL TYPE ZT200400101-ZAMT_SAL, AMT_PUR TYPE ZT200400102-ZAMT_PUR, END OF TYP_GET_TABLE. *&---------------------------------------------------------------------* * 内部テーブル定義 *&---------------------------------------------------------------------* DATA: IT_GET_TABLE TYPE TABLE OF TYP_GET_TABLE. "売上テーブル、仕入テーブル格納用 *&---------------------------------------------------------------------* * 構造定義 *&---------------------------------------------------------------------* DATA: ST_GET_TABLE TYPE TYP_GET_TABLE. "売上テーブル、仕入テーブル読み出し用 *&---------------------------------------------------------------------* * 変数定義 *&---------------------------------------------------------------------* DATA: WK_MATNR TYPE MATNR. "品目コード *&---------------------------------------------------------------------* * パラメータ定義 *&---------------------------------------------------------------------* SELECT-OPTIONS S_MATNR FOR WK_MATNR. "品目コード *&---------------------------------------------------------------------* * 主処理 *&---------------------------------------------------------------------* START-OF-SELECTION. * 初期化 CLEAR: IT_GET_TABLE, ST_GET_TABLE. *外部結合を利用しDBテーブルを読み込み SELECT ZT200400102~MATNR "品目コード ZT200400102~ZTEXT "テキスト ZT200400101~ZAMT_SAL "売上金額 ZT200400102~ZAMT_PUR "仕入金額 FROM ZT200400102 LEFT OUTER JOIN ZT200400101 "LEFT OUTER ON ZT200400102~MATNR = ZT200400101~MATNR INTO TABLE IT_GET_TABLE WHERE ZT200400102~MATNR IN S_MATNR. *対象データが存在しない場合エラーメッセージを出力し選択画面へ IF SY-SUBRC <> 0. MESSAGE S005(ZTEST2021) WITH 'ZT200400102' DISPLAY LIKE 'E' . RETURN. ENDIF. *結果画面 WRITE: '品目コード', 020 '商品名', 050 '売上金額', 070 '仕入金額'. ここに繰り返し処理によって 対象データ全件を出力する処理 を作成 SKIP. *結果画面メッセージ出力 MESSAGE S001(ZTEST2021). END-OF-SELECTION.
使用プログラム(答え)
*&---------------------------------------------------------------------* *& プログラムID:ZR2004001_0202_LOOP *& プログラム名:練習問題(繰り返し処理) *& 概要 :選択画面に指定された品目コードと一致する売上テーブル、 *& 仕入テーブルを外部結合で取得し、全件画面に出力する。 *& 作成日付 :YYYY/MM/DD *& 作成者 :作成者名(受講生No xxxxxx ) *&---------------------------------------------------------------------* REPORT ZRyymmnnn_xxx_PRACTICE. *&---------------------------------------------------------------------* * 型定義 *&---------------------------------------------------------------------* TYPES: *売上テーブル、仕入テーブル格納用 BEGIN OF TYP_GET_TABLE, MATNR TYPE ZT200400102-MATNR, TEXT TYPE ZT200400102-ZTEXT, AMT_SAL TYPE ZT200400101-ZAMT_SAL, AMT_PUR TYPE ZT200400102-ZAMT_PUR, END OF TYP_GET_TABLE. *&---------------------------------------------------------------------* * 内部テーブル定義 *&---------------------------------------------------------------------* DATA: IT_GET_TABLE TYPE TABLE OF TYP_GET_TABLE. "売上テーブル、仕入テーブル格納用 *&---------------------------------------------------------------------* * 構造定義 *&---------------------------------------------------------------------* DATA: ST_GET_TABLE TYPE TYP_GET_TABLE. "売上テーブル、仕入テーブル読み出し用 *&---------------------------------------------------------------------* * 変数定義 *&---------------------------------------------------------------------* DATA: WK_MATNR TYPE MATNR. "品目コード *&---------------------------------------------------------------------* * パラメータ定義 *&---------------------------------------------------------------------* SELECT-OPTIONS S_MATNR FOR WK_MATNR. "品目コード *&---------------------------------------------------------------------* * 主処理 *&---------------------------------------------------------------------* START-OF-SELECTION. * 初期化 CLEAR: IT_GET_TABLE, ST_GET_TABLE. *外部結合を利用しDBテーブルを読み込み SELECT ZT200400102~MATNR "品目コード ZT200400102~ZTEXT "テキスト ZT200400101~ZAMT_SAL "売上金額 ZT200400102~ZAMT_PUR "仕入金額 FROM ZT200400102 LEFT OUTER JOIN ZT200400101 "LEFT OUTER ON ZT200400102~MATNR = ZT200400101~MATNR INTO TABLE IT_GET_TABLE WHERE ZT200400102~MATNR IN S_MATNR. *対象データが存在しない場合エラーメッセージを出力し選択画面へ IF SY-SUBRC <> 0. MESSAGE S005(ZTEST2021) WITH 'ZT200400102' DISPLAY LIKE 'E' . RETURN. ENDIF. *結果画面 WRITE: '品目コード', 020 '商品名', 050 '売上金額', 070 '仕入金額'. LOOP AT IT_GET_TABLE INTO ST_GET_TABLE. WRITE: / ST_GET_TABLE-MATNR, 020(24) ST_GET_TABLE-TEXT, 050 ST_GET_TABLE-AMT_SAL CURRENCY 'JPY' LEFT-JUSTIFIED, 070 ST_GET_TABLE-AMT_PUR CURRENCY 'JPY' LEFT-JUSTIFIED. CLEAR:ST_GET_TABLE. ENDLOOP. SKIP. *結果画面メッセージ出力 MESSAGE S001(ZTEST2021). END-OF-SELECTION.
使用プログラム内のテーブル情報やデータの中身
■DBテーブル「ZT200400101」
【情報】
【データ】
■DBテーブル「ZT200400102」
【情報】
【データ】