練習問題(条件分岐)
19.3 練習問題(条件分岐)
3. 練習問題(条件分岐)
本章で習った内容を元にプログラムを作成してみましょう。
この練習問題プログラムでは、条件分岐 について理解できているか確認します。
なお、練習問題プログラムは、以下の条件で作成しましょう。
プログラムID :ZRYYMMnnn_IF_PRACTICE
※YYは年度、MMは月、nnnは受講生番号
概要
選択画面から指定された「品目コード」(単一)を抽出条件として、
「売上テーブル:ZT200400101」と「仕入テーブル:ZT200400102」を
部結合(INNER JOIN)してデータを取得し、結果を画面に出力します。
取得結果が0件(該当なし)の場合は、メッセージを表示して RETURNで処理を終了します。
エラーメッセージを出力する処理は条件分岐にて作成します。
処理フロー
実行結果例
使用プログラム
*&---------------------------------------------------------------------*
*& プログラムID:プログラムIDを記入
*& プログラム名:練習問題(条件分岐))
*& 概要 :内部結合で取得した仕入テーブル、売上テーブルのデータを元に
*& 品目テキスト(MAKT)のデータを取得し、1件を画面に出力する。
*& 作成日付 :yyyy/mm/dd
*& 作成者 :作成者名(受講生No xxxxxx)
*&---------------------------------------------------------------------*
REPORT Z_SAMPLE19PRACTICE_IF.
*&---------------------------------------------------------------------*
* 型定義
*&---------------------------------------------------------------------*
TYPES:
* 売上テーブル、仕入テーブル格納用
TYPES: BEGIN OF TY_ITEM_RESULT,
MATNR TYPE ZT200400101-MATNR, " 品目コード
ZTEXT TYPE ZT200400101-ZTEXT, " 商品名(仕様の型に合わせる)
ZAMT_SAL TYPE ZT200400101-ZAMT_SAL, " 売上金額
ZAMT_PUR TYPE ZT200400102-ZAMT_PUR, " 仕入金額
END OF TY_ITEM_RESULT.
*&---------------------------------------------------------------------*
* 構造定義
*&---------------------------------------------------------------------*
DATA: LS_RESULT TYPE TY_ITEM_RESULT. "売上テーブル、仕入テーブル格納用
*&---------------------------------------------------------------------*
* パラメータ定義
*&---------------------------------------------------------------------*
PARAMETERS P_MATNR TYPE MATNR OBLIGATORY. "品目コード
*&---------------------------------------------------------------------*
* 主処理
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*内部結合を利用しDBテーブルを読み込み
" 売上(ZT200400101)と仕入(ZT200400102)を品目コードで結合して1件取得
SELECT SINGLE
A~MATNR,
A~ZTEXT,
A~ZAMT_SAL,
B~ZAMT_PUR
FROM ZT200400101 AS A
INNER JOIN ZT200400102 AS B
ON B~MATNR = A~MATNR
WHERE A~MATNR = @P_MATNR
INTO CORRESPONDING FIELDS OF @LS_RESULT.
*品目コードが存在しない場合エラーメッセージを出力し選択画面へ
ここにエラー処理をコーディング!
*結果画面
WRITE: / |品目コード:{ LS_RESULT-MATNR }|,
/ |商品名 :{ LS_RESULT-ZTEXT }|,
/ |売上金額 :{ LS_RESULT-ZAMT_SAL NUMBER = USER }|,
/ |仕入金額 :{ LS_RESULT-ZAMT_PUR NUMBER = USER }|.
*結果画面メッセージ出力
MESSAGE S001(ZTEST2021).
END-OF-SELECTION.
使用プログラム(答え)
*&---------------------------------------------------------------------*
*& プログラムID:プログラムIDを記入
*& プログラム名:練習問題(条件分岐)
*& 概要 :内部結合で取得した仕入テーブル、売上テーブルのデータを元に
*& 品目テキスト(MAKT)のデータを取得し、1件を画面に出力する。
*& 作成日付 :yyyy/mm/dd
*& 作成者 :作成者名(受講生No xxxxxx)
*&---------------------------------------------------------------------*
REPORT Z_SAMPLE19PRACTICE_IF
*&---------------------------------------------------------------------*
* 型定義
*&---------------------------------------------------------------------*
TYPES:
* 売上テーブル、仕入テーブル格納用
TYPES: BEGIN OF TY_ITEM_RESULT,
MATNR TYPE ZT200400101-MATNR, " 品目コード
ZTEXT TYPE ZT200400101-ZTEXT, " 商品名(仕様の型に合わせる)
ZAMT_SAL TYPE ZT200400101-ZAMT_SAL, " 売上金額
ZAMT_PUR TYPE ZT200400102-ZAMT_PUR, " 仕入金額
END OF TY_ITEM_RESULT.
*&---------------------------------------------------------------------*
* 構造定義
*&---------------------------------------------------------------------*
DATA: LS_RESULT TYPE TY_ITEM_RESULT.. "売上テーブル、仕入テーブル格納用
*&---------------------------------------------------------------------*
* パラメータ定義
*&---------------------------------------------------------------------*
PARAMETERS P_MATNR TYPE MATNR OBLIGATORY. "品目コード
*&---------------------------------------------------------------------*
* 主処理
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*内部結合を利用しDBテーブルを読み込み
" 売上(ZT200400101)と仕入(ZT200400102)を品目コードで結合して1件取得
SELECT SINGLE
A~MATNR,
A~ZTEXT,
A~ZAMT_SAL,
B~ZAMT_PUR
FROM ZT200400101 AS A
INNER JOIN ZT200400102 AS B
ON B~MATNR = A~MATNR
WHERE A~MATNR = @P_MATNR
INTO CORRESPONDING FIELDS OF @LS_RESULT.
*品目コードが存在しない場合エラーメッセージを出力し選択画面へ
" 該当なし:メッセージを表示して終了
IF SY-SUBRC <> 0.
MESSAGE S002(ZTEST2021) WITH P_MATNR '品目コード' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
*結果画面
WRITE:
/ |品目コード:{ LS_RESULT-MATNR }|,
/ |商品名 :{ LS_RESULT-ZTEXT }|,
/ |売上金額 :{ LS_RESULT-ZAMT_SAL NUMBER = USER }|,
/ |仕入金額 :{ LS_RESULT-ZAMT_PUR NUMBER = USER }|.
*結果画面メッセージ出力
MESSAGE S001(ZTEST2021).
END-OF-SELECTION.
使用プログラム内のテーブル情報やデータの中身
DBテーブル「ZT200400101」
【情報】
【データ】
■DBテーブル「ZT200400102」
【情報】
【データ】