iDempiere ロットの使い方|在庫管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。
ロットは、品目ごとに個々のロット(製造単位・入荷単位)を定義するマスタです。属性セットでロット管理を有効にした品目に対して、ロット番号を一覧として保持し、在庫の入出庫時に選択できるようにします。
📌 ポイント: ロットは「品目」に紐づくマスタです。ロット番号を手入力で管理する場合はこの画面で登録し、自動採番したい場合はロット管理で採番ルールを定義してください。
ロットでできること
Section titled “ロットでできること”- 品目ごとのロット番号(名称)の登録・一覧管理
- ロット管理(採番ルール)マスタとの紐づけ
- ロットの有効期間(開始日付・終了日付)の設定
- ロットごとの説明・コメントの記録
- 使用しなくなったロットの無効化(有効チェックを外す)
ロットは 1 タブのシンプルなマスタ画面です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| ロット | M_Lot | 10項目 | 品目ごとのロット定義(名称・期間・ロット管理) |
💡 ヒント: ロットは属性セット(
M_AttributeSet)で「ロット」を有効にした品目で使用します。属性セット側の設定がない品目にロットを登録しても、伝票入力時のロット選択には現れません。
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>在庫管理 > 品目属性管理 > ロット"] --> B["➕ 新規ボタンをクリック"]
B --> C["📦 品目を選択<br/>(必須)"]
C --> D["🏷 名称にロット番号を入力<br/>(必須・60文字以内)"]
D --> E{採番ルールを使う?}
E -->|使う| F["🔢 ロット管理を選択<br/>(M_LotCtl)"]
E -->|使わない| G["✍ 名称を手入力のまま"]
F --> H["📅 必要に応じて<br/>開始日付・終了日付を設定"]
G --> H
H --> I["💾 保存"]
I --> J["📥 入出庫伝票の属性セットインスタンスで<br/>ロットとして選択可能に"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”メニューから「在庫管理 > 品目属性管理 > ロット」を開きます。
- ツールバーの「新規」ボタンをクリック
- 必須項目を入力:
- 品目: ロットを管理する対象の品目(検索フィールド)
- 名称: ロット番号(識別子。60文字以内)
- 必要に応じて任意項目を入力:
- ロット管理: 採番ルール(
M_LotCtl)を紐づける場合に選択 - 説明 / コメント: 補足情報
- 開始日付 / 終了日付: ロットの有効期間
- ロット管理: 採番ルール(
- 「保存」をクリック
⚠️ 注意: 「品目」と「名称」の 2 つが必須です。名称はロット番号そのものとして表示され、
toString()でもロット名が返るため、伝票上の識別に直結します。
項目リファレンス
Section titled “項目リファレンス”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| クライアント | 必須 | 選択 | テナント(既定値 @#AD_Client_ID@) |
| 組織 | 必須 | 選択 | 組織(既定値 @#AD_Org_ID@) |
| 品目 | 必須 | 検索 | ロットの対象品目 |
| 名称 | 必須 | 文字列(60) | ロット番号・ロット名 |
| ロット管理 | - | 選択 | 採番ルール(M_LotCtl)への参照 |
| 説明 | - | テキスト(255) | 補足説明 |
| コメント | - | テキスト(2000) | ヒント・注記 |
| 開始日付 | - | 日付 | ロット有効期間の開始日 |
| 終了日付 | - | 日付 | ロット有効期間の終了日 |
| 有効 | - | チェック | レコードが有効か(既定値 Y) |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. ロットは手入力で登録する必要がありますか?
Section titled “Q. ロットは手入力で登録する必要がありますか?”いいえ。ロット管理(M_LotCtl)に採番ルールを定義し、属性セットの「ロット管理」に設定しておくと、MLotCtl.createLot() により 接頭辞 + 次の番号 + 接尾辞 の形式でロットが自動生成されます。この画面は、自動生成されたロットの確認や、手動でロットを追加する場合に使用します。
Q. 同じロット番号を複数の品目に登録できますか?
Section titled “Q. 同じロット番号を複数の品目に登録できますか?”できます。M_Lot は品目ごとにロットを保持する構造で、MLot.getProductLot(ctx, M_Product_ID, lot, trxName) のように品目 ID とロット名の組み合わせで検索されます。品目が異なれば同名のロットが併存しても問題ありません。
Q. 開始日付・終了日付は在庫の引き当てに影響しますか?
Section titled “Q. 開始日付・終了日付は在庫の引き当てに影響しますか?”M_Lot の開始日付・終了日付はロットの有効期間を記録する項目です。賞味期限・保証期限による在庫引き当ての制御は、属性セット側の「保証日付」(IsGuaranteeDate / GuaranteeDays)と在庫移動方針(Material Policy)で行います。期限管理を厳密に行う場合は属性セットの保証日付設定を併用してください。
Q. ロットを削除できますか?
Section titled “Q. ロットを削除できますか?”M_Lot テーブルは削除可能(IsDeleteable=Y)です。ただし、既に在庫や伝票の属性セットインスタンスから参照されているロットは削除せず、「有効」のチェックを外して無効化する運用を推奨します。
🛠 技術仕様(開発者向け)
ロットはマスタデータ型のウィンドウ(AD_Window_ID: 257)で、M_Lot テーブルに格納されます。MLot クラス(176行)が品目単位のロット取得ユーティリティと、MLotCtl からの生成コンストラクタを提供します。Document 型ではないため DocAction / DocStatus は持ちません。テーブルのアクセスレベルは 3(クライアント+組織)、削除可能(IsDeleteable=Y)です。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MLot {
+getProductLots(ctx, M_Product_ID, trxName) MLot[]
+getProductLot(ctx, M_Product_ID, lot, trxName) MLot
+getProductLotPairs(M_Product_ID, trxName) KeyNamePair[]
+MLot(MLotCtl ctl, M_Product_ID, Name)
+toString() String
}
class X_M_Lot {
<<generated>>
}
class PO {
<<abstract>>
}
MLot --|> X_M_Lot
X_M_Lot --|> PO
MLotCtl --> MLot : creates
MLot --> MProduct : belongs to
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MLot.java
関連DBテーブル
Section titled “関連DBテーブル”M_Lot(ロット)
Section titled “M_Lot(ロット)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_Lot_ID | ID | PK | ロットID | 主キー |
| AD_Client_ID | Table Direct | Y | クライアント | 既定値 @#AD_Client_ID@ |
| AD_Org_ID | Table Direct | Y | 組織 | 既定値 @#AD_Org_ID@ |
| M_Product_ID | Search | Y | 品目 | 識別子カラム |
| Name | String(60) | Y | ロット名 | 識別子カラム |
| M_LotCtl_ID | Table Direct | N | ロット管理 | 採番ルールへの参照 |
| Description | Text(255) | N | 説明 | |
| Help | Text(2000) | N | コメント | |
| DateFrom | Date | N | 開始日付 | |
| DateTo | Date | N | 終了日付 | |
| IsActive | Yes-No | Y | 有効 | 既定値 Y |
| M_Lot_UU | UUID(36) | N | UUID |
erDiagram
M_Product ||--o{ M_Lot : "has lots"
M_LotCtl ||--o{ M_Lot : "generates"
M_AttributeSet }o--o| M_LotCtl : "lot numbering"
M_AttributeSetInstance }o--o| M_Lot : "lot reference"
M_Product }o--o| M_AttributeSet : "attribute set"
ビジネスロジック
Section titled “ビジネスロジック”MLot には beforeSave() / afterSave() のオーバーライドはありません。制約は AD 定義上の必須項目(M_Product_ID, Name)で担保されます。
品目単位のロット取得
Section titled “品目単位のロット取得”| メソッド | 戻り値 | 用途 |
|---|---|---|
getProductLots(ctx, M_Product_ID, trxName) | MLot[] | 指定品目の全ロットを取得 |
getProductLot(ctx, M_Product_ID, lot, trxName) | MLot | 品目+ロット名で 1 件取得 |
getProductLotPairs(M_Product_ID, trxName) | KeyNamePair[] | UI 選択肢用のキー・名称ペア |
MLotCtl からの生成
Section titled “MLotCtl からの生成”MLot(MLotCtl ctl, int M_Product_ID, String Name) コンストラクタは、採番ルール(MLotCtl)からロットを生成する際に使用されます。処理内容は次のとおりです。
setClientOrg(ctl)で採番ルールのクライアント・組織を継承setM_LotCtl_ID(ctl.getM_LotCtl_ID())でロット管理への参照をセットsetM_Product_ID(M_Product_ID)/setName(Name)をセット
呼び出し元の MLotCtl.createLot(M_Product_ID) は CurrentNext に対して楽観的ロック(set_UseOptimisticLocking(true)、最大 3 回リトライ)を掛けたうえで、接頭辞 + CurrentNext + 接尾辞 の名称を組み立て、CurrentNext を IncrementNo 分だけ進めてから MLot を保存します。
⚠️ 注意: 採番の競合はトランザクションのセーブポイント+リトライで解決されます。カスタムコードから直接
M_Lotを INSERT するとCurrentNextとの整合が崩れるため、自動採番を使う場合は必ずMLotCtl.createLot()を経由してください。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”M_Lot には標準の Callout が定義されていません(gw_column.tsv の callout 列が全カラムで未設定)。ロット番号の書式チェック等を追加する場合は Model Validator を使用します。
public class CustomLotValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MLot && (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) { MLot lot = (MLot) po; // 例: ロット番号は「YYYYMM-連番」形式のみ許可 if (lot.getName() != null && !lot.getName().matches("\\d{6}-\\d{3}")) { throw new AdempiereException("ロット番号は「YYYYMM-000」形式で入力してください"); } } return null; }}採番ロジックのカスタマイズ
Section titled “採番ロジックのカスタマイズ”ロット名の組み立て(接頭辞・番号・接尾辞)は MLotCtl.createLot() に実装されています。年月をロット名に含める等の要件は、Model Validator の TYPE_BEFORE_NEW で Name を書き換えるか、独自プロセスから MLot を生成する方式が安全です。
関連プロセス
Section titled “関連プロセス”リファレンスページ・メニューに、このウィンドウ固有の標準プロセス(ボタン起動プロセス)は登録されていません。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”ロット番号の書式や採番ルールは業種ごとに要件が大きく異なりますが、iDempiere では Model Validator と MLotCtl の組み合わせでコア改変なしに対応できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。