練習問題(条件分岐)
19.3 練習問題(条件分岐)
3. 練習問題(条件分岐)
本章で習った内容を元にプログラムを作成してみましょう。
この練習問題プログラムでは、条件分岐 について理解できているか確認します。
なお、練習問題プログラムは、以下の条件で作成しましょう。
プログラムID :ZRYYMMnnn_xxx_(任意)
※YYは年度 MMは月 nnnは氏名(ローマ字) xxxは任意の数値
概要
選択画面から指定された「品目コード」(単一)を抽出条件として、
売上テーブル:ZT200400101と仕入テーブル:ZT200400102を結合し、
両方のテーブルに存在するデータを取得後
その取得結果を出力する
ただし、取得結果が0件場合(該当の品目コードが存在しない場合)エラーメッセージを出力し選択画面へ戻る
処理フロー
実行結果例
該当あり
該当なし
使用プログラム
*&---------------------------------------------------------------------* *& プログラムID:プログラムIDを記入 *& プログラム名:練習問題(計算) *& 概要 :内部結合で取得した仕入テーブル、売上テーブルのデータを元に *& 品目テキスト(MAKT)のデータを取得し、1件を画面に出力する。 *& 作成日付 :yyyy/mm/dd *& 作成者 :作成者名(受講生No xxxxxx) *&---------------------------------------------------------------------* REPORT ZRyymmnnn_xxx_PRACTICE . *&---------------------------------------------------------------------* * 型定義 *&---------------------------------------------------------------------* TYPES: * 売上テーブル、仕入テーブル格納用 BEGIN OF TYP_GET_TABLE, MATNR TYPE ZT200400101-MATNR, TEXT TYPE ZT200400101-ZTEXT, AMT_SAL TYPE ZT200400101-ZAMT_SAL, AMT_PUR TYPE ZT200400102-ZAMT_PUR, END OF TYP_GET_TABLE. *&---------------------------------------------------------------------* * 構造定義 *&---------------------------------------------------------------------* DATA: ST_GET_TABLE TYPE TYP_GET_TABLE. "売上テーブル、仕入テーブル格納用 *&---------------------------------------------------------------------* * 変数定義 *&---------------------------------------------------------------------* DATA: WK_ANS TYPE ZT200400101-ZAMT_SAL, "計算結果格納用 WK_CHAR TYPE CHAR4. "文字列格納用 *&---------------------------------------------------------------------* * パラメータ定義 *&---------------------------------------------------------------------* PARAMETERS P_MATNR TYPE MATNR OBLIGATORY. "品目コード *&---------------------------------------------------------------------* * 主処理 *&---------------------------------------------------------------------* START-OF-SELECTION. *内部結合を利用しDBテーブルを読み込み SELECT SINGLE ZT200400101~MATNR "品目コード ZT200400101~ZTEXT "テキスト ZT200400101~ZAMT_SAL "売上金額 ZT200400102~ZAMT_PUR "仕入金額 FROM ZT200400101 INNER JOIN ZT200400102 ON ZT200400101~MATNR = ZT200400102~MATNR INTO ST_GET_TABLE WHERE ZT200400101~MATNR = P_MATNR. *品目コードが存在しない場合エラーメッセージを出力し選択画面へ ここにエラー処理をコーディング! *結果画面 WRITE: '品目コード', 020 ST_GET_TABLE-MATNR, / '商品名', 020(24) ST_GET_TABLE-TEXT, / '売上金額', 020 ST_GET_TABLE-AMT_SAL CURRENCY 'JPY' LEFT-JUSTIFIED, / '仕入金額', 020 ST_GET_TABLE-AMT_PUR CURRENCY 'JPY' LEFT-JUSTIFIED, / '損益', 020 WK_ANS CURRENCY 'JPY' LEFT-JUSTIFIED, 040 WK_CHAR. *結果画面メッセージ出力 MESSAGE S001(ZTEST2021). END-OF-SELECTION.
使用プログラム(答え)
*&---------------------------------------------------------------------* *& プログラムID:プログラムIDを記入 *& プログラム名:練習問題(計算) *& 概要 :内部結合で取得した仕入テーブル、売上テーブルのデータを元に *& 品目テキスト(MAKT)のデータを取得し、1件を画面に出力する。 *& 作成日付 :yyyy/mm/dd *& 作成者 :作成者名(受講生No xxxxxx) *&---------------------------------------------------------------------* REPORT ZRyymmnnn_xxx_PRACTICE . *&---------------------------------------------------------------------* * 型定義 *&---------------------------------------------------------------------* TYPES: * 売上テーブル、仕入テーブル格納用 BEGIN OF TYP_GET_TABLE, MATNR TYPE ZT200400101-MATNR, TEXT TYPE ZT200400101-ZTEXT, AMT_SAL TYPE ZT200400101-ZAMT_SAL, AMT_PUR TYPE ZT200400102-ZAMT_PUR, END OF TYP_GET_TABLE. *&---------------------------------------------------------------------* * 構造定義 *&---------------------------------------------------------------------* DATA: ST_GET_TABLE TYPE TYP_GET_TABLE. "売上テーブル、仕入テーブル格納用 *&---------------------------------------------------------------------* * 変数定義 *&---------------------------------------------------------------------* DATA: WK_ANS TYPE ZT200400101-ZAMT_SAL, "計算結果格納用 WK_CHAR TYPE CHAR4. "文字列格納用 *&---------------------------------------------------------------------* * パラメータ定義 *&---------------------------------------------------------------------* PARAMETERS P_MATNR TYPE MATNR OBLIGATORY. "品目コード *&---------------------------------------------------------------------* * 主処理 *&---------------------------------------------------------------------* START-OF-SELECTION. *内部結合を利用しDBテーブルを読み込み SELECT SINGLE ZT200400101~MATNR "品目コード ZT200400101~ZTEXT "テキスト ZT200400101~ZAMT_SAL "売上金額 ZT200400102~ZAMT_PUR "仕入金額 FROM ZT200400101 INNER JOIN ZT200400102 ON ZT200400101~MATNR = ZT200400102~MATNR INTO ST_GET_TABLE WHERE ZT200400101~MATNR = P_MATNR. *品目コードが存在しない場合エラーメッセージを出力し選択画面へ IF SY-SUBRC <> 0. MESSAGE S002(ZTEST2021) WITH P_MATNR '品目コード' DISPLAY LIKE 'E' . RETURN. ENDIF. *結果画面 WRITE: '品目コード', 020 ST_GET_TABLE-MATNR, / '商品名', 020(24) ST_GET_TABLE-TEXT, / '売上金額', 020 ST_GET_TABLE-AMT_SAL CURRENCY 'JPY' LEFT-JUSTIFIED, / '仕入金額', 020 ST_GET_TABLE-AMT_PUR CURRENCY 'JPY' LEFT-JUSTIFIED, / '損益', 020 WK_ANS CURRENCY 'JPY' LEFT-JUSTIFIED, 040 WK_CHAR. *結果画面メッセージ出力 MESSAGE S001(ZTEST2021). END-OF-SELECTION.