iDempiere 保管場所タイプの使い方|在庫管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。
保管場所タイプは、倉庫内の保管場所(ロケーター)を用途で分類し、補充・予約・出荷それぞれに使ってよいかどうかを制御するマスタです。「検査待ちエリアの在庫は受注引当に使わせない」「不良品置場は出荷対象外にする」といった運用を、保管場所ごとにフラグで表現できます。
📌 ポイント: 補充可能・予約可能・運送可能の3フラグはいずれも**初期値が Y(有効)**です。制限をかけたいタイプでは意識的にチェックを外す必要があります。
保管場所タイプでできること
Section titled “保管場所タイプでできること”- 保管場所の用途分類(良品倉庫・検査待ち・不良品置場・返品保留など)の定義
- 補充可能フラグによる補充計算対象からの除外
- 予約可能フラグによる受注引当対象からの除外
- 運送可能フラグによる出荷対象からの除外
- コメント欄による運用ルールの記述
- 有効/無効の切り替えによるタイプの廃止
保管場所タイプは単一タブのシンプルなマスタです。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 保管場所タイプ | M_LocatorType | 9項目 | タイプ名と3つの用途フラグ |
💡 ヒント: 保管場所タイプ自体は保管場所を持ちません。定義したタイプは、倉庫ウィンドウの保管場所タブから各保管場所に割り当てて使用します。
基本操作手順
Section titled “基本操作手順”graph TD
A["📂 メニューから<br/>保管場所タイプを開く"] --> B["➕ 新規<br/>名称を入力"]
B --> C["📝 説明・コメントで<br/>運用ルールを記述"]
C --> D{"用途の制限"}
D -->|"補充対象外"| E["☐ 補充可能のチェックを外す"]
D -->|"引当対象外"| F["☐ 予約可能のチェックを外す"]
D -->|"出荷対象外"| G["☐ 運送可能のチェックを外す"]
D -->|"制限なし"| H["☑ 3つとも有効のまま"]
E --> I["💾 保存"]
F --> I
G --> I
H --> I
I --> J["🏬 倉庫ウィンドウの保管場所に<br/>タイプを割り当て"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”メニューから「在庫管理 > 品目マスタ管理 > 保管場所タイプ」を開きます。
- ツールバーの「新規」ボタンをクリック
- 以下を入力:
- 名称: 保管場所タイプ名(必須・60桁。例:
検査待ち) - 説明: 概要(任意・255桁)
- コメント: 運用上の注意点(任意・2000桁)
- 名称: 保管場所タイプ名(必須・60桁。例:
- 用途フラグを設定(いずれも初期値はチェック ON):
- 補充可能: 補充計算の対象に含める場合はチェックのまま
- 予約可能: 受注引当・予約の対象に含める場合はチェックのまま
- 運送可能: 出荷の対象に含める場合はチェックのまま
- 「保存」をクリック
- 倉庫・保管場所 ウィンドウを開き、各保管場所に作成したタイプを割り当てます
⚠️ 注意: 3つのフラグはいずれも既定値が
Yです。新規作成した保管場所タイプは、何もしなければ「補充も予約も出荷も可能」な通常タイプとして動作します。制限用のタイプを作る場合は保存前にチェックを外してください。
項目リファレンス
Section titled “項目リファレンス”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| クライアント | 必須 | 選択 | テナント |
| 組織 | 必須 | 選択 | 組織 |
| 名称 | 必須 | 文字列 | 保管場所タイプ名(60桁) |
| 説明 | - | 文字列 | 概要(255桁) |
| コメント | - | テキスト | 運用ルール等の補足(2000桁) |
| 補充可能 | 必須 | チェック | 補充計算の対象にするか(初期値 Y) |
| 予約可能 | 必須 | チェック | 引当・予約の対象にするか(初期値 Y) |
| 運送可能 | 必須 | チェック | 出荷の対象にするか(初期値 Y) |
| 有効 | 必須 | チェック | アクティブ(初期値 Y) |
運用パターン例
Section titled “運用パターン例”| 保管場所タイプ | 補充可能 | 予約可能 | 運送可能 | 想定用途 |
|---|---|---|---|---|
| 標準 | ✔ | ✔ | ✔ | 通常の良品保管エリア |
| 検査待ち | - | - | - | 受入検査中で引当も出荷もさせない |
| 不良品置場 | - | - | - | 廃棄・返品待ちの在庫 |
| 出荷準備 | - | ✔ | ✔ | 引当・出荷はできるが補充計算の対象外 |
| 補充専用バッファ | ✔ | - | - | 補充元としてのみ使用する |
📌 ポイント: 上表は3フラグの組み合わせから構成できる運用例です。実際にどのタイプを用意するかは倉庫オペレーションに合わせて設計してください。
保管場所タイプの位置づけ
Section titled “保管場所タイプの位置づけ”graph TD
A["保管場所タイプ<br/>M_LocatorType"] --> B["保管場所(ロケーター)<br/>M_Locator"]
B --> C["倉庫<br/>M_Warehouse"]
B --> D["在庫数量<br/>M_StorageOnHand"]
D --> E["受注引当・予約"]
D --> F["出荷"]
D --> G["補充計算"]
A -.>|"予約可能フラグ"| E
A -.>|"運送可能フラグ"| F
A -.>|"補充可能フラグ"| G
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 保管場所タイプは必須ですか?
Section titled “Q. 保管場所タイプは必須ですか?”保管場所(M_Locator)側で保管場所タイプの指定は必須ではありません。指定しない場合は用途制限のない通常の保管場所として扱われます。制限が必要なエリアだけタイプを作成して割り当てる運用で問題ありません。
Q. 「予約可能」のチェックを外すと何が起きますか?
Section titled “Q. 「予約可能」のチェックを外すと何が起きますか?”その保管場所タイプが割り当てられた保管場所の在庫は、受注引当・予約の対象から除外されます。検査待ちや品質保留の在庫を誤って受注に引き当てないようにする用途で使います。
Q. すでに割り当て済みのタイプのフラグを変更したらどうなりますか?
Section titled “Q. すでに割り当て済みのタイプのフラグを変更したらどうなりますか?”以後の補充計算・引当・出荷の判定に即座に反映されます。既に成立済みの引当や出荷済み伝票が遡って取り消されることはありません。フラグ変更は在庫オペレーションへの影響が大きいため、変更前に対象保管場所と在庫残を確認してください。
Q. 保管場所タイプを削除できますか?
Section titled “Q. 保管場所タイプを削除できますか?”テーブル定義上は削除可能ですが、保管場所から参照されているタイプは削除できません。使わなくなったタイプは「有効」チェックを外して無効化してください。
Q. 名称以外に一意コード(検索キー)はありますか?
Section titled “Q. 名称以外に一意コード(検索キー)はありますか?”M_LocatorType には検索キー(Value)カラムがありません。識別は名称で行うため、名称の重複を避ける命名ルールを決めておくことを推奨します。
- 倉庫・保管場所(Warehouse)の使い方
- 在庫移動(Inventory Move)の使い方
- 実地棚卸(Physical Inventory)の使い方
- 品目マスタの使い方
- 画面リファレンス: 保管場所タイプ
🛠 技術仕様(開発者向け)
保管場所タイプはマスタデータ型のウィンドウ(AD_Window_ID: 200074)で、M_LocatorType テーブル(AccessLevel = 3 = Client + Organization、削除可能)に格納されます。MLocatorType クラス(171行)は ImmutablePOSupport を実装し、MLocatorType.get(M_LocatorType_ID) によるキャッシュ経由の参照をサポートします。Document 型ではなく、beforeSave() / afterSave() のオーバーライドもありません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MLocatorType {
+get(int)$ MLocatorType
+get(Properties, int)$ MLocatorType
+toString() String
+markImmutable() MLocatorType
}
class X_M_LocatorType {
<<generated>>
+isAvailableForReplenishment() boolean
+isAvailableForReservation() boolean
+isAvailableForShipping() boolean
}
class PO {
<<abstract>>
}
class ImmutablePOSupport {
<<interface>>
}
MLocatorType --|> X_M_LocatorType
X_M_LocatorType --|> PO
MLocatorType ..|> ImmutablePOSupport
MLocator --> MLocatorType : typed by
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MLocatorType.java(171行)
関連DBテーブル
Section titled “関連DBテーブル”M_LocatorType(保管場所タイプ)
Section titled “M_LocatorType(保管場所タイプ)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_LocatorType_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 | Text(2000) | N | コメント | |
| IsAvailableForReplenishment | Yes-No | Y | 補充可能 | 既定 Y |
| IsAvailableForReservation | Yes-No | Y | 予約可能 | 既定 Y |
| IsAvailableForShipping | Yes-No | Y | 運送可能 | 既定 Y |
| IsActive | Yes-No | Y | 有効 | 既定 Y |
| M_LocatorType_UU | UUID(36) | N | UUID |
📌 ポイント:
M_LocatorTypeにはValue(検索キー)カラムが存在しません。マスタ系テーブルとしては珍しい構成で、識別子はNameのみです。外部システム連携でコードによるマッピングが必要な場合は、AD でValue列を追加するか、Descriptionに規約を持たせる設計が必要です。
erDiagram
M_LocatorType ||--o{ M_Locator : "types"
M_Locator }o--|| M_Warehouse : "belongs to"
M_Locator ||--o{ M_StorageOnHand : "stock"
M_Locator ||--o{ M_InOutLine : "in/out"
M_Locator ||--o{ M_MovementLine : "moved"
ビジネスロジック
Section titled “ビジネスロジック”MLocatorType はキャッシュ付きの参照とコピーコンストラクタ群のみを提供する軽量クラスです。用途フラグの評価ロジックはこのクラス側ではなく、在庫の引当・補充・出荷を行う各処理側が isAvailableForReservation() / isAvailableForReplenishment() / isAvailableForShipping() を参照して判定します。
| メソッド | 用途 |
|---|---|
get(int M_LocatorType_ID) | 静的キャッシュ経由で取得(推奨) |
get(Properties ctx, int M_LocatorType_ID) | コンテキスト指定で取得 |
markImmutable() | 読み取り専用インスタンス化 |
toString() | デバッグ用の文字列表現 |
💡 ヒント: 保管場所ごとの判定は在庫処理のループ内で頻繁に発生します。
new MLocatorType(...)ではなくMLocatorType.get()を使ってキャッシュを効かせてください。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”public class CustomLocatorTypeValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MLocatorType && (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) { MLocatorType lt = (MLocatorType) po; // 例: 名称の重複を禁止する(Value カラムが無いため名称で一意性を担保) int cnt = new Query(lt.getCtx(), MLocatorType.Table_Name, "UPPER(Name)=UPPER(?) AND M_LocatorType_ID<>?", lt.get_TrxName()) .setClient_ID() .setParameters(lt.getName(), lt.get_ID()) .count(); if (cnt > 0) { throw new AdempiereException("同名の保管場所タイプが既に存在します"); } } return null; }}保管場所側での制御追加
Section titled “保管場所側での制御追加”保管場所タイプのフラグでは表現できない制御(例: 特定品目カテゴリのみ保管可能)を追加したい場合は、M_Locator に対する Model Validator、または M_InOutLine / M_MovementLine の TYPE_BEFORE_NEW で保管場所タイプを参照した検証を実装します。
if (po instanceof MInOutLine && type == TYPE_BEFORE_NEW) { MInOutLine line = (MInOutLine) po; MLocator loc = MLocator.get(line.getCtx(), line.getM_Locator_ID()); if (loc.getM_LocatorType_ID() > 0) { MLocatorType lt = MLocatorType.get(loc.getM_LocatorType_ID()); if (!lt.isAvailableForShipping()) { throw new AdempiereException("この保管場所からは出荷できません: " + lt.getName()); } }}Callout
Section titled “Callout”M_LocatorType の各カラムには標準の Callout は設定されていません(AD メタデータ上 Callout 列は空)。
関連プロセス
Section titled “関連プロセス”本ウィンドウ固有の実行プロセスはありません。定義した保管場所タイプは倉庫ウィンドウの保管場所タブから割り当てて使用します。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”保管場所タイプの3フラグだけでは表現しきれない在庫の用途制御(品質保留・危険物区分・温度帯管理など)も、 Model Validator と AD の列追加により、コア改変なしで実装できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。