構文 TYPES: BEGIN OF (構造データ型名), (項目名)TYPE(データ型), (項目名) TYPE(データ型), ・・・・・・・ END OF (構造データ型名). ※「BEGIN OF」と「END OF」で開始と終わりを明確に指定します。
使用例:
* 構造データ型の定義
TYPES: BEGIN OF ty_employee, " 従業員情報の構造データ型
employee_id TYPE I, " 従業員の一意の識別子(ID)
first_name TYPE STRING, " 従業員の名前
last_name TYPE STRING, " 従業員の姓
birthdate TYPE D, " 従業員の生年月日
END OF ty_employee.
構文 DATA (変数名) TYPE (データ型). 値の代入方法 (変数名) = 変数に格納するデータ.
使用例
* 基本データ型の定義(1,事前定義のABAPデータ型)
TYPES: ty_mfg_date TYPE D, " 製造日型のデータ型
ty_lot_number TYPE C LENGTH 15, " ロット番号型のデータ型
ty_phone_number TYPE STRING. " 電話番号型のデータ型
* 基本データ型の定義(2,ABAPディクショナリデータ型)
TYPES: ty_material TYPE MARA-MATNR, " MARAテーブルのMATNR項目に基づくデータ型
ty_customer TYPE KNA1-KUNNR. " KNA1テーブルのKUNNR項目に基づくデータ型
* DATA型で変数を定義
DATA: lv_mfg_date TYPE ty_mfg_date, " 製造日
lv_lot_number TYPE ty_lot_number, " ロット番号
lv_phone_number TYPE ty_phone_number, " 電話番号
lv_material TYPE ty_material, " 品目コード
lv_customer TYPE ty_customer. " 得意先コード
* 変数の使用例
lv_mfg_date = '20240401'. " 製造日の設定
lv_lot_number = 'L12345678901234'. " ロット番号の設定
lv_phone_number = '+1234567890'. " 電話番号の設定
lv_material = 'M000987654'. " 品目コードの設定
lv_customer = 'C000123456'. " 得意先コードの設定
* 変数の使用例を出力
WRITE: / '製造日:', lv_mfg_date,
/ 'ロット番号:', lv_lot_number,
/ '電話番号:', lv_phone_number,
/ '品目コード:', lv_material,
/ '得意先コード:', lv_customer.
レイナ
実行したら以下の通り出力されました!
2、構造(ワークエリア/作業領域)
構文 DATA (構造名) TYPE (構造データ型/DBテーブル). ※DBテーブルはデータ型ではありませんが、SAPの仕様で構造データ型として使用可能です。 値の代入方法 (構造名)-(項目名) = 項目に格納するデータ.
使用例
* 構造データ型の定義
TYPES: BEGIN OF ty_employee,
employee_id TYPE I, " 従業員の一意の識別子(ID)
first_name TYPE STRING, " 従業員の名前
last_name TYPE STRING, " 従業員の姓
birthdate TYPE D, " 従業員の生年月日
END OF ty_employee.
* DATA型で構造を定義
DATA: ls_employee TYPE ty_employee.
* 構造の使用例(変数の設定)
ls_employee-employee_id = 1045. " 従業員IDの設定
ls_employee-first_name = '太郎'. " 名の設定
ls_employee-last_name = '山田'. " 姓の設定
ls_employee-birthdate = '19900316'. " 生年月日の設定
* 構造の使用例を出力
WRITE: / '従業員ID:', ls_employee-employee_id NO-GROUPING,
'名前:', ls_employee-last_name && ls_employee-first_name,
'生年月日:', ls_employee-birthdate.
博士
実行したら以下の通り出力されるぞい!
3、内部テーブル
構文 ①DATA (内部テーブル名) TYPE (テーブルデータ). ②DATA (内部テーブル名) TYPE TABLE OF (構造データ型/DBテーブル). ※DBテーブルはデータ型ではありませんが、SAPの仕様で構造データ型として使用可能です。 ※内部テーブルには複数の種類があり、上記はよく使われる標準テーブルを定義しています。 値の代入方法 ※同じ型の構造を使用する
使用例:
* 構造データ型の定義
TYPES: BEGIN OF ty_employee,
employee_id TYPE I, " 従業員の一意の識別子(ID)
first_name TYPE STRING, " 従業員の名前
last_name TYPE STRING, " 従業員の姓
birthdate TYPE D, " 従業員の生年月日
END OF ty_employee.
* テーブルデータ型の定義
TYPES: ty_employee_table TYPE TABLE OF ty_employee.
* 構造の宣言
DATA: ls_employee TYPE ty_employee.
* 内部テーブルの宣言
DATA: lt_employee_tab TYPE ty_employee_table.
" テーブルデータ型を使用して従業員情報を追加
ls_employee-employee_id = 1045. " 従業員1の情報を設定
ls_employee-first_name = '太郎'.
ls_employee-last_name = '山田'.
ls_employee-birthdate = '19900316'.
APPEND ls_employee TO lt_employee_tab.
ls_employee-employee_id = 1046. " 従業員2の情報を設定
ls_employee-first_name = '花子'.
ls_employee-last_name = '山田'.
ls_employee-birthdate = '19950128'.
APPEND ls_employee TO lt_employee_tab.
" テーブル内のデータ表示
LOOP AT lt_employee_tab INTO ls_employee.
WRITE: / '従業員ID:', ls_employee-employee_id NO-GROUPING,
'名前:', ls_employee-last_name && ls_employee-first_name,
'生年月日:', ls_employee-birthdate.
ENDLOOP.
構文 SELSECT-OPTIONS (オブジェクト名) FOR (変数). ※特徴としてはTYPEオプションではなくFORを使用することです。 ※項目名を画面では日本語などで表示したい場合は、「ジャンプメニュー」→「テキストエレメント」→「選択テキスト」から設定が可能です。
使用例
TABLES: mara. " MARAテーブルを使用することを宣言
SELECT-OPTIONS: s_mat FOR mara-matnr, " 品目コードの範囲を持つ選択肢
s_lmd FOR mara-laeda. " 最終変更日付の範囲を持つ選択肢
START-OF-SELECTION.
SELECT * FROM mara
WHERE matnr IN s_mat " 選択された品目コードの範囲内にあるレコードを選択
AND laeda IN s_lmd. " 選択された最終変更日付の範囲内にあるレコードを選択
WRITE: / mara-matnr, mara-laeda, mara-mtart. " 選択されたレコードの情報を表示
ENDSELECT.