iDempiere 品目マスタの使い方|在庫管理 操作マニュアル・技術仕様
品目マスタは、組織で使用するすべての品目(商品・サービス・資材)を定義するマスタデータです。販売品目、製造で使用する原材料、購買品目のすべてがここで管理されます。
品目マスタは iDempiere の中核マスタであり、受注・発注・出荷・請求・在庫・会計のすべての業務で参照されます。
📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。
品目マスタでできること
Section titled “品目マスタでできること”- 商品・サービス・資材の情報登録
- 品目カテゴリによる分類管理
- 販売価格・仕入価格の設定(複数価格表対応)
- BOM(部品構成表)の定義
- 在庫情報の照会(現在庫数量、保管場所)
- 仕入先情報(複数仕入先対応)
- 品目属性(ロット、シリアル番号等)の管理
- 会計パラメータの設定
- 代替品目・関連品目の定義
- 在庫補充ルールの設定
🖥️ インタラクティブ画面レイアウト: AD メタデータから自動生成した 品目マスタの全タブ・全フィールド レイアウト(HTML版) で、実際の画面配置をご確認いただけます。
画面レイアウト(ヘッダータブ)
Section titled “画面レイアウト(ヘッダータブ)”┌─ 品目マスタ(Product)───────────────────────────────────────────────────┐│ ││ クライアント [▼ Table Direct] 組織 [▼ Table Direct] ││ 検索キー [________________] 名前 [________________] ││ 説明 [_______________________________________________] ││ ││ ── 基本情報 ────────────────────────────────────────────────────────── ││ 品目カテゴリ [▼ Table Direct] 品目タイプ [▼ List] ││ 数量単位 [▼ Table Direct] 税カテゴリ [▼ Table Direct] ││ 在庫管理 [☐] 販売 [☐] 購買 [☐] BOM [☐] ││ ││ ── 属性・分類 ──────────────────────────────────────────────────────── ││ 属性セット [▼ Table Direct] 属性セットインスタンス [▼] ││ 製品コード [________________] UPC/EAN [________________] ││ 重量 [_________] 容量 [_________] ││ ││ [品目] [BOM] [代替品] [購買情報] [価格] [会計] [在庫] ...他8タブ │└──────────────────────────────────────────────────────────────────────────┘📌 ポイント: この図はADメタデータ(
AD_Field.XPosition,IsSameLine)から再現した実際のUI配置です。画面は2カラム構成で、左列(XPosition=1)と右列(XPosition=4)にフィールドが配置されます。
タブが多い(14タブ)ため、主要タブのみ図示します。
graph TD
subgraph "品目マスタウィンドウ(Window ID: 140)"
T1["📦 品目<br/>M_Product<br/>62項目"]
T2["📋 BOM<br/>PP_Product_BOM<br/>13項目"]
T2a[" └ Components<br/> PP_Product_BOMLine<br/> 10項目"]
T3["🏭 購買情報<br/>M_Product_PO<br/>26項目"]
T4["💴 価格<br/>M_ProductPrice<br/>8項目"]
T5["📒 会計<br/>M_Product_Acct<br/>18項目"]
T6["📊 在庫状況<br/>M_Storage<br/>11項目"]
TN["...他8タブ<br/>(代替品目・関連品目・補充ルール<br/>取引先・在庫台帳・翻訳・UOM変換・原価)"]
end
T1 --> T2
T2 --> T2a
T1 --> T3
T1 --> T4
T1 --> T5
T1 --> T6
T1 --> TN
📌 ポイント: 品目マスタは14タブで構成されており、iDempiere の中で最も多くの関連情報を持つマスタの一つです。業務要件に応じて必要なタブのみ設定してください。
| タブ名 | テーブル | 役割 |
|---|---|---|
| 品目マスタ | M_Product | 基本情報(名称・カテゴリ・タイプ等) |
| BOM | PP_Product_BOM | 部品構成表のヘッダー |
| Components | PP_Product_BOMLine | BOMの構成部品 |
| 代替品目 | M_Substitute | 代替品目の定義 |
| 関連品目 | M_RelatedProduct | 関連品目(アップセル等) |
| 在庫補充 | M_Replenish | 補充ルール(発注点・安全在庫等) |
| 購買情報 | M_Product_PO | 仕入先別の購買情報 |
| 取引先 | C_BPartner_Product | 取引先別品目情報 |
| 価格 | M_ProductPrice | 価格表ごとの価格 |
| 会計 | M_Product_Acct | 会計パラメータ |
| 在庫取引管理台帳 | M_Transaction | 在庫トランザクション履歴 |
| 現在庫数量管理台帳 | M_Storage | 保管場所別の在庫数量 |
基本操作手順
Section titled “基本操作手順”graph TD
A["① メニューから<br/>品目マスタを開く"] --> B["② 新規ボタンで<br/>基本情報を入力<br/>(品目タイプ・カテゴリ・単位)"]
B --> C["③ 価格タブで<br/>価格表ごとの<br/>単価を登録"]
C --> D["④ 購買情報タブで<br/>仕入先・リードタイム<br/>を設定"]
D --> E["⑤ 必要に応じて<br/>BOM・補充ルール等<br/>追加タブを設定"]
E --> F["⑥ 保存<br/>(各画面で伝票作成時に選択可能に)"]
💡 ヒント: 品目カテゴリを先に登録しておくと、会計パラメータの初期値が自動セットされ、登録作業が効率化されます。
アクセス方法
Section titled “アクセス方法”メニューから「在庫管理 > 品目マスタ(標準)」を開きます。
⚠️ 注意: 品目タイプ(Item / Service / Resource 等)は登録後に変更できません。特に「Item(在庫品)」と「Service(サービス)」の選択は在庫管理の有無に直結するため、登録前に必ず確認してください。
新規品目の登録
Section titled “新規品目の登録”- 「新規」ボタンをクリック
- 基本情報を入力:
- 検索キー: 品目コード(ユニーク)
- 名称: 品目名
- 品目カテゴリ: カテゴリを選択(会計パラメータの初期値が決まる)
- 品目タイプ: 品目(Item)、サービス(Service)、資源(Resource)等
- 数量単位: 在庫管理の基本単位
- 税カテゴリ: 適用する税カテゴリ
- 必要に応じて追加情報を入力:
- 在庫管理: 在庫管理する場合にチェック
- 販売対象: 販売可能な場合にチェック
- 購買対象: 購買可能な場合にチェック
- 属性セット: ロット・シリアル番号管理する場合に選択
- 「保存」をクリック
- 「価格」タブに移動
- 各価格表に対して価格を登録:
- 価格表バージョン: 対象の価格表バージョン
- 定価: 標準小売価格
- 標準単価: 標準販売単価
- 最低価格: 最低販売価格(これ以下では販売不可)
仕入先情報の設定
Section titled “仕入先情報の設定”- 「購買情報」タブに移動
- 仕入先ごとの購買情報を登録:
- 仕入先: 仕入先を選択
- 仕入先品目コード: 仕入先側の品目コード
- 最低発注数量: 最小発注ロット
- 仕入単価: 仕入先の販売単価
- 納品リードタイム: 発注から納品までの日数
項目リファレンス
Section titled “項目リファレンス”品目マスタタブ(基本情報)
Section titled “品目マスタタブ(基本情報)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 検索キー | 必須 | 文字列 | 品目コード(ユニーク識別子) |
| 名称 | 必須 | 文字列 | 品目名 |
| 品目カテゴリ | 必須 | 選択 | 品目の分類カテゴリ |
| 品目タイプ | 必須 | リスト | Item(在庫品)、Service、Resource 等 |
| 数量単位 | 必須 | 選択 | 基本数量単位(個、kg、m 等) |
| 税カテゴリ | 必須 | 選択 | 税計算のカテゴリ |
| 在庫管理 | - | チェック | 在庫数量を管理するか |
| 販売対象 | - | チェック | 販売可能か |
| 購買対象 | - | チェック | 購買可能か |
| 属性セット | - | 選択 | ロット・シリアル番号等の属性管理 |
| 重量 | - | 数値 | 品目の重量 |
| 容量 | - | 数値 | 品目の容量 |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 品目タイプの違いは?
Section titled “Q. 品目タイプの違いは?”| タイプ | 在庫管理 | 用途例 |
|---|---|---|
| Item(品目) | あり | 商品、原材料、完成品 |
| Service(サービス) | なし | コンサルティング、保守サービス |
| Resource(資源) | なし | 会議室、機材(リソース予約) |
| Expense Type(経費) | なし | 旅費、交通費 |
Q. 品目を無効化するには?
Section titled “Q. 品目を無効化するには?”品目マスタの「アクティブ」チェックを外します。無効化した品目は新規伝票で選択できなくなりますが、既存データはそのまま保持されます。
Q. 在庫数量はどこで確認できますか?
Section titled “Q. 在庫数量はどこで確認できますか?”「現在庫数量管理台帳」タブで倉庫・保管場所ごとの在庫数量を確認できます。また、メニュー「在庫管理 > 在庫トランザクション」フォームで詳細な入出庫履歴を照会できます。
OSS ERP導入についてのご相談
Section titled “OSS ERP導入についてのご相談”As-Link株式会社では、iDempiereの導入支援・カスタマイズ開発を承っております。
🛠 技術仕様(開発者向け)
画面レイアウト(ヘッダータブ)
Section titled “画面レイアウト(ヘッダータブ)”┌─ 品目マスタ(Product)───────────────────────────────────────────────────┐│ ││ クライアント [▼ Table Direct] 組織 [▼ Table Direct] ││ 検索キー [________________] 名前 [________________] ││ 説明 [_______________________________________________] ││ ││ ── 基本情報 ────────────────────────────────────────────────────────── ││ 品目カテゴリ [▼ Table Direct] 品目タイプ [▼ List] ││ 数量単位 [▼ Table Direct] 税カテゴリ [▼ Table Direct] ││ 在庫管理 [☐] 販売 [☐] 購買 [☐] BOM [☐] ││ ││ ── 属性・分類 ──────────────────────────────────────────────────────── ││ 属性セット [▼ Table Direct] 属性セットインスタンス [▼] ││ 製品コード [________________] UPC/EAN [________________] ││ 重量 [_________] 容量 [_________] ││ ││ [品目] [BOM] [代替品] [購買情報] [価格] [会計] [在庫] ...他8タブ │└──────────────────────────────────────────────────────────────────────────┘📌 ポイント: この図はADメタデータ(
AD_Field.XPosition,IsSameLine)から再現した実際のUI配置です。画面は2カラム構成で、左列(XPosition=1)と右列(XPosition=4)にフィールドが配置されます。
品目マスタはマスタデータ型のウィンドウで、M_Product テーブルに格納されます。品目(物品、サービス、リソース等)の基本情報を管理し、販売・購買・在庫・製造の全業務モジュールから参照される中核マスタです。MProduct クラス(1,204行)は ImmutablePOSupport を実装し、キャッシュによる高速参照をサポートしています。Document 型ではありません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MProduct {
+beforeSave() boolean
+afterSave() boolean
+getProductType() String
+isBOM() boolean
+isStocked() boolean
+get(ctx, M_Product_ID) MProduct
}
class X_M_Product {
<<generated>>
}
class PO {
<<abstract>>
}
class ImmutablePOSupport {
<<interface>>
}
MProduct --|> X_M_Product
X_M_Product --|> PO
MProduct ..|> ImmutablePOSupport
MProduct --> MProductPrice : has many
MProduct --> MProductBOM : has many
MProduct --> MStorageOnHand : inventory
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MProduct.java
関連DBテーブル
Section titled “関連DBテーブル”M_Product(品目マスタ)
Section titled “M_Product(品目マスタ)”📌 ポイント:
MProductクラスはImmutablePOSupportを実装しており、MProduct.get(ctx, M_Product_ID)でキャッシュ経由の高速参照が可能です。品目情報を繰り返し参照する処理(明細行の一括処理など)では、DB クエリを毎回発行せずこのキャッシュメソッドを使用してください。キャッシュの無効化はMProduct.get()のreload=trueオプションで行います。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_Product_ID | ID | PK | 品目ID | 主キー |
| AD_Client_ID | TableDirect | Y | クライアント | |
| AD_Org_ID | TableDirect | Y | 組織 | |
| Value | String | Y | 検索キー | UNIQUE |
| Name | String | Y | 品目名 | |
| Description | Text | N | 説明 | |
| ProductType | List | Y | 品目タイプ | I=物品, S=サービス, R=リソース, E=経費 |
| M_Product_Category_ID | TableDirect | Y | 品目カテゴリ | 会計設定の基準 |
| C_UOM_ID | TableDirect | Y | 単位 | 基本単位 |
| C_TaxCategory_ID | TableDirect | Y | 税カテゴリ | |
| IsStocked | YesNo | Y | 在庫管理対象 | |
| IsBOM | YesNo | Y | BOM(部品表) | |
| IsPurchased | YesNo | Y | 購買品目 | |
| IsSold | YesNo | Y | 販売品目 | |
| IsSummary | YesNo | Y | サマリー品目 | |
| IsActive | YesNo | Y | アクティブ | |
| M_AttributeSet_ID | TableDirect | N | 属性セット | ロット/シリアル管理 |
| M_Locator_ID | TableDirect | N | デフォルトロケーター | |
| Weight | Number | N | 重量 | |
| Volume | Number | N | 容積 | |
| UnitsPerPack | Integer | N | 荷姿入数 |
M_Product_PO(品目仕入先情報)
Section titled “M_Product_PO(品目仕入先情報)”| カラム名 | 型 | 必須 | 説明 |
|---|---|---|---|
| M_Product_ID | ID | PK | 品目FK |
| C_BPartner_ID | Search | PK | 仕入先FK |
| VendorProductNo | String | N | 仕入先品番 |
| PriceList | Amount | N | 仕入定価 |
| PricePO | Amount | N | 仕入標準単価 |
| DeliveryTime_Promised | Integer | N | 納期(日数) |
| Order_Min | Quantity | N | 最小発注数量 |
| Order_Pack | Quantity | N | 発注単位数量 |
erDiagram
M_Product ||--o{ M_ProductPrice : "pricing"
M_Product ||--o{ M_Product_PO : "vendor info"
M_Product ||--o{ M_Product_BOM : "BOM"
M_Product ||--o{ M_StorageOnHand : "inventory"
M_Product ||--o{ M_Replenish : "replenishment"
M_Product }o--|| M_Product_Category : "category"
M_Product }o--|| C_UOM : "unit"
M_Product }o--o| M_AttributeSet : "attributes"
M_ProductPrice }o--|| M_PriceList_Version : "price list"
M_Product ||--o{ C_OrderLine : "ordered"
M_Product ||--o{ M_InOutLine : "shipped/received"
M_Product ||--o{ C_InvoiceLine : "invoiced"
ビジネスロジック
Section titled “ビジネスロジック”beforeSave() の主要チェック
Section titled “beforeSave() の主要チェック”MProduct.beforeSave() の主要処理:
- 検索キーの一意性チェック:
Valueの重複チェック - 在庫管理の整合性: サービス品目(ProductType=S)は
IsStocked=Nに強制 - UOM の整合性: 基本単位の妥当性チェック
- BOM の整合性: BOMフラグ変更時の影響チェック
- 属性セットの整合性: 在庫管理品目の属性セット設定検証
afterSave() の主要処理
Section titled “afterSave() の主要処理”- 新規品目の場合、デフォルトの会計設定を自動生成(
M_Product_Acct) - 品目カテゴリの会計テンプレートから勘定科目を設定
- 価格表への自動登録(設定がある場合)
⚠️ 注意:
afterSave()で生成されるM_Product_Acctは品目カテゴリの会計テンプレートから自動コピーされます。品目カテゴリを後から変更しても既存品目のM_Product_Acctは自動更新されません。カテゴリ変更後に会計設定も一括更新したい場合は専用のカスタムプロセスが必要です。
| タイプ | コード | 在庫管理 | 説明 |
|---|---|---|---|
| 物品 | I (Item) | 可 | 有形の商品・部品 |
| サービス | S (Service) | 不可 | 役務・工事等 |
| リソース | R (Resource) | 不可 | 人的・設備リソース |
| 経費 | E (Expense) | 不可 | 経費項目 |
BOM(部品表)
Section titled “BOM(部品表)”品目に IsBOM=Y を設定すると、M_Product_BOM テーブルで構成部品を定義可能:
- 親品目と子品目の階層構造
- 数量・単位の定義
- BOM展開による所要量計算
補充ルール(Replenishment)
Section titled “補充ルール(Replenishment)”M_Replenish テーブルで倉庫ごとの補充ルールを定義:
- 補充タイプ: 最小/最大在庫、発注点、カスタム
- 補充元: 購買発注、在庫移動
ReplenishReportプロセスで補充提案を自動生成
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”品目マスタに独自バリデーションを追加する最も安全な方法:
public class CustomProductValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MProduct) { MProduct product = (MProduct) po; if (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE) { // 例: 品目名の命名規則チェック if (product.getValue() != null && !product.getValue().matches("[A-Z]{2}-\\d{6}")) { throw new AdempiereException("品目コードは「XX-000000」形式で入力してください"); } } } return null; }}価格計算のカスタマイズ
Section titled “価格計算のカスタマイズ”IPricingRule インターフェースを実装することで、独自の価格計算ロジック(数量割引、得意先別価格等)を追加可能。
🔧 カスタマイズ:
IPricingRuleは OSGi サービスとして登録することで、コアの価格計算エンジン(MPriceListVersion/MProductPrice)を変更せずにカスタムルールを追加できます。実装参考:org.adempiere.base/src/org/adempiere/model/IPricingRule.java。数量割引・得意先グループ別価格・期間限定価格などに活用できます。
属性セットの活用
Section titled “属性セットの活用”ロット番号、シリアル番号、有効期限等を M_AttributeSet / M_AttributeSetInstance で管理。品目単位で追跡レベルを設定可能。
💡 ヒント: 属性セット(
M_AttributeSet)の追跡レベルには「なし」「ロット」「シリアル」「両方」があります。追跡レベルを変更すると既存のM_AttributeSetInstanceレコードに影響する場合があります。変更前に既存在庫がゼロであることを確認してから実施してください。
関連プロセス
Section titled “関連プロセス”| プロセス名 | 説明 |
|---|---|
| 品目コピー | 既存品目をベースに新規品目を作成 |
| BOM展開 | BOM構成品の階層展開 |
| 補充レポート | 補充対象品目の一覧と発注提案 |
| 価格一括更新 | 価格表の一括更新処理 |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”iDempiereの品目マスタは Model Validator や Callout で安全にカスタマイズできます。 品目コード体系、価格計算、属性管理をコア改変なしで拡張可能です。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。