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

登場人物紹介

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

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

この記事を読むメリット

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

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

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

レイナ

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

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

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

【CO】

【FI】

製造業様SAP S/4 HANA導入検討支援(コンサルリード)

要スキル:
・会計領域におけるプロジェクト管理の実施 ・10名以上のメンバー管理の経験をお持ちであること ・エンドユーザとの調整を含めたマネジメントスキル ・SAP導入プロジェクトの経験
月額単価:
~1,250,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
SAP新規導入における、プロジェクト管理支援 ・会計・生産領域(FI/CO/PS/PP/QM)におけるプロジェクト管理支援 ・ファシリテート ・領域タスク推進/進捗管理 ・個別課題整理・解決

【CO】

【FI】

【MM】

【PP】

【SD】

【その他】

建設コンサルタント企業向けSAP保守支援(チームリード)

要スキル:
・SAP関連のプロジェクトで複数モジュールでの経験があること 【尚可】 ・ロジから会計に連動するところの知見
月額単価:
~1,300,000円 / 月
稼働場所:
フルリモート
稼働率:
100%
作業内容:
複数モジュールにまたがった保守チームの管理を行っていただきます。 問い合わせや障害等のタスク管理や優先順位付けなどを顧客とやり取りしながら差配していくのが中心となります。

【CO】

【FI】

【MM】

【SD】

製造業会社向けSAP保守支援(会計もしくはロジ)

要スキル:
・会計もしくはロジ領域でのSAPプロジェクトの業務経験 ・ABAPでの開発経験
月額単価:
~950,000円 / 月
稼働場所:
フルリモート
稼働率:
100%
作業内容:
問い合わせ対応や調査等の保守作業(会計/ロジ)

【MM】

【SD】

複数社に対するSAP運用保守とS/4へのVerUp対応支援

要スキル:
SAPロジ領域での保守や導入のプロジェクト経験
月額単価:
~1,300,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
20社前後に対するSAPの保守業務を担当頂きます。 (不具合調査、障害対応、機能追加・改修、法改正対応など) またS/4へのバージョンアップを控えているため、そちらも対応頂きます。

【CO】

【FI】

【MM】

【PP】

【SD】

光学機器製造会社向けSAP導入プロト支援

要スキル:
・SAPの構想策定フェーズからプロジェクトに参画したことがある経験 ・プロト機の設定などをおこなってきた経験
月額単価:
~1,800,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
・業務フローの整理と作成 ・プロト機の準備

【FI】

製造業会社向けS/4導入検討支援(会計リード)

要スキル:
・SAP導入プロジェクトの経験 ・会計領域におけるリード経験(10名以上目安) ・顧客折衝の経験
月額単価:
~1,250,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
海外テンプレート構築検討を進めており、会計チームでのリードを担当頂きます。 ・顧客に対する進捗報告 ・顧客からの相談窓口 ・チーム全体の、品質、進捗、コストの管理 ・領域横断課題の検討(チケット起票単位の整理等)

【SD】

SAP導入コンサル支援(SD)

要スキル:
・SAPプロジェクトにて要件定義経験5年以上 ・要件定義からカスタマイズの設定 ・SAP(SDモジュール)経験5年以上 ・コミュニケーション能力 【尚可】 ・リモート環境での作業経験
月額単価:
~1,300,000円 / 月
稼働場所:
フルリモート
稼働率:
100%
作業内容:
SAP導入コンサルポジションとして要件定義より参画予定となります。 ・要件定義の確認と課題対応 ・残課題の背景・内容を定義 ・SAPソリューションの検討・討議

【FI】

製造業向けS/4新規導入支援(FI-AP/AR)

要スキル:
SAP導入プロジェクトにおいてFI(AP/AR)コンサルタントとしての業務経験
月額単価:
~2,000,000円 / 月
稼働場所:
フルリモート
稼働率:
100%
作業内容:
S/4新規導入PJのFIメ(AP/AR)メンバーとして参画頂きAP/AR領域について以下を担当頂きます。  -業務フロー作成  -プロトシナリオ作成  -プロト用パラメータ設定、プロト実施  -課題対応(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整理&再設計 ・財務関連コード定義
この記事のポイント

初期化について

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

【CO】

【FI】

製造業様SAP S/4 HANA導入検討支援(コンサルリード)

要スキル:
・会計領域におけるプロジェクト管理の実施 ・10名以上のメンバー管理の経験をお持ちであること ・エンドユーザとの調整を含めたマネジメントスキル ・SAP導入プロジェクトの経験
月額単価:
~1,250,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
SAP新規導入における、プロジェクト管理支援 ・会計・生産領域(FI/CO/PS/PP/QM)におけるプロジェクト管理支援 ・ファシリテート ・領域タスク推進/進捗管理 ・個別課題整理・解決

【CO】

【FI】

【MM】

【PP】

【SD】

【その他】

建設コンサルタント企業向けSAP保守支援(チームリード)

要スキル:
・SAP関連のプロジェクトで複数モジュールでの経験があること 【尚可】 ・ロジから会計に連動するところの知見
月額単価:
~1,300,000円 / 月
稼働場所:
フルリモート
稼働率:
100%
作業内容:
複数モジュールにまたがった保守チームの管理を行っていただきます。 問い合わせや障害等のタスク管理や優先順位付けなどを顧客とやり取りしながら差配していくのが中心となります。

【CO】

【FI】

【MM】

【SD】

製造業会社向けSAP保守支援(会計もしくはロジ)

要スキル:
・会計もしくはロジ領域でのSAPプロジェクトの業務経験 ・ABAPでの開発経験
月額単価:
~950,000円 / 月
稼働場所:
フルリモート
稼働率:
100%
作業内容:
問い合わせ対応や調査等の保守作業(会計/ロジ)

【MM】

【SD】

複数社に対するSAP運用保守とS/4へのVerUp対応支援

要スキル:
SAPロジ領域での保守や導入のプロジェクト経験
月額単価:
~1,300,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
20社前後に対するSAPの保守業務を担当頂きます。 (不具合調査、障害対応、機能追加・改修、法改正対応など) またS/4へのバージョンアップを控えているため、そちらも対応頂きます。

【CO】

【FI】

【MM】

【PP】

【SD】

光学機器製造会社向けSAP導入プロト支援

要スキル:
・SAPの構想策定フェーズからプロジェクトに参画したことがある経験 ・プロト機の設定などをおこなってきた経験
月額単価:
~1,800,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
・業務フローの整理と作成 ・プロト機の準備

【FI】

製造業会社向けS/4導入検討支援(会計リード)

要スキル:
・SAP導入プロジェクトの経験 ・会計領域におけるリード経験(10名以上目安) ・顧客折衝の経験
月額単価:
~1,250,000円 / 月
稼働場所:
東京都
稼働率:
100%
作業内容:
海外テンプレート構築検討を進めており、会計チームでのリードを担当頂きます。 ・顧客に対する進捗報告 ・顧客からの相談窓口 ・チーム全体の、品質、進捗、コストの管理 ・領域横断課題の検討(チケット起票単位の整理等)

【SD】

SAP導入コンサル支援(SD)

要スキル:
・SAPプロジェクトにて要件定義経験5年以上 ・要件定義からカスタマイズの設定 ・SAP(SDモジュール)経験5年以上 ・コミュニケーション能力 【尚可】 ・リモート環境での作業経験
月額単価:
~1,300,000円 / 月
稼働場所:
フルリモート
稼働率:
100%
作業内容:
SAP導入コンサルポジションとして要件定義より参画予定となります。 ・要件定義の確認と課題対応 ・残課題の背景・内容を定義 ・SAPソリューションの検討・討議

【FI】

製造業向けS/4新規導入支援(FI-AP/AR)

要スキル:
SAP導入プロジェクトにおいてFI(AP/AR)コンサルタントとしての業務経験
月額単価:
~2,000,000円 / 月
稼働場所:
フルリモート
稼働率:
100%
作業内容:
S/4新規導入PJのFIメ(AP/AR)メンバーとして参画頂きAP/AR領域について以下を担当頂きます。  -業務フロー作成  -プロトシナリオ作成  -プロト用パラメータ設定、プロト実施  -課題対応(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整理&再設計 ・財務関連コード定義

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

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

SAPラボのライターの特徴

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

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

募集要項

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

ご応募/お問合せ先

info@sap-labo.com

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

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

この記事を書いた人

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

この記事のポイント