iDempiere 在庫需要の使い方|在庫管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。
在庫需要は、予測(Forecast)・購買依頼(Requisition)・未処理の受注をもとに、期間ごとの資材所要量を集計・管理する仕組みです。ヘッダーで会計カレンダーと年を指定し、明細で品目・期間ごとの数量を保持、さらに詳細タブで需要の発生元(予測明細・購買依頼明細・受注明細)を紐づけます。
⚠️ 注意: この画面は iDempiere 13 標準では無効化されています(旧バージョンからの互換用)。標準メニューにも登録されていないため、新規の業務設計での利用は推奨されません。所要量計算は製造モジュール(MRP)や在庫補充機能での設計をご検討ください。
在庫需要でできること
Section titled “在庫需要でできること”- 会計カレンダー・年を軸とした需要ヘッダーの定義
- 品目 × 期間ごとの需要数量の登録(数量・計算数量)
- 需要発生元の紐づけ(予測明細・購買依頼明細・受注明細)
- 「処理中」ボタンによる需要の生成・再計算処理の起動
- 既定の需要計画(デフォルトフラグ)の指定
在庫需要は 3 階層のタブ構成です。
| タブ名 | テーブル | 階層 | 項目数 | 役割 |
|---|---|---|---|---|
| 在庫需要 | M_Demand | 0 | 10項目 | ヘッダー(カレンダー・年・名称) |
| 詳細(明細) | M_DemandLine | 1 | 8項目 | 品目 × 期間の需要数量 |
| 詳細(発生元) | M_DemandDetail | 2 | 7項目 | 需要の発生元となる明細への参照 |
💡 ヒント: 明細(
M_DemandLine)は「品目」と「期間」の組み合わせで需要を保持します。期間は会計カレンダー(C_Period)を参照するため、需要計画の粒度は会計期間と一致します。
基本操作手順
Section titled “基本操作手順”graph TD
A["⚠ 標準メニュー未登録<br/>(iDempiere 13 では無効化)"] --> B["🔧 利用する場合は AD で<br/>ウィンドウを有効化 + メニュー登録"]
B --> C["➕ 新規で需要ヘッダーを作成<br/>名称 / カレンダー / 年(すべて必須)"]
C --> D["💾 保存"]
D --> E["📋 明細タブで需要を登録<br/>品目 / 期間 / 数量 / 計算数量"]
E --> F{発生元を<br/>紐づける?}
F -->|する| G["🔗 詳細タブで<br/>予測明細 / 購買依頼明細 / 受注明細を参照"]
F -->|しない| H["▶ 処理中ボタンを実行"]
G --> H
H --> I["📊 期間別の所要量として集計"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”iDempiere 13 標準ではメニューに登録されていません(AD_Window_ID: 329)。利用する場合はアプリケーション辞書でウィンドウを有効化し、メニュー項目を追加する必要があります。
新規登録(ヘッダー)
Section titled “新規登録(ヘッダー)”- ツールバーの「新規」ボタンをクリック
- 必須項目を入力:
- 名称: 需要計画の名称(60文字以内)
- カレンダー: 会計カレンダー(
C_Calendar) - 年: 対象年(
C_Year)
- 任意項目:
- 説明 / コメント: 補足情報
- デフォルト: 既定の需要計画として使う場合にチェック
- 「保存」をクリック
- 「詳細」(
M_DemandLine)タブに移動 - 必須項目を入力:
- 品目: 需要対象の品目
- 期間: 対象期間(
C_Period) - 数量: 需要数量
- 計算数量: 計算された需要数量
- 「保存」をクリック
発生元の紐づけ
Section titled “発生元の紐づけ”- 明細を選択した状態で「詳細」(
M_DemandDetail)タブに移動 - 発生元のいずれかを指定:
- 予測明細(
M_ForecastLine_ID) - 購買依頼伝票明細(
M_RequisitionLine_ID) - 受注明細(
C_OrderLine_ID)
- 予測明細(
- 「保存」をクリック
⚠️ 注意:
M_DemandDetailの 3 つの参照はいずれも任意項目です。どれを設定するかによって需要の出所(予測ベース/依頼ベース/受注ベース)が区別されます。
項目リファレンス
Section titled “項目リファレンス”在庫需要タブ(ヘッダー)
Section titled “在庫需要タブ(ヘッダー)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| クライアント | 必須 | 選択 | テナント(既定値 @#AD_Client_ID@) |
| 組織 | 必須 | 選択 | 組織(既定値 @#AD_Org_ID@) |
| 名称 | 必須 | 文字列(60) | 需要計画の名称 |
| 説明 | - | 文字列(255) | 補足説明 |
| コメント | - | 文字列(2000) | ヒント・注記 |
| カレンダー | 必須 | 選択 | 会計カレンダー |
| 年 | 必須 | 選択 | 対象年 |
| デフォルト | 必須 | チェック | 既定の需要計画として使用 |
| 処理中 | - | ボタン | 需要処理の起動 |
| 有効 | - | チェック | レコードが有効か(既定値 Y) |
詳細タブ(M_DemandLine)
Section titled “詳細タブ(M_DemandLine)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 在庫需要 | 必須 | 選択 | 親ヘッダーへの参照 |
| 品目 | 必須 | 検索 | 需要対象の品目(識別子) |
| 期間 | 必須 | 選択 | 対象期間(識別子) |
| 数量 | 必須 | 数量 | 需要数量 |
| 計算数量 | 必須 | 数量 | 計算された需要数量 |
| 有効 | 必須 | チェック | レコードが有効か(既定値 Y) |
詳細タブ(M_DemandDetail)
Section titled “詳細タブ(M_DemandDetail)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 在庫需要明細行 | 必須 | 選択 | 親明細への参照 |
| 予測明細 | - | 検索 | 需要の発生元(予測) |
| 購買依頼伝票明細 | - | 検索 | 需要の発生元(購買依頼) |
| 受注明細 | - | 検索 | 需要の発生元(受注) |
| 有効 | 必須 | チェック | レコードが有効か |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. この画面は使うべきですか?
Section titled “Q. この画面は使うべきですか?”新規導入では推奨されません。iDempiere 13 標準ではウィンドウが無効化され、標準メニューにも登録されていない旧互換機能です。所要量計画は製造モジュール(部品構成表・製造指図)や在庫補充ルールでの設計をご検討ください。
Q. 「数量」と「計算数量」の違いは何ですか?
Section titled “Q. 「数量」と「計算数量」の違いは何ですか?”Qty(数量)は手入力・確定された需要数量、QtyCalculated(計算数量)は集計処理によって算出された数量を保持する列です。どちらも必須項目で、AD 上は数量型として定義されています。
Q. 在庫需要専用の M クラスはありますか?
Section titled “Q. 在庫需要専用の M クラスはありますか?”ありません。M_Demand / M_DemandLine / M_DemandDetail はいずれも生成クラスのみ(X_M_Demand 314行、X_M_DemandLine 294行、X_M_DemandDetail 267行)で、ビジネスロジックを持つ MDemand 系クラスはコードベースに存在しません。したがって beforeSave() / afterSave() によるコア側の検証も行われません。
Q. 「処理中」ボタンは何をしますか?
Section titled “Q. 「処理中」ボタンは何をしますか?”M_Demand の Processing はボタン型のカラムで、需要の生成・再計算プロセスを起動するために用意されています。M クラスが存在せず、標準メニューからも無効化されているため、実運用で使う場合は起動対象プロセスの実装状況を AD 上で確認してください(要確認)。
Q. 需要の粒度を週次にできますか?
Section titled “Q. 需要の粒度を週次にできますか?”できません。明細の期間は会計カレンダーの期間(C_Period)を参照するため、需要計画の粒度は会計期間(通常は月次)に一致します。より細かい粒度が必要な場合は、独自テーブルまたは製造モジュールの計画機能での実装が必要です。
🛠 技術仕様(開発者向け)
在庫需要は 3 階層のトランザクション型ウィンドウ(AD_Window_ID: 329)で、M_Demand(ヘッダー)・M_DemandLine(明細)・M_DemandDetail(発生元詳細)の 3 テーブルで構成されます。いずれもアクセスレベル 2(クライアントのみ)で、削除可能(IsDeleteable=Y)です。
M クラスは存在せず、生成クラス(X_M_Demand / X_M_DemandLine / X_M_DemandDetail)とインタフェース(I_M_Demand ほか)のみが提供されます。DocAction / DocStatus カラムを持たないため Document 型ではなく、伝票処理(完成・取消等)のワークフローもありません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class X_M_Demand {
<<generated>>
+getC_Calendar_ID() int
+getC_Year_ID() int
+isProcessing() boolean
}
class X_M_DemandLine {
<<generated>>
+getM_Product_ID() int
+getC_Period_ID() int
+getQty() BigDecimal
+getQtyCalculated() BigDecimal
}
class X_M_DemandDetail {
<<generated>>
+getM_ForecastLine_ID() int
+getM_RequisitionLine_ID() int
+getC_OrderLine_ID() int
}
class PO {
<<abstract>>
}
X_M_Demand --|> PO
X_M_DemandLine --|> PO
X_M_DemandDetail --|> PO
X_M_Demand --> X_M_DemandLine : has many
X_M_DemandLine --> X_M_DemandDetail : has many
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/X_M_Demand.java、X_M_DemandLine.java、X_M_DemandDetail.java
関連DBテーブル
Section titled “関連DBテーブル”M_Demand(在庫需要ヘッダー)
Section titled “M_Demand(在庫需要ヘッダー)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_Demand_ID | ID | PK | 需要ID | 主キー |
| AD_Client_ID | Table Direct | Y | クライアント | 既定値 @#AD_Client_ID@ |
| AD_Org_ID | Table Direct | Y | 組織 | 既定値 @#AD_Org_ID@ |
| Name | String(60) | Y | 名称 | 識別子カラム |
| Description | String(255) | N | 説明 | |
| Help | String(2000) | N | コメント | |
| C_Calendar_ID | Table Direct | Y | カレンダー | |
| C_Year_ID | Table Direct | Y | 年 | |
| IsDefault | Yes-No | Y | デフォルト | |
| Processing | Button | N | 処理中 | ボタン型 |
| IsActive | Yes-No | Y | 有効 | 既定値 Y |
M_DemandLine(在庫需要明細)
Section titled “M_DemandLine(在庫需要明細)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_DemandLine_ID | ID | PK | 明細ID | 主キー |
| M_Demand_ID | Table Direct | Y | 在庫需要 | IsParent=Y |
| M_Product_ID | Search | Y | 品目 | 識別子カラム |
| C_Period_ID | Table Direct | Y | 期間 | 識別子カラム |
| Qty | Quantity | Y | 数量 | |
| QtyCalculated | Quantity | Y | 計算数量 | |
| IsActive | Yes-No | Y | 有効 | 既定値 Y |
M_DemandDetail(需要発生元)
Section titled “M_DemandDetail(需要発生元)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_DemandDetail_ID | ID | PK | 詳細ID | 主キー・識別子 |
| M_DemandLine_ID | Table Direct | Y | 在庫需要明細行 | IsParent=Y |
| M_ForecastLine_ID | Search | N | 予測明細 | 発生元(予測) |
| M_RequisitionLine_ID | Search | N | 購買依頼伝票明細 | 発生元(購買依頼) |
| C_OrderLine_ID | Search | N | 受注明細 | 発生元(受注) |
| IsActive | Yes-No | Y | 有効 | 既定値 Y |
erDiagram
M_Demand ||--o{ M_DemandLine : "lines"
M_DemandLine ||--o{ M_DemandDetail : "source details"
M_Demand }o--|| C_Calendar : "calendar"
M_Demand }o--|| C_Year : "year"
M_DemandLine }o--|| M_Product : "product"
M_DemandLine }o--|| C_Period : "period"
M_DemandDetail }o--o| M_ForecastLine : "forecast source"
M_DemandDetail }o--o| M_RequisitionLine : "requisition source"
M_DemandDetail }o--o| C_OrderLine : "order source"
ビジネスロジック
Section titled “ビジネスロジック”3 テーブルとも M クラスを持たないため、コア側の beforeSave() / afterSave() / DocAction ロジックは存在しません。制約は AD 定義(必須項目・親子関係・既定値)のみで担保されます。
親子関係は次のとおり定義されています。
| テーブル | 親カラム(IsParent=Y) |
|---|---|
| M_DemandLine | M_Demand_ID |
| M_DemandDetail | M_DemandLine_ID |
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”既存 Callout
Section titled “既存 Callout”M_Demand / M_DemandLine / M_DemandDetail の各カラムには標準の Callout は定義されていません(gw_column.tsv の callout 列がすべて未設定)。
独自 M クラスの追加
Section titled “独自 M クラスの追加”需要の集計ロジックを実装する場合は、X_M_Demand を継承した独自クラスを OSGi プラグインで作成し、IModelFactory サービスとして登録します。
public class MyDemand extends X_M_Demand { public MyDemand(Properties ctx, int M_Demand_ID, String trxName) { super(ctx, M_Demand_ID, trxName); } @Override protected boolean beforeSave(boolean newRecord) { // 例: 同一カレンダー・年でデフォルトが重複しないよう検証 return true; }}OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”クラスを追加せず制約のみを加える場合は Model Validator が簡便です。
public class CustomDemandValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (I_M_DemandLine.Table_Name.equals(po.get_TableName()) && (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) { BigDecimal qty = (BigDecimal) po.get_Value(I_M_DemandLine.COLUMNNAME_Qty); if (qty != null && qty.signum() < 0) { throw new AdempiereException("需要数量にマイナスは指定できません"); } } return null; }}需要生成プロセスの実装
Section titled “需要生成プロセスの実装”M_Demand.Processing はボタン型カラムとして用意されていますが、対応するプロセスの実装・割当は AD 上で確認が必要です(要確認)。予測・購買依頼・受注から需要を自動生成したい場合は、独自プロセス(SvrProcess 継承)を実装し、このボタンに割り当てる方式が実現しやすい構成です。
関連プロセス
Section titled “関連プロセス”| プロセス名 | 起動場所 | 説明 |
|---|---|---|
| 処理中(Process Now) | 在庫需要タブの Processing ボタン | 需要処理の起動用ボタン。割当プロセスは要確認 |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”需要予測と所要量計画は、在庫水準と欠品リスクのバランスを決める重要な業務です。旧互換画面に依存せず、現行の製造・補充機能をベースにした計画基盤の設計をご提案できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。