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

登場人物紹介

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

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

この記事を読むメリット

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

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

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

レイナ

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

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

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

【FI】

SAP HANAバージョンアップにおける会計機能設計支援

要スキル:
・FI領域の要件定義書から基本設計を現行を参考に作成し、  後続作業も出来る方。 ・SAP標準機能と会計業務に関する知識 <尚可> FI-AA経験、TRM経験
月額単価:
~900,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
SAP FIコンサルまたはJrコンサル S/4HANAへバージョンアップに向け、会計領域の要件定義フェーズ作業 ・現行SAPの調査支援(標準機能の含む) ・ToBe詳細業務フロー作成支援 ・現行アドオン調査・整理 ・ToBeアドオンへの置き換え時の実現ポイント調査・整理

【FI】

自動車メーカー向けS4HANA導入支援(FI/CO)

要スキル:
・FIもしくはCOモジュールでの業務要件定義の経験(導入~)
月額単価:
~950,000円 / 月
稼働場所:
広島県
稼働率:
100%
作業内容:
S4導入要件定義フェーズにおいて以下の業務を行っていただきます。 ・要件定義 ・業務フロー作成 ・既存Add-On整理&再設計 ・財務関連コード定義

【SD】

外資系アパレル業向けSDモジュール運用保守支援

要スキル:
• SDモジュールでの運用保守経験 • ユーザからのQA対応等の経験 • チームメンバーやユーザーとの円滑なコミュニケーションが可能 • 英語翻訳サイト等を使用して、文書・メール・チャットの読み書きが可能 • 英語を使用した会議に参加頂ける方(翻訳サービス使用可能) <尚可> • Winshuttleを使用したバッチインプットツール作成経験 • WMSへのデータ連携に関する知見(運用担当レベル)
月額単価:
~1,000,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
• 日本の業務ユーザーが使用しているシステムの運用保守、問合せ対応(メール・チャットでの問い合わせ) • SDモジュールでの運用保守 、不具合/問合せのGlobal Support Teamへのエスカレーション • 問い合わせのステータス管理 • Winshuttleを使用したバッチインプットツール作成 • 新商流発生時の仕様調査やEnd to End テスト実施 • EDIシステム(受注・出荷)の運用保守

【FI】

電気機械器具向け SAP導入プロジェクト支援 FIコンサル(AA/GL/AP/AR)

要スキル:
FIコンサルとしての要件定義経験
月額単価:
~1,500,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
会計領域をS/4HANAへ刷新に向け、会計領域の要件定義フェーズ作業(メイン作業) ・現行アドオン調査・整理 ・ToBeアドオンへの置き換え時の実現ポイント調査・整理(サブ作業) ・現行SAPの調査支援(標準機能の含む) ・ToBe詳細業務フロー作成支援 ・BPマスタへの統合作業支援

【FI】

電気機械器具向け SAP導入プロジェクト支援 FI SE(基本設計者)

要スキル:
FI Add-onの基本設計の経験
月額単価:
~1,200,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
会計領域をS/4HANAへ刷新に向け、会計領域の基本設計フェーズにてAdd-on機能の基本設計をご担当いただきます。

【FI】

食品・薬品製造販売業向けSAP運用保守支援

要スキル:
・SAP・FIの導入または保守の経験あり(GL/AP/AR) ・コミュニケーションスキル(システムや業務のお客様と直接問い合わせ対応を行います) <尚可> ・SAP・FIの固定資産(AA)の知識、COの知識(CCA,PA,CO-PC)、標準EIXT、ABAPの知識
月額単価:
~900,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
財務会計と管理会計の問い合わせ対応。仕様変更対応をご担当いただく予定です。

【MM】

【SD】

大手製造業向けECC⇒S4移行におけるグローバルテンプレート構築支援(ロジ領域)

要スキル:
・SAPロジ系モジュールの導入経験 ・構想策定/要件定義フェーズの経験 ・業務プロセス設計の経験 ・S/4HANA導入経験 ・カスタマイズ/アドオン設計 ・リーダー経験 <尚可> ・製造業、フルモジュールプロジェクトでの導入経験 ・グローバルテンプレート導入経験 ・英語でのコミュニケーション能力(当タスクで作成のプロセスフローを海外ユーザーに説明、QA対応など)
月額単価:
~1,400,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
グローバルテンプレート構築 ・要件定義タスク遂行 ・内部レビュー(モジュール横断整合性含む) ・セッションファシリテート ・個別課題検討・解決

【FI】

FI-AAモジュール 要件定義支援

要スキル:
・FIモジュールにおける要件定義フェーズでの参画経験 ・FI-AAモジュールにおけるテストフェーズでの参画経験 ・ABAP開発経験 ・英語スキル:読み書き
月額単価:
~1,150,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
ABAPの設計書の調査等を行いプロジェクトリーダーのサポート

【FI】

【MM】

【SD】

S4HANA導入コンサル支援(SD/MM/FI)

要スキル:
業務要件定義、業務フロー作成、カスタマイズ実装、アドオン要件定義書作成
月額単価:
~1,400,000円 / 月
稼働場所:
兵庫県
稼働率:
100%
作業内容:
要件定義フェーズにおける各種コンサルタスクを実施いただきます。 ●募集人数 SDコンサル:1名 MMコンサル:1名 FIコンサル:1名

【CO】

【MM】

半導体製造機器製造向けSAP運用保守

要スキル:
【募集①】CO/PS領域(1名) ・ SAPにおいて運用保守または導入経験のある方(CO or PSいずれかの経験でも可) ・カスタマイズ知見要 <尚可> ・業務整理、設計、開発いずれかの経験のある方、S4バーションアップ経験のある方 【募集②】MM領域(1名) ・ SAPにおいて運用保守または導入経験のある方(主に購買側のMRP部分の知見・経験のある方) ・カスタマイズ知見要 <尚可> ・設計変更知見、業務整理、設計、開発いずれかの経験のある方 ・S4バーションアップ経験のある方
月額単価:
~1,000,000円 / 月
稼働場所:
神奈川県
稼働率:
100%
作業内容:
SAP運用保守の支援+バージョンアップ準備業務
この記事のポイント

初期化について

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

【FI】

SAP HANAバージョンアップにおける会計機能設計支援

要スキル:
・FI領域の要件定義書から基本設計を現行を参考に作成し、  後続作業も出来る方。 ・SAP標準機能と会計業務に関する知識 <尚可> FI-AA経験、TRM経験
月額単価:
~900,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
SAP FIコンサルまたはJrコンサル S/4HANAへバージョンアップに向け、会計領域の要件定義フェーズ作業 ・現行SAPの調査支援(標準機能の含む) ・ToBe詳細業務フロー作成支援 ・現行アドオン調査・整理 ・ToBeアドオンへの置き換え時の実現ポイント調査・整理

【FI】

自動車メーカー向けS4HANA導入支援(FI/CO)

要スキル:
・FIもしくはCOモジュールでの業務要件定義の経験(導入~)
月額単価:
~950,000円 / 月
稼働場所:
広島県
稼働率:
100%
作業内容:
S4導入要件定義フェーズにおいて以下の業務を行っていただきます。 ・要件定義 ・業務フロー作成 ・既存Add-On整理&再設計 ・財務関連コード定義

【SD】

外資系アパレル業向けSDモジュール運用保守支援

要スキル:
• SDモジュールでの運用保守経験 • ユーザからのQA対応等の経験 • チームメンバーやユーザーとの円滑なコミュニケーションが可能 • 英語翻訳サイト等を使用して、文書・メール・チャットの読み書きが可能 • 英語を使用した会議に参加頂ける方(翻訳サービス使用可能) <尚可> • Winshuttleを使用したバッチインプットツール作成経験 • WMSへのデータ連携に関する知見(運用担当レベル)
月額単価:
~1,000,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
• 日本の業務ユーザーが使用しているシステムの運用保守、問合せ対応(メール・チャットでの問い合わせ) • SDモジュールでの運用保守 、不具合/問合せのGlobal Support Teamへのエスカレーション • 問い合わせのステータス管理 • Winshuttleを使用したバッチインプットツール作成 • 新商流発生時の仕様調査やEnd to End テスト実施 • EDIシステム(受注・出荷)の運用保守

【FI】

電気機械器具向け SAP導入プロジェクト支援 FIコンサル(AA/GL/AP/AR)

要スキル:
FIコンサルとしての要件定義経験
月額単価:
~1,500,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
会計領域をS/4HANAへ刷新に向け、会計領域の要件定義フェーズ作業(メイン作業) ・現行アドオン調査・整理 ・ToBeアドオンへの置き換え時の実現ポイント調査・整理(サブ作業) ・現行SAPの調査支援(標準機能の含む) ・ToBe詳細業務フロー作成支援 ・BPマスタへの統合作業支援

【FI】

電気機械器具向け SAP導入プロジェクト支援 FI SE(基本設計者)

要スキル:
FI Add-onの基本設計の経験
月額単価:
~1,200,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
会計領域をS/4HANAへ刷新に向け、会計領域の基本設計フェーズにてAdd-on機能の基本設計をご担当いただきます。

【FI】

食品・薬品製造販売業向けSAP運用保守支援

要スキル:
・SAP・FIの導入または保守の経験あり(GL/AP/AR) ・コミュニケーションスキル(システムや業務のお客様と直接問い合わせ対応を行います) <尚可> ・SAP・FIの固定資産(AA)の知識、COの知識(CCA,PA,CO-PC)、標準EIXT、ABAPの知識
月額単価:
~900,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
財務会計と管理会計の問い合わせ対応。仕様変更対応をご担当いただく予定です。

【MM】

【SD】

大手製造業向けECC⇒S4移行におけるグローバルテンプレート構築支援(ロジ領域)

要スキル:
・SAPロジ系モジュールの導入経験 ・構想策定/要件定義フェーズの経験 ・業務プロセス設計の経験 ・S/4HANA導入経験 ・カスタマイズ/アドオン設計 ・リーダー経験 <尚可> ・製造業、フルモジュールプロジェクトでの導入経験 ・グローバルテンプレート導入経験 ・英語でのコミュニケーション能力(当タスクで作成のプロセスフローを海外ユーザーに説明、QA対応など)
月額単価:
~1,400,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
グローバルテンプレート構築 ・要件定義タスク遂行 ・内部レビュー(モジュール横断整合性含む) ・セッションファシリテート ・個別課題検討・解決

【FI】

FI-AAモジュール 要件定義支援

要スキル:
・FIモジュールにおける要件定義フェーズでの参画経験 ・FI-AAモジュールにおけるテストフェーズでの参画経験 ・ABAP開発経験 ・英語スキル:読み書き
月額単価:
~1,150,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
ABAPの設計書の調査等を行いプロジェクトリーダーのサポート

【FI】

【MM】

【SD】

S4HANA導入コンサル支援(SD/MM/FI)

要スキル:
業務要件定義、業務フロー作成、カスタマイズ実装、アドオン要件定義書作成
月額単価:
~1,400,000円 / 月
稼働場所:
兵庫県
稼働率:
100%
作業内容:
要件定義フェーズにおける各種コンサルタスクを実施いただきます。 ●募集人数 SDコンサル:1名 MMコンサル:1名 FIコンサル:1名

【CO】

【MM】

半導体製造機器製造向けSAP運用保守

要スキル:
【募集①】CO/PS領域(1名) ・ SAPにおいて運用保守または導入経験のある方(CO or PSいずれかの経験でも可) ・カスタマイズ知見要 <尚可> ・業務整理、設計、開発いずれかの経験のある方、S4バーションアップ経験のある方 【募集②】MM領域(1名) ・ SAPにおいて運用保守または導入経験のある方(主に購買側のMRP部分の知見・経験のある方) ・カスタマイズ知見要 <尚可> ・設計変更知見、業務整理、設計、開発いずれかの経験のある方 ・S4バーションアップ経験のある方
月額単価:
~1,000,000円 / 月
稼働場所:
神奈川県
稼働率:
100%
作業内容:
SAP運用保守の支援+バージョンアップ準備業務

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

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

SAPラボのライターの特徴

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

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

募集要項

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

ご応募/お問合せ先

info@sap-labo.com

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

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

この記事を書いた人

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

この記事のポイント