練習問題(システム項目「SY」)
20.4 練習問題(システム項目「SY」)
4. 練習問題(システム項目「SY」)
本章で習った内容を元にプログラムを作成してみましょう。
この練習問題プログラムでは、システム項目「SY」 について理解できているか確認します。
なお、練習問題プログラムは、以下の条件で作成しましょう。
プログラムID :ZRYYMMnnn_xxx_(任意)
※YYは年度 MMは月 nnnは氏名(ローマ字) xxxは任意の数値
概要
選択画面から指定された「品目コード」(範囲指定)を抽出条件として、
売上テーブル:ZT200400101と仕入テーブル:ZT200400102を結合し、
仕入テーブルのみもしくは両方のテーブルに存在するデータを取得する。
対象データが存在しない場合は、エラーメッセージを出力し、選択画面に戻る。
対象データが存在する場合は、対象データ全件と行数を画面に出力する。
かつ プログラムID、実行ユーザー、サーバー日付、サーバ時刻を出力する
処理が完了したら、終了メッセージを出力する。
上記、対象データ全件および行数が出力できるように繰り返し処理を作成
かつシステム項目を出力する処理を作成
処理フロー
実行結果例
使用プログラム
*&---------------------------------------------------------------------* *& プログラム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命令)を作成 *繰り返し処理(行数も表示するversion) ここに繰り返し処理によって 対象データ全件と行数を出力する処理 を作成 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 '仕入金額', 090 '行数'. 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, 090 SY-TABIX. CLEAR:ST_GET_TABLE. ENDLOOP. SKIP. WRITE: / 'プログラムID ', 020 SY-CPROG, / '実行ユーザ', 020 SY-UNAME, / 'サーバ日付', 020 SY-DATUM, / 'サーバ時刻', 020 SY-UZEIT. *結果画面メッセージ出力 MESSAGE S001(ZTEST2021). END-OF-SELECTION.