【決定版】BAPI_GOODSMVT_CREATEをどこよりも詳しく解説!

BAPI_GOODSMVT_CREATEをどこよりも詳しく解説

BAPI_GOODSMVT_CREATE は標準トランザクションMIGOと同等の機能を持つBAPIである。本記事は、SAPシステムの在庫入出庫を行うプログラムを開発する上で、重要な役割を果たすBAPI_GOODSMVT_CREATE について、おそらく、どこよりも詳しく解説した記事である。
購買発注入庫、指図入庫、在庫移動など、トランザクション別にパラメータ設定の方法も解説してあるので、プログラム開発の参考にしてほしい。

SAPシステムにおける在庫移動は、企業の物流や生産管理において非常に重要なプロセスである。

SAPシステムはS/4HANAへの移行に伴い、MB1A/MB1B/MB1C といった「MBトランザクション」は廃止され、在庫入出庫の機能はMIGO に統合された。このため、MIGO の使用機会とその重要性は、嫌が上でも増している。

そして、MIGO と同等の機能を備えるBAPI: BAPI_GOODSMVT_CREATE もまた、存在感を増している。このBAPI は、SAPシステム内でプログラムから在庫移動を実行するための標準インターフェースとして提供されている。あらゆる在庫移動を実行できるBAPIなので、使用頻度が高く、重要なBAPIである。

したがって、BAPI_GOODSMVT_CREATE を理解し、使いこなすことは、SAPシステムにおける在庫管理の開発を極めると言っても過言ではないだろう。

目次

BAPI_GOODSMVT_CREATEの概要

BAPIはシステムに拡張性と柔軟性を与える

BAPI(Business Application Programming Interface)は、SAPシステム内のビジネスオブジェクトと外部システムや他のSAPモジュールとの間でデータを交換するための標準化されたインターフェースである。

MIGOのような標準トランザクションとは異なり、BAPI は主にアドオンと呼ばれるカスタム開発プログラムから利用されることが多い。企業の業務に特化した要件に対応するため、SAPシステムの標準機能だけでは不足するケースがある。そのような場合、BAPI はアドオンから利用され、SAPシステムの拡張性と柔軟性を高める役割を果たす。


BAPIそのものを解説した記事は以下。そもそもBAPI のことがよく解らないという人は、下の記事をまず読んでほしい。

SAPBAPI_GOODSMVT_CREATEの役割

BAPI_GOODSMVT_CREATE は、在庫移動を行うためのBAPIであり、SAPの在庫管理プロセス全体で利用される。具体的には、以下のような業務プロセスで使用される。

入庫処理

購買発注に基づく材料の入庫や、外部からの納品の際の入庫処理に利用される。たとえば、移動タイプ101(入庫)を使用して、SAPシステム内に在庫を追加する。

出庫処理

製造指図や原価センタへの材料出庫を行う際に使用される。たとえば、移動タイプ261(製造指図への出庫)や、201(原価センタ出庫)がこれに該当する。

棚卸調整

棚卸差異の調整を自動化するために使用される。移動タイプ701(棚卸増加)や、702(棚卸減少)を利用して在庫を修正するプロセスで活用される。

在庫移動

プラント間や保管場所間の在庫移動を実行する際に利用される。たとえば、移動タイプ301(プラント間移動)や、311(保管場所間移動)である​。

このように、BAPI_GOODSMVT_CREATE は、T-CODE: MIGO と同様に、在庫入出庫に関する様々な業務プロセスで利用され、SAPの生産管理や購買、物流など、幅広い業務領域において重要な役割を果たしている。

Ke1G

BAPI_GOODSMVT_CREATE はあらゆるパターンの在庫入出庫を実行できるので、よく使われるBAPIだ!

BAPI_GOODSMVT_CREATEのメリットとデメリット

BAPI_GOODSMVT_CREATEを利用するメリット

1. 自動化と業務効率化

BAPI_GOODSMVT_CREATE は、プログラムからSAPの在庫移動プロセスを効率的に実行するための手段を提供する。これにより、例えば、定期的に発生する入出庫処理や在庫調整作業を、ユーザーの介入なしに自動で実行することが可能となる。自動実行プログラムからBAPIを呼び出すことで、手動入力の手間を省き、業務プロセス全体を自動化できる​ 。

2. カスタマイズされた業務フローの実現

標準トランザクションの MIGO は標準的な在庫移動処理を提供するが、企業独自の業務フローに完全に適応するわけではない。BAPI_GOODSMVT_CREATE を使用することで、アドオンプログラムに必要なロジックや業務要件を組み込むことが可能である。例えば、複数の在庫移動を一度に自動処理するプログラムを実装することができる​ 。

3. 複雑なプロセスの統合

標準トランザクションの MIGO では対応できないような複雑な在庫移動や特定のビジネス要件に対して、BAPI を用いることで柔軟に対応できる。たとえば、外部システムからのデータをリアルタイムで受け取り、即座に在庫移動を処理するプログラムを開発することができる。これにより、システム間のシームレスな連携が実現し、業務全体の効率を向上させる​。

4. バッチインプットの代替

MIGO やMBトランザクションはバッチインプットに対応していないが、BAPI_GOODSMVT_CREATE を使用することで、バッチインプットのような一括登録処理を実現できる。これは、大量の在庫移動を処理する必要がある場合や、定期的なデータ処理を行う場合に特に有用である。

三菱電機インフォメーションシステムズ社の「MALSY」は、BAPI を呼び出してExcel上のデータを直接SAPシステムに登録できるツールである。アドオンプログラムを作成しなくても、パラメータを設定するだけで、データを一括登録する運用が可能だ。

BAPI_GOODSMVT_CREATEを利用するデメリット

以下はBAPI_GOODSMVT_CREATE に限らないが、BAPI を利用する際のデメリットと注意である。

1. エラーハンドリングの複雑さ

BAPI は標準トランザクションと比較してエラー処理が複雑である。MIGO などのトランザクションコードでは、エラーが画面に表示され、ユーザーがその場で修正できるが、BAPI の場合、プログラム実行後に戻り値を確認し、エラーメッセージを解析する必要がある。このプロセスは技術的な知識が求められ、特に複雑な業務ロジックを含む場合、原因を特定して修正するのに時間がかかることがある​。

2. 学習コストの高さ

BAPI の利用には、ABAPプログラミングの知識が不可欠である。標準トランザクションと異なり、GUIベースの操作ではなく、プログラムからの操作となるため、ABAPの知識がなければ実装が難しい。また、複雑なパラメータ設定や、システム特有の構造への理解が必要であり、初めて利用するユーザーにとっては学習コストが高くなる​。

3. デバッグの難しさ

BAPI はバックエンドで処理が行われるため、リアルタイムでのデバッグが難しい。エラーが発生した場合、ログや戻り値テーブルを解析しなければならず、問題の原因を突き止めるのに時間がかかることがある。特に複数のプロセスが絡む複雑な処理では、問題解決がさらに困難になる。

BAPI_GOODSMVT_CREATEの全パラメータを紹介

以下は、S/4HANA 2023 における、BAPI_GOODSMVT_CREATE の全パラメータの一覧である。

色の付いているパラメータ(フィールド)は、入力必須、または、使用頻度の高いパラメータである。BAPI_GOODSMVT_CREATE を利用するうえで、覚えておきたいパラメータだ。

  • 行数が多いので、アコーディオンブロックになっている。上下に展開したり折り畳む時は、「▲▼」をクリック。

Import (入力)

T-CODE:MIGO のヘッダ部に相当するパラメータ。

Parameter
パラメータ
Description
説明
ABAP/4
Data Type
INTLEN
内部長
Decimal
小数点以下桁数
Default
既定値
GOODSMVT_CODEBAPI2017_GM_CODE在庫移動に対するコードのトランザクションへの割当u4
GM_CODEBAPI 在庫移動トランザクションのコード割当C2
GOODSMVT_HEADERBAPI2017_GM_HEAD_01入出庫伝票ヘッダデータu416
PSTNG_DATE伝票の転記日付D8
DOC_DATE伝票の伝票日付D8
REF_DOC_NO参照伝票番号C16
BILL_OF_LADING入庫時の船荷証券番号C16
GR_GI_SLIP_NO入出庫票番号C10
PR_UNAMEユーザ名C12
HEADER_TXT伝票ヘッダテキストC25
VER_GR_GI_SLIP入出庫票印刷バ-ジョンC1
VER_GR_GI_SLIPX関連ユーザデータ項目の更新情報C1
EXT_WMS外部倉庫管理の転記の制御C1
REF_DOC_NO_LONG参照伝票番号 (依存性についてはテキスト長参照)C35
BILL_OF_LADING_LONG入庫の船荷証券番号 (依存: テキスト (長) 参照)C35
BAR_CODEバーコードエントリC40
GOODSMVT_PRINT_CTRLBAPI2017_GM_PRINTBAPI Communication Structure: Material Document Print Controlu2
PR_PRINTENJOY MMIM による印刷N1
GOODSMVT_REF_EWM/SPE/BAPI2017_GM_REF_EWMBAdI 通信構造: 入出庫伝票 EWM 照会u122
REF_DOC_EWMEWM 入出庫伝票番号C16
LOGSYSEWM 入出庫伝票の論理システムC10
GTS_SCRAP_NO廃棄処理の税関参照番号C35
TESTRUNBAPI2017_GM_GEN在庫移動シミュレーションC1SPACE

Table (入力テーブル)

T-CODE: MIGO の明細部に相当するパラメータ。

設定必須のテーブルは GOODSMVT_ITEM である。移動タイプ、品目コード、プラント、保管場所、数量など、MIGO でもお馴染みの項目が並ぶ。

Parameter
パラメータ
Description
説明
ABAP/4
Data Type
INTLEN
内部長
Decimal
小数点以下桁数
Default
既定値
Optional
選択可能
GOODSMVT_ITEMBAPI2017_GM_ITEM_CREATE入出庫伝票明細u1417
MATERIAL品目コード (18 桁)C18
PLANTプラントC4
STGE_LOC保管場所C4
BATCHロット番号C10
MOVE_TYPE移動タイプ (在庫管理)C3
STCK_TYPE在庫タイプC1
SPEC_STOCK特殊在庫区分C1
VENDORサプライヤの勘定コードC10
CUSTOMER得意先コードC10
SALES_ORD受注伝票番号C10
S_ORD_ITEM受注明細番号N6
SCHED_LINE受注納入日程N4
VAL_TYPE評価タイプC10
ENTRY_QNT入力単位での数量P133
ENTRY_UOM入力単位C3
ENTRY_UOM_ISO数量単位の ISO コードC3
PO_PR_QNT購買発注価格単位での数量P133
ORDERPR_UN購買発注価格単位 (購買管理)C3
ORDERPR_UN_ISO数量単位の ISO コードC3
PO_NUMBER購買発注番号C10
PO_ITEM購買伝票の明細番号N5
SHIPPING出荷指示C2
COMP_SHIP出荷指示順守C2
NO_MORE_GR“納入完了” 区分C1
ITEM_TEXT明細テキストC50
GR_RCPT受領者C12
UNLOAD_PT荷渡ポイントC25
COSTCENTER原価センタC10
ORDERID指図番号C12
ORDER_ITNO指図明細番号N4
CALC_MOTIVE計算区分C2
ASSET_NO資産番号C12
SUB_NUMBER資産補助番号C4
RESERV_NO入出庫予定/従属所要量の番号N10
RES_ITEM入出庫予定/従属所要量の明細番号N4
RES_TYPEレコードタイプC1
WITHDRAWN入出庫予定の出庫完了C1
MOVE_MAT入庫/出庫品目C18
MOVE_PLANT入庫/出庫プラントC4
MOVE_STLOC入庫/出庫保管場所C4
MOVE_BATCH入庫/出庫ロットC10
MOVE_VAL_TYPE転送ロットの評価タイプC10
MVT_IND移動区分C1
MOVE_REAS移動理由N4
RL_EST_KEY不動産管理対象の内部キーC8
REF_DATE決済の参照日付D8
COST_OBJ原価対象C12
PROFIT_SEGM_NO収益性セグメント番号 (CO-PA)N10
PROFIT_CTR利益センタC10
WBS_ELEMWBS 要素C24
NETWORK勘定割当のネットワーク番号C12
ACTIVITY活動番号C4
PART_ACCTパートナ勘定コードC10
AMOUNT_LCマニュアル入力による転記金額 (国内通貨)P234
AMOUNT_SV外部入力による販売金額 (国内通貨)P234
REF_DOC_YR参照伝票の会計年度N4
REF_DOC参照伝票の伝票番号C10
REF_DOC_IT参照伝票の明細N4
EXPIRYDATE有効期間期限日D8
PROD_DATE製造日付D8
FUNDファンドC10
FUNDS_CTR予算センタC16
CMMT_ITEM予算コードC14
VAL_SALES_ORD評価受注在庫の受注番号C10
VAL_S_ORD_ITEM評価受注在庫の受注明細N6
VAL_WBS_ELEMWBS 要素C24
GL_ACCOUNTG/L 勘定コードC10
IND_PROPOSE_QUANX提案数量 (初期数量)C1
XSTOB取消移動タイプ区分の使用C1
EAN_UPC国際商品コード (EAN/UPC)C18
DELIV_NUMB_TO_SEARCH出荷伝票C10
DELIV_ITEM_TO_SEARCH出荷明細N6
SERIALNO_AUTO_NUMBERASSIGNMENTシリアル番号の自動登録C1
VENDRBATCH供給者ロット番号C15
STGE_TYPE保管域タイプC3
STGE_BIN棚番C10
SU_PL_STCK_1在庫受入予定の保管単位数P3
ST_UN_QTYY_1代替数量単位での在庫受入予定保管単位別数量P133
ST_UN_QTYY_1_ISO数量単位の ISO コードC3
UNITTYPE_1保管単位タイプC3
SU_PL_STCK_2在庫受入予定の保管単位数P3
ST_UN_QTYY_2代替数量単位での在庫受入予定保管単位別数量P133
ST_UN_QTYY_2_ISO数量単位の ISO コードC3
UNITTYPE_2保管単位タイプC3
STGE_TYPE_PC在庫転送の保管域タイプC3
STGE_BIN_PC在庫転送棚番C10
NO_PST_CHGNT区分: 振替要求通知登録禁止C1
GR_NUMBER入庫番号C10
STGE_TYPE_ST在庫転送の保管域タイプC3
STGE_BIN_ST在庫転送棚番C10
MATDOC_TR_CANCEL取消予定の転送要求の入出庫伝票番号C10
MATITEM_TR_CANCEL取消予定の転送数量入出庫伝票明細N4
MATYEAR_TR_CANCEL取消予定の転送要求入出庫伝票年度N4
NO_TRANSFER_REQ区分: 転送要求未登録C1
CO_BUSPROCビジネスプロセスC12
ACTTYPE活動タイプC6
SUPPL_VEND品目供給者C10
MATERIAL_EXTERNAL項目 MATERIAL の品目コード (長)C40
MATERIAL_GUID項目 MATERIAL の外部 GUIDC32
MATERIAL_VERSION項目 MATERIAL のバージョン番号C10
MOVE_MAT_EXTERNAL項目 MOVE_MAT の品目コード (長)C40
MOVE_MAT_GUID項目 MOVE_MAT の外部 GUIDC32
MOVE_MAT_VERSION項目 MOVE_MAT のバージョン番号C10
FUNC_AREA機能領域C4
TR_PART_BA取引先事業領域C4
PAR_COMPCO決済会社コードC4
DELIV_NUMB出荷伝票C10
DELIV_ITEM出荷明細N6
NB_SLIPS入庫/出庫票の印刷部数N3
NB_SLIPSX関連ユーザデータ項目の更新情報C1
GR_RCPTX関連ユーザデータ項目の更新情報C1
UNLOAD_PTX関連ユーザデータ項目の更新情報C1
SPEC_MVMT倉庫管理の特殊移動区分C1
GRANT_NBR補助金C20
CMMT_ITEM_LONG予算コードC24
FUNC_AREA_LONG機能領域C16
LINE_ID伝票明細行の一意 IDN6
PARENT_ID1 レベル上位の行 IDN6
LINE_DEPTH伝票での明細行階層レベルN2
QUANTITY数量P133
BASE_UOM基本数量単位C3
LONGNUMユーザ定義番号C40
BUDGET_PERIOD予算期間C10
EARMARKED_NUMBER予算執行伝票の伝票番号C10
EARMARKED_ITEM用途指定予算: 伝票明細N3
STK_SEGMENT在庫セグメントC16
MOVE_SEGMENT受入/出庫在庫セグメントC16
MATERIAL_LONG品目コードC40
MOVE_MAT_LONG入庫/出庫品目C40
STK_SEG_LONG在庫セグメントC40
MOV_SEG_LONG受入/出庫在庫セグメントC40
CREATE_DELIVERY出荷伝票登録 (出荷)C1
WAREHOUSE_EWM倉庫番号/複合倉庫C4
STGE_BIN_EWM棚番C18
EWM_DIFF_ANA差異アナライザへの在庫移動転記C1
SERVICE_DOCサービス伝票 IDC10
SERVICE_ITEMサービス伝票明細 IDN6
SERVICE_DOC_TYPEサービス伝票タイプC4
SUPPLYAREA供給場所C10
EWM_INSPUUID品質検査結果: EWM によって設定された在庫 GUIDC32
XSTOR取消、仕入返品、または在庫転送C1
TARGET_BIN_EWM在庫移動時の倉庫タスクの転送先棚番C18
PROFIT_SEGM_NO_ALPHA収益性セグメント番号 (CO-PA)C10
NR_OF_LABELS印刷対象ラベル数N4
EXTENSIONINBAPIPAREXReference Structure for BAPI Parameters EXTENSIONIN/EXTENSIONOUTu990X
STRUCTUREBAPI テーブル拡張の構造名C30
VALUEPART1BAPI 拡張パラメータのデータ部分C240
VALUEPART2BAPI 拡張パラメータのデータ部分C240
VALUEPART3BAPI 拡張パラメータのデータ部分C240
VALUEPART4BAPI 拡張パラメータのデータ部分C240
GOODSMVT_ITEM_CWM/CWM/BAPI2017_GM_ITEM_CREATEBAPI Communication Structure: Create Item Data for CWu24X
MATDOC_ITM入出庫伝票の明細N4
QUANTITY_PME数量 (パラレル数量単位)P133
BASE_UOM_PMEパラレル数量単位C3
ENTRY_QNT_PMEパラレル入力単位の数量P133
ENTRY_UOM_PMEパラレル数量単位の入力数量単位C3
GOODSMVT_SERIALNUMBERBAPI2017_GM_SERIALNUMBERシリアル番号u124X
MATDOC_ITM入出庫伝票の明細N4
SERIALNOシリアル番号C18
UII一意アイテム IDC72
MANSERNO製造業者のシリアル番号C30
GOODSMVT_SERV_PART_DATA/SPE/BAPI2017_SERVICEPART_DATAu163X
LINE_ID伝票明細行の一意 IDN6
RET_AUTH_NUMBER返品権限番号C20
DELIV_NUMBER出荷伝票C10
DELIV_ITEM出荷明細N6
HU_NUMBER外部荷役単位 IDC20
INSPOUT_GUID品質検査結果: EWM 設定の在庫 GUIDC32
EVENT論理時間C10
DATE日付D8
TIME時刻T6
ZONLOタイムゾーンC6
TIMESTAMP取引開始時刻 (UTC タイムスタンプ)P15
SCRAP_INDICATOREWM 処理の廃棄区分C1
KEEP_QUANTITYEWM での廃棄処理の保持数量P133
GTS_STOCK_TYPEGTS 在庫タイプC1
MOVE_GTS_STOCK_TYPEGTS 在庫タイプC1
KEEP_QUANTITY_CONVERSION数量変換不要C1
ZERO_QUANTITYゼロ数量の在庫移動転記許可C1
NUMERATOR販売数量単位から基本数量単位への変換係数の分子P5
DENOMINATR販売数量を在庫単位に換算する分母 (除数)P5
INSP_DOC_NUMB外部品質検査の SAP EWM 品質検査伝票番号C12
PCHG_TYPE品質検査ロットと入出庫伝票間の参照タイプC1
Tableパラメータ

Export (出力用)

BAPI の実行が成功し、入出庫伝票が作成されると「入出庫伝票番号」と「入出庫伝票年度」がセットされる。

Parameter
パラメータ
Description
説明
ABAP/4
Data
INTLEN
内部長
Decimal
小数点以下桁数
Default
既定値
Optional
選択可能
MATERIALDOCUMENTBAPI2017_GM_HEAD_RET入出庫伝票番号C10
GOODSMVT_HEADRETBAPI2017_GM_HEAD_RET入出庫伝票番号/入出庫伝票会計年度u14
MAT_DOC入出庫伝票番号C10
DOC_YEAR入出庫伝票年N4
MATDOCUMENTYEARBAPI2017_GM_HEAD_RET入出庫伝票年度N4
Exportパラメータ

RETURN(実行結果が返されるテーブル)

BAPI実行結果がセットされるテーブル。実行結果のステータス(W,I,E,A)が、メッセージと共にセットされる。

Parameter
パラメータ
Description
説明
ABAP/4
Data
INTLEN
内部長
Decimal
小数点以下桁数
Default
既定値
Optional
選択可能
RETURNBAPIRET2リターンメッセージu548
TYPEメッセージType: S 正常、E エラー、W 警告、I 通知、A 強制終了C1
IDメッセージクラスC20
NUMBERメッセージ番号N3
MESSAGEメッセージテキストC220
LOG_NOアプリケーションログ: ログ番号C20
LOG_MSG_NOアプリケーションログ: メッセージの内部シリアル番号N6
MESSAGE_V1メッセージ変数C50
MESSAGE_V2メッセージ変数C50
MESSAGE_V3メッセージ変数C50
MESSAGE_V4メッセージ変数C50
PARAMETERパラメータ名C32
ROWパラメータの行X10
FIELDパラメータの項目C30
SYSTEMメッセージが発行された論理システムC10
RETURNパラメータ

BAPI_GOODSMVT_CREATEの使用方法(パラメータ設定)

まずは GM_CODE を設定

BAPI_GOODSMVT_CREATE を動かすために、最初に設定すべき必須パラメータが、Importパラメータの
GOODSMVT_CODE – GM_CODE(在庫移動に対するコードのトランザクションへの割当)である。

この GM_CODEは標準画面MIGOには登場しない項目なので少々戸惑うかもしれないが、どのような在庫移動であるか、そのトランザクションを表す番号(以下)を指定する。

01: 購買発注に対する入庫
02: 製造指図に対する入庫
03: 出庫
04: 在庫転送
05: その他の入庫
06: 在庫移動の取消
07: 外注発注に対する後続調整

設定する値によって、指定できる移動タイプや、入力すべきパラメータが決定される。逆に言えば、この値を正しく設定しなければ、目的の移動タイプを指定することができない

Ke1G

GM_CODE(在庫移動トランザクション)を設定すると、移動タイプなど設定できるパラメータが決まる!

Importパラメータ:伝票ヘッダに相当

以下のImportパラメータは、「在庫移動トランザクション(GM_CODE)」の種類に関係なく、入力しなければならないパラメータである。入出庫伝票の「伝票ヘッダ」の部分に相当する。

Importパラメータの中で入力必須なのは、GM_CODEと、PSTNG_DATE(転記日付)である。

パラメータ設定する値入力必須
Import
GOODSMVT_CODE
GM_CODEBAPI 在庫移動トランザクションのコード割当
GOODSMVT_HEADER
PSTNG_DATE
転記日付
在庫の入出庫伝票を起票する日付。FIの会計自動仕分け伝票を起票する日付でもあるため、会計処理上の不正な日付や矛盾する日付は指定できない。たとえば、未来の日付や、会計期間を逸脱した日付は指定不可。
DOC_DATE
伝票日付
何時の入出庫であるかを記録しておく日付。「転記日付」と違い、こちらは会計処理とは無関係なので、指定する日付に制限はない。
たとえば、現場で7月5日に行われた入庫を、月末の7月31日に纏めてSAPシステムに登録する場合、「伝票の伝票日付」は7月5日で、「転記日」は7月31日とする。
省略時はシステム日付がセットされる。
HEADER_TXT
ヘッダーテキスト
入出庫伝票の「伝票ヘッダ Text」に値がセットされる。
Importパラメータ

Tableパラメータ:明細部に相当

「移動区分」は「在庫移動トランザクション」の種類によって決まる

GOODSMVT_ITEM(入出庫伝票明細)テーブルの MVT_IND(移動区分)は、標準画面MIGO には存在しない項目だが、BAPI_GOODSMVT_CREATE にとって必須のパラメータである。

MVT_IND に設定する値は、GM_CODE(在庫移動に対するコードのトランザクションへの割当)によって決まる

MVT_IND に設定する値説明対応するGM_CODEの値
B購買発注に関連した在庫移動01
F製造指図に関連した在庫移動02
H受注に関連した在庫移動未確認
Kカンバン処理に関連した在庫移動未確認
L在庫移動 (保管場所間の移動)04
O“支給品目” 消費の後続調整未確認
W含有単位/製品単位品目の後続調整未確認
MVT_IND (在庫区分)に設定する値

在庫移動トランザクション別 パラメータと入力値

以下は、GOODSMVT_CODE – GM_CODE(在庫移動に対するコードのトランザクションへの割当)の値別の、入力パラメータと、入力値のガイドである。

01: 購買発注に対する入庫

パラメータ設定する値入力必須
Table
GOODSMVT_ITEM
MATERIAL
品目コード
入庫する品目コード
PLANT
プラント
入庫先のプラント
STGE_LOC
保管場所
入庫先の保管場所
MOVE_TYPE
移動タイプ
101(入庫)
STCK_TYPE
在庫タイプ
入庫先での在庫タイプを指定する。省略時(スペース)は「利用可能」在庫となる。在庫タイプは以下から選択可能。
スペース(既定値):利用可能
2 :品質検査
3 :保留在庫
F :利用可能
S: 保留在庫
X:品質検査
ENTRY_QNT
数量
入庫数量
ENTRY_UOM
入力単位
発注時の単位と異なる場合に指定する。
ABAP以外は内部数量単位を指定する。標準画面で入力する通商単位とは異なるので注意。
PO_NUMBER
購買発注番号
外部から入力する際、全て数字の場合は前ゼロ埋めが必須。
PO_ITEM
購買発注の明細番号
購買発注の明細番号。購買発注番号と違い、こちらは数値型のため、前ゼロ埋めは不要。
NO_MORE_GR
納入完了区分
‘X’を設定すると、納入完了区分がセットされる。
入庫数量=発注数量に達すると、納入完了区分は自動的にセットされる。
入庫数量<発注数量でも納入完了としたい場合は、このパラメータを使う。
MVT_IND
移動区分
B
「在庫移動の種類」が01の場合の入力パラメータ

02:製造指図に対する入庫

パラメータ設定する値入力必須
Table
GOODSMVT_ITEM
MATERIAL
品目コード
入庫する品目コード
PLANT
プラント
入庫先のプラント
STGE_LOC
保管場所
入庫先の保管場所
MOVE_TYPE
移動タイプ
101(入庫)
STCK_TYPE
在庫タイプ
入庫先での在庫タイプを指定する。省略時(スペース)は「利用可能」在庫となる。在庫タイプは以下から選択可能。
スペース(既定値):利用可能
2 :品質検査
3 :保留在庫
F :利用可能
S: 保留在庫
X:品質検査
ENTRY_QNT
数量
入庫数量
ENTRY_UOM
入力単位
指図発行時の単位と異なる場合は指定する。
ABAP以外は内部数量単位を指定する。標準画面で入力する通商単位とは異なるので注意。
ORDERID
製造指図番号
外部から入力する際、全て数字の場合は前ゼロ埋めが必要。
ORDER_ITNO
指図明細番号
NO_MORE_GR
納入完了区分
‘X’を設定すると、納入完了区分がセットされる。
入庫数量=発注数量に達すると、納入完了区分は自動的にセットされる。
入庫数量<発注数量でも納入完了としたい場合は、このパラメータを使う。
MVT_IND
移動区分
F
「在庫移動の種類」が02の場合の入力パラメータ

03: 出庫

以下は原価センタ出庫(移動タイプ201)を例にした場合の、在庫出庫時の指定方法である。原価センタ出庫では「原価センタ」が入力必須項目となる。原価センタ出庫の場合、MVT_IND(移動区分)は指定不要である。

パラメータ設定する値入力必須
Table
GOODSMVT_ITEM
MATERIAL
品目コード
出庫する品目コード
PLANT
プラント
出庫元のプラント
STGE_LOC
保管場所
出庫元の保管場所
MOVE_TYPE
移動タイプ
201(原価センタ出庫)
ENTRY_QNT
数量
出庫数量
ENTRY_UOM
入力単位
基本数量単位の単位と異なる場合に指定する。
ABAP以外は内部数量単位を指定する。標準画面で入力する通商単位とは異なるので注意。
COSTCENTER
原価センタ
外部から入力する際、全て数字の場合は前ゼロ埋めが必須。
MVT_IND
移動区分
省略またはスペース
「在庫移動の種類」が01の場合の入力パラメータ

04: 在庫転送

在庫転送では、転送元と転送先の、両方のプラント/保管場所を指定する。

パラメータ設定する値入力必須
Table
GOODSMVT_ITEM
MATERIAL
品目コード
在庫転送する品目コード
PLANT
プラント
転送元のプラント
STGE_LOC
保管場所
転送元の保管場所
MOVE_TYPE
移動タイプ
301(プラント間在庫転送)
311(保管場所間在庫転送)
STCK_TYPE
在庫タイプ
入庫先での在庫タイプを指定する。省略時(スペース)は「利用可能」在庫となる。在庫タイプは以下から選択可能。
スペース(既定値):利用可能
2 :品質検査
3 :保留在庫
F :利用可能
S: 保留在庫
X:品質検査
ENTRY_QNT
数量
在庫転送する数量
ENTRY_UOM
入力単位
基本数量単位の単位と異なる場合に指定する。
ABAP以外は内部数量単位を指定する。標準画面で入力する通商単位とは異なるので注意。
MOVE_PLANT
入庫/出庫プラント
転送先のプラント。
MOVE_STLOC
入庫/出庫保管場所
転送先の保管場所
MVT_IND
移動区分
L
「在庫移動の種類」が01の場合の入力パラメータ

実行後の確認とトランザクション制御

実行結果の確認【要注意】

BAPI_GOODSMVT_CREATE の実行後は戻り値テーブル「RETURN」の内容を確認し、エラーや警告が出力されていないかを確認する。

結果ステータスは、RETURNパラメータの「TYPE」にセットされる。セットされるステータスは以下。

ステータス意味
W警告あり
Eエラー
I通知
A強制終了
RETURNパラメータの「TYPE」にセットされるステータス

このBAPIの特徴として、成功時は何も返さない。成功時はテーブルRETURNのレコード数は0件である。つまり、上記のいずれかのステータスが返ってきている時は、エラーなど何からの問題が発生していると判断する。

Ke1G

BAPI_GOODSMVT_CREATE は成功した時、RETUTNに何も返さない!

TYPEにステータスがセットされると同時に、メッセージ番号が「ID」と「NUMBER」に、メッセージ本文が「MESSAGE」にセットされる。

SAPシステムから返されるステータスとメッセージは、1レコードだけでなく、複数レコードとなって返されることが多い。この理由は、エラーや警告のメッセージが、何種類も返ってくる場合があるからである。また、購買発注入庫のように、複数の明細を1回のトランザクションで実行した場合、結果が明細行単位に返ってくるためである。

処理が成功、または警告だった場合、Exportパラメータに値がセットされる(後述「入出庫伝票番号の取得」参照)。

トランザクション制御を忘れずに!

BAPI_GOODSMVT_CREATEは、トランザクション制御が必要なBAPIである。つまり、BAPI実行後は、以下のいずれかのトランザクション制御を実行しなければならない。

正常終了時(テーブルRETURNの件数が0件)

BAPI_TRANSACTION_COMMIT を呼び出してトランザクションを確定(コミット)する。
これを忘れると、正常終了していてもデータベースに書き込みが行われず、在庫移動が完結しない

エラーや警告の発生時、またはトランザクションをキャンセル(ロールバック)したい時

BAPI_TRANSACTION_ROLLBACK を呼び出して処理を取り消すことができる。

Ke1G

BAPIの実行が成功しただけでは、データベースに書き込まれない!
トランザクションの最後に、コミット(確定)して、データベースの更新を完了させよう。

入出庫伝票番号の取得

標準トランザクション MIGO と同様、BAPI の実行が成功すると入出庫伝票が生成され、その入出庫番号は以下の出力パラメータ(Export)にセットされる。

パラメータ出力値
Export
MATERIALDOCUMENT
入出庫伝票番号
作成された入出庫伝票の入出庫伝票番号。
GOODSMVT_HEADRET
入出庫伝票番号/入出庫伝票会計年度
作成された入出庫伝票の入出庫伝票番号と伝票年度の値が連結された項目。たとえば、入出庫伝票番号が ‘1234567890’で、伝票年度が’2024’の時、この項目には’12345678902024’がセットされる。
MATDOCUMENTYEAR
HEADER_TXT
入出庫伝票年度
作成された入出庫伝票の入出庫伝票年度。
Exportパラメータ

トランザクションをキャンセルしても入出庫伝票番号は採番される

トランザクションをキャンセル(ロールバック)した場合でも、処理が成功している、入出庫伝票番号は採番される。番号は採られるが、入出庫伝票は作られないので、その番号はシステム内では欠番となる。

テスト実行(TESTRUNパラメータに’X’をセット)の場合は、入出庫伝票番号は採番されない

Ke1G

トランザクションをロールバックしても、エラーが発生していなければ、入出庫伝票番号はカウントアップするぞ!

BAPI_GOODSMVT_CREATEのサンプルコード

以下は購買発注に対する入庫の場合の、ABAPサンプルコードである。パラメータの設定要領は上記の「在庫移動トランザクション別 パラメータと入力値」を参照。

DATA: ls_header         TYPE bapi2017_gm_head_01,
      ls_code           TYPE bapi2017_gm_code,
      lt_item           TYPE TABLE OF bapi2017_gm_item_create,
      ls_item           TYPE bapi2017_gm_item_create,
      lt_return         TYPE TABLE OF bapiret2,
      ls_return         TYPE bapiret2,
      lv_mat_doc        TYPE bapi2017_gm_head_ret-mat_doc,
      lv_mat_doc_year   TYPE bapi2017_gm_head_ret-doc_year.

* ヘッダ情報の設定
ls_header-pstng_date = sy-datum.  " 伝票日付を本日の日付に設定
ls_header-doc_date   = sy-datum.  " 処理日付を本日の日付に設定

* 移動理由コードの設定(購買発注入庫)
ls_code-gm_code = '01'.

* 明細情報の設定
ls_item-move_type    = '101'.       " 移動タイプ:購買発注からの入庫
" プラントと保管場所は省略
ls_item-po_number    = '12345'.     " 購買発注番号
ls_item-po_item      = 10.          " 購買発注明細番号(数値項目)
ls_item-entry_qnt    = 100.         " 入庫数量(数値項目)
ls_item-mvt_ind      = 'B'.         " 移動区分:購買発注入庫

APPEND ls_item TO lt_item.

* BAPIの実行
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
  EXPORTING
    goodsmvt_header  = ls_header
    goodsmvt_code    = ls_code
  IMPORTING
    materialdocument = lv_mat_doc
    matdocumentyear  = lv_mat_doc_year
  TABLES
    goodsmvt_item    = lt_item
    return           = lt_return.

* エラーチェック
DATA(lv_error) = abap_false.
LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.
  lv_error = abap_true.
  MESSAGE ls_return-message TYPE 'E'.
ENDLOOP.

IF lv_error = abap_false.
  " エラーがない場合、コミットして入出庫伝票番号を出力
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.
  WRITE: / '購買発注入庫が正常に完了しました。入出庫伝票番号:', lv_mat_doc.
ELSE.
  " エラーがある場合、ロールバック
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.

もっと詳しい情報を知りたいなら

「汎用モジュールビルダ」(T-CODE: SE37)でBAPI_GOODSMVT_CREATE の仕様を確認する。

または、標準トランザクション「BAPIエクスプローラ」(T-CODE:BAPI)より、
在庫/購買管理 > 在庫管理 > GoodsMovement > CreateFormData あたりの文書を参照する。

パラメータの実践的な入力方法は、本記事で詳しく解説したつもりだが、個々のパラメータの詳細については、BAPIエクスプローラを参照してほしい。BAPI_GOODSMVT_CREATE の文書は日本語訳されているので、割と使いやすい。

BAPIエクスプローラ
BAPIエクスプローラ

BAPI_GOODSMVT_CREATEとセットで使われるBAPI

BAPI_GOODSMVT_CREATE とセットで使われることが多いBAPIには、以下のようなものがある。これらは主に在庫管理や物流プロセスに関連するBAPI である。

1. BAPI_GOODSMVT_CANCEL

  • 説明: 既に作成された在庫移動を取り消すためのBAPI。在庫移動の誤りを修正する場合や、取り消しが必要な場合に使用する。
  • 用途: 作成された在庫移動のキャンセル処理。これにより、間違った在庫移動を取り消し、元の状態に戻すことができる​。

2. BAPI_GOODSMVT_GETDETAIL

  • 説明: 特定の在庫移動ドキュメントの詳細を取得するためのBAPI。既存の在庫移動に関するヘッダ情報や明細(ボディ)詳細を取得する際に使用される。
  • 用途: 在庫移動ドキュメントの詳細確認。特定の移動番号や日付、品目の移動状況を確認するのに使う。

3. BAPI_RESERVATION_CREATE

  • 説明: 在庫移動のために事前に予約(入出庫予定、リザーブ)を作成するBAPI。材料や在庫を確保する(引き当てる)目的で利用される。
  • 用途: 製造やプロジェクトに必要な材料の予約を作成するために使用される。これにより、後続の在庫移動処理がスムーズに進行する。

まとめ:BAPI_GOODSMVT_CREATEを最大限に活用しよう

BAPI_GOODSMVT_CREATE は、SAPシステムにおける入出庫処理のほぼ全てをカバーする、強力なBAPI である。SAPシステムにおけるロジスティクスのプログラムを開発する上で、絶対に欠かせない存在だ。

また、バッチインプットがサポートされていない標準トランザクション MIGO を代替する手段としても、BAPI_GOODSMVT_CREATE は利用される。したがって、BAPI_GOODSMVT_CREATE の適切なパラメータ設定やエラーハンドリングを学ぶことは、とても重要なのだ。

この記事を参考に、BAPI_GOODSMVT_CREATE を効果的に活用し、SAPの在庫管理プロセスを最適化してもらえると幸いである。


ロジスティクス系のBAPIで、重要なBAPIには、品目マスタをメンテナンスできる BAPI_MATERIAL_SAVEDATA もある。BAPI_MATERIAL_SAVEDATA について、どこよりも詳しく解説した記事は以下。

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

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次