【SAPが動画で学べる!】YouTubeチャンネル開設しました ▶ SAPラボチャンネルはコチラ

【SAP開発】ユーザーExitの探し方と登録の仕方

登場人物紹介

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

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

この記事を読むメリット

  • 受注登録(T-CODE:VA01)を例に、使えるユーザーExit を 2 通りの方法で探せるようになる
  • T-CODE:CMOD で拡張プロジェクトを作り、ZX インクルードに処理を書いて有効化する手順が分かる
  • 作った拡張プロジェクトとインクルードを無効化・削除する手順が分かる

SAP の標準プログラムには、「ここに独自の処理を足してよい」という Exit があらかじめ用意されています。この記事でユーザーExit と呼ぶのは、そうした Exit のうち、SAP のヘルプで「カスタマ Exit」と呼ばれる仕組みです。T-CODE:SMOD と T-CODE:CMOD で扱います。

この記事では、受注登録(T-CODE:VA01)を例に、次の 3 つを実際の画面で 1 画面ずつ解説します。対象は ABAP を学び始めた開発者の方です。

  • 使えるユーザーExit を 探す方法を 2 通り
  • 見つけた Exit に 自分の処理を登録して有効化する手順
  • 作ったものを 無効化して削除する手順
  • 受注登録の MV45AFZZ にある、もう 1 つの USER-EXITS の 見方
レイナ

博士!受注登録のときに、受注先を前もって入れておきたいって相談されたんです。標準の処理に、自分の処理を足すことってできるんですか?

博士

うむ、SAP の標準プログラムには、処理を足せる Exit が用意されておるぞい。今回はユーザーExit の探し方と登録の仕方を、画面を追って説明していくぞい!

SAPフリーランスバンク SAPフリーランスバンク
  • 転職求人
  • フリーランス案件
株式会社日立産業制御ソリューションズ

【リモート可】【PM/PL候補】【東京】SAP(S/4HANA)エンジニア ※フレックスタイム制/ワークライフバランス◎(S/4HANA)

年収
430~800万円 / 年
勤務地
東京本社:東京都台東区秋葉原6番1号(...
雇用形態
正社員
要スキル:
【必須】 SAP導入に強い興味があり、以...
キリンビジネスシステム株式会社

SAP会計領域コンサルタント(管理職)/キリングループ唯一のIT会社(FI/CO)

年収
900~1,300万円 / 年
勤務地
東京都中野区中野4-10-2 中野セントラ...
雇用形態
正社員
要スキル:
【必須(MUST)】 以下A・B・Cすべてを...
キリンビジネスシステム株式会社

SAPコンサルタント/キリングループ唯一のIT会社(SD/MM/PP)

年収
500~850万円 / 年
勤務地
東京都中野区中野4-10-2 中野セントラ...
雇用形態
正社員
要スキル:
【必須(MUST)】 SAPアプリケーショ...
株式会社ベイカレント・コンサルティング

【SAPコンサルタント】経営戦略実現を全社横断変革で支援/平均年収1,350万円

年収
600~2,500万円 / 年
勤務地
東京都港区麻布台1-3-1麻布台ヒル...
雇用形態
正社員
要スキル:
【必須(MUST)】 社会人経験3年以上...
株式会社 ホープス

【年収1000万円可】【リモート可】【上流工程】【SAP導入コンサルタント】リモート・ハイブリッド勤務OK|平均残業月10時間/HOPES ※基幹系業務システムの導入推進を行っていただける方を募集

年収
800~1,800万円 / 年
勤務地
〒 1040033:東京都中央区新川1-3-17新...
雇用形態
正社員
要スキル:
■SAPコンサルタント 【必須】 SAPモ...
COFIPP

【S/4HANA AMS体制Functional Lead】リモート可/R2R・P2D領域インシデント対応

月額単価
~1,500,000円 / 月
稼働場所
東京都
業務領域
要件定義, 運用・保守
作業内容:
グローバル企業のSAP S/4HANA AMS体制に...
COMMSD

【ECC6.0→S/4HANA再構築】東京・都内(出社)/SD・MM・CO ABAP開発・設計・テスト

月額単価
~1,200,000円 / 月
稼働場所
東京都
業務領域
設計, 開発(ABAP/Fiori), テスト
作業内容:
SAP ECC6.0からS/4HANAへの大型再構築プ...
MMPPSD

【SAP S/4保守・運用(ABAP)】東京・田無(テレワーク併用)/インシデント対応・ABAP改修

月額単価
~1,000,000円 / 月
稼働場所
東京都
業務領域
開発(ABAP/Fiori), 運用・保守
作業内容:
SAP S/4の保守・運用フェーズに参画し、...
COFIMMPPSD

【SAP Public Cloud導入(組立製造業・多モジュール)】兵庫(リモート対応可)/MM・SD・FI・CO・PP

月額単価
~1,100,000円 / 月
稼働場所
兵庫県
業務領域
要件定義
作業内容:
組立製造業を対象としたSAP Public Clou...
MMSD

【S/4HANA導入支援(システムテスト・移行)】東京・リモート併用/移行支援

月額単価
~1,400,000円 / 月
稼働場所
東京都
業務領域
テスト
作業内容:
S/4HANA導入プロジェクトの移行フェーズ...
COFIMMSD

【S/4HANA導入支援】東京(リモート併用)/基本設計&実装

月額単価
~1,400,000円 / 月
稼働場所
東京都
業務領域
設計
作業内容:
商社系のシステム再構築プロジェクトに...
SD

【S/4HANA新規導入支援(SDコンサルタント)】東京(リモート併用)/設計構築フェーズ

月額単価
~1,500,000円 / 月
稼働場所
東京都
業務領域
設計, 開発(ABAP/Fiori)
作業内容:
大手企業のS/4HANA新規導入プロジェクト...
COFI

【S/4HANA新規導入支援(原価チームリーダー)】東京駅・リモート併用

月額単価
~1,900,000円 / 月
稼働場所
東京都
業務領域
設計, 開発(ABAP/Fiori)
作業内容:
S/4HANA新規導入プロジェクトに参画し、...
FIPP

【S/4HANAコンサルティング(FI/PP)】兵庫・加古川(リモート併用)/結合テスト・キーユーザ教育

月額単価
~1,300,000円 / 月
稼働場所
兵庫県
業務領域
テスト, その他
作業内容:
組立製造業向けのS/4HANA導入プロジェク...
COFI

【商社向けパブクラ移行(FICOコンサル)】宮城・仙台(リモート併用)/要件定義+構築

月額単価
~1,100,000円 / 月
稼働場所
宮城県
業務領域
要件定義, 設計
作業内容:
総合商社向けのSAP PublicEdition移行案...
この記事のポイント

前提

  • 確認した環境: この記事の画面は、SAP S/4HANA の SAP GUI for HTML の画面です(2026年10月)。
  • 使うトランザクション: T-CODE:SE93、T-CODE:SMOD、T-CODE:SE38、T-CODE:CMOD。
  • 作るもの: 拡張プロジェクト ZLABVA01 と、インクルード ZXVVAU04。どちらもローカルオブジェクトとして作ります。

ユーザーExit の仕組み

最初に、画面に出てくる言葉の関係を押さえておきます。

言葉意味扱うトランザクション
SAP 拡張SAP が Exit をまとめた単位です。1 つの SAP 拡張に複数の Exit が入ることもあります(例: V45A0002)T-CODE:SMOD(照会)
汎用モジュール Exit標準プログラムから CALL CUSTOMER-FUNCTION '002' のように呼ばれる汎用モジュールです。名前は EXIT_ + プログラム名 + 3 文字の名前になります(例: EXIT_SAPMV45A_002)T-CODE:SE37
ZX で始まるインクルード汎用モジュール Exit の中に用意された、利用者が処理を書く場所です(例: ZXVVAU04)T-CODE:SE38
拡張プロジェクト使う SAP 拡張を登録し、まとめて有効化・無効化する入れ物です(例: ZLABVA01)T-CODE:CMOD

SAP のヘルプでは、次のように説明されています。

  • Exit そのものは機能を持たず、「フック(引っかけるための留め金)」として働きます。
  • 汎用モジュール Exit の枠組みやインタフェース(パラメータ)は変更できません。処理を書けるのは、用意された ZX インクルードの中だけです。
  • 拡張プロジェクトを有効化していないと、CALL CUSTOMER-FUNCTION は無視されます。
  • カスタマ Exit(T-CODE:CMOD による拡張)は古い技術とされ、代わりに BAdI などの拡張フレームワークを使うよう案内されています。

すでに動いているシステムでは、カスタマ Exit を使った処理に出会うことがあります。新しく作るときだけでなく、既存の処理を調べるときにも、探し方と登録の仕方を知っておくとよいでしょう。

受注登録のプログラム SAPMV45A のソースには、「USER-EXITS」という見出しの下に MV45AFZZ などのインクルードも並んでいます。これは T-CODE:SMOD・T-CODE:CMOD で扱う仕組みとは別のものです。中身の見方は、記事の後半「もう 1 つの USER-EXITS: MV45AFZZ」で説明します。

探し方1: トランザクションのパッケージから SAP 拡張を探す

たとえば、受注登録で「受注先を前もって入れておきたい」という要望を受けた場面を考えます。まず受注登録のプログラムとパッケージを調べ、そのパッケージに属する SAP 拡張を一覧にします。

1. T-CODE:SE93 で受注登録のトランザクションを照会する

コマンドフィールドに SE93 と入力して Enter キーを押します。「トランザクション更新」画面でトランザクションコードを入力し、「照会」を押します。

T-CODE:SE93 でトランザクションコード VA01 を入力

画面の見方

  1. トランザクションコード: 調べたいトランザクションコードを入力します。
  2. 照会: トランザクションの定義を表示します。

この例では VA01 を入力します。

2. プログラムとパッケージを確認する

「照会 ダイアログトランザクション」画面が開きます。

T-CODE:VA01 のパッケージとプログラム

画面の見方

  1. パッケージ: このトランザクションが属しているパッケージです。
  2. プログラム: トランザクションに割り当てられたプログラムの名前です。

この例では、パッケージは VA、プログラムは SAPMV45A です。この 2 つを次の手順で使います。

3. T-CODE:SMOD の入力ヘルプでパッケージを指定して検索する

コマンドフィールドに /nSMOD と入力して Enter キーを押します(/n を付けると、別のトランザクションの画面からでも移れます)。「SAP 拡張」画面の「拡張」欄で F4 キーを押すと、「リポジトリ情報システム: Exit 検索」画面が開きます。

T-CODE:SMOD の Exit 検索でパッケージを指定

画面の見方

  1. パッケージ: SAP 拡張が属するパッケージで絞り込みます。
  2. 実行: 条件に合う SAP 拡張を一覧にします。

この例では、手順 2 で確認したパッケージ VA を入力します。パッケージで絞り込むので、別のパッケージに属する SAP 拡張はこの一覧に出ません。その場合は、後で説明する「探し方2」を使います。

4. 一覧から SAP 拡張を選ぶ

パッケージに属する SAP 拡張が一覧で表示されます。

パッケージ VA の SAP 拡張の一覧

画面の見方

  1. SAP 拡張の行: 左が拡張名、右が内容説明です。内容説明を読んで、目的に合いそうなものを探します。

この例では 15 件が表示されます。今回の目的に合うのは V45A0002 受注先事前定義 (販売伝票) です。この行をダブルクリックすると、「拡張」欄に V45A0002 が入ります。

5. SAP 拡張のコンポーネントを照会する

「コンポーネント」を選んで「照会」を押します。

T-CODE:SMOD でコンポーネントを選んで照会

画面の見方

  1. 拡張: 調べる SAP 拡張の名前です。
  2. コンポーネント: その SAP 拡張に含まれる Exit の一覧を表示します。
  3. 照会: 選んだ内容を表示します。

6. どの種類の Exit が含まれているかを確認する

「SAP 拡張 V45A0002 のコンポーネント」画面が開きます。Exit は種類ごとに欄が分かれています。

V45A0002 のコンポーネント

画面の見方

  1. 汎用モジュール Exit: 標準プログラムから呼ばれる汎用モジュールです。ここに処理を足します。
  2. 機能コード: メニューに独自の項目を足すための Exit(メニュー Exit)です。
  3. Dynpro 領域: 標準画面の中に独自の画面(サブスクリーン)を表示するための Exit(画面 Exit)です。

この例では、V45A0002 に含まれる Exit は汎用モジュール Exit の EXIT_SAPMV45A_002 だけです。

7. 汎用モジュール Exit の中身を確認する

EXIT_SAPMV45A_002 をダブルクリックすると、「汎用モジュールビルダ: 照会 EXIT_SAPMV45A_002」画面が開きます。「ソースコード」タブで中身を確認します。

EXIT_SAPMV45A_002 のソースコード

画面の見方

  1. IMPORTING: 標準プログラムから受け取るパラメータです。
  2. EXPORTING: 標準プログラムへ返すパラメータです。
  3. INCLUDE ZXVVAU04: 利用者が処理を書くインクルードです。

この例では、受け取るパラメータは I_TVAK(販売伝票タイプのテーブル TVAK の 1 行分)・I_TVTA(販売エリアのテーブル TVTA の 1 行分)・I_VKGRP(営業グループ)・I_VKBUR(営業所)の 4 つ、返すパラメータは E_KUNNR(得意先コード)の 1 つです。

探し方2: プログラムのソースから CALL CUSTOMER-FUNCTION を検索する

もう 1 つの方法として、プログラムのソースで Exit を呼んでいる箇所を検索します。

1. プログラム全体を検索する

コマンドフィールドに /nSE38 と入力して Enter キーを押し、プログラム SAPMV45A を「照会」で開きます。ツールバーの検索ボタン(虫めがね)を押すと、「検索/置換」画面が開きます。

CALL CUSTOMER-FUNCTION をメインプログラム全体で検索

画面の見方

  1. 検索語句: 探す文字列を入力します。
  2. メインプログラム: 検索する範囲をメインプログラムにします。
  3. 続行: 検索を始めます。

この例では、Exit を呼ぶ命令 CALL CUSTOMER-FUNCTION を入力します。

2. 検索結果を見る

「プログラム内一括検索」画面に、見つかった箇所が並びます。

CALL CUSTOMER-FUNCTION の検索結果

画面の見方

  1. プログラム/拡張: 命令が書かれているプログラム(インクルード)の名前です。
  2. 発生/内容説明: 何行目に、どのような命令が書かれているかです。
  3. 検索: この一覧の中から文字を検索します。

CALL CUSTOMER-FUNCTION の後ろの 3 文字の名前から、汎用モジュール Exit の名前が分かります。この例では、CALL CUSTOMER-FUNCTION '002' は EXIT_SAPMV45A_002 に当たります。

拡張プロジェクトに登録するのは、汎用モジュール Exit ではなく、それを含む SAP 拡張です。SAP 拡張の名前は、テーブル MODSAP(SAP 拡張)で項目 MEMBER に汎用モジュール Exit の名前を指定すると、項目 NAME で分かります。この例では EXIT_SAPMV45A_002 を含む SAP 拡張は V45A0002 です。

3. 一覧の中で特定の名前を探す

一覧が長いときは、③の検索で探します。

一覧の検索画面

画面の見方

  1. 検索: 探す文字を入力します。
  2. 検索: 一覧の中を検索します。

この例では '002' と入力します。② を押すと、該当する行が表示されます。

'002' が見つかった箇所

画面の見方

  1. 見つかった行: 左がプログラム(インクルード)の名前、右が行番号と、その行の内容です。

この例では、インクルード MV45AF0A_AG_VORSCHLAGEN の 26 行目に CALL CUSTOMER-FUNCTION '002' があります。

4. Exit を呼んでいる前後のソースを読む

T-CODE:SE38 でインクルード MV45AF0A_AG_VORSCHLAGEN を照会すると、Exit がどの条件で呼ばれ、返した値がどう使われるかを読めます。

CALL CUSTOMER-FUNCTION '002' の前後

画面の見方

  1. CHECK KUAGV-KUNNR IS INITIAL.: 受注先(KUAGV-KUNNR)が空のときだけ、この先の処理に進みます。
  2. CALL CUSTOMER-FUNCTION ‘002’: 汎用モジュール Exit EXIT_SAPMV45A_002 を呼んでいる行です。
  3. E_KUNNR = KUAGV-KUNNR: Exit から返した E_KUNNR が、受注先(KUAGV-KUNNR)に入ります。

このルーチン(FORM AG_VORSCHLAGEN)では、パラメータ ID VAU(販売伝票の受注先)の値を GET PARAMETER で読んだあとに Exit を呼んでいます。Exit から返った受注先が空でなければ、汎用モジュール VIEW_KUAG2 を呼んで処理を続けます。

Exit に処理を書く前に、このように呼び出し元のソースを読んで、いつ呼ばれ、返した値がどこに入るのかを確かめておくとよいでしょう。

登録の仕方: 拡張プロジェクトを作って有効化する

ここからは、見つけた SAP 拡張 V45A0002 を拡張プロジェクトに登録し、ZX インクルードに処理を書いて有効化します。

1. T-CODE:CMOD で拡張プロジェクトを登録する

コマンドフィールドに /nCMOD と入力して Enter キーを押します。「SAP 拡張プロジェクト管理」画面で、プロジェクト名を入力して「登録」を押します。

T-CODE:CMOD でプロジェクトを登録

画面の見方

  1. Project: 作る拡張プロジェクトの名前です。
  2. 登録: 新しい拡張プロジェクトを作ります。

この例では、プロジェクト名を ZLABVA01 とします。

2. 内容説明を入れて保存する

「拡張プロジェクト ZLABVA01 の属性」画面が開きます。

拡張プロジェクトの属性

画面の見方

  1. 内容説明: 拡張プロジェクトの説明です。
  2. Project ステータス: 「有効化」の見出しの下にある項目です。
  3. 保存: 属性を保存します。

内容説明には、何のためのプロジェクトかが分かる文を入れておくとよいでしょう。この例では、作ったばかりなので Project ステータスは空です。

保存を押すと「オブジェクトディレクトリエントリ登録」画面が開きます。

ローカルオブジェクトとして保存

画面の見方

  1. パッケージ: 拡張プロジェクトを入れるパッケージです。
  2. ローカルオブジェクト: 保存先をローカルオブジェクトにします。

この記事では学習用のプロジェクトとして作るので、「ローカルオブジェクト」を押します。

3. SAP 拡張を割り当てる

保存すると、属性画面のパッケージ欄に $TMP と表示されます。続けて「拡張割当」を押します。

属性が保存された

画面の見方

  1. ステータスバー: 処理の結果を示すメッセージが表示されます。
  2. 拡張割当: 拡張プロジェクトに SAP 拡張を割り当てる画面に進みます。

この例では、ステータスバーに「ZLABVA01 の属性は保存されました」と表示されます。

「拡張」欄に SAP 拡張の名前を入力して Enter キーを押し、保存を押します。

SAP 拡張を割り当てる

画面の見方

  1. 拡張: 割り当てる SAP 拡張の名前です。
  2. 保存: 割り当てを保存します。

この例では V45A0002 を入力します。Enter キーを押すと内容説明に「受注先事前定義 (販売伝票)」と表示され、保存するとステータスバーに「ZLABVA01 のコンポーネントは保存されました」と表示されます。

SAP のヘルプによると、同じ SAP 拡張を 2 つの拡張プロジェクトに入れることはできません。使いたい SAP 拡張がすでに別の拡張プロジェクトに入っているときは、そのプロジェクトに処理を足すかどうかを、担当者と相談しましょう。

4. コンポーネントを表示する

ツールバーの「コンポーネント」を押すと、拡張プロジェクトの中身が表示されます。

拡張プロジェクトのコンポーネント(有効化する前)

画面の見方

  1. 状態のアイコン: 拡張プロジェクトと SAP 拡張の状態を表すアイコンです。
  2. Function Exit: この拡張プロジェクトで使える汎用モジュール Exit です。

有効化する前は、アイコンが赤い丸で表示されます。EXIT_SAPMV45A_002 をダブルクリックします。

5. ZX インクルードを作る

汎用モジュール EXIT_SAPMV45A_002 のソースコードが表示されます。

INCLUDE ZXVVAU04 の行

画面の見方

  1. INCLUDE の行: 処理を書くインクルードの名前が書かれた行です。この行をダブルクリックします。

ステータスバーに警告が表示されます。

ZX で始まる名前は予約されているという警告

画面の見方

  1. 警告メッセージ: ZX で始まる名前は、Exit のインクルードのための名前だという警告です。

この例では「プログラム名 ZX… は Exit 用汎用グループの INCLUDE 用に予約されています」と表示されます。Enter キーを押すと先へ進みます。

インクルードを作るかを聞かれるので、「はい」を押します。

インクルードを登録するか確認

画面の見方

  1. はい: インクルードを作ります。

この例では「インクルード ZXVVAU04 はありません オブジェクトを登録しますか」と表示されます。

「オブジェクトディレクトリエントリ登録」画面で、手順 2 と同じく保存先を決めます。

インクルードをローカルオブジェクトとして登録

画面の見方

  1. Object: 作るオブジェクトの種類と名前です。
  2. ローカルオブジェクト: 保存先をローカルオブジェクトにします。

この例では、PROG(プログラム)の ZXVVAU04 を作ります。

6. 処理を書いて有効化する

ABAP エディタでインクルードが開きます。ここに処理を書きます。

ZXVVAU04 に処理を書く

画面の見方

  1. 処理を書く場所: このインクルードに書いた処理が、汎用モジュール Exit の中で実行されます。
  2. ステータス: オブジェクトが有効化されているかどうかの表示です。
  3. 有効化: 有効化します。

この例では、まだ有効化していないので、ステータスは「無効 (変更済)」です。また、処理を書く場所を示すためにコメント 1 行だけを書いています。たとえば、受け取ったパラメータ(販売伝票タイプや販売エリアなど)をもとに受注先の得意先コードを決め、E_KUNNR に入れる処理が考えられます。

SAP のヘルプによると、このインクルードは汎用モジュールの中(FUNCTION〜ENDFUNCTION の間)に入るため、FORM と ENDFORM を書かないよう案内されています。

有効化を押すと、有効化するオブジェクトを選ぶ画面が開きます。

有効化するオブジェクトを選ぶ

画面の見方

  1. オブジェクトの行: 印が付いているオブジェクトが有効化されます。
  2. 続行: 印を付けたオブジェクトを有効化します。

この例では、ZXVVAU04 のほかにも有効化されていないオブジェクトが一覧に並び、ZXVVAU04 にだけ印が付いています。今回作ったものだけに印が付いていることを確かめてから続行するとよいでしょう。

インクルードが有効になった

画面の見方

  1. ステータス: オブジェクトが有効化されているかどうかの表示です。
  2. ステータスバー: 処理の結果を示すメッセージが表示されます。

この例では、ステータスが「有効」になり、ステータスバーに「オブジェクト有効化」と表示されます。

7. 拡張プロジェクトを有効化する

インクルードを有効化しただけでは、拡張プロジェクトは有効になりません。T-CODE:CMOD に戻り、拡張プロジェクトを有効化します。

拡張プロジェクトを有効化する

画面の見方

  1. Project: 有効化する拡張プロジェクトの名前です。
  2. プロジェクト有効化: 拡張プロジェクトを有効にします。
有効化された

画面の見方

  1. ステータスバー: 処理の結果を示すメッセージが表示されます。

この例では「プロジェクト ZLABVA01 は有効化されました」と表示されます。

SAP のヘルプによると、有効化はプロジェクト単位で行い、プロジェクトの中の Exit を 1 つずつ有効化することはできません。また、開発システムから本番システムへ移送したあとも、移送先で有効化が必要です。

結果の確認

「コンポーネント」を選んで照会すると、状態が変わっていることを確かめられます。

拡張プロジェクトのコンポーネント(有効化した後)

画面の見方

  1. 状態のアイコン: 拡張プロジェクトと SAP 拡張の状態を表すアイコンです。
  2. Function Exit の行の印: 「登録の仕方」の手順 4 の画面には無かった印です。

この例では、アイコンが緑の四角に変わり、Function Exit の行にチェックマークが表示されます。

SAP のヘルプによると、有効化した Exit は、標準プログラムの CALL CUSTOMER-FUNCTION から呼ばれます。この例では、CALL CUSTOMER-FUNCTION '002' が実行されたときに、インクルード ZXVVAU04 に書いた処理が実行されます。

後片付け: 無効化して削除する

学習やテストのために作った拡張プロジェクトは、確かめ終わったら無効化し、削除しておくとよいでしょう。ここでは、この記事で作った拡張プロジェクトとインクルードを削除する手順を説明します。

1. 拡張プロジェクトを無効化する

T-CODE:CMOD でプロジェクト名を入力し、「プロジェクト無効化」を押します。

拡張プロジェクトを無効化する

画面の見方

  1. Project: 無効化する拡張プロジェクトの名前です。
  2. プロジェクト無効化: 拡張プロジェクトを無効にします。
無効化された

画面の見方

  1. ステータスバー: 処理の結果を示すメッセージが表示されます。

この例では「プロジェクト ZLABVA01 は有効化されていません」と表示されます。

2. ZX インクルードを削除する

T-CODE:SE38 でプログラム名にインクルードの名前を入力し、ツールバーの「削除」を押します。

インクルードを削除する

画面の見方

  1. プログラム: 削除するインクルードの名前です。
  2. 削除: プログラム(インクルード)を削除します。
削除の確認

画面の見方

  1. はい: 削除します。
インクルードが削除された

画面の見方

  1. ステータスバー: 処理の結果を示すメッセージが表示されます。

この例では「プログラム ZXVVAU04 は正常に削除されました」と表示されます。

3. 拡張プロジェクトを削除する

T-CODE:CMOD でプロジェクト名を入力し、ツールバーの「削除」を押します。

拡張プロジェクトを削除する

画面の見方

  1. Project: 削除する拡張プロジェクトの名前です。
  2. 削除: 拡張プロジェクトを削除します。
プロジェクト削除の確認

画面の見方

  1. はい: 削除します。

続けて「オブジェクトディレクトリエントリ登録」画面が開き、保存先を聞かれます。ここで聞かれているのは拡張プロジェクトそのものではなく、画面の Object 欄に表示されるオブジェクト(この例では DOCV MOZZLABVA01)の保存先です。

削除の途中で開く保存先の画面

画面の見方

  1. Object: 保存先を決めるオブジェクトの種類です。
  2. ローカルオブジェクト: 保存先をローカルオブジェクトにして処理を続けます。

この例では、「ローカルオブジェクト」を押すと拡張プロジェクト ZLABVA01 が削除されます。DOCV MOZZLABVA01 は、削除の後もローカルオブジェクトとしてオブジェクトディレクトリ(テーブル TADIR)に残ります。

もう 1 つの USER-EXITS: MV45AFZZ

受注登録のプログラム SAPMV45A には、T-CODE:SMOD・T-CODE:CMOD の仕組みとは別に、FORM で書く Exit が入ったインクルードもあります。ここでは、その場所と中身の見方を説明します。この記事では、このインクルードへの登録(書き込み)は行いません。

1. SAPMV45A のソースで USER-EXITS のインクルードを確かめる

T-CODE:SE38 で SAPMV45A を照会すると、ソースの最初の方に「U S E R – E X I T S」という見出しがあります。

SAPMV45A の USER-EXITS の見出しとインクルード

画面の見方

  1. USER-EXITS の見出し: コメントで書かれた見出しです。
  2. インクルードの一覧: 見出しの下に並ぶインクルードです。
  3. INCLUDE mv45afzz: この節で中身を見るインクルードです。

この例では、MV45AOZZ(コメントは User-modules PBO)、MV45AIZZ(User-modules PAI)、MV45AFZZ(User-forms)などが並びます。

2. MV45AFZZ の中身を見る

T-CODE:SE38 で MV45AFZZ を照会します。

MV45AFZZ の冒頭

画面の見方

  1. This include is reserved for user modifications: このインクルードの使い道を書いたコメントです。
  2. The name of modification modules should begin with ‘ZZ’: 独自に足すモジュールの名前の付け方を書いたコメントです。
  3. FORM の見出しと説明: 用意されている FORM と、その使い道・呼ばれる場所を書いたコメントです。

この例では、③の USEREXIT_DELETE_DOCUMENT のコメントに、販売伝票を削除するときに追加のテーブルのデータを削除するために使えること、FORM BELEG_LOESCHEN の終わりで呼ばれることが書かれています。

MV45AFZZ には、ほかにも USEREXIT_MOVE_FIELD_TO_VBAK、USEREXIT_SAVE_DOCUMENT、USEREXIT_SAVE_DOCUMENT_PREPARE などの FORM があります。たとえば USEREXIT_SAVE_DOCUMENT_PREPARE のコメントには、伝票を保存する前の変更やチェックに使えること、FORM BELEG_SICHERN の最初で呼ばれることが書かれています。

3. 変更しようとしたときの表示を確かめる

MV45AFZZ を照会した画面で「照会 <-> 変更」を押すと、情報のメッセージが表示されます。

変更しようとしたときの情報

画面の見方

  1. メッセージ: 変更しようとしたオブジェクトについての情報です。

この例では「緊急の場合のみ外部名称領域で仮修正を行ってください」と表示されます。「ヘルプ」を押すと、メッセージの説明が表示されます。

メッセージ TR852 の説明

この説明(メッセージ番号 TR852)によると、編集しようとしているオブジェクトは、SAP または別のソフトウェア製造業者に属するオブジェクトのために予約された名称領域にあります。そのため、緊急の仮修正だけを、名称領域の所有者に相談したうえで、または指示どおりに行うよう案内されています。

T-CODE:CMOD のカスタマ Exit では、利用者用の ZX インクルードに処理を書きました。MV45AFZZ は、SAP の名称領域にあるインクルードそのものです。MV45AFZZ に処理を足すときは、社内の開発ルールを確かめ、担当者と相談してから行うとよいでしょう。

動かないときに確かめること

  • インクルードを有効化したのに、Exit の処理が動かない: 拡張プロジェクトが有効化されていないと、CALL CUSTOMER-FUNCTION は無視されます。T-CODE:CMOD で拡張プロジェクトを有効化しているかを確かめましょう。
  • 本番システムで Exit の処理が動かない: 移送したあとも、移送先で拡張プロジェクトの有効化が必要です。移送先で有効化したかを確かめましょう。
  • 使いたい SAP 拡張を拡張プロジェクトに割り当てられない: 同じ SAP 拡張を 2 つの拡張プロジェクトに入れることはできません。すでに割り当てられている拡張プロジェクトを探して、そちらに処理を足すかどうかを相談しましょう。
  • 処理を書くインクルードにサブルーチンを書きたい: このインクルードは汎用モジュールの中に入るため、FORM と ENDFORM は書かないよう案内されています。

まとめ

  • ユーザーExit は、T-CODE:SE93 でパッケージを調べて T-CODE:SMOD の Exit 検索で探すか、プログラムのソースで CALL CUSTOMER-FUNCTION を検索して探します。
  • 処理は、汎用モジュール Exit の中の ZX インクルードに書きます。
  • 受注登録には、MV45AFZZ の FORM で書く USER-EXITS もあります。こちらは SAP の名称領域のインクルードです。
  • T-CODE:CMOD で拡張プロジェクトに SAP 拡張を割り当て、プロジェクトを有効化すると Exit が使われます。
レイナ

パッケージから探す方法と、ソースで CALL CUSTOMER-FUNCTION を検索する方法の 2 つがあるんですね!

博士

うむ。処理は ZX インクルードに書いて、拡張プロジェクトを有効化すると Exit が使われるのじゃ。

  • 転職求人
  • フリーランス案件
株式会社日立産業制御ソリューションズ

【リモート可】【PM/PL候補】【東京】SAP(S/4HANA)エンジニア ※フレックスタイム制/ワークライフバランス◎(S/4HANA)

年収
430~800万円 / 年
勤務地
東京本社:東京都台東区秋葉原6番1号(...
雇用形態
正社員
要スキル:
【必須】 SAP導入に強い興味があり、以...
キリンビジネスシステム株式会社

SAP会計領域コンサルタント(管理職)/キリングループ唯一のIT会社(FI/CO)

年収
900~1,300万円 / 年
勤務地
東京都中野区中野4-10-2 中野セントラ...
雇用形態
正社員
要スキル:
【必須(MUST)】 以下A・B・Cすべてを...
キリンビジネスシステム株式会社

SAPコンサルタント/キリングループ唯一のIT会社(SD/MM/PP)

年収
500~850万円 / 年
勤務地
東京都中野区中野4-10-2 中野セントラ...
雇用形態
正社員
要スキル:
【必須(MUST)】 SAPアプリケーショ...
株式会社ベイカレント・コンサルティング

【SAPコンサルタント】経営戦略実現を全社横断変革で支援/平均年収1,350万円

年収
600~2,500万円 / 年
勤務地
東京都港区麻布台1-3-1麻布台ヒル...
雇用形態
正社員
要スキル:
【必須(MUST)】 社会人経験3年以上...
株式会社 ホープス

【年収1000万円可】【リモート可】【上流工程】【SAP導入コンサルタント】リモート・ハイブリッド勤務OK|平均残業月10時間/HOPES ※基幹系業務システムの導入推進を行っていただける方を募集

年収
800~1,800万円 / 年
勤務地
〒 1040033:東京都中央区新川1-3-17新...
雇用形態
正社員
要スキル:
■SAPコンサルタント 【必須】 SAPモ...
COFIPP

【S/4HANA AMS体制Functional Lead】リモート可/R2R・P2D領域インシデント対応

月額単価
~1,500,000円 / 月
稼働場所
東京都
業務領域
要件定義, 運用・保守
作業内容:
グローバル企業のSAP S/4HANA AMS体制に...
COMMSD

【ECC6.0→S/4HANA再構築】東京・都内(出社)/SD・MM・CO ABAP開発・設計・テスト

月額単価
~1,200,000円 / 月
稼働場所
東京都
業務領域
設計, 開発(ABAP/Fiori), テスト
作業内容:
SAP ECC6.0からS/4HANAへの大型再構築プ...
MMPPSD

【SAP S/4保守・運用(ABAP)】東京・田無(テレワーク併用)/インシデント対応・ABAP改修

月額単価
~1,000,000円 / 月
稼働場所
東京都
業務領域
開発(ABAP/Fiori), 運用・保守
作業内容:
SAP S/4の保守・運用フェーズに参画し、...
COFIMMPPSD

【SAP Public Cloud導入(組立製造業・多モジュール)】兵庫(リモート対応可)/MM・SD・FI・CO・PP

月額単価
~1,100,000円 / 月
稼働場所
兵庫県
業務領域
要件定義
作業内容:
組立製造業を対象としたSAP Public Clou...
MMSD

【S/4HANA導入支援(システムテスト・移行)】東京・リモート併用/移行支援

月額単価
~1,400,000円 / 月
稼働場所
東京都
業務領域
テスト
作業内容:
S/4HANA導入プロジェクトの移行フェーズ...
COFIMMSD

【S/4HANA導入支援】東京(リモート併用)/基本設計&実装

月額単価
~1,400,000円 / 月
稼働場所
東京都
業務領域
設計
作業内容:
商社系のシステム再構築プロジェクトに...
SD

【S/4HANA新規導入支援(SDコンサルタント)】東京(リモート併用)/設計構築フェーズ

月額単価
~1,500,000円 / 月
稼働場所
東京都
業務領域
設計, 開発(ABAP/Fiori)
作業内容:
大手企業のS/4HANA新規導入プロジェクト...
COFI

【S/4HANA新規導入支援(原価チームリーダー)】東京駅・リモート併用

月額単価
~1,900,000円 / 月
稼働場所
東京都
業務領域
設計, 開発(ABAP/Fiori)
作業内容:
S/4HANA新規導入プロジェクトに参画し、...
FIPP

【S/4HANAコンサルティング(FI/PP)】兵庫・加古川(リモート併用)/結合テスト・キーユーザ教育

月額単価
~1,300,000円 / 月
稼働場所
兵庫県
業務領域
テスト, その他
作業内容:
組立製造業向けのS/4HANA導入プロジェク...
COFI

【商社向けパブクラ移行(FICOコンサル)】宮城・仙台(リモート併用)/要件定義+構築

月額単価
~1,100,000円 / 月
稼働場所
宮城県
業務領域
要件定義, 設計
作業内容:
総合商社向けのSAP PublicEdition移行案...

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

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

SAPラボのライターの特徴

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

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

募集要項

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

ご応募/お問合せ先

info@sap-labo.com

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

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

この記事を書いた人

株式会社スプラッシュエンジニアリング(https://splash-eng.com/)の代表取締役。

新卒でSAPエンジニアとして働き始め、SAPエンジニア・コンサルタント歴は10年以上。
2015年にシステム開発会社である株式会社Luxyを創業し2021年にバイアウト。その後、受託開発会社の株式会社アガルートITパートナーズ代表取締役も兼任。
2024年にこれまでの会社の代表を退任し株式会社スプラッシュエンジニアリングを創業。

一緒に「SAPラボ」を盛り上げてくれる副業ライター(SAP経験者)を募集してますので、お問い合わせよりお願いします!

この記事のポイント