★一発理解MMシリーズ★ MM01に新規ビュー「拡張」を追加!マスタ画面のカスタマイズからABAP開発まで完全網羅!

MM在庫調達
目次

背景と目的

物料マスタへ独自項目を追加したい。
さて、既存のタブへ追加するべきか、それとも新しいタブを作るべきか……。

今回は新しいタブ(拡張ビュー)を作ることにしました。
既存画面への影響を最小限に抑えながら、
関連項目をまとめて管理できるためです。

1.業務上の課題

  • 標準項目の不足: 標準の物料主データ(MARA/MARC等)には多くの項目があるが、業界特有の要件や自社独自の管理値(例:旧基幹システムのID、特殊なフラグ)を保持する場所がない。
  • 画面の複雑化: 既存の標準タブに項目を増設しすぎると、ユーザーが必要な情報を見つけにくくなる。

2.この手法を選ぶ理由

  • 独立性の確保: 「拡張」という専用タブにまとめることで、標準機能への影響を最小限に抑えつつ、ユーザーが迷わず入力できる環境を作る。
  • メンテナンス性: ABAP開発とカスタマイズを分離することで、将来のシステム変更にも柔軟に対応できる。

3.技術的なゴール

  • 単に項目を増やすだけでなく、「データ保存(DB)」「画面表示(UI)」「制御(SPRO)」の3つの整合性を完璧に保つこと。

ステップ1 難易度 ★ データの入れ物を作る(MARAテーブル拡張)

まずは、追加したいデータを保存するための『器』をデータベースに用意するよ。今回は物料の基本情報だから、MARAテーブルを拡張するんだ。

STEP
TransactionSE11を起動

「Append 構造」 ボタンをクリックする。

STEP
フィールドの定義

任意の構造名(例:ZMARA_ENHANCE_ATTR)を入力して新規作成、項目を追加する

任意の構造名(例:ZMARA_ENHANCE_ATTR)を入力して新規作成、項目を追加する

STEP
有効化

もし数量や金額の項目を追加した場合は、『参照フィールド』 の設定を忘れないようにね。これを怠ると、有効化でエラーが出て先に進めないよ。

ステップ 2 難易度 ★★★ 入力画面を作る(サブスクリーン開発)

器(DB)はできたぜ! 次は何をすればいい?

次は中身の『サブスクリーン』開発だ、標準の MGD1ZMGD1 にコピーする。話はそれからだよ。

独自Viewを追加する前に、
まずは標準のMM01/MM02がどのような構造で動いているかを確認する。

品目マスタ関連の画面は、
主に「SAPLMGMM」プログラムを中心に構成されている。
SE80で SAPLMGMM を開くと、大量のScreenが存在していることが分かる。
最初は複雑に見えるが、
実際には各Viewがサブスクリーン単位で分割され、
Screen Sequenceによって動的に制御されている。

つまり、独自View追加の本質は、「新しいサブスクリーンをMMの画面制御に組み込むこと」とも言える。

STEP
汎用グループの作成

以下のメニューパスで汎用モジュール登録

STEP
サブスクリーンの作成

ZMGD2 の中に新規スクリーン(例:9001)を作成。

STEP
レイアウト設計

エレメント一覧(一般タブ)にしっかり項目が並んでいます。これで「器(DB)」と「画面(UI)」が紐付いた状態だ。

STEP
ロジックの実装(PBO/PAI)

・PBOは画面表示前に実行される処理です。
 ここではMARAに保存されている値を取得し、画面項目へ設定します。
・PAIはユーザ操作後に実行される処理です。
 ここでは画面で入力された値を取得し、保存対象の構造へ受け渡します。

入力したデータを MARA に運んだり、保存されているデータを画面に表示したりする『橋渡し』が必要なんだ。

スクリーン(9001)の 「制御ロジック(Flow Logic)」 タブを開く。

MODIFY_SCREEN OUTPUT

MM03(照会モード)の場合は、入力できないようにしたいですよね。
この処理では、追加した独自項目を参照専用(入力不可)にしています。

MODULE MODIFY_SCREEN OUTPUT.

  IF SY-TCODE  CS '3'.

    LOOP AT SCREEN.
      IF SCREEN-GROUP1 = 'Z1'.
        SCREEN-INPUT = 0.
        MODIFY SCREEN.
      ENDIF.
    ENDLOOP.
  ENDIF.

ENDMODULE.
  • SY-TCODEでMM03を判定
  • SCREEN-GROUP1=’Z1’の項目を対象
  • SCREEN-INPUT=0で入力不可
GET_DATA OUTPUT

せっかく保存したデータも画面を開くたびに空欄では意味がありません。
そこで、画面表示前に SAP標準の「MARA_GET_SUB」を呼び出し、
保存済みの品目情報を取得します。
これにより、ユーザーは常に最新の値を確認できます。

MODULE GET_DATA OUTPUT.
  CALL FUNCTION 'MARA_GET_SUB'
    IMPORTING
      WMARA = MARA
      XMARA = *MARA
      YMARA = LMARA.
ENDMODULE.
  • PBOで実行される
  • MARA_GET_SUBで標準データを取得
  • 画面表示時に最新値を反映
MODIFY_DATA INPUT

せっかく入力した値も、
そのまま標準処理へ渡すと消えてしまうことがあります。
そこで一度大切に預かっておき、
標準データを取得した後で戻してあげるわけですね。

MODULE MODIFY_DATA INPUT.

  DATA:LV_MAT TYPE MARA-ZZ_MAT_LEVEL,
       LV_ECO TYPE MARA-ZZ_ECO_TYPE,
       LV_CHG TYPE MARA-ZZ_CHG_DATE,
       LV_IS  TYPE MARA-ZZ_IS_CRITICAL.

    LV_MAT = MARA-ZZ_MAT_LEVEL.
    LV_ECO = MARA-ZZ_ECO_TYPE.
    LV_CHG = MARA-ZZ_CHG_DATE.
    LV_IS  = MARA-ZZ_IS_CRITICAL.

  CALL FUNCTION 'MARA_GET_SUB'
         IMPORTING
            WMARA     = MARA
            XMARA     = *MARA
            YMARA     = LMARA.

  MARA-ZZ_MAT_LEVEL   = LV_MAT.
  MARA-ZZ_ECO_TYPE    = LV_ECO.
  MARA-ZZ_CHG_DATE    = LV_CHG.
  MARA-ZZ_IS_CRITICAL = LV_IS.

  CALL FUNCTION 'MARA_SET_SUB'
          EXPORTING
             WMARA = MARA.
ENDMODULE.
  • 入力値を先に退避する
  • MARA_GET_SUBで標準データを取得する
  • 独自項目を再設定する
  • MARA_SET_SUBで保存処理へ引き渡す

ステップ3 難易度 ★★★  MM01へ組み込む(拡張プロジェクト登録・画面シーケンス設定)

プログラムと画面の作成、お疲れ様!でも、これだけじゃまだMM01を開いてもアドオン画面は出てこないんだ。最後に、作った画面を標準機能にガッチャンコさせる『紐付け設定』をしていくよ!

STEP
トランザクションSPROから、以下のメニューパスに進みます。

SPROパス:ロジスティクス – 一般→品目マスタ→品目マスタのシステム設定→定義:データ画面の構造(画面順序別)

STEP
「画面シーケンス番号21」 を選択します。
STEP
「データ画面」をダブルクリックします。
STEP
新しい画面を登録すします。

先ほど作成したサブスクリーンを、画面シーケンス21へ追加します。

これにより、MM01/MM02の「標準産業(短)」タブ内で
独自画面が表示されるようになります。

STEP
作成した画面を「従属画面」に組み込みます。

「従属画面」を選択します。
ここでは、タブページ内に表示されるサブスクリーンを管理します。
作成したDynproを登録することで、MM01/MM02画面から呼び出せるようになります。

STEP
先ほど作成したDynproを登録します。

先ほど作成したDynproを登録します。
Program:SAPLZMGD2
Screen:9001
を指定し、追加画面を呼び出せるようにします。

※一番下などの空いている行(または置き換えたい標準のダミー行)を見つけ、以下のように書き換えます。

完成イメージと動作確認

カサカサ!ついに設定が終わりました!緊張のMM01テストですね……!

そうだよ!さっそく MM01(または MM02/ MM03)を開いて、設定したタブを確認してみて!

MARA

これで『汎用モジュールの作成』から『SPROでの画面配置・テスト』まで、MM01画面拡張の全工程が完了したよ!
さあ、次の冒険に出発だ!
※記事が役に立ったら「いいね」してね👍

コメント

コメントする

目次