練習問題(システム項目「SY」)
20.4 練習問題(システム項目「SY」)
本章で習った内容を元にプログラムを作成してみましょう。
この練習問題プログラムでは、システム項目「SY」 について理解できているか確認します。
なお、練習問題プログラムは、以下の条件で作成しましょう。
プログラムID :ZRYYMMnnn_SY_PRACTICE
※YYMMは研修年月、 nnnは受講生番号
概要
この練習では、繰り返し処理で全件を出力するだけでなく、出力時に 行数(SY-TABIX) も表示します。
さらに、プログラムID(SY-CPROG)、実行ユーザー(SY-UNAME)、サーバー日付(SY-DATUM)、
サーバー時刻(SY-UZEIT)を出力し、システム項目の確認方法を身につけます。
● 選択画面から指定された「品目コード」(範囲指定)を抽出条件として、
売上テーブル:ZT200400101と仕入テーブル:ZT200400102を結合し、
仕入テーブルのみもしくは両方のテーブルに存在するデータを取得する。
● 対象データが存在しない場合は、エラーメッセージを出力し、選択画面に戻る。
● 対象データが存在する場合は、対象データ全件と行数を画面に出力する。
● プログラムID、実行ユーザー、サーバー日付、サーバ時刻を出力する
● 処理が完了したら、終了メッセージを出力する。
● 対象データ全件および行数が出力できるようにループを作成、かつシステム項目を出力する処理を作成
処理フロー
実行結果例
使用プログラム
*&---------------------------------------------------------------------*
*& プログラムID:プログラムIDを記入
*& プログラム名:練習問題(システム項目)
*& 概要 :選択画面に指定された品目コードと一致する売上テーブル、
*& 仕入テーブルを外部結合で取得し、全件画面に出力する。
*& 作成日付 :YYYY/MM/DD
*& 作成者 :作成者名(受講生No xxxxxx )
*&---------------------------------------------------------------------*
REPORT Z_SAMPLE20PRACTICE_SY.
"------------------------------------------------------------
" 型定義:取得結果(仕入を基準に、売上を結合)
"------------------------------------------------------------
TYPES:
BEGIN OF TY_ITEM_ROW,
MATNR TYPE ZT200400102-MATNR, "品目コード
ZTEXT TYPE ZT200400102-ZTEXT, "商品名(テキスト)
ZAMT_SAL TYPE ZT200400101-ZAMT_SAL, "売上金額(売上なしなら初期値)
ZAMT_PUR TYPE ZT200400102-ZAMT_PUR, "仕入金額
END OF TY_ITEM_ROW.
TYPES TY_ITEM_TAB TYPE STANDARD TABLE OF TY_ITEM_ROW WITH EMPTY KEY.
"------------------------------------------------------------
" 選択条件
"------------------------------------------------------------
DATA GV_MATNR TYPE MATNR.
SELECT-OPTIONS S_MATNR FOR GV_MATNR.
"------------------------------------------------------------
" 主処理
"------------------------------------------------------------
START-OF-SELECTION.
DATA LT_ITEM TYPE TY_ITEM_TAB.
" 仕入テーブルを基準に外部結合(仕入のみ/両方のデータを取得)
SELECT
P~MATNR,
P~ZTEXT,
S~ZAMT_SAL AS ZAMT_SAL,
P~ZAMT_PUR AS ZAMT_PUR
FROM ZT200400102 AS P
LEFT OUTER JOIN ZT200400101 AS S
ON P~MATNR = S~MATNR
WHERE P~MATNR IN @S_MATNR
INTO TABLE @LT_ITEM.
" 対象データが存在しない場合:エラー表示して終了
IF LT_ITEM IS INITIAL.
MESSAGE S005(ZTEST2021) WITH 'ZT200400102' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
ここに行数の項目を加えた見出し項目の処理(WRITE命令)を作成
ここに繰り返し処理によって 対象データ全件と行数を出力する処理 を作成
SKIP.
ここに指定されたシステム項目を出力する処理を作成
*結果画面メッセージ出力
MESSAGE S001(ZTEST2021).
使用プログラム(答え)
*&---------------------------------------------------------------------*
*& プログラムID:Z_SAMPLE20PRACTICE_SY
*& プログラム名:練習問題(システム項数)
*& 概要 :選択画面に指定された品目コードと一致する売上テーブル、
*& 仕入テーブルを外部結合で取得し、全件画面に出力する。
*& 作成日付 :YYYY/MM/DD
*& 作成者 :作成者名(受講生No xxxxxx )
*&---------------------------------------------------------------------*
REPORT Z_SAMPLE20PRACTICE_SY.
"------------------------------------------------------------
" 型定義:取得結果(仕入を基準に、売上を結合)
"------------------------------------------------------------
TYPES:
BEGIN OF TY_ITEM_ROW,
MATNR TYPE ZT200400102-MATNR, "品目コード
ZTEXT TYPE ZT200400102-ZTEXT, "商品名(テキスト)
ZAMT_SAL TYPE ZT200400101-ZAMT_SAL, "売上金額(売上なしなら初期値)
ZAMT_PUR TYPE ZT200400102-ZAMT_PUR, "仕入金額
END OF TY_ITEM_ROW.
TYPES TY_ITEM_TAB TYPE STANDARD TABLE OF TY_ITEM_ROW WITH EMPTY KEY.
"------------------------------------------------------------
" 選択条件
"------------------------------------------------------------
DATA GV_MATNR TYPE MATNR.
SELECT-OPTIONS S_MATNR FOR GV_MATNR.
"------------------------------------------------------------
" 主処理
"------------------------------------------------------------
START-OF-SELECTION.
DATA LT_ITEM TYPE TY_ITEM_TAB.
" 仕入テーブルを基準に外部結合(仕入のみ/両方のデータを取得)
SELECT
P~MATNR,
P~ZTEXT,
S~ZAMT_SAL AS ZAMT_SAL,
P~ZAMT_PUR AS ZAMT_PUR
FROM ZT200400102 AS P
LEFT OUTER JOIN ZT200400101 AS S
ON P~MATNR = S~MATNR
WHERE P~MATNR IN @S_MATNR
INTO TABLE @LT_ITEM.
" 対象データが存在しない場合:エラー表示して終了
IF LT_ITEM IS INITIAL.
MESSAGE S005(ZTEST2021) WITH 'ZT200400102' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
"ここに行数の項目を加えた見出し項目の処理(WRITE命令)を作成
WRITE: / '品目コード',
020 '商品名',
050 '売上金額',
070 '仕入金額'.
" 全件出力:ここに繰り返し処理によって、対象データ全件と行数を出力する処理を作成
LOOP AT LT_ITEM INTO DATA(LS_ITEM).
WRITE: / LS_ITEM-MATNR,
020(24) LS_ITEM-ZTEXT,
050 LS_ITEM-ZAMT_SAL CURRENCY 'JPY',
070 LS_ITEM-ZAMT_PUR CURRENCY 'JPY'.
ENDLOOP.
SKIP.
“ システム項目の出力(まずは素直にそのまま表示)
WRITE: / 'プログラムID :', SY-CPROG,
/ '実行ユーザー :', SY-UNAME,
/ 'サーバー日付 :', SY-DATUM,
/ 'サーバー時刻 :', SY-UZEIT.
*結果画面メッセージ出力
MESSAGE S001(ZTEST2021).
結果
使用プログラム内のテーブル情報やデータの中身
■DBテーブル「ZT200400101」
■DBテーブル「ZT200400102」