【新着】SAPラボのYouTubeチャンネル開設しました SAPラボチャンネルはコチラ

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

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

登場人物紹介

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

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

この記事を読むメリット

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

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

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

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

レイナ

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

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

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

【MM】

【SD】

【大手製造業S/4HANA Cloud導入(MM/SD)】埼玉・東京(ハイブリッド)/要件定義リード

月額単価
1,300,000円 / 月
稼働場所
東京都
業務領域
要件定義
稼働率:
100%
作業内容:
大手製造業の基幹システムとして、S/4HANA Cloud Public Editionを導入するプロジェクトです。 本ポジションでは、Fit-to-Standardアプローチを前提とし、クライアント側のロジスティクス領域担当として業務要件の整理からシステム要件定義、設定検討までを主体的にリードしていただきます。特に検討が薄いMM領域を重点的にご担当いただきます。 主な業務内容:
  • 物流や調達に関する業務要件の整理と、システム要件への落とし込み(Fit-to-Standard)
  • SAPで使用する機能と業務のスコープの明確化
  • 関連するマスターデータ(品目マスター、組織マスター等)の設計、およびインターフェースの仕様検討
  • クライアント側主担当者のパートナーとして、資料作成や詳細検討を推進
  • 現場部門との調整、および課題の整理・改善案の検討

【FI】

【大手製造業S/4HANA Cloud導入(FI)】埼玉・東京(ハイブリッド)/要件定義リード

月額単価
1,300,000円 / 月
稼働場所
東京都
業務領域
要件定義
稼働率:
100%
作業内容:
大手製造業の基幹システムとして、S/4HANA Cloud Public Editionを導入するプロジェクトです。 本ポジションでは、Fit-to-Standardアプローチを前提とし、クライアント側の会計領域担当として業務要件の整理からシステム要件定義、設定検討までを主体的にリードしていただきます。PL/BSに関する議論が中心となるため、FIの深い知見が求められます。 主な業務内容:
  • 業務フローや業務一覧を基に、SAP標準機能での実現可否を明確化(Fit-to-Standard)
  • SAPでの運用案、およびSAP外での代替業務案(ワークアラウンド)の検討・提案
  • SAPベンダーとの技術的な対話をサポートし、クライアントチームを支援
  • 業務部門と協働し、実現可能な新業務フローの構築
  • 既存システムとのインターフェース要件定義の検討支援
  • ワークショップにおけるディスカッションの支援、および経理・会計部門との調整・課題解決

【SD】

【中堅製造業SAP新規導入(SD設計)】フルリモート/基本設計・オフショア連携

月額単価
1,000,000円 / 月
稼働場所
フルリモート
業務領域
設計
稼働率:
100%
作業内容:
現行のAS400システムからSAP(SD, MM, PP, FI, CO)への新規導入プロジェクトです。 本ポジションでは、プロジェクトの重要なフェーズである基本設計において、SDモジュールの設計作業を中心メンバーとして担当していただきます。特に、受注、出荷、ロット管理、在庫引当といったコアな業務領域が対象となります。 主な業務内容
  • SAP SDモジュール(受注、出荷、ロット管理、在庫引当)における基本設計書の作成
  • 要件定義に基づいた、システム機能の具体化
  • オフショア(大連)の開発チームへの設計内容の説明、およびQ&A対応
  • 関連ドキュメントの作成および更新

【FI】

【SAP FI運用保守(チームリード)】フルリモート/計画管理・海外展開支援

月額単価
1,200,000円 / 月
稼働場所
フルリモート
業務領域
運用・保守
稼働率:
100%
作業内容:
SAPシステムの安定稼働を支える運用保守プロジェクトです。 本ポジションでは、FIチームのリーダーとして、チーム全体の計画管理、作業・進捗・課題管理を担います。また、海外関係会社への展開支援や、引継ぎ期間におけるメンバーのサポートなど、グローバルな視点でのリーダーシップを発揮していただきます。 主な業務内容
  • 運用保守チームリーダーとしての計画管理、作業・進捗・課題管理
  • 海外関係会社への展開支援を含む、全体計画の策定と作業管理
  • 引継ぎ期間におけるメンバーの進捗・課題管理、および報告
  • お客様やチーム内の定例・臨時会議の主催、およびファシリテーション
  • 対応メンバーへの技術的・業務的サポート

【FI】

【自動車部品メーカーSAP導入(FI-AA)】フルリモート/設計・カスタマイズ

月額単価
1,100,000円 / 月
稼働場所
フルリモート
業務領域
設計
稼働率:
100%
作業内容:
自動車部品メーカーの基幹システムとしてSAPを導入するプロジェクトです。 本ポジションでは、プロジェクトの重要な局面である要件定義後期から基本設計フェーズにおいて、FI-AA(固定資産)の専門家としてご参画いただきます。固定資産モジュールに関するカスタマイズやアドオン設計を中心メンバーとして担当していただきます。 主な業務内容
  • FI-AA(固定資産)モジュールに関するカスタマイズの設計、および実装
  • アドオン機能の基本設計、および設計書の作成
  • 要件定義の後期フェーズにおける、仕様の具体化および顧客との調整
  • 関連ドキュメントの作成および更新

【MM】

【S/4HANA導入支援(MM移行)】東京・上野(基本リモート)/移行・テスト・課題対応

月額単価
1,300,000円 / 月
稼働場所
東京都
業務領域
設計, テスト, その他
稼働率:
100%
作業内容:
SAP S/4HANAの新規導入プロジェクトにおいて、MM(在庫購買管理)領域のデータ移行を成功させることがミッションです。 本ポジションでは、MMの専門家として、データ移行の実行からテスト、発生した課題への対応まで、移行フェーズにおける一連の業務を主体的に推進していただきます。 主な業務内容:
  • MM領域のマスタデータおよびトランザクションデータの移行支援
  • 移行後のデータ検証、およびテストの実施
  • 移行やテストで発生した課題の調査、分析、および解決策の提示
  • 関連チームとの連携、および進捗報告
  • 関連ドキュメントの作成および更新

【MM】

【製造業S/4HANA導入(MM)】フルリモート/要件定義

月額単価
1,500,000円 / 月
稼働場所
フルリモート
業務領域
要件定義
稼働率:
100%
作業内容:
製造業の基幹システムとしてSAP S/4HANAを新規に導入するプロジェクトです。 本ポジションでは、プロジェクトの初期段階である要件定義フェーズにおいて、MMコンサルタントとしてエンドユーザーとの要件定義から、要件定義書の作成、関連するカスタマイズまでを主体的に担当していただきます。 主な業務内容:
  • エンドユーザーとのディスカッションを通じた、MM領域の要件定義
  • 要件定義書の作成、および管理
  • Fit&Gap分析、および新業務プロセスの設計支援
  • SAP標準機能の調査、およびカスタマイズの検討・実施
  • 関連チームとの連携、および進捗報告

【SD】

【建設業S/4HANA導入(SD)】大阪(リモート併用)/AsIs-ToBe・アドオン定義

月額単価
1,250,000円 / 月
稼働場所
大阪府
業務領域
要件定義
稼働率:
100%
作業内容:
建設業向けのSAP S/4HANA導入プロジェクトにおいて、受注・物流領域の業務プロセスを変革することがミッションです。 現在の「営業からの依頼に基づく受付業務(AsIs)」から、「手配状況を踏まえた納期調整を含む、能動的な受注調整窓口(ToBe)」へと進化させるための検討をリードし、必要なアドオン機能の要件定義を主体的に推進していただきます。 主な業務内容:
  • 受注・物流領域における、AsIsプロセスの分析およびToBeプロセスの設計
  • ToBeプロセス実現のためのFit&Gap分析、およびアドオン要件定義
  • 顧客担当者や関連部門とのディスカッション、ワークショップのファシリテーション
  • 要件定義書の作成、および管理
  • 開発チームへの設計内容の連携、およびQ&A対応

【MM】

【その他】

【製造業S/4HANA(MM/PS)】フルリモート(富山出張有)/アドオン要件定義

月額単価
1,100,000円 / 月
稼働場所
フルリモート
業務領域
要件定義
稼働率:
100%
作業内容:
製造業の基幹システムとしてSAP S/4HANAを導入するプロジェクトです。 本ポジションでは、プロジェクトの要件定義フェーズにおいて、MM(在庫購買管理)およびPS(プロジェクト管理)の専門家として、プロトタイプの検討からアドオン要件定義、カスタマイズ実装、外部設計まで、幅広い上流工程を主体的に推進していただきます。 主な業務内容:
  • 要件定義フェーズにおけるプロトタイプの作成、および業務フローの検討
  • MM/PS領域におけるアドオン機能の要件定義
  • 要件に基づくカスタマイズの実装
  • アドオン機能に関する外部設計書の作成
  • 顧客担当者や関連チームとの連携、調整

【FI】

【製造業S/4HANA導入(FI-AP/AR)】大阪(リモート相談可)/要件定義・アドオン設計

月額単価
1,600,000円 / 月
稼働場所
大阪府
業務領域
要件定義
稼働率:
100%
作業内容:
FI-GLが先行稼働しているS/4HANA環境に、FI-AP/ARモジュールを追加導入するプロジェクトです。 本ポジションでは、会計チームを支援する形で、FI-AP/AR領域の専門家としてご参画いただきます。要件定義からアドオンの設計開発フェーズにおける上流工程まで、一連のタスクを中心メンバーとして担当していただきます。 主な業務内容:
  • FI-AP/AR領域における要件定義、および顧客担当者とのディスカッション
  • Fit&Gap分析、および新業務プロセスの設計支援
  • アドオン機能の要件定義、および外部設計書の作成
  • 開発チームへの設計内容の連携、およびQ&A対応
  • 関連するカスタマイズの検討・実施
この記事のポイント

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

博士

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

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フリーランス案件

【MM】

【SD】

【大手製造業S/4HANA Cloud導入(MM/SD)】埼玉・東京(ハイブリッド)/要件定義リード

月額単価
1,300,000円 / 月
稼働場所
東京都
業務領域
要件定義
稼働率:
100%
作業内容:
大手製造業の基幹システムとして、S/4HANA Cloud Public Editionを導入するプロジェクトです。 本ポジションでは、Fit-to-Standardアプローチを前提とし、クライアント側のロジスティクス領域担当として業務要件の整理からシステム要件定義、設定検討までを主体的にリードしていただきます。特に検討が薄いMM領域を重点的にご担当いただきます。 主な業務内容:
  • 物流や調達に関する業務要件の整理と、システム要件への落とし込み(Fit-to-Standard)
  • SAPで使用する機能と業務のスコープの明確化
  • 関連するマスターデータ(品目マスター、組織マスター等)の設計、およびインターフェースの仕様検討
  • クライアント側主担当者のパートナーとして、資料作成や詳細検討を推進
  • 現場部門との調整、および課題の整理・改善案の検討

【FI】

【大手製造業S/4HANA Cloud導入(FI)】埼玉・東京(ハイブリッド)/要件定義リード

月額単価
1,300,000円 / 月
稼働場所
東京都
業務領域
要件定義
稼働率:
100%
作業内容:
大手製造業の基幹システムとして、S/4HANA Cloud Public Editionを導入するプロジェクトです。 本ポジションでは、Fit-to-Standardアプローチを前提とし、クライアント側の会計領域担当として業務要件の整理からシステム要件定義、設定検討までを主体的にリードしていただきます。PL/BSに関する議論が中心となるため、FIの深い知見が求められます。 主な業務内容:
  • 業務フローや業務一覧を基に、SAP標準機能での実現可否を明確化(Fit-to-Standard)
  • SAPでの運用案、およびSAP外での代替業務案(ワークアラウンド)の検討・提案
  • SAPベンダーとの技術的な対話をサポートし、クライアントチームを支援
  • 業務部門と協働し、実現可能な新業務フローの構築
  • 既存システムとのインターフェース要件定義の検討支援
  • ワークショップにおけるディスカッションの支援、および経理・会計部門との調整・課題解決

【SD】

【中堅製造業SAP新規導入(SD設計)】フルリモート/基本設計・オフショア連携

月額単価
1,000,000円 / 月
稼働場所
フルリモート
業務領域
設計
稼働率:
100%
作業内容:
現行のAS400システムからSAP(SD, MM, PP, FI, CO)への新規導入プロジェクトです。 本ポジションでは、プロジェクトの重要なフェーズである基本設計において、SDモジュールの設計作業を中心メンバーとして担当していただきます。特に、受注、出荷、ロット管理、在庫引当といったコアな業務領域が対象となります。 主な業務内容
  • SAP SDモジュール(受注、出荷、ロット管理、在庫引当)における基本設計書の作成
  • 要件定義に基づいた、システム機能の具体化
  • オフショア(大連)の開発チームへの設計内容の説明、およびQ&A対応
  • 関連ドキュメントの作成および更新

【FI】

【SAP FI運用保守(チームリード)】フルリモート/計画管理・海外展開支援

月額単価
1,200,000円 / 月
稼働場所
フルリモート
業務領域
運用・保守
稼働率:
100%
作業内容:
SAPシステムの安定稼働を支える運用保守プロジェクトです。 本ポジションでは、FIチームのリーダーとして、チーム全体の計画管理、作業・進捗・課題管理を担います。また、海外関係会社への展開支援や、引継ぎ期間におけるメンバーのサポートなど、グローバルな視点でのリーダーシップを発揮していただきます。 主な業務内容
  • 運用保守チームリーダーとしての計画管理、作業・進捗・課題管理
  • 海外関係会社への展開支援を含む、全体計画の策定と作業管理
  • 引継ぎ期間におけるメンバーの進捗・課題管理、および報告
  • お客様やチーム内の定例・臨時会議の主催、およびファシリテーション
  • 対応メンバーへの技術的・業務的サポート

【FI】

【自動車部品メーカーSAP導入(FI-AA)】フルリモート/設計・カスタマイズ

月額単価
1,100,000円 / 月
稼働場所
フルリモート
業務領域
設計
稼働率:
100%
作業内容:
自動車部品メーカーの基幹システムとしてSAPを導入するプロジェクトです。 本ポジションでは、プロジェクトの重要な局面である要件定義後期から基本設計フェーズにおいて、FI-AA(固定資産)の専門家としてご参画いただきます。固定資産モジュールに関するカスタマイズやアドオン設計を中心メンバーとして担当していただきます。 主な業務内容
  • FI-AA(固定資産)モジュールに関するカスタマイズの設計、および実装
  • アドオン機能の基本設計、および設計書の作成
  • 要件定義の後期フェーズにおける、仕様の具体化および顧客との調整
  • 関連ドキュメントの作成および更新

【MM】

【S/4HANA導入支援(MM移行)】東京・上野(基本リモート)/移行・テスト・課題対応

月額単価
1,300,000円 / 月
稼働場所
東京都
業務領域
設計, テスト, その他
稼働率:
100%
作業内容:
SAP S/4HANAの新規導入プロジェクトにおいて、MM(在庫購買管理)領域のデータ移行を成功させることがミッションです。 本ポジションでは、MMの専門家として、データ移行の実行からテスト、発生した課題への対応まで、移行フェーズにおける一連の業務を主体的に推進していただきます。 主な業務内容:
  • MM領域のマスタデータおよびトランザクションデータの移行支援
  • 移行後のデータ検証、およびテストの実施
  • 移行やテストで発生した課題の調査、分析、および解決策の提示
  • 関連チームとの連携、および進捗報告
  • 関連ドキュメントの作成および更新

【MM】

【製造業S/4HANA導入(MM)】フルリモート/要件定義

月額単価
1,500,000円 / 月
稼働場所
フルリモート
業務領域
要件定義
稼働率:
100%
作業内容:
製造業の基幹システムとしてSAP S/4HANAを新規に導入するプロジェクトです。 本ポジションでは、プロジェクトの初期段階である要件定義フェーズにおいて、MMコンサルタントとしてエンドユーザーとの要件定義から、要件定義書の作成、関連するカスタマイズまでを主体的に担当していただきます。 主な業務内容:
  • エンドユーザーとのディスカッションを通じた、MM領域の要件定義
  • 要件定義書の作成、および管理
  • Fit&Gap分析、および新業務プロセスの設計支援
  • SAP標準機能の調査、およびカスタマイズの検討・実施
  • 関連チームとの連携、および進捗報告

【SD】

【建設業S/4HANA導入(SD)】大阪(リモート併用)/AsIs-ToBe・アドオン定義

月額単価
1,250,000円 / 月
稼働場所
大阪府
業務領域
要件定義
稼働率:
100%
作業内容:
建設業向けのSAP S/4HANA導入プロジェクトにおいて、受注・物流領域の業務プロセスを変革することがミッションです。 現在の「営業からの依頼に基づく受付業務(AsIs)」から、「手配状況を踏まえた納期調整を含む、能動的な受注調整窓口(ToBe)」へと進化させるための検討をリードし、必要なアドオン機能の要件定義を主体的に推進していただきます。 主な業務内容:
  • 受注・物流領域における、AsIsプロセスの分析およびToBeプロセスの設計
  • ToBeプロセス実現のためのFit&Gap分析、およびアドオン要件定義
  • 顧客担当者や関連部門とのディスカッション、ワークショップのファシリテーション
  • 要件定義書の作成、および管理
  • 開発チームへの設計内容の連携、およびQ&A対応

【MM】

【その他】

【製造業S/4HANA(MM/PS)】フルリモート(富山出張有)/アドオン要件定義

月額単価
1,100,000円 / 月
稼働場所
フルリモート
業務領域
要件定義
稼働率:
100%
作業内容:
製造業の基幹システムとしてSAP S/4HANAを導入するプロジェクトです。 本ポジションでは、プロジェクトの要件定義フェーズにおいて、MM(在庫購買管理)およびPS(プロジェクト管理)の専門家として、プロトタイプの検討からアドオン要件定義、カスタマイズ実装、外部設計まで、幅広い上流工程を主体的に推進していただきます。 主な業務内容:
  • 要件定義フェーズにおけるプロトタイプの作成、および業務フローの検討
  • MM/PS領域におけるアドオン機能の要件定義
  • 要件に基づくカスタマイズの実装
  • アドオン機能に関する外部設計書の作成
  • 顧客担当者や関連チームとの連携、調整

【FI】

【製造業S/4HANA導入(FI-AP/AR)】大阪(リモート相談可)/要件定義・アドオン設計

月額単価
1,600,000円 / 月
稼働場所
大阪府
業務領域
要件定義
稼働率:
100%
作業内容:
FI-GLが先行稼働しているS/4HANA環境に、FI-AP/ARモジュールを追加導入するプロジェクトです。 本ポジションでは、会計チームを支援する形で、FI-AP/AR領域の専門家としてご参画いただきます。要件定義からアドオンの設計開発フェーズにおける上流工程まで、一連のタスクを中心メンバーとして担当していただきます。 主な業務内容:
  • FI-AP/AR領域における要件定義、および顧客担当者とのディスカッション
  • Fit&Gap分析、および新業務プロセスの設計支援
  • アドオン機能の要件定義、および外部設計書の作成
  • 開発チームへの設計内容の連携、およびQ&A対応
  • 関連するカスタマイズの検討・実施

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

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

SAPラボのライターの特徴

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

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

募集要項

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

ご応募/お問合せ先

info@sap-labo.com

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

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

この記事を書いた人

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

この記事のポイント