【SAP ABAP】基本構文:データ定義(TYPES、DATA、CONSTANTS、FIELD-SYMBOLS、PARAMETERS、SELECT-OPTIONS)

ABAP基本構文(データ宣言)

登場人物紹介

三崎レイナ
社会人1年目。新卒でITコンサルティングファームに就職。初配属がSAPプロジェクトにアサインされる。SAPがわからないことだらけで悩んでいたところ、会社の先輩にSAPラボの所長を紹介され、毎週末に所長とSAPのお勉強中!

博士
SAPラボの所長。SAP大好き博士!SAP導入プロジェクトを構想策定~運用保守まであらゆるフェーズを数多く経験。
いまは優しきおじいちゃんだが、プロマネバリバリの時代はかなり怖かったらしい。現在は引退し、SAPの後進育成と啓蒙活動に従事中!

この記事を読むメリット

  • ABAPを用いて変数・構造・内部テーブル・定数の定義(TYPES命令・DATA命令・CONSTANTS命令)ができるようになります。
  • 動的なデータの参照と操作を可能にするFIELD-SYMBOLS命令を使用できるようになります。
  • 選択画面に入力フィールドを作成するPARAMETERS命令、SELECT-OPTIONS命令を使用できるようになります。
博士

今回はABAPのデータ定義に焦点を当てて説明していくぞい!

データ定義はプログラムの基本となる要素で、プログラムがデータを理解して処理するための鍵なのじゃ。

データ定義を学ぶ上で、具体的にはデータ構造データ型について理解することが大事なのじゃ!

レイナ

ABAPの基礎となる要素なんですね!
しっかり学んでいきます!よろしくお願いします!

SAPフリーランスバンク SAPフリーランスバンク

新着のSAPフリーランス案件

【FI】

S/4HANAへのバージョンアップ支援(Jrコンサル可)

要スキル:
・FIの標準機能と会計業務に関する知識 ・FIのプロジェクトにおけるコンサルとしての業務経験 【尚可】 FI-AAの業務経験
月額単価:
~800,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
S/4HANAへバージョンアップに向けた、会計領域の要件定義を行っております。 要件定義後の移行設計や作業も行っていただく想定です。 ・現行の業務の整理 ・移行要件定義 ・現行のアドオン調査と設計 ・移行設計 ・移行作業 など

【PP】

メーカー向けSAP移行プロジェクト支援

要スキル:
・PPモジュールでのコンサルとしての業務経験 ・SAPプロジェクトにおける総合テストやユーザテストの対応経験 ・チームリーダーとしての経験
月額単価:
~1,500,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
ECCからS/4HANAへのバージョンアップを行っています。業務自体も見直し再構築する流れとなっており2026年の稼働に向けてプロジェクトが進んでおります。 ・インターフェース設計 ・ジョブ設計 ・総合テスト対応(不具合調査など含む) ・ユーザテスト対応(不具合調査など含む) など

【MM】

【SD】

製造業向けロジ領域の運用保守支援

要スキル:
・SDもしくはMMでのコンサルとしての業務経験 ・アドオン機能(ABAP)の調査経験 ・改善提案の経験
月額単価:
~900,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
フルモジュール稼働しているシステムにおける運用保守業務を担当頂きます。 ・顧客からのQA対応 ・不具合の調査や改善提案 ・顧客要望による機能拡張調査や実装~テスト など ※今後、S/4HANAへのバージョンアッププロジェクトも控えております。  そのプロジェクトにもアサイン頂く可能性がございます。

【BASIS】

【MM】

【SD】

製造業向け運用保守支援支援

要スキル:
・SDもしくはMMもしくはBASISでのコンサルとしての業務経験
月額単価:
~900,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
製造業のクライアント向けの運用保守業務を担当頂きます。 ・顧客からのQA対応 ・不具合の調査や改善提案 ・顧客要望による機能拡張調査や実装~テスト

【CO】

【FI】

【MM】

【PP】

【SD】

大手メーカー社向けSAP導入支援

要スキル:
・SAPコンサルとしてロジ領域もしくは会計領域での要件定義から本番稼働まで担当した経験
月額単価:
~1,400,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
複数の子会社を持つ大手メーカーでのSAP導入プロジェクトになります。 まずは数年かけ本社へのSAP導入を実施し、その後子会社へ展開する予定となります。 ・要件定義 ・プロトタイプの作成 ・アドオン設計 ・開発チームへの依頼や受け入れ等 ・総合テストやユーザテスト など

【FI】

商社向け基幹システムバージョン支援

要スキル:
(必須) SAP S/4HANA FIモジュールの保守開発経験(障害対応など) ABAP開発経験 (尚可) 商社関連案件の経験 リーダー経験
月額単価:
~1,000,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
SAPベースの基幹システムのバージョンアップ(S/4HANA1909⇒S/4HANA2023)に伴う調査を行っていただきます。 担当いただくモジュールはFIになります。機能毎の影響度や動作確認を行います。 また、SAP案件でのリーダー経験がある場合は上記のバージョンアップ調査ではなく 通常の保守チームにアサインいただく可能性もございます。(ユーザー窓口対応、問合せ調査・障害対応、マスタメンテナンス) バージョンアップ調査のチーム構成としては、SD、MM担当が1名、FI担当が1名となります。 そのため、基本的に1人称で調査を行い報告まで行っていただきます。 バージョンアップのスケジュール感 調査:2024年1月まで 実施:2024年2月から

【FI】

SAP運用業務支援

要スキル:
・SAPにおける運用保守経験(3年以上目安) ・FIまたはMMのユーザーとしての使用経験
月額単価:
~900,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
【作業概要】 現行SAP ECCからS/4 HANAへの移行試験が進行中です。 【作業内容】  現行SAP ECCのAA、FI、MMモジュールにおける運用業務  ・問合せ対応  ・障害対応  ・運用オペレーション

【FI】

SAP導入プロジェクト支援

要スキル:
・FI領域の要件定義書から基本設計書おこしの経験 ・顧客とのコミュニケーションして業務を進めた経験
月額単価:
~1,200,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
ロジ・会計領域をS/4HANAへ刷新に向けた会計領域の基本設計フェーズ作業を行っていただきます。

【FI】

光学機器 S/4HANA導入テスト支援

要スキル:
・FIコンサルとして要件定義~本稼働までの経験 ・FI(AP/AR)の機能、カスタマイズの知識 ・アドオン設計(開発除く)~各種テスト
月額単価:
~1,500,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
生産基幹システムのS/4新規導入プロジェクトです。 既存の会計システムとの連携→ロジデータを送信(AP/AR)と原価計算が対象となりUAT移行を担当頂きます。 スケジュール感:  2024年10月~2024年12月:結合テスト  2025年1月:UAT、移行  2025年2月:サービスパーツ 本稼働  2025年3月以降:展開

【CO】

一般消費財メーカーS/4 HANAバージョンアップ

要スキル:
<必須スキル> ・管理会計(CO)の全般の理解と実装経験、特にCO-PA(収益性分析)に関連した実装経験 ・顧客の業務要件の把握ととりまとめ、それに基づく実装方法検討、S/4での設定・カスタマイズ、アドオン要件の切り出し ・開発要件に関する基本設計、単体テスト仕様書作成、および単体テストの実施経験 ・SAPの予算機能に関する知見 ・課題に対する問題分析および解決策を的確に導いた経験 <あれば尚可> ・CO-PAの原価ベースから勘定ベースへの移行の経験 ・外部からの収益性データに関する取り込み経験 ・顧客が有しているSAP外のシステムとの関係性の整理、適切なソリューション検討経験 ・CO-PC(原価計算)、品目元帳の領域についての実装経験 ・原価周りに関する他モジュール(MM、PPなど)と原価との関わりについての知見
月額単価:
~1,600,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
<業務内容> ・CO-PA領域に関する業務要件の整理と定義書への取りまとめ ・基本設計書の作成 ・開発物の単体テスト受け入れ ・導入プロジェクトでの一連のテスト作業 ・データ移行に関する要件の取りまとめとデータ移行の実施
この記事のポイント

データ構造(変数・構造・内部テーブル)

博士

まずはデータ構造に焦点を当てるぞい。
データ構造の主な要素として、変数・構造・および内部テーブルがあるぞい。これらのデータオブジェクトを駆使して、データをより柔軟に取り扱うことが可能じゃ!

1、変数(Variable
変数は単一のデータを格納するための入れ物で、1つの値(例:商品の名称、価格、数量)を表します。   
2、構造(Structure
構造は関連するデータを一つにまとめるための仕組みで、複数の変数を束ねて一つのデータオブジェクトを作ります(例: 一つの商品の名称、価格、数量)。ワークエリアや作業領域とも呼ばれることもあります。
3、内部テーブル(Internal Table
内部テーブルは複数のデータをリストとして管理するための仕組みで、構造や変数をリスト化して一括で管理できます(例: 複数の商品情報を保持するリスト)。
ABAPデータ構造(変数、構造、内部テーブル)イメージ図
※変数・構造・内部テーブルは「箱」のようなものでデータオブジェクトと呼びます。
※データオブジェクトの1つの項目のことをコンポーネントと呼びます。

博士

まずはイメージ図を覚えるといいぞい。

これらのデータ構造の各要素が「どんな大きさか」や「文字列なのか数字なのか」など、どんなデータを持つかを指定するために使用されるのがデータ型じゃ!

データ型

博士

データ型はプログラムを書く上での土台で、正しく理解して使うことが大切なのじゃ!
データ型を以下の3つに分けて説明するぞい!

1、事前定義のABAPデータ型

SAPをインストールした際に事前に定義され、プログラム開発者が追加の定義を行わずに利用できる基本のデータ型です。これらのABAPデータ型はどのプログラムでも利用可能です。

博士

事前定義のABAPデータ型を以下に記載するぞい。

データ型意味有効項目長初期項目長初期値
数値データ型
I整数固定長(4バイト)40
F浮動小数点数固定長(8バイト)80
Pパック数値固定長(1~16バイト)80
文字データ型
Cテキスト固定長(1~65535文字)1空白
N数値テキスト固定長(1~65535文字)10埋め
D日付固定長(8文字)800000000
T時刻固定長(6文字)6000000
STRING文字列可変長(文字列)空白
XSTRINGX文字列可変長(バイト文字列)空白
16進データ型
X16進項目固定長(1~65535バイト)1X’00
事前定義のABAPデータ型

データ宣言時のポイント
・I、F、D、T型:
詳細な技術属性(有効項目長、初期項目長、初期値)が全て定義されています。
・P、C、N、X型:
有効項目長が決まっていないため、DATA命令などで項目長を定義する必要があります
上記の表の通りデータ型それぞれに「初期項目長」が定義されているので、項目長を設定しない場合は、「初期項目長」が自動的に設定されます
※P型の場合は項目長と小数点以下桁数を指定
・STRING、XSTRING型:
項目長が可変であるため、変数を宣言する際に特定の長さを指定する必要はありません
プログラム実行時に値を割当てることで、動的に変化させることができます。

使用例
* 固定長での変数定義
DATA: lv_int TYPE I,                       " 整数型 (I型)
      lv_pack TYPE P LENGTH 8 DECIMALS 2,  " パック数値型 (P型)
      lv_char TYPE C LENGTH 10.            " テキスト型 (C型)

* 可変長での変数定義
DATA: lv_string TYPE STRING,      " 可変長文字列型 (STRING型)
      lv_xstring TYPE XSTRING.    " バイナリデータ型 (XSTRING型)
博士

DATA命令については後で詳しく説明するぞい!

2、ABAPディクショナリデータ型

ABAPディクショナリ(ABAP Dictionary、T-CODE:SE11)は、情報を一元的に管理するためのツールで、その一部としてABAPディクショナリデータ型が扱われます。開発者はこの機能を利用して、プログラム内のデータ型を定義できます。これらのデータ型はどのプログラムからでも呼び出し可能であり、データ型や桁数は参照元項目に準拠します

使用例
* ABAPディクショナリデータ型を使用した変数を定義
DATA: lv_char_name TYPE char20,           " char型変数、20文字
      lv_char_description TYPE char50,    " char型変数、50文字
      lv_numc TYPE numc5.                 " char型変数、5桁
博士

最初は理解は難しいかもしれんが、使いながら徐々に覚えていけば良いぞい。使っているうちに理解して使いこなせるようになるのじゃ!

3、ユーザー定義のABAPデータ型(ローカルデータ型)

プログラム開発者は、主にTYPES命令を使用してプログラム内でデータ型を定義できます。ただし、これらのデータ型は事前に定義されたABAPデータ型とは異なり、他のプログラムから参照して利用することはできません

博士

ユーザー定義のABAPデータ型(ローカルデータ型)は、変数・構造・内部テーブルのすべてのデータ型を宣言することができ、基本データ型構造データ型テーブルデータ型に分けられるぞい。各データ型で構文が異なる為、この流れでTYPES命令について主な構文を説明していくぞい!

TYPES命令

1、基本データ型

構文
 TYPES (データ型名) TYPE (データ型).
 ※データ型には1,事前定義のABAPデータ型または2,ABAPディクショナリデータ型を指定します。

使用例
* 基本データ型の定義(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命令だけでも事足りるぞい!

補足①:チェーン命令について
チェーン命令は同一の命令をまとめて記述することができコード全体がすっきりと見やすくなります。
ABAP(チェーン命令)
ABAPのチェーン命令では、各命令の後に “:” を付け命令が終わるごとに “,” を使用します。
最後の命令の後には必ずピリオドを付けます


補足②:TYPES命令とTYPEオプションの違い
・TYPES命令:データ型を定義
・TYPEオプション:データ型を指定

2、構造データ型

構文
 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.
博士

「BEGIN OF」と「END OF」を書き忘れると、1,基本データ型を定義したこと同じになってしまうので、忘れないように注意するのじゃ!

3、テーブルデータ型

構文
 TYPES (データ型名) TYPE TABLE OF 構造データ型/DBテーブル).
 ※TYPEオプションの後に「TABLE OF」を記述します。
 ※DBテーブルはデータ型ではありませんが、SAPの仕様で構造データ型として使用可能です。

使用例
* テーブルデータ型の定義(2,構造データ型の使用例で定義した従業員情報の構造データ型を使用)
TYPES: ty_employee_table TYPE TABLE OF ty_employee.
博士

TYPES命令の基本的な構文と使い方については以上じゃ。
データ型だけではプログラム内で実際に値を保持したり、処理したりすることはできないぞい。このデータ型を使用して変数・構造・内部テーブルを定義するのじゃ!
次は変数・構造・内部テーブルを定義するためのDATA命令について説明するぞい!

DATA命令

混乱しやすいTYPES命令とDATA命令の違い
・TYPES命令:変数/構造/内部テーブルの基となる新しい「データ型」を定義
・DATA命令:「データ型」を使用して変数/構造/内部テーブルを宣言

博士

DATA型の構文は基本的には変数・構造・内部テーブルそれぞれ一緒に見えるが、使用するデータ型が異なるのじゃ!

1、変数

構文
 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.
レイナ

実行したら以下の通り出力されました!
ABAPデータ構造(変数)サンプルプログラム実行結果

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.
博士

実行したら以下の通り出力されるぞい!
ABAPデータ構造(構造)サンプルプログラム実行結果

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.
レイナ

2、構造の結果と同じ型で2名分の情報が出力されました!
ABAPデータ構造(内部テーブル)サンプルプログラム実行結果

博士

APPEND命令LOOP~ENDLOOP命令WRITE命令についても別の記事で説明するぞい!

CONSTANTS命令

博士

次に定数の宣言について説明するぞい!
定数はプログラム中で変えることのできない定まった値のことじゃ。定数を使用することで可読性と保守性が向上するぞい。
CONSTANTS命令で定数を定義することが可能じゃ!

構文
 CONSTANTS (項目名) TYPEデータ型VALUE (初期値).
 ※構文としてはDATA命令と一緒ですが、宣言時にVALUEオプションを利用して「初期値」を指定する必要があります

使用例:
* 定数の定義
CONSTANTS: c_discount_rate TYPE P DECIMALS 2 VALUE '0.15', " 割引率(15%)
           c_percentage_value TYPE P VALUE '100'.          " パーセンテージ変換用(100)

* データ宣言
DATA: lv_price TYPE P DECIMALS 2,     " 商品価格
      lv_discount_rate TYPE P,        " 割引率(%)
      lv_discount TYPE P DECIMALS 2.  " 割引額

* 商品価格と割引の計算
lv_price = '150.00'.  "商品価格に150を代入
lv_discount_rate = c_discount_rate * c_percentage_value.
lv_discount = lv_price * c_discount_rate.

* 結果の表示
WRITE: / '商品価格:', lv_price,
       / '割引率:', lv_discount_rate, '%',
       / '割引額:', lv_discount.
レイナ

実行したら以下の通り出力されました!
ABAPデータ構造(定数)サンプルプログラム実行結果

FIELD-SYMBOLS命令

博士

次はフィールドシンボルを説明していくぞい!変数・構造・内部テーブルは物理的なメモリを確保しているが、フィールドシンボルは実体を持たない仮置き場のようなものじゃ!プログラム実行時に設定した変数・構造・内部テーブルのメモリ領域を割り当てることができ、直接参照することができるのじゃ。使用例を見た方がイメージしやすいぞい!

構文
 FIELD-SYMBOLS <(フィールドシンボル名)> TYPE (データ型).
 ※フィールドシンボル名は<>で囲む必要があります。
 ※データ型を指定しない場合は「ANY」で宣言することができます。
割り当ての構文一例
 ①ASSIGN (データオブジェクト名) TO <(フィールドシンボル名)>.
 ②LOOP AT (内部テーブル名) ASSIGNING <(フィールドシンボル名)>. ~ ENDLOOP.

使用例:
DATA: gv_string TYPE string VALUE 'Hello'.

FIELD-SYMBOLS: <fs_any> TYPE ANY.

" フィールドシンボルに文字列型変数の値を入力
ASSIGN gv_string TO <fs_any>.

" フィールドシンボルの値をWRITE
WRITE: / 'String value (Field Symbol):', <fs_any>.

" フィールドシンボルの値を変更し、本体側に反映
<fs_any> = 'New String'.

" 文字列型変数の値を表示
WRITE: / 'String value (Original):', gv_string.
レイナ

実行したら以下のように出力されました!
ABAPデータ構造(フィールドシンボル)サンプルプログラム実行結果
1つ目のWRITE文では<fs_any>に割り当てられたgv_stringの値がそのまま出力されていますね!
その後<fs_any>の値の変更を介して、gv_stringも値が変更され、2つ目のWRITE文ではその変更が反映されたgv_stringの値が出力されているのですね!

博士

その通りじゃ!
フィールドシンボルは割り当てられたデータオブジェクトを参照していると同時に、フィールドシンボルに何かしら処理を行った場合、その処理が自動的にデータオブジェクトにも反映されるのが利点じゃ!
その他にも作業領域の確保が不要なため、メモリ消費を削減でき、構造を使う通常のLOOPより処理速度が速くなるのじゃ!

PARAMETERS命令

博士

選択画面(プログラムを実行するときに実行条件を入力したり選択する画面)からデータオブジェクトを作成することも可能だぞい!
最後に選択画面を作成するのに使用されるPARAMETERS命令SELECT-OPTIONS命令を説明するぞい!
PARAMETERS命令は選択画面に1つの入力フィールドを作成することが可能じゃ!

構文
 PARAMETERS (オブジェクト名) TYPE (データ型) (オプション).
 ※オブジェクト名は8文字までです。
 ※項目名を画面では日本語などで表示したい場合は、「ジャンプメニュー」→「テキストエレメント」→「選択テキスト」から設定が可能です。

使用例
PARAMETERS p_name TYPE string DEFAULT 'World'.

WRITE: / 'Hello', p_name, '! Welcome to the Greeting Program!'.
博士

上記の使用例そのままでプログラムを作成して実行してみると下記のように出力されるぞい!
ABAPデータ構造(PARAMETERS)サンプルプログラム実行結果 選択画面
これが簡単な選択画面じゃ!この「World」を自分の名前に置き換えて「実行」ボタンを押下してみるのじゃ!

レイナ

実行したら以下のように選択画面で入力した名前が出力されました!
ABAPデータ構造(PARAMETERS)サンプルプログラム実行結果

SELECT-OPTIONS命令

博士

SELECT-OPTIONS命令は開始(From)と終了(To)の値を指定する入力フィールドを作成することが可能じゃ!
今回は詳しく説明しないが、ここで入力した内容はレンジテーブルという内部テーブルに格納されるぞい!

構文
 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.
博士

上記の使用例そのままでプログラムを作成して実行してみると下記のように出力されるぞい!
ABAPデータ構造(SELECT-OPTIONS)サンプルプログラム実行結果 選択画面
PARAMETERS命令と同じように選択画面が出力されるぞい!各項目に対して入力欄が2つ設けられているのじゃ。
これらの欄に適当な値を入れて実行してみるのじゃ!

レイナ

実行したら以下のように選択画面で入力した品目コードと最終変更日に該当するデータが出力されました!
ABAPデータ構造(SELECT-OPTIONS)サンプルプログラム実行結果
選択画面のABAPデータ構造(SELECT-OPTIONS)補足ボタンを押下することで、値を複数入力したり、除外する値を入力したりすることが可能なんですね!いろいろ試してみます!

博士

今回はデータ定義についての概要データ宣言する各種命令の基本的な使い方を説明したぞい!
今回説明した以外にも使用方法やオプションなど様々使い方があるので、基本に慣れてきたころに説明するぞい!

レイナ

データ定義や宣言の方法についてイメージが出来ました!プログラムを組んでいく中でより理解を深めていきます!

新着のSAPフリーランス案件

【FI】

S/4HANAへのバージョンアップ支援(Jrコンサル可)

要スキル:
・FIの標準機能と会計業務に関する知識 ・FIのプロジェクトにおけるコンサルとしての業務経験 【尚可】 FI-AAの業務経験
月額単価:
~800,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
S/4HANAへバージョンアップに向けた、会計領域の要件定義を行っております。 要件定義後の移行設計や作業も行っていただく想定です。 ・現行の業務の整理 ・移行要件定義 ・現行のアドオン調査と設計 ・移行設計 ・移行作業 など

【PP】

メーカー向けSAP移行プロジェクト支援

要スキル:
・PPモジュールでのコンサルとしての業務経験 ・SAPプロジェクトにおける総合テストやユーザテストの対応経験 ・チームリーダーとしての経験
月額単価:
~1,500,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
ECCからS/4HANAへのバージョンアップを行っています。業務自体も見直し再構築する流れとなっており2026年の稼働に向けてプロジェクトが進んでおります。 ・インターフェース設計 ・ジョブ設計 ・総合テスト対応(不具合調査など含む) ・ユーザテスト対応(不具合調査など含む) など

【MM】

【SD】

製造業向けロジ領域の運用保守支援

要スキル:
・SDもしくはMMでのコンサルとしての業務経験 ・アドオン機能(ABAP)の調査経験 ・改善提案の経験
月額単価:
~900,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
フルモジュール稼働しているシステムにおける運用保守業務を担当頂きます。 ・顧客からのQA対応 ・不具合の調査や改善提案 ・顧客要望による機能拡張調査や実装~テスト など ※今後、S/4HANAへのバージョンアッププロジェクトも控えております。  そのプロジェクトにもアサイン頂く可能性がございます。

【BASIS】

【MM】

【SD】

製造業向け運用保守支援支援

要スキル:
・SDもしくはMMもしくはBASISでのコンサルとしての業務経験
月額単価:
~900,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
製造業のクライアント向けの運用保守業務を担当頂きます。 ・顧客からのQA対応 ・不具合の調査や改善提案 ・顧客要望による機能拡張調査や実装~テスト

【CO】

【FI】

【MM】

【PP】

【SD】

大手メーカー社向けSAP導入支援

要スキル:
・SAPコンサルとしてロジ領域もしくは会計領域での要件定義から本番稼働まで担当した経験
月額単価:
~1,400,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
複数の子会社を持つ大手メーカーでのSAP導入プロジェクトになります。 まずは数年かけ本社へのSAP導入を実施し、その後子会社へ展開する予定となります。 ・要件定義 ・プロトタイプの作成 ・アドオン設計 ・開発チームへの依頼や受け入れ等 ・総合テストやユーザテスト など

【FI】

商社向け基幹システムバージョン支援

要スキル:
(必須) SAP S/4HANA FIモジュールの保守開発経験(障害対応など) ABAP開発経験 (尚可) 商社関連案件の経験 リーダー経験
月額単価:
~1,000,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
SAPベースの基幹システムのバージョンアップ(S/4HANA1909⇒S/4HANA2023)に伴う調査を行っていただきます。 担当いただくモジュールはFIになります。機能毎の影響度や動作確認を行います。 また、SAP案件でのリーダー経験がある場合は上記のバージョンアップ調査ではなく 通常の保守チームにアサインいただく可能性もございます。(ユーザー窓口対応、問合せ調査・障害対応、マスタメンテナンス) バージョンアップ調査のチーム構成としては、SD、MM担当が1名、FI担当が1名となります。 そのため、基本的に1人称で調査を行い報告まで行っていただきます。 バージョンアップのスケジュール感 調査:2024年1月まで 実施:2024年2月から

【FI】

SAP運用業務支援

要スキル:
・SAPにおける運用保守経験(3年以上目安) ・FIまたはMMのユーザーとしての使用経験
月額単価:
~900,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
【作業概要】 現行SAP ECCからS/4 HANAへの移行試験が進行中です。 【作業内容】  現行SAP ECCのAA、FI、MMモジュールにおける運用業務  ・問合せ対応  ・障害対応  ・運用オペレーション

【FI】

SAP導入プロジェクト支援

要スキル:
・FI領域の要件定義書から基本設計書おこしの経験 ・顧客とのコミュニケーションして業務を進めた経験
月額単価:
~1,200,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
ロジ・会計領域をS/4HANAへ刷新に向けた会計領域の基本設計フェーズ作業を行っていただきます。

【FI】

光学機器 S/4HANA導入テスト支援

要スキル:
・FIコンサルとして要件定義~本稼働までの経験 ・FI(AP/AR)の機能、カスタマイズの知識 ・アドオン設計(開発除く)~各種テスト
月額単価:
~1,500,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
生産基幹システムのS/4新規導入プロジェクトです。 既存の会計システムとの連携→ロジデータを送信(AP/AR)と原価計算が対象となりUAT移行を担当頂きます。 スケジュール感:  2024年10月~2024年12月:結合テスト  2025年1月:UAT、移行  2025年2月:サービスパーツ 本稼働  2025年3月以降:展開

【CO】

一般消費財メーカーS/4 HANAバージョンアップ

要スキル:
<必須スキル> ・管理会計(CO)の全般の理解と実装経験、特にCO-PA(収益性分析)に関連した実装経験 ・顧客の業務要件の把握ととりまとめ、それに基づく実装方法検討、S/4での設定・カスタマイズ、アドオン要件の切り出し ・開発要件に関する基本設計、単体テスト仕様書作成、および単体テストの実施経験 ・SAPの予算機能に関する知見 ・課題に対する問題分析および解決策を的確に導いた経験 <あれば尚可> ・CO-PAの原価ベースから勘定ベースへの移行の経験 ・外部からの収益性データに関する取り込み経験 ・顧客が有しているSAP外のシステムとの関係性の整理、適切なソリューション検討経験 ・CO-PC(原価計算)、品目元帳の領域についての実装経験 ・原価周りに関する他モジュール(MM、PPなど)と原価との関わりについての知見
月額単価:
~1,600,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
<業務内容> ・CO-PA領域に関する業務要件の整理と定義書への取りまとめ ・基本設計書の作成 ・開発物の単体テスト受け入れ ・導入プロジェクトでの一連のテスト作業 ・データ移行に関する要件の取りまとめとデータ移行の実施

★★★SAPラボのライター募集★★★

SAPラボでは、SAPの知識を活かして副業をしたい方を募集してるのじゃ!

SAPラボのライターの特徴

・ライティング初心者OK!
・報酬高単価!
・業務委託契約なので副業として最適!

SAP記事執筆者としての活動実績として利用可能なので、転職時や案件探しの際に企業へのアピール材料にもなります。

募集要項

・SAP導入や運用保守プロジェクトへの参画経験1年以上

ご応募/お問合せ先

info@sap-labo.com

少しでもご興味ある方、ぜひお気軽にご連絡下さい!

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

新卒でSAPエンジニアとしてABAPでの新規開発や保守業務を担当。
業務内容としてはロジ系(MM/SD)がメインで、ABAPの開発が最も得意。

この記事のポイント