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の生産管理や購買、物流など、幅広い業務領域において重要な役割を果たしている。
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_CODE | BAPI2017_GM_CODE | 在庫移動に対するコードのトランザクションへの割当 | u | 4 | ||
GM_CODE | BAPI 在庫移動トランザクションのコード割当 | C | 2 | |||
GOODSMVT_HEADER | BAPI2017_GM_HEAD_01 | 入出庫伝票ヘッダデータ | u | 416 | ||
PSTNG_DATE | 伝票の転記日付 | D | 8 | |||
DOC_DATE | 伝票の伝票日付 | D | 8 | |||
REF_DOC_NO | 参照伝票番号 | C | 16 | |||
BILL_OF_LADING | 入庫時の船荷証券番号 | C | 16 | |||
GR_GI_SLIP_NO | 入出庫票番号 | C | 10 | |||
PR_UNAME | ユーザ名 | C | 12 | |||
HEADER_TXT | 伝票ヘッダテキスト | C | 25 | |||
VER_GR_GI_SLIP | 入出庫票印刷バ-ジョン | C | 1 | |||
VER_GR_GI_SLIPX | 関連ユーザデータ項目の更新情報 | C | 1 | |||
EXT_WMS | 外部倉庫管理の転記の制御 | C | 1 | |||
REF_DOC_NO_LONG | 参照伝票番号 (依存性についてはテキスト長参照) | C | 35 | |||
BILL_OF_LADING_LONG | 入庫の船荷証券番号 (依存: テキスト (長) 参照) | C | 35 | |||
BAR_CODE | バーコードエントリ | C | 40 | |||
GOODSMVT_PRINT_CTRL | BAPI2017_GM_PRINT | BAPI Communication Structure: Material Document Print Control | u | 2 | ||
PR_PRINT | ENJOY MMIM による印刷 | N | 1 | |||
GOODSMVT_REF_EWM | /SPE/BAPI2017_GM_REF_EWM | BAdI 通信構造: 入出庫伝票 EWM 照会 | u | 122 | ||
REF_DOC_EWM | EWM 入出庫伝票番号 | C | 16 | |||
LOGSYS | EWM 入出庫伝票の論理システム | C | 10 | |||
GTS_SCRAP_NO | 廃棄処理の税関参照番号 | C | 35 | |||
TESTRUN | BAPI2017_GM_GEN | 在庫移動シミュレーション | C | 1 | SPACE |
Table (入力テーブル)
T-CODE: MIGO の明細部に相当するパラメータ。
設定必須のテーブルは GOODSMVT_ITEM である。移動タイプ、品目コード、プラント、保管場所、数量など、MIGO でもお馴染みの項目が並ぶ。
Parameter パラメータ | Description 説明 | ABAP/4 Data Type | INTLEN 内部長 | Decimal 小数点以下桁数 | Default 既定値 | Optional 選択可能 | |
---|---|---|---|---|---|---|---|
GOODSMVT_ITEM | BAPI2017_GM_ITEM_CREATE | 入出庫伝票明細 | u | 1417 | |||
MATERIAL | 品目コード (18 桁) | C | 18 | ||||
PLANT | プラント | C | 4 | ||||
STGE_LOC | 保管場所 | C | 4 | ||||
BATCH | ロット番号 | C | 10 | ||||
MOVE_TYPE | 移動タイプ (在庫管理) | C | 3 | ||||
STCK_TYPE | 在庫タイプ | C | 1 | ||||
SPEC_STOCK | 特殊在庫区分 | C | 1 | ||||
VENDOR | サプライヤの勘定コード | C | 10 | ||||
CUSTOMER | 得意先コード | C | 10 | ||||
SALES_ORD | 受注伝票番号 | C | 10 | ||||
S_ORD_ITEM | 受注明細番号 | N | 6 | ||||
SCHED_LINE | 受注納入日程 | N | 4 | ||||
VAL_TYPE | 評価タイプ | C | 10 | ||||
ENTRY_QNT | 入力単位での数量 | P | 13 | 3 | |||
ENTRY_UOM | 入力単位 | C | 3 | ||||
ENTRY_UOM_ISO | 数量単位の ISO コード | C | 3 | ||||
PO_PR_QNT | 購買発注価格単位での数量 | P | 13 | 3 | |||
ORDERPR_UN | 購買発注価格単位 (購買管理) | C | 3 | ||||
ORDERPR_UN_ISO | 数量単位の ISO コード | C | 3 | ||||
PO_NUMBER | 購買発注番号 | C | 10 | ||||
PO_ITEM | 購買伝票の明細番号 | N | 5 | ||||
SHIPPING | 出荷指示 | C | 2 | ||||
COMP_SHIP | 出荷指示順守 | C | 2 | ||||
NO_MORE_GR | “納入完了” 区分 | C | 1 | ||||
ITEM_TEXT | 明細テキスト | C | 50 | ||||
GR_RCPT | 受領者 | C | 12 | ||||
UNLOAD_PT | 荷渡ポイント | C | 25 | ||||
COSTCENTER | 原価センタ | C | 10 | ||||
ORDERID | 指図番号 | C | 12 | ||||
ORDER_ITNO | 指図明細番号 | N | 4 | ||||
CALC_MOTIVE | 計算区分 | C | 2 | ||||
ASSET_NO | 資産番号 | C | 12 | ||||
SUB_NUMBER | 資産補助番号 | C | 4 | ||||
RESERV_NO | 入出庫予定/従属所要量の番号 | N | 10 | ||||
RES_ITEM | 入出庫予定/従属所要量の明細番号 | N | 4 | ||||
RES_TYPE | レコードタイプ | C | 1 | ||||
WITHDRAWN | 入出庫予定の出庫完了 | C | 1 | ||||
MOVE_MAT | 入庫/出庫品目 | C | 18 | ||||
MOVE_PLANT | 入庫/出庫プラント | C | 4 | ||||
MOVE_STLOC | 入庫/出庫保管場所 | C | 4 | ||||
MOVE_BATCH | 入庫/出庫ロット | C | 10 | ||||
MOVE_VAL_TYPE | 転送ロットの評価タイプ | C | 10 | ||||
MVT_IND | 移動区分 | C | 1 | ||||
MOVE_REAS | 移動理由 | N | 4 | ||||
RL_EST_KEY | 不動産管理対象の内部キー | C | 8 | ||||
REF_DATE | 決済の参照日付 | D | 8 | ||||
COST_OBJ | 原価対象 | C | 12 | ||||
PROFIT_SEGM_NO | 収益性セグメント番号 (CO-PA) | N | 10 | ||||
PROFIT_CTR | 利益センタ | C | 10 | ||||
WBS_ELEM | WBS 要素 | C | 24 | ||||
NETWORK | 勘定割当のネットワーク番号 | C | 12 | ||||
ACTIVITY | 活動番号 | C | 4 | ||||
PART_ACCT | パートナ勘定コード | C | 10 | ||||
AMOUNT_LC | マニュアル入力による転記金額 (国内通貨) | P | 23 | 4 | |||
AMOUNT_SV | 外部入力による販売金額 (国内通貨) | P | 23 | 4 | |||
REF_DOC_YR | 参照伝票の会計年度 | N | 4 | ||||
REF_DOC | 参照伝票の伝票番号 | C | 10 | ||||
REF_DOC_IT | 参照伝票の明細 | N | 4 | ||||
EXPIRYDATE | 有効期間期限日 | D | 8 | ||||
PROD_DATE | 製造日付 | D | 8 | ||||
FUND | ファンド | C | 10 | ||||
FUNDS_CTR | 予算センタ | C | 16 | ||||
CMMT_ITEM | 予算コード | C | 14 | ||||
VAL_SALES_ORD | 評価受注在庫の受注番号 | C | 10 | ||||
VAL_S_ORD_ITEM | 評価受注在庫の受注明細 | N | 6 | ||||
VAL_WBS_ELEM | WBS 要素 | C | 24 | ||||
GL_ACCOUNT | G/L 勘定コード | C | 10 | ||||
IND_PROPOSE_QUANX | 提案数量 (初期数量) | C | 1 | ||||
XSTOB | 取消移動タイプ区分の使用 | C | 1 | ||||
EAN_UPC | 国際商品コード (EAN/UPC) | C | 18 | ||||
DELIV_NUMB_TO_SEARCH | 出荷伝票 | C | 10 | ||||
DELIV_ITEM_TO_SEARCH | 出荷明細 | N | 6 | ||||
SERIALNO_AUTO_NUMBERASSIGNMENT | シリアル番号の自動登録 | C | 1 | ||||
VENDRBATCH | 供給者ロット番号 | C | 15 | ||||
STGE_TYPE | 保管域タイプ | C | 3 | ||||
STGE_BIN | 棚番 | C | 10 | ||||
SU_PL_STCK_1 | 在庫受入予定の保管単位数 | P | 3 | ||||
ST_UN_QTYY_1 | 代替数量単位での在庫受入予定保管単位別数量 | P | 13 | 3 | |||
ST_UN_QTYY_1_ISO | 数量単位の ISO コード | C | 3 | ||||
UNITTYPE_1 | 保管単位タイプ | C | 3 | ||||
SU_PL_STCK_2 | 在庫受入予定の保管単位数 | P | 3 | ||||
ST_UN_QTYY_2 | 代替数量単位での在庫受入予定保管単位別数量 | P | 13 | 3 | |||
ST_UN_QTYY_2_ISO | 数量単位の ISO コード | C | 3 | ||||
UNITTYPE_2 | 保管単位タイプ | C | 3 | ||||
STGE_TYPE_PC | 在庫転送の保管域タイプ | C | 3 | ||||
STGE_BIN_PC | 在庫転送棚番 | C | 10 | ||||
NO_PST_CHGNT | 区分: 振替要求通知登録禁止 | C | 1 | ||||
GR_NUMBER | 入庫番号 | C | 10 | ||||
STGE_TYPE_ST | 在庫転送の保管域タイプ | C | 3 | ||||
STGE_BIN_ST | 在庫転送棚番 | C | 10 | ||||
MATDOC_TR_CANCEL | 取消予定の転送要求の入出庫伝票番号 | C | 10 | ||||
MATITEM_TR_CANCEL | 取消予定の転送数量入出庫伝票明細 | N | 4 | ||||
MATYEAR_TR_CANCEL | 取消予定の転送要求入出庫伝票年度 | N | 4 | ||||
NO_TRANSFER_REQ | 区分: 転送要求未登録 | C | 1 | ||||
CO_BUSPROC | ビジネスプロセス | C | 12 | ||||
ACTTYPE | 活動タイプ | C | 6 | ||||
SUPPL_VEND | 品目供給者 | C | 10 | ||||
MATERIAL_EXTERNAL | 項目 MATERIAL の品目コード (長) | C | 40 | ||||
MATERIAL_GUID | 項目 MATERIAL の外部 GUID | C | 32 | ||||
MATERIAL_VERSION | 項目 MATERIAL のバージョン番号 | C | 10 | ||||
MOVE_MAT_EXTERNAL | 項目 MOVE_MAT の品目コード (長) | C | 40 | ||||
MOVE_MAT_GUID | 項目 MOVE_MAT の外部 GUID | C | 32 | ||||
MOVE_MAT_VERSION | 項目 MOVE_MAT のバージョン番号 | C | 10 | ||||
FUNC_AREA | 機能領域 | C | 4 | ||||
TR_PART_BA | 取引先事業領域 | C | 4 | ||||
PAR_COMPCO | 決済会社コード | C | 4 | ||||
DELIV_NUMB | 出荷伝票 | C | 10 | ||||
DELIV_ITEM | 出荷明細 | N | 6 | ||||
NB_SLIPS | 入庫/出庫票の印刷部数 | N | 3 | ||||
NB_SLIPSX | 関連ユーザデータ項目の更新情報 | C | 1 | ||||
GR_RCPTX | 関連ユーザデータ項目の更新情報 | C | 1 | ||||
UNLOAD_PTX | 関連ユーザデータ項目の更新情報 | C | 1 | ||||
SPEC_MVMT | 倉庫管理の特殊移動区分 | C | 1 | ||||
GRANT_NBR | 補助金 | C | 20 | ||||
CMMT_ITEM_LONG | 予算コード | C | 24 | ||||
FUNC_AREA_LONG | 機能領域 | C | 16 | ||||
LINE_ID | 伝票明細行の一意 ID | N | 6 | ||||
PARENT_ID | 1 レベル上位の行 ID | N | 6 | ||||
LINE_DEPTH | 伝票での明細行階層レベル | N | 2 | ||||
QUANTITY | 数量 | P | 13 | 3 | |||
BASE_UOM | 基本数量単位 | C | 3 | ||||
LONGNUM | ユーザ定義番号 | C | 40 | ||||
BUDGET_PERIOD | 予算期間 | C | 10 | ||||
EARMARKED_NUMBER | 予算執行伝票の伝票番号 | C | 10 | ||||
EARMARKED_ITEM | 用途指定予算: 伝票明細 | N | 3 | ||||
STK_SEGMENT | 在庫セグメント | C | 16 | ||||
MOVE_SEGMENT | 受入/出庫在庫セグメント | C | 16 | ||||
MATERIAL_LONG | 品目コード | C | 40 | ||||
MOVE_MAT_LONG | 入庫/出庫品目 | C | 40 | ||||
STK_SEG_LONG | 在庫セグメント | C | 40 | ||||
MOV_SEG_LONG | 受入/出庫在庫セグメント | C | 40 | ||||
CREATE_DELIVERY | 出荷伝票登録 (出荷) | C | 1 | ||||
WAREHOUSE_EWM | 倉庫番号/複合倉庫 | C | 4 | ||||
STGE_BIN_EWM | 棚番 | C | 18 | ||||
EWM_DIFF_ANA | 差異アナライザへの在庫移動転記 | C | 1 | ||||
SERVICE_DOC | サービス伝票 ID | C | 10 | ||||
SERVICE_ITEM | サービス伝票明細 ID | N | 6 | ||||
SERVICE_DOC_TYPE | サービス伝票タイプ | C | 4 | ||||
SUPPLYAREA | 供給場所 | C | 10 | ||||
EWM_INSPUUID | 品質検査結果: EWM によって設定された在庫 GUID | C | 32 | ||||
XSTOR | 取消、仕入返品、または在庫転送 | C | 1 | ||||
TARGET_BIN_EWM | 在庫移動時の倉庫タスクの転送先棚番 | C | 18 | ||||
PROFIT_SEGM_NO_ALPHA | 収益性セグメント番号 (CO-PA) | C | 10 | ||||
NR_OF_LABELS | 印刷対象ラベル数 | N | 4 | ||||
EXTENSIONIN | BAPIPAREX | Reference Structure for BAPI Parameters EXTENSIONIN/EXTENSIONOUT | u | 990 | X | ||
STRUCTURE | BAPI テーブル拡張の構造名 | C | 30 | ||||
VALUEPART1 | BAPI 拡張パラメータのデータ部分 | C | 240 | ||||
VALUEPART2 | BAPI 拡張パラメータのデータ部分 | C | 240 | ||||
VALUEPART3 | BAPI 拡張パラメータのデータ部分 | C | 240 | ||||
VALUEPART4 | BAPI 拡張パラメータのデータ部分 | C | 240 | ||||
GOODSMVT_ITEM_CWM | /CWM/BAPI2017_GM_ITEM_CREATE | BAPI Communication Structure: Create Item Data for CW | u | 24 | X | ||
MATDOC_ITM | 入出庫伝票の明細 | N | 4 | ||||
QUANTITY_PME | 数量 (パラレル数量単位) | P | 13 | 3 | |||
BASE_UOM_PME | パラレル数量単位 | C | 3 | ||||
ENTRY_QNT_PME | パラレル入力単位の数量 | P | 13 | 3 | |||
ENTRY_UOM_PME | パラレル数量単位の入力数量単位 | C | 3 | ||||
GOODSMVT_SERIALNUMBER | BAPI2017_GM_SERIALNUMBER | シリアル番号 | u | 124 | X | ||
MATDOC_ITM | 入出庫伝票の明細 | N | 4 | ||||
SERIALNO | シリアル番号 | C | 18 | ||||
UII | 一意アイテム ID | C | 72 | ||||
MANSERNO | 製造業者のシリアル番号 | C | 30 | ||||
GOODSMVT_SERV_PART_DATA | /SPE/BAPI2017_SERVICEPART_DATA | u | 163 | X | |||
LINE_ID | 伝票明細行の一意 ID | N | 6 | ||||
RET_AUTH_NUMBER | 返品権限番号 | C | 20 | ||||
DELIV_NUMBER | 出荷伝票 | C | 10 | ||||
DELIV_ITEM | 出荷明細 | N | 6 | ||||
HU_NUMBER | 外部荷役単位 ID | C | 20 | ||||
INSPOUT_GUID | 品質検査結果: EWM 設定の在庫 GUID | C | 32 | ||||
EVENT | 論理時間 | C | 10 | ||||
DATE | 日付 | D | 8 | ||||
TIME | 時刻 | T | 6 | ||||
ZONLO | タイムゾーン | C | 6 | ||||
TIMESTAMP | 取引開始時刻 (UTC タイムスタンプ) | P | 15 | ||||
SCRAP_INDICATOR | EWM 処理の廃棄区分 | C | 1 | ||||
KEEP_QUANTITY | EWM での廃棄処理の保持数量 | P | 13 | 3 | |||
GTS_STOCK_TYPE | GTS 在庫タイプ | C | 1 | ||||
MOVE_GTS_STOCK_TYPE | GTS 在庫タイプ | C | 1 | ||||
KEEP_QUANTITY_CONVERSION | 数量変換不要 | C | 1 | ||||
ZERO_QUANTITY | ゼロ数量の在庫移動転記許可 | C | 1 | ||||
NUMERATOR | 販売数量単位から基本数量単位への変換係数の分子 | P | 5 | ||||
DENOMINATR | 販売数量を在庫単位に換算する分母 (除数) | P | 5 | ||||
INSP_DOC_NUMB | 外部品質検査の SAP EWM 品質検査伝票番号 | C | 12 | ||||
PCHG_TYPE | 品質検査ロットと入出庫伝票間の参照タイプ | C | 1 |
Export (出力用)
BAPI の実行が成功し、入出庫伝票が作成されると「入出庫伝票番号」と「入出庫伝票年度」がセットされる。
Parameter パラメータ | Description 説明 | ABAP/4 Data | INTLEN 内部長 | Decimal 小数点以下桁数 | Default 既定値 | Optional 選択可能 | |
---|---|---|---|---|---|---|---|
MATERIALDOCUMENT | BAPI2017_GM_HEAD_RET | 入出庫伝票番号 | C | 10 | |||
GOODSMVT_HEADRET | BAPI2017_GM_HEAD_RET | 入出庫伝票番号/入出庫伝票会計年度 | u | 14 | |||
MAT_DOC | 入出庫伝票番号 | C | 10 | ||||
DOC_YEAR | 入出庫伝票年 | N | 4 | ||||
MATDOCUMENTYEAR | BAPI2017_GM_HEAD_RET | 入出庫伝票年度 | N | 4 |
RETURN(実行結果が返されるテーブル)
BAPI実行結果がセットされるテーブル。実行結果のステータス(W,I,E,A)が、メッセージと共にセットされる。
Parameter パラメータ | Description 説明 | ABAP/4 Data | INTLEN 内部長 | Decimal 小数点以下桁数 | Default 既定値 | Optional 選択可能 | |
---|---|---|---|---|---|---|---|
RETURN | BAPIRET2 | リターンメッセージ | u | 548 | |||
TYPE | メッセージType: S 正常、E エラー、W 警告、I 通知、A 強制終了 | C | 1 | ||||
ID | メッセージクラス | C | 20 | ||||
NUMBER | メッセージ番号 | N | 3 | ||||
MESSAGE | メッセージテキスト | C | 220 | ||||
LOG_NO | アプリケーションログ: ログ番号 | C | 20 | ||||
LOG_MSG_NO | アプリケーションログ: メッセージの内部シリアル番号 | N | 6 | ||||
MESSAGE_V1 | メッセージ変数 | C | 50 | ||||
MESSAGE_V2 | メッセージ変数 | C | 50 | ||||
MESSAGE_V3 | メッセージ変数 | C | 50 | ||||
MESSAGE_V4 | メッセージ変数 | C | 50 | ||||
PARAMETER | パラメータ名 | C | 32 | ||||
ROW | パラメータの行 | X | 10 | ||||
FIELD | パラメータの項目 | C | 30 | ||||
SYSTEM | メッセージが発行された論理システム | C | 10 |
BAPI_GOODSMVT_CREATEの使用方法(パラメータ設定)
まずは GM_CODE を設定
BAPI_GOODSMVT_CREATE を動かすために、最初に設定すべき必須パラメータが、Importパラメータの
GOODSMVT_CODE – GM_CODE(在庫移動に対するコードのトランザクションへの割当)である。
この GM_CODEは標準画面MIGOには登場しない項目なので少々戸惑うかもしれないが、どのような在庫移動であるか、そのトランザクションを表す番号(以下)を指定する。
01: 購買発注に対する入庫
02: 製造指図に対する入庫
03: 出庫
04: 在庫転送
05: その他の入庫
06: 在庫移動の取消
07: 外注発注に対する後続調整
設定する値によって、指定できる移動タイプや、入力すべきパラメータが決定される。逆に言えば、この値を正しく設定しなければ、目的の移動タイプを指定することができない。
GM_CODE(在庫移動トランザクション)を設定すると、移動タイプなど設定できるパラメータが決まる!
Importパラメータ:伝票ヘッダに相当
以下のImportパラメータは、「在庫移動トランザクション(GM_CODE)」の種類に関係なく、入力しなければならないパラメータである。入出庫伝票の「伝票ヘッダ」の部分に相当する。
Importパラメータの中で入力必須なのは、GM_CODEと、PSTNG_DATE(転記日付)である。
パラメータ | 設定する値 | 入力必須 |
---|---|---|
Import | ||
GOODSMVT_CODE | ||
GM_CODE | BAPI 在庫移動トランザクションのコード割当 | ◯ |
GOODSMVT_HEADER | ||
転記日付 | PSTNG_DATE在庫の入出庫伝票を起票する日付。FIの会計自動仕分け伝票を起票する日付でもあるため、会計処理上の不正な日付や矛盾する日付は指定できない。たとえば、未来の日付や、会計期間を逸脱した日付は指定不可。 | ◯ |
DOC_DATE 伝票日付 | 何時の入出庫であるかを記録しておく日付。「転記日付」と違い、こちらは会計処理とは無関係なので、指定する日付に制限はない。 たとえば、現場で7月5日に行われた入庫を、月末の7月31日に纏めてSAPシステムに登録する場合、「伝票の伝票日付」は7月5日で、「転記日」は7月31日とする。 省略時はシステム日付がセットされる。 | |
HEADER_TXT ヘッダーテキスト | 入出庫伝票の「伝票ヘッダ Text」に値がセットされる。 |
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 | 含有単位/製品単位品目の後続調整 | 未確認 |
在庫移動トランザクション別 パラメータと入力値
以下は、GOODSMVT_CODE – GM_CODE(在庫移動に対するコードのトランザクションへの割当)の値別の、入力パラメータと、入力値のガイドである。
01: 購買発注に対する入庫
パラメータ | 設定する値 | 入力必須 |
---|---|---|
Table | ||
GOODSMVT_ITEM | ||
MATERIAL 品目コード | 入庫する品目コード | |
PLANT プラント | 入庫先のプラント | |
STGE_LOC 保管場所 | 入庫先の保管場所 | |
移動タイプ | MOVE_TYPE101(入庫) | ◯ |
STCK_TYPE 在庫タイプ | 入庫先での在庫タイプを指定する。省略時(スペース)は「利用可能」在庫となる。在庫タイプは以下から選択可能。 スペース(既定値):利用可能 2 :品質検査 3 :保留在庫 F :利用可能 S: 保留在庫 X:品質検査 | |
数量 | ENTRY_QNT入庫数量 | ◯ |
ENTRY_UOM 入力単位 | 発注時の単位と異なる場合に指定する。 ABAP以外は内部数量単位を指定する。標準画面で入力する通商単位とは異なるので注意。 | |
購買発注番号 | PO_NUMBER外部から入力する際、全て数字の場合は前ゼロ埋めが必須。 | ◯ |
購買発注の明細番号 | PO_ITEM購買発注の明細番号。購買発注番号と違い、こちらは数値型のため、前ゼロ埋めは不要。 | ◯ |
NO_MORE_GR 納入完了区分 | ‘X’を設定すると、納入完了区分がセットされる。 入庫数量=発注数量に達すると、納入完了区分は自動的にセットされる。 入庫数量<発注数量でも納入完了としたい場合は、このパラメータを使う。 | |
移動区分 | MVT_IND‘B‘ | ◯ |
02:製造指図に対する入庫
パラメータ | 設定する値 | 入力必須 |
---|---|---|
Table | ||
GOODSMVT_ITEM | ||
MATERIAL 品目コード | 入庫する品目コード | |
PLANT プラント | 入庫先のプラント | |
STGE_LOC 保管場所 | 入庫先の保管場所 | |
移動タイプ | MOVE_TYPE101(入庫) | ◯ |
STCK_TYPE 在庫タイプ | 入庫先での在庫タイプを指定する。省略時(スペース)は「利用可能」在庫となる。在庫タイプは以下から選択可能。 スペース(既定値):利用可能 2 :品質検査 3 :保留在庫 F :利用可能 S: 保留在庫 X:品質検査 | |
数量 | ENTRY_QNT入庫数量 | ◯ |
ENTRY_UOM 入力単位 | 指図発行時の単位と異なる場合は指定する。 ABAP以外は内部数量単位を指定する。標準画面で入力する通商単位とは異なるので注意。 | |
製造指図番号 | ORDERID外部から入力する際、全て数字の場合は前ゼロ埋めが必要。 | ◯ |
ORDER_ITNO 指図明細番号 | ||
NO_MORE_GR 納入完了区分 | ‘X’を設定すると、納入完了区分がセットされる。 入庫数量=発注数量に達すると、納入完了区分は自動的にセットされる。 入庫数量<発注数量でも納入完了としたい場合は、このパラメータを使う。 | |
移動区分 | MVT_IND‘F‘ | ◯ |
03: 出庫
以下は原価センタ出庫(移動タイプ201)を例にした場合の、在庫出庫時の指定方法である。原価センタ出庫では「原価センタ」が入力必須項目となる。原価センタ出庫の場合、MVT_IND(移動区分)は指定不要である。
パラメータ | 設定する値 | 入力必須 |
---|---|---|
Table | ||
GOODSMVT_ITEM | ||
品目コード | MATERIAL出庫する品目コード | ◯ |
プラント | PLANT出庫元のプラント | ◯ |
保管場所 | STGE_LOC出庫元の保管場所 | ◯ |
移動タイプ | MOVE_TYPE201(原価センタ出庫) | ◯ |
数量 | ENTRY_QNT出庫数量 | ◯ |
ENTRY_UOM 入力単位 | 基本数量単位の単位と異なる場合に指定する。 ABAP以外は内部数量単位を指定する。標準画面で入力する通商単位とは異なるので注意。 | |
原価センタ | COSTCENTER外部から入力する際、全て数字の場合は前ゼロ埋めが必須。 | ◯ |
MVT_IND 移動区分 | 省略またはスペース |
04: 在庫転送
在庫転送では、転送元と転送先の、両方のプラント/保管場所を指定する。
パラメータ | 設定する値 | 入力必須 |
---|---|---|
Table | ||
GOODSMVT_ITEM | ||
品目コード | MATERIAL在庫転送する品目コード | ◯ |
プラント | PLANT転送元のプラント | ◯ |
保管場所 | STGE_LOC転送元の保管場所 | ◯ |
移動タイプ | MOVE_TYPE311(保管場所間在庫転送) | 301(プラント間在庫転送)◯ |
STCK_TYPE 在庫タイプ | 入庫先での在庫タイプを指定する。省略時(スペース)は「利用可能」在庫となる。在庫タイプは以下から選択可能。 スペース(既定値):利用可能 2 :品質検査 3 :保留在庫 F :利用可能 S: 保留在庫 X:品質検査 | |
数量 | ENTRY_QNT在庫転送する数量 | ◯ |
ENTRY_UOM 入力単位 | 基本数量単位の単位と異なる場合に指定する。 ABAP以外は内部数量単位を指定する。標準画面で入力する通商単位とは異なるので注意。 | |
入庫/出庫プラント | MOVE_PLANT転送先のプラント。 | ◯ |
入庫/出庫保管場所 | MOVE_STLOC転送先の保管場所 | ◯ |
移動区分 | MVT_IND‘L‘ | ◯ |
実行後の確認とトランザクション制御
実行結果の確認【要注意】
BAPI_GOODSMVT_CREATE の実行後は戻り値テーブル「RETURN」の内容を確認し、エラーや警告が出力されていないかを確認する。
結果ステータスは、RETURNパラメータの「TYPE」にセットされる。セットされるステータスは以下。
ステータス | 意味 |
---|---|
W | 警告あり |
E | エラー |
I | 通知 |
A | 強制終了 |
このBAPIの特徴として、成功時は何も返さない。成功時はテーブルRETURNのレコード数は0件である。つまり、上記のいずれかのステータスが返ってきている時は、エラーなど何からの問題が発生していると判断する。
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 を呼び出して処理を取り消すことができる。
BAPIの実行が成功しただけでは、データベースに書き込まれない!
トランザクションの最後に、コミット(確定)して、データベースの更新を完了させよう。
入出庫伝票番号の取得
標準トランザクション MIGO と同様、BAPI の実行が成功すると入出庫伝票が生成され、その入出庫番号は以下の出力パラメータ(Export)にセットされる。
パラメータ | 出力値 | |
---|---|---|
Export | ||
MATERIALDOCUMENT 入出庫伝票番号 | 作成された入出庫伝票の入出庫伝票番号。 | |
GOODSMVT_HEADRET 入出庫伝票番号/入出庫伝票会計年度 | 作成された入出庫伝票の入出庫伝票番号と伝票年度の値が連結された項目。たとえば、入出庫伝票番号が ‘1234567890’で、伝票年度が’2024’の時、この項目には’12345678902024’がセットされる。 | |
MATDOCUMENTYEAR HEADER_TXT 入出庫伝票年度 | 作成された入出庫伝票の入出庫伝票年度。 |
トランザクションをキャンセルしても入出庫伝票番号は採番される
トランザクションをキャンセル(ロールバック)した場合でも、処理が成功していると、入出庫伝票番号は採番される。番号は採られるが、入出庫伝票は作られないので、その番号はシステム内では欠番となる。
テスト実行(TESTRUNパラメータに’X’をセット)の場合は、入出庫伝票番号は採番されない。
トランザクションをロールバックしても、エラーが発生していなければ、入出庫伝票番号はカウントアップするぞ!
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_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 について、どこよりも詳しく解説した記事は以下。
コメント