iDempiere 倉庫・ロケーターの使い方|在庫管理 操作マニュアル・技術仕様
倉庫はiDempiereの在庫管理の基本単位です。各倉庫にはロケーター(保管場所)を定義でき、品目がどの倉庫のどの棚に保管されているかを管理します。受注・発注・出荷・入荷のすべての伝票で倉庫の指定が必要です。
📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。
倉庫・ロケーターでできること
Section titled “倉庫・ロケーターでできること”- 倉庫(物理的な保管施設)の定義
- ロケーター(棚・エリア等の保管場所)の階層管理
- 倉庫ごとの会計パラメータ設定
- 品目別の在庫補充ルール設定(発注点方式、安全在庫等)
- 倉庫単位の在庫照会
graph TD
subgraph "倉庫・保管場所設定ウィンドウ(Window ID: 139)"
T1["🏢 倉庫設定<br/>M_Warehouse<br/>14項目"]
T2["📍 保管場所設定<br/>M_Locator<br/>11項目"]
T2a[" └ 現在庫数量管理台帳<br/> M_Storage<br/> 11項目"]
T3["🔄 在庫補充設定<br/>M_Replenish<br/>10項目"]
T4["📒 会計<br/>M_Warehouse_Acct<br/>6項目"]
end
T1 --> T2
T2 --> T2a
T1 --> T3
T1 --> T4
📌 ポイント: 倉庫を作成すると「デフォルトロケーター」が自動生成されます。本番運用前に実際の棚割に合わせたロケーターを定義しておくと、入出荷・棚卸の精度が向上します。
| タブ名 | テーブル | 役割 |
|---|---|---|
| 倉庫設定 | M_Warehouse | 倉庫の基本情報 |
| 保管場所設定 | M_Locator | ロケーター(棚番号等) |
| 現在庫数量管理台帳 | M_Storage | ロケーター別の在庫数量 |
| 在庫補充設定 | M_Replenish | 品目別の補充ルール |
| 会計 | M_Warehouse_Acct | 倉庫の会計パラメータ |
基本操作手順
Section titled “基本操作手順”graph TD
A["① 倉庫設定タブで<br/>倉庫コード・名称<br/>・住所を登録"] --> B["② 保管場所設定タブで<br/>ロケーターを追加<br/>(通路・棚・段)"]
B --> C["③ 在庫補充設定タブで<br/>品目別の補充ルール<br/>(発注点・最大在庫)を設定"]
C --> D["④ 会計タブで<br/>倉庫の会計パラメータ<br/>を確認・設定"]
D --> E["⑤ 品目マスタの<br/>補充ルールタブと<br/>連携して補充処理を自動化"]
💡 ヒント: ロケーターの検索キーは「A-01-03」のように「通路-棚-段」の形式で命名すると、入出荷時の場所特定が容易になります。iDempiere は通路・棚・段を個別フィールドで管理するため、検索キーは自動生成も可能です。
⚠️ 注意: 倉庫は組織(Organization)に紐付きます。複数組織で同一倉庫を共有するケースはサポートされていません。組織設計と倉庫構成は導入前に合わせて検討してください。
アクセス方法
Section titled “アクセス方法”メニューから「在庫管理 > 倉庫と保管場所の設定」を開きます。
- 「新規」ボタンをクリック
- 倉庫情報を入力:
- 検索キー: 倉庫コード
- 名称: 倉庫名
- 住所: 倉庫の所在地
- 「保存」をクリック
ロケーターの登録
Section titled “ロケーターの登録”- 「保管場所設定」タブに移動
- 「新規」ボタンでロケーターを追加:
- 検索キー: ロケーターコード(例: A-01-01)
- 通路(Aisle): 通路番号
- 棚(Bin): 棚番号
- 段(Level): 段番号
- デフォルト: デフォルトの保管場所にする場合にチェック
在庫補充ルールの設定
Section titled “在庫補充ルールの設定”- 「在庫補充設定」タブに移動
- 品目ごとに補充ルールを設定:
- 品目: 対象品目
- 補充タイプ: 発注点方式、最小-最大方式 等
- 最小在庫: 発注点(この数量を下回ったら補充)
- 最大在庫: 補充後の目標在庫数量
- 仕入先倉庫: 補充元の倉庫(拠点間移動の場合)
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. ロケーターの命名規則は?
Section titled “Q. ロケーターの命名規則は?”一般的な命名例: 通路-棚-段(例: A-01-03 = A通路1番棚3段目)。iDempiereでは通路・棚・段を個別フィールドで管理し、検索キーを自動生成できます。
Q. 複数倉庫間で在庫を移動するには?
Section titled “Q. 複数倉庫間で在庫を移動するには?”メニュー「在庫管理 > 在庫移動伝票」で倉庫間の在庫移動を記録します。移動元と移動先のロケーターを指定します。
Q. 在庫補充レポートはどこですか?
Section titled “Q. 在庫補充レポートはどこですか?”メニュー「在庫管理 > 補充レポート」で、発注点を下回った品目の一覧と推奨発注数量を確認できます。
OSS ERP導入についてのご相談
Section titled “OSS ERP導入についてのご相談”As-Link株式会社では、iDempiereの導入支援・カスタマイズ開発を承っております。
🛠 技術仕様(開発者向け)
倉庫はマスタデータ型のウィンドウで、M_Warehouse テーブルおよび M_Locator テーブルで管理されます。倉庫は在庫管理の最上位単位であり、ロケーター(保管場所)の階層構造を持ちます。MWarehouse クラス(348行)と MLocator クラス(401行)はともに ImmutablePOSupport を実装しています。Document 型ではありません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MWarehouse {
+getDefaultLocator() MLocator
+getLocators(reload) MLocator[]
+get(ctx, M_Warehouse_ID) MWarehouse
}
class MLocator {
+getDefault(M_Warehouse_ID) MLocator
+get(ctx, M_Locator_ID) MLocator
+isDefault() boolean
}
class X_M_Warehouse {
<<generated>>
}
class X_M_Locator {
<<generated>>
}
class PO {
<<abstract>>
}
class ImmutablePOSupport {
<<interface>>
}
MWarehouse --|> X_M_Warehouse
X_M_Warehouse --|> PO
MWarehouse ..|> ImmutablePOSupport
MLocator --|> X_M_Locator
X_M_Locator --|> PO
MLocator ..|> ImmutablePOSupport
MWarehouse --> MLocator : has many
パッケージ: org.compiere.model
ソースファイル:
org.adempiere.base/src/org/compiere/model/MWarehouse.javaorg.adempiere.base/src/org/compiere/model/MLocator.java
関連DBテーブル
Section titled “関連DBテーブル”M_Warehouse(倉庫マスタ)
Section titled “M_Warehouse(倉庫マスタ)”📌 ポイント:
MWarehouseとMLocatorはどちらもImmutablePOSupportを実装し、MWarehouse.get()/MLocator.get()でキャッシュ参照が可能です。倉庫・ロケーター情報は頻繁に参照されるマスタデータのため、必ずキャッシュメソッドを使用し、DB クエリの重複実行を避けてください。
| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_Warehouse_ID | ID | PK | 倉庫ID | 主キー |
| AD_Client_ID | TableDirect | Y | クライアント | |
| AD_Org_ID | TableDirect | Y | 組織 | |
| Value | String | Y | 検索キー | |
| Name | String | Y | 倉庫名 | |
| Description | Text | N | 説明 | |
| C_Location_ID | Location | Y | 住所 | 倉庫の物理的住所 |
| Separator | String | Y | 区切り文字 | ロケーターキーの区切り(デフォルト: *) |
| IsDisallowNegativeInv | YesNo | Y | マイナス在庫禁止 | |
| IsInTransit | YesNo | Y | 移動中倉庫 | 組織間移動用 |
| M_WarehouseSource_ID | TableDirect | N | 補充元倉庫 | |
| IsActive | YesNo | Y | アクティブ |
M_Locator(ロケーター / 保管場所)
Section titled “M_Locator(ロケーター / 保管場所)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_Locator_ID | ID | PK | ロケーターID | 主キー |
| M_Warehouse_ID | TableDirect | Y | 倉庫FK | |
| Value | String | Y | 検索キー | 倉庫通路棚*段 形式 |
| X | String | N | 通路(Aisle) | |
| Y | String | N | 棚(Bin) | |
| Z | String | N | 段(Level) | |
| PriorityNo | Integer | Y | 優先順位 | ロケーター選択時の優先度 |
| IsDefault | YesNo | Y | デフォルト | 倉庫の既定ロケーター |
| IsActive | YesNo | Y | アクティブ |
M_Warehouse_Acct(倉庫会計設定)
Section titled “M_Warehouse_Acct(倉庫会計設定)”| カラム名 | 型 | 必須 | 説明 |
|---|---|---|---|
| M_Warehouse_ID | TableDirect | PK | 倉庫FK |
| C_AcctSchema_ID | TableDirect | PK | 会計スキーマFK |
| W_InvActual_Acct | Account | Y | 棚卸資産勘定 |
| W_Differences_Acct | Account | Y | 棚卸差異勘定 |
| W_Revaluation_Acct | Account | Y | 再評価勘定 |
| W_InvActualAdj_Acct | Account | N | 棚卸資産調整勘定 |
erDiagram
M_Warehouse ||--o{ M_Locator : "has"
M_Warehouse ||--o{ M_Warehouse_Acct : "accounting"
M_Warehouse }o--|| AD_Org : "belongs to"
M_Warehouse }o--|| C_Location : "located at"
M_Locator ||--o{ M_StorageOnHand : "inventory"
M_Locator ||--o{ M_InOutLine : "shipment/receipt"
M_Locator ||--o{ M_MovementLine : "movement"
M_Locator ||--o{ M_InventoryLine : "inventory count"
M_Warehouse ||--o{ M_Replenish : "replenishment rules"
M_Warehouse ||--o{ C_Order : "referenced by"
M_Warehouse ||--o{ M_InOut : "referenced by"
ロケーター階層
Section titled “ロケーター階層”ロケーターは倉庫内の保管場所を3次元で管理:
倉庫└── 通路(X: Aisle) └── 棚(Y: Bin) └── 段(Z: Level)ロケーターキーは 倉庫コード*通路*棚*段 の形式(例: WH01*A01*B03*L02)。
区切り文字は M_Warehouse.Separator で定義(デフォルト: *)。
ビジネスロジック
Section titled “ビジネスロジック”在庫管理との関連
Section titled “在庫管理との関連”M_StorageOnHand: ロケーター単位の現在庫数量を管理M_StorageReservation: 倉庫単位の引当数量を管理- マイナス在庫禁止(
IsDisallowNegativeInv=Y)設定時、出荷完了時にマイナスチェック
⚠️ 注意:
M_StorageOnHandは在庫の実数量を管理しますが、M_StorageReservationは引当数量(出荷予定)を別管理します。「理論在庫 = OnHand - Reserved」です。カスタムレポートで「出荷可能な有効在庫」を算出する場合は両テーブルを結合してください。OnHandのみを参照した在庫チェックは誤った結果になります。
M_Replenish テーブルで品目ごとの補充ルールを定義:
| 補充タイプ | 説明 |
|---|---|
| 最小/最大在庫 | 在庫が最小値を下回ったら最大値まで補充 |
| 発注点 | 在庫が発注点を下回ったら発注数量を発注 |
| カスタム | カスタムロジックで補充計算 |
補充元の選択肢:
- 購買発注: 仕入先から直接発注
- 在庫移動: 補充元倉庫(
M_WarehouseSource_ID)から移動
移動中倉庫(In-Transit Warehouse)
Section titled “移動中倉庫(In-Transit Warehouse)”IsInTransit=Y の倉庫は組織間の在庫移動時に使用:
- 出荷元組織から移動中倉庫へ出荷
- 移動中倉庫から入荷先組織へ入荷
- 移動期間中の在庫を正確に追跡
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”倉庫・ロケーターに独自バリデーションを追加する最も安全な方法:
public class CustomWarehouseValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MLocator) { MLocator locator = (MLocator) po; if (type == TYPE_BEFORE_NEW) { // 例: ロケーターコードの命名規則チェック String value = locator.getValue(); if (value != null && !value.matches(".*\\*[A-Z]\\d{2}\\*[A-Z]\\d{2}\\*L\\d{2}")) { throw new AdempiereException("ロケーターコードは「倉庫*A01*B01*L01」形式で入力してください"); } } } return null; }}ロケーター自動割当
Section titled “ロケーター自動割当”入荷時や在庫移動時のロケーター自動割当ロジックを ILocatorStrategy インターフェースで実装可能。品目属性(温度帯、危険物区分等)に基づく保管場所の自動決定に活用。
🔧 カスタマイズ:
ILocatorStrategyの実装クラスを OSGi@Componentとして登録するだけで、入荷時のロケーター自動割当に組み込まれます。複数の実装を登録した場合は OSGi Service Ranking(@Component(property = "service.ranking:Integer=100"))で優先度を制御できます。
💡 ヒント: 倉庫のロケーター構造(通路 X / 棚 Y / 段 Z)を変更する場合、
M_Locator.Value(検索キー)も倉庫コード*X*Y*Z形式で再設定が必要です。M_Warehouse.Separatorのデフォルト値*を変更すると既存ロケーターキーが無効になるため、稼働後の変更は避けてください。
関連プロセス
Section titled “関連プロセス”| プロセス名 | 説明 |
|---|---|
| 補充レポート | 補充対象品目の一覧と発注/移動提案 |
| 在庫評価レポート | 倉庫別の在庫金額評価 |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”iDempiereの倉庫管理は Model Validator や Callout で安全にカスタマイズできます。 ロケーター体系設計、補充ルール最適化、マルチ倉庫運用をコア改変なしで実現可能です。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。