練習問題(繰り返し処理)

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」

【情報】

【データ】


NEXT>> 20.4 練習問題(システム項目「SY」)