必見!覚えておきたいロジ系の頻出BAPI
INDEX LINK
1.はじめに
SAP ERP業界で働く上で避けては通れない知識に「BAPI」があります。BAPIに関する知識は、ABAPerのみならず、SEやコンサルタントでも押さえておくべきです。ここでは、ロジスティクス系で必須ともいえるBAPIを紹介します。
2.BAPIとは?
まず、BAPIについて簡単におさらいしておきましょう。BAPIの正式名称は「Business Application Programming Interface」で、単語の頭文字をとってBAPI(バピ)と呼ばれています。
BAPIは、端的に言えば「SAP ERP内に標準搭載されているAPI群」です。SAPの独自言語であるABAPで作られており、実際の中身は標準的な汎用モジュールとほぼ同じです。ただし、汎用モジュールはSAP ERP内のみで動作するのに対し、BAPIは外部システムからコールすることができます。具体的には、Exel VBAやJava、.NETなどから呼び出すことが可能です。このようにBAPIは、ローカルPCのエクセルファイルや外部システムの画面とSAPシステムをつなぐ重要な機能なのです。
・確実、高速、きめ細かな制御が可能なBAPI
一般的な画面プログラムでは、データ登録にBAPIかバッチインプットを使用すると思います。バッチインプットは人間の作業をトレースするような動きをするため、頻繁に使われています。しかし、もしBAPIを使うことができそうであれば、バッチインプットよりもBAPIを優先した開発がおすすめです。
BAPIを使ったことがある方ならご存じだと思いますが、BAPIの処理速度はバッチインプットよりもかなり高速です。また、実装も呼び出しの文を追加するだけでよく、パラメータ追加などが必要なバッチインプットよりも楽なのです。さらに、コミット(処理確定)のタイミングも制御できるため、自動コミットが主体のバッチインプットに比べるとエラー発生時の処理をハンドリングしやすいという特徴を持っています。
BAPIは一般的な業務で発生する処理を網羅しているので、うまく使うことができれば非常に効率よく開発を進められます。特にアドオン画面を多数追加するような開発の場合は、標準機能との橋渡しにBAPIを活用することで開発工数を抑えることが可能です。
3.ロジスティクス系の頻出BAPI
では、実際にロジスティクス系のモジュールでよく使われるBAPIを紹介していきます。
・SD:受注伝票登録BAPI (BAPI_SALESORDER_CREATEFROMDAT2)
受注伝票を新規に登録するBAPIで、伝票タイプC(受注)データのみを対象とします。指定するパラメータが多い一方でかなり高機能であり、パラメータ設定さえ習得できれば非常に使い勝手の良いBAPIです。
主なパラメータとしては、受注ヘッダ、明細、納入日程行、条件、取引先機能などがあり、標準テーブルの項目に類似していることがわかります。
・SD:受注伝票変更BAPI(BAPI_SALESORDER_CHANGE)
こちらは、登録済みの受注伝票を変更するBAPIです。受注伝票登録BAPIと同じく「C:受注」の伝票タイプデータのみを変更対象とします。受注伝票登録BAPIに比べると、後続の伝票を考慮する必要がある分、扱いが難しいですね。
・MM:出荷伝票登録BAPI (BAPI_OUTB_DELIVERY_CREATE_SLS)
受注伝票を参照して出荷伝票登録を行うためのBAPIです。前述の2つのBAPIに比べるとパラメータ構成がシンプルで、なおかつ用途も限られています。単純に受注伝票から出荷伝票を作成する、という用途以外に使われることはほぼないでしょう。
パラメータ設定は、期日・出荷ポイントなどがメインで、トランザクションコード「VL01N(出荷伝票登録)」の項目に似ています。
・MM:発注伝票登録BAPI(BAPI_PO_CREATE1)
購買発注伝票を登録するためのBAPIです。トランザクションコード「ME21N(購買発注伝票登録)」と同じような動作をします。パラメータの数がかなり多く、高機能だけれども扱いが難しい点は受注伝票変更BAPIと似ています。
基本的には、発注ヘッダ・発注明細・納入日程行のパラメータのみで動作します。
・MM:発注伝票変更BAPI(BAPI_PO_CHANGE)
発注伝票を変更するBAPIです。こちらもパラメータの数が非常に多く、トランザクションコード「ME22N(購買発注変更)」とほぼ同じ内容を更新します。
・MM:在庫移動登録BAPI(BAPI_GOODSMVT_CREATE)
在庫移動の処理を担うBAPIです。MMモジュールでよく使われるトランザクション「MIGO」の動きとほぼ同じ内容の処理を行います。つまり、入庫・出庫・在庫転送といった在庫移動の処理全般を担当するわけですね。在庫移動の種類ごとに在庫種類コードを設定し、これに応じて設定するパラメータが変わることが特徴です。
・MM:在庫移動取消BAPI(BAPI_GOODSMVT_CANCEL)
在庫移動のキャンセル処理を担うBAPIです。こちらは用途が限定されたBAPIであるため、パラメータ設定もシンプルです。取り消したい入出庫伝票の番号と転記日付があれば動作します。また、明細番号を具体的に指定することで、一部の明細のみをキャンセルすることも可能です。
・MM:購買依頼登録BAPI(BAPI_PR_CREATE)
購買依頼登録伝票を登録するためのBAPIです。これまで紹介してきた登録系のBAPIと同じように、パラメータの数が多く設定にも慣れが必要ですね。トランザクションコード「ME51N(購買依頼登録)」とほぼ同じ内容の処理が可能です。購買依頼ヘッダ、明細、勘定設定など、購買依頼伝票のデータに近い内容がパラメータになっています。
・MM:購買依頼変更BAPI(BAPI_PR_CHANGE)
登録済みの購買依頼伝票を変更するBAPIです。ME23N(購買依頼変更)と同じ内容の処理を実行できますが、こちらも指定するパラメータが多いです。明細ごとに変更・更新・追加ができるため、実は使い勝手の良いBAPIでもあります。
・MM:品目マスタ登録変更BAPI(BAPI_MATERIAL_SAVEDATA)
品目マスタへの新規登録を担うBAPIです。こちらはトランザクションコード「MM01(品目マスタ登録)」と同じ内容の処理を進められますが、一部仕様が異なっています。通常のMM01による品目マスタ登録では、画面上で品目コードの番号範囲や必須入力項目のチェックが入ります。しかしこのBAPIではこうしたチェックが行われません。このことを利用して、番号範囲外の品目を登録するなど、一風変わった処理ができることが特徴です。
パラメータは品目マスタと酷似していて、クライアントデータやプラントデータ、販売・会計データなどが主体です。また、設定項目にXを指定することでビューの更新・拡張も可能です。
・BAPIを扱うときは「コミットのタイミング」に注意
この記事の冒頭でも紹介したのですが、BAPIはコミットのタイミングを動的に制御できます。裏を返せば、コミットを明示的にしないと処理が正常に確定しません。BAPI内部ではコミット処理を行なわないことが多いので、実際にロジックを書くときは「正常終了時(エラーメッセージがない場合)にコミットする」ための一文を加える必要があります。
ABAPで記述すると
IF SY-SUBRC <> 0.
COMMIT WORK AND WAIT.
といった具合になるでしょう。ただし、品目マスタ登録変更BAPIのように、BAPI内部でコミット処理を行うパターンもあります。BAPIによってコミットのタイミングが異なるので、この点は十分に注意したいところです。
4.意外と身につかないBAPIの知識
今回はロジスティクス系でよく使われるBAPIを簡単に紹介しました。BAPIは、SAPが持つ特徴のひとつであり、今後のバージョンアップでも受け継がれていくと思います。BAPIを知ることはSAP ERPの仕組みを知ることにつながりますから、ぜひとも扱い方を習得しておきたいところです。
BAPIを使いこなすためには、パラメータ設定や動作仕様のリサーチが必要であることから、ハードルが高いと感じる方もいるようです。実際、アドオンの汎用モジュールばかりを使う傾向があるプロジェクトでは、BAPIをあまり使用せず、結果的にBAPIの知識とスキルを身に着ける機会に恵まれない方もいます。
もし、BAPIを含めた標準仕様への理解を深めたいのであれば、フリーランスとしてさまざまなプロジェクトを経験する方法もひとつの手です。