SAP ECCやS/4HANAなどのSAP ERPにおけるBOM(部品表)は、製造業において品目マスタと並び、大量にデータ登録するケースが多い。
本記事では、S/4HANAにおけるBOMの登録方法について、標準トランザクション、Fioriアプリ、BAPI、Web API まで、さまざまな手法を紹介する。
効率的なBOM登録の方法を検討している方にとって有益な情報となるため、ぜひ参考にしてほしい。
BOMの基礎知識、SAP ERPにおけるBOMの種類やデータ構造などを解説した前回の記事は以下。

SAP S/4HANA でBOMを登録する方法
S/4HANAでBOMを登録するには、以下の方法がある。
標準トランザクション
標準トランザクション「品目BOM登録」
まずは標準トランザクション、「品目BOM登録」(T-Code: CS01)だ。
品目BOM登録とCS01の画面項目については、前回記事(以下)の「SAPにおけるBOMのデータ構造」で説明してあるので、そちらをご覧いただきたい。

メリットとデメリット
この標準トランザクションはECC以前のバージョンから存在するため、良い意味で枯れているという点がメリットだ。安定しており利用者も多い。その反面、古から存在するため、新しい種類のBOMを登録できないのがデメリットである。
メリット | デメリット |
---|---|
安定の標準トランザクション。 従来からあるUIなので、使い慣れているユーザー、SAPコンサルタントは多い。 バッチインプット可能。 | バージョンBOM(PEO)のような最新のBOMは登録できない。 バッチインプット可能だが、大量の構成品(大量のBOM明細)には向かない。 |
Fiori
Fioriアプリ「部品表/配合表の更新」
「部品表/配合表の更新」(Fiori ID: F1813)は、T-Code: CS01のFiori版である。CS01と同様に、様々な種類のBOMを登録できるだけでなく、CS01よりも多くの機能を備えている。
SAP GUIをベースとする標準トランザクションでは、BOMの登録・変更・照会にそれぞれ CS01・CS02・CS03 を使用し、目的に応じて異なるプログラムを使い分ける必要がある。一方、Fioriアプリ 「部品表/配合表の更新」 は、これらの機能が一つのプログラムに統合されており、登録・変更・照会をすべてカバーできる。
さらに、FioriならではのUI(ユーザーインターフェース)を活かし、BOM明細に構成品をコピー&ペーストできる。つまり、Excelなど表形式で保持している構成品のデータをコピーし、そのままBOM明細に貼り付けることができるのだ。CS01では、BOM明細は表形式ではあるものの、表形式のデータを貼り付けることはできないので、CS01よりも使い勝手は向上していると言える。
メリットとデメリット
FioriベースのUIによって、使い勝手は標準トランザクションよりも優れている。一方、Fioriアプリであるがゆえ、バッチインプットツールやRPAなど、簡便な一括登録手段を利用できない。
メリット | デメリット |
---|---|
登録/変更/照会がひとつに統合されている。 PEOのバージョンBOMのような、最新のBOMも登録可能。 BOM明細をコピー&ペーストできるなど、UIの使い勝手が良い。 | Webアプリなので、デスクトップアプリである標準トランザクションよりも動作が遅い。 バッチインプット不可。 |
BAPI(汎用モジュール)
大量のBOMを一括登録する場合、BAPI(汎用モジュール)を使用したカスタムプログラム開発(いわゆるアドオン)が有効である。あらかじめCSVファイルなどでBOMデータを作成し、開発したプログラムで読み込んだ後、BAPIを呼び出して一括登録を行う方法だ。CADやPDMと連携するインターフェースプログラムを開発する際も、BAPIを活用することになる。
BOMを登録できるBAPIは幾つか存在する。
CSAP_MAT_BOM_CREATE
古くからあるBOM登録用の汎用モジュール。ECCでは使用可能だったが、S/4HANAではバージョンによって「ブラックリスト(ブロックリスト)」に登録されており、使えない場合がある。
ブラックリストとは、S/4HANAとの互換性がないために利用がブロックされているBAPIのリストであり、これに登録されているBAPIを使用すると実行時エラーが発生する。ブロックを解除する方法はあるものの、どのようなリスクがあるか判断が難しいため、利用は避けたほうが無難だ。
なお、BAPIの「ブラックリスト」に関する記事は以下。ブラックリストに登録されているBAPIの検索方法や、ブロック解除の方法を解説している。

メリットとデメリット
古いBAPIなので、メリットとデメリットを語る以前に、利用すること自体が危ぶまれる。
メリット | デメリット |
---|---|
古いBAPIなので特段のメリットはない | S/4HANAのバージョンによってはブラックリストに登録されており、利用できない 実行結果がわかり難い |
BAPI_MATERIAL_BOM_GROUP_CREATE
ChatGPTに「SAP S/4HANAでBOMを登録できるBAPIは?」と尋ねると、このBAPIが提案される。どうやら、生成AIはこのBAPIをBOM登録用の主要なBAPIとして認識しているようだ。
このBAPIには少々特殊である。名称の一部に「BOM_GROUP」が含まれているが、標準トランザクションの入力項目「BOMグループ」とは異なる、「BOM_GROUP_IDENTIFICATION(BOMグループID)」というパラメータが入力必須となっている。
「BOM_GROUP_IDENTIFICATION」はこのBAPIの入力パラメータとして何度も登場するが、標準トランザクションの「BOMグループ」とは全くの別物である。その証拠に、標準トランザクションの入力項目「BOMグループ」は「BOM_GROUP」として別に用意されている。
この「BOM_GROUP_IDENTIFICATION」に設定する値は自由であり、システム内で一意である必要もない。同じ値を繰り返し使用してもエラーにはならない。このBAPIを実行した後にテーブルSTKOやMASTを参照しても、設定した「BOM_GROUP_IDENTIFICATION」の値は見当たらない。つまり、このパラメータはBAPI実行時にのみ使用される、不可解な存在である。
さらに、「SUPER_OBJECT_ID」といった、標準トランザクションでは見かけない謎のパラメータも登場する。このように、冗長とも思えるほど入力パラメータが多く、設定の手間の大きいのが、このBAPIの特徴である。
「BOMグループ」が登場したので、ここでBOMグループについて説明しておこう。
BOMグループとは
BOMグループとは、複数のBOMをまとめて管理するためのグループのことである。BOMを登録する際、BOMグループを指定してBOMを登録しておくと、T-Code:CS06(BOMグループ照会)を使い、同じBOMグループのBOMを一括で照会できる。複数のBOMを一つのグループとして定義し、管理しやすくするのだ。
BOMグループが機能するのは、CS06のような「照会画面」のみである。BOMグループはBOMを検索する時の検索条件を拡張するだけで、MRPや製造指図発行など、システムの動作には影響を与えない。
- 標準トランザクションにおけるBOMグループの入力
-
標準トランザクションCS01(登録)またはCS02(変更)では、BOMグループはヘッダデータのひとつとして入力する。入力は任意で、18文字以内であれば自由に入力できる。
- BOMグループに設定する値は?
-
BOMグループの入力は任意であるが、設定する値を決めるには、次の二通りの考え方がある。
- BOMが属する最終製品が判明している場合
通常は、最終製品の品目コードを指定するのが望ましい。つまり、そのBOMが属する最上位のBOMの親品目の品目コードを設定する。BOMグループが役に立つのは、T-Code: CS06を用いた一括照会のときなので、関連するBOM同士をまとめる必要がある。この場合、すべてのBOMの最上位品の品目コードをBOMグループとして設定しておけば、その製品に関するすべてのBOMを、指定したBOMグループで一括照会できる。
- BOMが属する最終製品が不明な場合
中間品のBOMなど、対象のBOMがどの製品で使用されているのか不明な場合は、そのBOMの親品目の品目コードを設定すればよい。無関係な値を設定すれば混乱を招くので、何を設定するか迷うなら、単純に親品目の品目コードを設定するか、設定せず空白のままにしておく。
主要な入力パラメータと設定する値
標準トランザクションでは見かけない制御用のパラメータが繰り返し登場する。入力必須のBOM_GROUP_IDENTIFICATIONに設定する値は自由であるが、迷ったら、BOMの親品目の品目コードと同じにしておけばよいだろう。
Parameter パラメータ | Description 説明 | ABAP/4 Data Type | NTLEN 内部長 | Decimal 小数点以下桁数 | 設定値 | |
---|---|---|---|---|---|---|
BOMGROUP | BOM グループ CREATE-/CHANGE BAPI 品目 BOM | |||||
BOM_GROUP_IDENTIFICATION | ID、BOM グループ | C | 32 | BOMグループID 値は自由 ※「BOMグループ」とは別物 | ||
OBJECT_TYPE | BOM グループ内のオブジェクトのタイプ | C | 3 | ‘BGR’ | ||
OBJECT_ID | BOM グループ内のオブジェクトの ID | C | 32 | 任意のID | ||
BOM_USAGE | BOM 用途 | C | 1 | |||
CREATED_IN_PLANT | BOM または代替/派系の登録プラント | C | 4 | |||
MATERIALRELATIONS | 品目割当 CREATE-/CHANGE BAPI 品目 BOM | |||||
BOM_GROUP_IDENTIFICATION | ID、BOM グループ | C | 32 | BOMGROUPのBOM_GROUP_IDENTIFICATIONと同じ値 | ||
MATERIAL | 品目コード (18 桁) | C | 18 | 親品目の品目コード | ||
PLANT | プラント | C | 4 | |||
BOM_USAGE | BOM 用途 | C | 1 | |||
ALTERNATIVE_BOM | 代替 BOM | C | 2 | |||
VARIANTS | 代替/バリアント CREATE-/CHANGE BAPI 品目 BOM | |||||
BOM_GROUP_IDENTIFICATION | ID、BOM グループ | C | 32 | BOMGROUPのBOM_GROUP_IDENTIFICATIONと同じ値 | ||
OBJECT_TYPE | BOM グループ内のオブジェクトのタイプ | C | 3 | ‘BOM’ | ||
OBJECT_ID | BOM グループ内のオブジェクトの ID | C | 32 | BOMGROUPのOBJECT_IDと同じ値 | ||
ALTERNATIVE_BOM | 代替 BOM | C | 2 | |||
BASE_QTY | 基本数量 | P | 13 | 3 | ||
VALID_FROM_DATE | 有効開始日 | D | 8 | |||
CHANGE_NO | 変更番号 | C | 12 | |||
FUNCTION | 機能 | C | 3 | ‘NEW’ | ||
ITEMASSIGNMENTS | 割当 CREATE-/CHANGE BAPI ITM/BOM 品目 BOM | |||||
BOM_GROUP_IDENTIFICATION | ID、BOM グループ | C | 32 | BOMGROUPのBOM_GROUP_IDENTIFICATIONと同じ値 | ||
SUB_OBJECT_TYPE | 下位オブジェクトのタイプ、BOM | C | 3 | ‘ITM’ | ||
SUB_OBJECT_ID | オブジェクト ID、下位オブジェクト、BOM | C | 32 | 任意のID 構成品の品目コードと同じ値でよい | ||
SUPER_OBJECT_TYPE | スーパーオブジェクトのタイプ、BOM | C | 3 | ‘BOM’ | ||
SUPER_OBJECT_ID | オブジェクト ID、スーパーオブジェクト、BOM | C | 32 | BOMGROUPのBOM_GROUP_IDENTIFICATIONと同じ値 | ||
VALID_FROM_DATE | 有効開始日 | D | 8 | |||
CHANGE_NO | 変更番号 | C | 12 | |||
FUNCTION | 機能 | C | 3 | ‘NEW’ | ||
ITEMS | 構成品目 CREATE-/CHANGE BAPI 品目 BOM | |||||
BOM_GROUP_IDENTIFICATION | ID、BOM グループ | C | 32 | BOMGROUPのBOM_GROUP_IDENTIFICATIONと同じ値 | ||
OBJECT_TYPE | BOM グループ内のオブジェクトのタイプ | C | 3 | ‘ITM’ | ||
OBJECT_ID | BOM グループ内のオブジェクトの ID | C | 32 | 任意のID 構成品の品目コードと同じ値でよい | ||
ITEM_NO | BOM 明細番号 | C | 4 | |||
ITEM_CAT | 明細カテゴリ | C | 1 | |||
COMPONENT | BOM 構成品目 | C | 18 | 子品目の品目コード | ||
COMP_QTY | 構成品目数量 | P | 13 | 3 |
メリットとデメリット
メリット | デメリット |
---|---|
ブラックリストに登録されていない。 | 入力パラメータが多く、設定の手間が大きい。 標準トランザクションでは見ないパラメータが多く、難解。 |
BAPI_BOM_UPLOAD_SAVE
このBAPIは、指定したBOMを「洗い替え」で登録する。つまり、既にBOMが登録されている場合、そのBOMは削除された後、直ちに新しいBOMが登録される。この際、BOMが登録済みであることを警告したり、登録済みであれば更新を中止したりするような制御は行われない。
BOMは毎回上書きされるが、それが運用上望ましい場合、このBAPIは有用である。前述のBAPI_MATERIAL_BOM_GROUP_CREATEよりも設定すべきパラメータが少ないため、扱いやすいBAPIと言える。
主要な入力パラメータと設定値
「機能」には一律’009’を設定する。「機能」以外のパラメータは、標準トランザクションから入力する値と同じ値を設定する。
Parameter パラメータ | Description 説明 | ABAP/4 Data Type | NTLEN 内部長 | Decimal 小数点以下桁数 | 設定値 | |
---|---|---|---|---|---|---|
IS_MAST | 通信構造 MAST | |||||
OPERATION | 機能 | C | 3 | ‘009’ | ||
MATERIAL | 品目コード (18 桁) | C | 18 | 親品目の品目コード | ||
PLANT | プラント | C | 4 | |||
BOM_USAGE | BOM 用途 | C | 1 | |||
ALT_BOM | 代替 BOM | C | 2 | |||
IS_STZU | 通信構造 STZU | |||||
OPERATION | 機能 | C | 3 | ‘009’ | ||
BOM_CATEGO | BOM カテゴリ | C | 1 | ‘L’ | ||
BOM_USAGE | BOM 用途 | C | 1 | |||
IT_STAS | 通信構造 STAS のテーブル | |||||
OPERATION | 機能 | C | 3 | ‘009’ | ||
BOM_CATEGO | BOM カテゴリ | C | 1 | ‘L’ | ||
ALT_BOM | 代替 BOM | C | 2 | |||
VALID_FROM | 有効開始日 | D | 8 | |||
IT_STKO | 通信構造 STKO のテーブル | |||||
OPERATION | 機能 | C | 3 | ‘009’ | ||
BOM_CATEGO | BOM カテゴリ | C | 1 | ‘L’ | ||
ALT_BOM | 代替 BOM | C | 2 | |||
VALID_FROM | 有効開始日 | D | 8 | |||
UNBASE | BOM の基本数量単位 | C | 3 | |||
BASE_QTY | 基本数量 | P | 13 | 3 | ||
BOM_STATUS | BOM ステータス | N | 2 | |||
IT_STPO | 通信構造 STPO のテーブル | |||||
OPERATION | 機能 | C | 3 | ‘009’ | ||
BOM_CATEGO | BOM カテゴリ | C | 1 | ‘L’ | ||
VALID_FROM | 有効開始日 | D | 8 | |||
COMPONENT | BOM 構成品目 | C | 18 | 子品目の品目コード | ||
ITEM_CAT | 明細カテゴリ (部品表/配合表) | C | 1 | |||
BOM_ITM_NO | BOM 明細番号 | C | 4 | |||
UNCOMP | 構成品目数量単位 | C | 3 | |||
COMPON_QTY | 構成品目数量 | P | 13 | 3 |
メリットとデメリット
メリット | デメリット |
---|---|
BOMを登録する他のBAPIと比べて、入力パラメータが少ない。 新規登録と変更を意識する必要がない。 | 登録済みのBOMは警告なしに上書きされる。 |
MPE_VERSNBOM_CREATE_INITIAL
PEO(Production Engineering and Operations)モジュールを導入すると利用可能になるBAPIであり、「バージョンBOM」(BOM用途’E’または’V’)の登録に特化している。入力パラメータに「BOM用途」はあるものの、設定可能な値は’E‘(E-BOM)または’V’(M-BOM)のみである。
Fioriアプリや T-Code: VMP_MAINTAIN などの標準画面では、バージョンBOMを登録する際、BOMバージョン番号は自動採番されるため、BOMバージョン番号を指定することはできない。しかし、このBAPIでは、任意のBOMバージョン番号を指定できる。
ただし、このBAPIではBOMバージョン番号のチェックは行われないため、不整合のあるBOMバージョン番号を登録できてしまう。たとえば、バージョン「0001」のバージョンBOMが登録されている状態で、本来は次のバージョン「0002」を指定すべきところを「0003」としても、エラーや警告なく「0003」のバージョンBOMが登録されてしまう(既に登録されている場合はエラーとなる)。また、バージョン番号に全角文字を含めた「0002」を指定しても、そのまま登録されてしまう。
したがって、このBAPIを使用してバージョンBOMを登録するプログラムを開発する場合、事前にBOMバージョン番号の整合性をチェックする処理が不可欠である。
主要な入力パラメータと設定値
パラメータに設定する値は、Fioriアプリ「部品表/配合表の更新」から入力する値と同じなので、入力に迷うことはあまりいはずだ。BOM構成品目の設定は「T_BOM_ITEMS_IN」に対して行う。
メリットとデメリット
パラメータが標準トランザクションの入力項目とほぼ同じなので、設定に戸惑うことがなく、使いやすいBAPIである。バージョンBOMしか登録できないのがとても残念だ。
メリット | デメリット |
---|---|
バージョンBOMを登録できる。 任意のBOMバージョン番号を指定できる。 パラメータがわかりやすい。 | バージョンBOM以外のBOMを登録できない。 BOMバージョン番号の整合性はチェックされないため、不整合のあるバージョン番号を登録できてしまう。 |
Web API
SAP S/4HANAなら、Web APIを使ってBOMの操作が行える。
SAP Business Accelerator Hub を使えば、APIのJsonスキーマなどを参照することが可能だ。BOMを操作するAPIは、Accelerator Hubを「Bills of Material」で検索すれば見つかる。
Accelerator Hub の以下のリンクが「Bills of Material」のリファレンスとなっている。
- SAP S/4HANA Cloud Private Edtion
-
https://api.sap.com/api/OP_API_BILL_OF_MATERIAL_SRV_0002/resource/Bill_of_Material
- SAP S/4HANA Cloud Public Edtion
-
https://api.sap.com/api/API_BILL_OF_MATERIAL_SRV_0002/resource/Bill_of_Material
APIにはPost、Get、Deleteなどメソッドが揃っているので、BOMの登録、変更、照会など、一通りのことができる。
まとめ
製造業において、BOMの登録は、品目コードと並んで大量のデータを扱う代表的な業務である。生産計画や部材調達を迅速に進めるには、BOMを正確かつ効率的に登録することが重要だ。
しかし、手作業でのBOM登録は非効率であるため、CADやPDMと連携するインターフェースの開発や、CSVやExcelファイルを一括アップロードするカスタムプログラムの導入など、工夫が求められる。その際、BAPI(汎用モジュール)やWeb API を活用することで、開発の効率化が可能となる。
本記事で紹介した入力画面やBAPIの特徴を理解し、それらを活用して効率的なBOM登録の仕組みを構築してほしい。
コメント