【SAP ABAP】基本構文:初期化(CLEAR、REFRESH、FREE)

登場人物紹介

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

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

この記事を読むメリット

  • CLEAR命令・REFRESH命令・FREE命令を使用して、変数・構造・内部テーブルの初期化やメモリの解放ができるようになります。
博士

今回はデータオブジェクトの初期化について説明していくぞい!

データオブジェクトを適切に初期化することは、プログラムの整合性とパフォーマンスにおいて非常に重要なのじゃ!

レイナ

今回もよろしくお願いします!

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

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

【MM】

【PP】

製造業向けSAP PP領域の工場展開支援

要スキル:
・PP/MMのSAP導入をコンサルとして要件定義の対応経験のある方 ・顧客と直接対話し、業務を進めて頂く事が可能な方 ・国内の工場への出張対応が可能な方(関西方面や九州など)
月額単価:
~1,700,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
顧客用テンプレートをベースとした国内工場へのSAP展開プロジェクトになります。 PPコンサルタントとしてFit&GAP、課題検討、テストや移行支援を実施頂きます。

【SD】

大手国内SIer関連会社に対するテンプレート展開PJの要件定義支援(SD)

要スキル:
・SD領域における要件定義の対応経験 ・顧客折衝し業務を推進していける方
月額単価:
~1,750,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
関連会社へテンプレートを用いSAP展開していくプロジェクトとなります。 SDのコンサルタントとして要件定義からご担当頂きます。

【FI】

大手国内SIer関連会社に対するテンプレート展開PJの要件定義支援(FI)

要スキル:
・FI領域における要件定義の対応経験 ・顧客折衝し業務を推進していける方
月額単価:
~1,750,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
関連会社へテンプレートを用いSAP展開していくプロジェクトとなります。 FIのコンサルタントとして要件定義からご担当頂きます。

【FI】

輸送用機器企業様向けS/4導入案件支援

要スキル:
S/4HANAでの上流工程の業務経験
月額単価:
~1,600,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
国内基幹システムをSAP S/4HANAへ移行する案件プロジェクトになります。 同社の海外向けS/4販売物流テンプレートを日本向けにロールインするもの。 現在、基本設計フェーズに着手中(~2025/4)。2027/1リリース予定。

【CO】

【FI】

S/4HANA Privateの導入支援(開発~単体テスト)

要スキル:
・ABAP開発経験5年以上の方 【尚可】 ・基本設計者と開発者をつなぐような品質管理やリーダーポジションを対応できる方
月額単価:
~850,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
基本的に会計系のモジュールにおける詳細設計以降の工程を担当頂きます。

【PP】

生産領域(PP)でのテスト工程支援

要スキル:
・テスト工程におけるSAP導入のプロジェクト経験がある方 ・PPモジュール経験があり、顧客と対峙してタスクの推進ができる方 ※コミュニケーション力重視
月額単価:
~1,500,000円 / 月
稼働場所:
フルリモート
稼働率:
100%
作業内容:
国内大手化学品メーカー向けのS/4 HANAへの移行プロジェクトにおいて、S/4チームの生産チームメンバー・タスクリーダーとして稼働頂きます。 ・結合テスト、システムテスト、ユーザテストの計画・推進・実施 ・ユーザ教育(業務変更点説明、オペレーション教育)および移行タスクの推進(業務切替、システム切替の周知や啓蒙活動)

【CO】

【FI】

ハードウエアリプレイスに伴うSAPシステム検証支援

要スキル:
・SAPの会計領域の知識がある方
月額単価:
~800,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
サーバの引っ越しに伴いSAPの機能変更等はないものの、システムが正しく動作するのかを検証するためのプロジェクトです。 対象モジュールはFI/COとなり、該当モジュールにおけるテストシナリオ作成・システムデータ作成・SAPの動作確認を行っております。 業務フローやSAPマニュアルがあるので、それを基にテストシナリオを作成して進めて頂きます。

【SD】

空調機メーカーS/4導入におけるFiori設計支援

要スキル:
・要件確認から設計書修正~開発受入実施ができる方 ・デバックで不具合箇所を特定できる方 ・販売領域における標準テーブルの知識を持っている方
月額単価:
~1,100,000円 / 月
稼働場所:
フルリモート
稼働率:
100%
作業内容:
S/4導入時におけるFioriの設計以降の作業をご担当頂きます。

【MM】

【PP】

電気機器メーカー向けSAPの運用保守支援

要スキル:
業務要件を整理して、設計書、ABAP開発が可能な方。 Jrコンサル、SEレベルの方が望ましい
月額単価:
~1,000,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
SAPのAdd-on追加開発または、運用保守をご担当頂きます。 業務領域としては、MMおよびPP領域となります。

【MM】

【SD】

ERPシステム要件定義支援

要スキル:
パラメータ定義(要件をカスタマイズに落とし込む)やアドオン機能設計ができること
月額単価:
~1,300,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
パラメータ定義(要件をカスタマイズに落とし込む)やアドオン機能設計などをご担当いただきます。
この記事のポイント

初期化について

ABAPにおける「初期化」とは、変数、構造、内部テーブルのデータオブジェクトを、それらが宣言されたときの状態、つまり空の状態に戻す操作を指します。
※データオブジェクトの宣言時にVALUEオプションで初期値が設定されていた場合でも、空の状態に戻します。

初期化の重要性

データ整合性の維持再利用される変数にデータが残っていると、正確な結果を得ることができません。例えば、顧客情報を格納する変数を再利用すると、以前の顧客の情報が残っている可能性があります。これにより、誤った情報が表示等される可能性があります。適切な初期化を行うことで、データの整合性を維持します。

エラーの防止初期化されていない変数を使用すると、予期しない動作やエラーが発生する可能性があります。例えば、初期化されていない変数を条件式として使用すると、不正な値が比較される可能性があります。初期化により、プログラムの安全性が向上します。

リソースの効率的な管理大きなデータ構造を使用する場合、初期化を行うことで不要なメモリの使用を回避し、パフォーマンスを改善することができます。

博士

ABAPの初期化命令には、CLEAR命令、REFRESH命令、FREE命令があるぞい!以下は簡単な概要じゃ。

  • CLEAR命令:変数・構造・内部テーブルを初期化
  • REFRESH命令:内部テーブルを初期化(※現在は非推奨)
  • FREE命令:内部テーブルのメモリ領域を解放

CLEAR命令

博士

まずはCLEAR命令じゃ。
CLEAR命令は変数・構造・内部テーブルを初期化するための命令だぞい!

構文
 CLEAR (データオブジェクト).
 ※内部テーブルを指定した場合は、全ての行のデータを削除し初期化します。
 ※定数を初期化することはできません。

 ※ヘッダー付き内部テーブル(現在非推奨)の内部テーブル部分を初期化する場合はデータオブジェクト名に[]を付けます。

使用例
* 内部テーブル
DATA: it_mara TYPE STANDARD TABLE OF mara.
" ヘッダー付き内部テーブル(現在非推奨)
DATA: it_mara_h TYPE STANDARD TABLE OF mara WITH HEADER LINE.
* 変数
DATA: lv_int TYPE i VALUE 200.

* メイン処理
lv_int = 100.                             " 200から100に書換え
APPEND INITIAL LINE TO it_mara.           " 1行空白行を追加
APPEND INITIAL LINE TO it_mara_h.         " 1行空白行を追加

* CLEAR命令で変数/構造/内部テーブル/ヘッダー付き内部テーブルを初期化
CLEAR: lv_int, it_mara, it_mara_h.
BREAK-POINT.

※動きを比較するため、13,14行目以外はCLEAR命令、REFRESH命令、FREE命令の使用例でも使いまわします。

実行結果(デバッグ画面)

実行前(※この後説明するREFRESH命令、FREE命令にも共通の実行前データ)
ABAP初期化(CLEAR命令)サンプルプログラム実行前

実行後
ABAP初期化(CLEAR命令)サンプルプログラム実行後

博士

CLEAR命令はヘッダー付き内部テーブルの場合は構造部分(作業領域)のみ初期化するぞい!
内部テーブル部分をCLEAR命令で初期化する場合は内部テーブル名の後に[]を追加する必要があるのじゃ!

例:CLEAR: it_mara_h[].
また、CLEAR命令ではメモリは確保されたままだぞい!

ヘッダー付き内部テーブルとは
内部テーブルと構造(作業領域)が合体したテーブルのことです。
内部テーブル部分と構造(作業領域)部分で名前が同じであるため、紛らわしいことが特徴です。
 CLEAR命令:構造(作業領域)部分を初期化
 REFRESH命令:内部テーブル部分を初期化(CLEAR命令に[]を付けるのと同様)

※現在はヘッダー付き内部テーブルは非推奨となっています。

REFRESH命令 ※現在は非推奨

博士

次はREFRESH命令じゃ。
REFRESH命令は内部テーブルの全ての行を削除し空の状態に初期化するための命令だぞい!

構文
 REFRESH (内部テーブル).
 ※CLEAR命令と異なり、REFRESH命令は変数・構造には使用できません。

使用例
* REFRESH命令で内部テーブル/ヘッダー付き内部テーブルを初期化
REFRESH: it_mara, it_mara_h.

※CLEAR命令の使用例の13,14行目を上記の内容で書き換えてください。

実行結果(デバッグ画面)

実行後(※実行前はCLEAR命令説明部分を参照)
ABAP初期化(REFRESH命令)サンプルプログラム実行後

博士

REFRESH命令はヘッダー付き内部テーブルの場合は内部テーブルの部分のみ初期化するぞい!

現在ヘッダー付き内部テーブルは非推奨の方針のため、あわせてREFRESH命令も非推奨となっており、新規でプログラムを実装する時はCLEAR命令のみで十分なのじゃ!
また、REFRESH命令はCLEAR命令と同様にメモリは確保されたままだぞい!

FREE命令

博士

最後はFREE命令じゃ。
FREE命令は内部テーブルの全ての行を削除するのはCLEAR命令とREFRESH命令と同様じゃが、異なるのはその行が占有していたメモリ領域を解放することじゃ!
特にデータ量の多い内部テーブルに使用すると有効だぞい。

構文
 FREE (データオブジェクト).
 ※内部テーブル以外の変数・構造はCLEAR命令と同様に動作します。

使用例
* FREE命令で内部テーブル/ヘッダー付き内部テーブルのメモリを解放
FREE: it_mara, it_mara_h.

※CLEAR命令の使用例の13,14行目を上記の内容で書き換えてください。

実行結果(デバッグ画面)

実行後(※実行前はCLEAR命令説明部分を参照)
ABAP初期化(FREE命令)サンプルプログラム実行後

博士

FREE命令はCLEAR命令とREFRESH命令とは異なり、メモリ領域自体が解放されていることがデバッグ画面で確認できたぞい!
FREE命令は内部テーブルが完全に不要にな場合にのみ使用すべきなのじゃ。

レイナ

状況にあった命令を使用することが大切ですね!
ちなみに初期化を忘れたらどうなるんでしょうか…?

初期化忘れに注意!

博士

初期化忘れは起こりがちじゃ!

以下に初期化を忘れた場合の例を作成してみたぞい。
33行目のCLEAR命令がある状態とない状態で実行した結果を見てみるのじゃ!

使用例
TYPES: BEGIN OF ty_item,
         product_name TYPE string,           " 商品名
         unit_price   TYPE p DECIMALS 2,     " 単価
         quantity     TYPE i,                " 数量
         shipping_fee TYPE p DECIMALS 2,     " 送料
       END OF ty_item.
TYPES: BEGIN OF ty_final_item,
         product_name TYPE string,           " 商品名
         total_price  TYPE p DECIMALS 2,     " 合計金額
         shipping_fee TYPE p DECIMALS 2,     " 送料
       END OF ty_final_item.

DATA: it_item TYPE TABLE OF ty_item,               " 商品情報の内部テーブル
      it_final_item TYPE TABLE OF ty_final_item,   " 最終商品情報の内部テーブル
      ls_item TYPE ty_item,                        " 商品情報の構造
      ls_final_item TYPE ty_final_item.            " 最終商品情報の構造

* 内部テーブルに商品情報を追加
APPEND VALUE ty_item( product_name = 'Product 1' unit_price = 100 quantity = 55 shipping_fee = 300 ) TO it_item.
APPEND VALUE ty_item( product_name = 'Product 2' unit_price = 120 quantity = 20 shipping_fee = 600 ) TO it_item.
APPEND VALUE ty_item( product_name = 'Product 3' unit_price = 60 quantity = 150 shipping_fee = 900 ) TO it_item.

* 合計金額の計算と送料のチェック
LOOP AT it_item INTO ls_item.
  ls_final_item-product_name = ls_item-product_name.
  ls_final_item-total_price = ls_item-unit_price * ls_item-quantity.

  IF ls_final_item-total_price >= 5000.
    ls_final_item-shipping_fee = ls_item-shipping_fee. " 合計金額が5000以上の場合は送料も最終商品情報に入れる
  ENDIF.

  APPEND ls_final_item TO it_final_item.
  CLEAR: ls_final_item. " ループの最後に最終商品情報の構造を初期化
ENDLOOP.

* 結果の表示
LOOP AT it_final_item INTO ls_final_item.
  WRITE: / '商品名:', ls_final_item-product_name, ' 合計金額:', ls_final_item-total_price, ' 送料:', ls_final_item-shipping_fee.
ENDLOOP.
実行結果

CLEAR命令あり
ABAP初期化(CLEAR命令)サンプルプログラム実行後
CLEAR命令なし
ABAP初期化(CLEAR命令)サンプルプログラム実行後

レイナ

CLEAR命令の有無で結果が変わっていますね!

博士

そうじゃ!
LOOP内で使用する変数や構造は適切に初期化しないと、前回のデータが残ったままになり、結果に影響を与えることがあるので注意が必要だぞい!!

他にも初期化が必要なケースはあるので適切な初期化を心がけ、プログラムの安全性と効率性を向上させるのじゃ!

まとめ

レイナ

教えてもらった内容をまとめてみました!

初期化命令内部テーブルの初期化ヘッダー付き内部テーブルの初期化説明
CLEARCLEAR itab.CLEAR itab.:ヘッダー部分のみ初期化
CLEAR itab[].:内部テーブル部分のみ初期化
変数・構造・内部テーブルを初期化
REFRESHREFRESH itab.REFRESH itab.:内部テーブル部分のみ初期化
 ※CLEAR itab[].と同様
 ※ヘッダー部分は初期化されない
※非推奨
内部テーブルのみ初期化
FREEFREE itab.FREE itab.
 ※ヘッダー部分は初期化されない
内部テーブルのメモリを解放
変数・構造はCLEAR命令と同じ動作
各初期化命令の説明
博士

完璧じゃ!

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

【MM】

【PP】

製造業向けSAP PP領域の工場展開支援

要スキル:
・PP/MMのSAP導入をコンサルとして要件定義の対応経験のある方 ・顧客と直接対話し、業務を進めて頂く事が可能な方 ・国内の工場への出張対応が可能な方(関西方面や九州など)
月額単価:
~1,700,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
顧客用テンプレートをベースとした国内工場へのSAP展開プロジェクトになります。 PPコンサルタントとしてFit&GAP、課題検討、テストや移行支援を実施頂きます。

【SD】

大手国内SIer関連会社に対するテンプレート展開PJの要件定義支援(SD)

要スキル:
・SD領域における要件定義の対応経験 ・顧客折衝し業務を推進していける方
月額単価:
~1,750,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
関連会社へテンプレートを用いSAP展開していくプロジェクトとなります。 SDのコンサルタントとして要件定義からご担当頂きます。

【FI】

大手国内SIer関連会社に対するテンプレート展開PJの要件定義支援(FI)

要スキル:
・FI領域における要件定義の対応経験 ・顧客折衝し業務を推進していける方
月額単価:
~1,750,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
関連会社へテンプレートを用いSAP展開していくプロジェクトとなります。 FIのコンサルタントとして要件定義からご担当頂きます。

【FI】

輸送用機器企業様向けS/4導入案件支援

要スキル:
S/4HANAでの上流工程の業務経験
月額単価:
~1,600,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
国内基幹システムをSAP S/4HANAへ移行する案件プロジェクトになります。 同社の海外向けS/4販売物流テンプレートを日本向けにロールインするもの。 現在、基本設計フェーズに着手中(~2025/4)。2027/1リリース予定。

【CO】

【FI】

S/4HANA Privateの導入支援(開発~単体テスト)

要スキル:
・ABAP開発経験5年以上の方 【尚可】 ・基本設計者と開発者をつなぐような品質管理やリーダーポジションを対応できる方
月額単価:
~850,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
基本的に会計系のモジュールにおける詳細設計以降の工程を担当頂きます。

【PP】

生産領域(PP)でのテスト工程支援

要スキル:
・テスト工程におけるSAP導入のプロジェクト経験がある方 ・PPモジュール経験があり、顧客と対峙してタスクの推進ができる方 ※コミュニケーション力重視
月額単価:
~1,500,000円 / 月
稼働場所:
フルリモート
稼働率:
100%
作業内容:
国内大手化学品メーカー向けのS/4 HANAへの移行プロジェクトにおいて、S/4チームの生産チームメンバー・タスクリーダーとして稼働頂きます。 ・結合テスト、システムテスト、ユーザテストの計画・推進・実施 ・ユーザ教育(業務変更点説明、オペレーション教育)および移行タスクの推進(業務切替、システム切替の周知や啓蒙活動)

【CO】

【FI】

ハードウエアリプレイスに伴うSAPシステム検証支援

要スキル:
・SAPの会計領域の知識がある方
月額単価:
~800,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
サーバの引っ越しに伴いSAPの機能変更等はないものの、システムが正しく動作するのかを検証するためのプロジェクトです。 対象モジュールはFI/COとなり、該当モジュールにおけるテストシナリオ作成・システムデータ作成・SAPの動作確認を行っております。 業務フローやSAPマニュアルがあるので、それを基にテストシナリオを作成して進めて頂きます。

【SD】

空調機メーカーS/4導入におけるFiori設計支援

要スキル:
・要件確認から設計書修正~開発受入実施ができる方 ・デバックで不具合箇所を特定できる方 ・販売領域における標準テーブルの知識を持っている方
月額単価:
~1,100,000円 / 月
稼働場所:
フルリモート
稼働率:
100%
作業内容:
S/4導入時におけるFioriの設計以降の作業をご担当頂きます。

【MM】

【PP】

電気機器メーカー向けSAPの運用保守支援

要スキル:
業務要件を整理して、設計書、ABAP開発が可能な方。 Jrコンサル、SEレベルの方が望ましい
月額単価:
~1,000,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
SAPのAdd-on追加開発または、運用保守をご担当頂きます。 業務領域としては、MMおよびPP領域となります。

【MM】

【SD】

ERPシステム要件定義支援

要スキル:
パラメータ定義(要件をカスタマイズに落とし込む)やアドオン機能設計ができること
月額単価:
~1,300,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
パラメータ定義(要件をカスタマイズに落とし込む)やアドオン機能設計などをご担当いただきます。

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

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

SAPラボのライターの特徴

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

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

募集要項

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

ご応募/お問合せ先

info@sap-labo.com

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

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

この記事を書いた人

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

この記事のポイント