iDempiere 数量単位の使い方|在庫管理 操作マニュアル・技術仕様
📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。
数量単位(Unit of Measure)は、個・kg・箱・時間など、金額以外のあらゆる数量の単位を定義するマスタです。品目マスタ・受発注・在庫・価格表など数量を扱うすべての画面で参照され、単位間の変換レートもここで定義します。
📌 ポイント: 単位変換は直接定義した組み合わせのみ有効です。A→B と B→C を定義しても A→C は自動計算されません(A→C を明示的に登録する必要があります)。
数量単位でできること
Section titled “数量単位でできること”- 個・kg・箱などの数量単位の登録(EDI X12 コード・UN/CEFACT コード対応)
- 数量の丸め桁数の定義(標準精度・原価計算精度)
- 単位間の変換レート定義(掛算レート・割算レートは片方入力で自動補完)
- 品目を指定した個別の単位変換(例: この品目だけ 1箱=24個)
- 分・時間・日など時間系単位の自動変換(未定義でもシステムが補完)
- 単位名称の多言語翻訳
数量単位はシンプルな 3 タブ構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 数量単位 | C_UOM | 約12項目 | 単位の基本定義(コード・記号・精度) |
| 変換 | C_UOM_Conversion | 約8項目 | 単位間の変換レート(品目指定も可) |
| 翻訳 | C_UOM_Trl | 約9項目 | 単位名称・記号の多言語翻訳 |
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>在庫管理 > 品目マスタ管理 > 数量単位"] --> B["➕ 新規で基本情報を入力<br/>(数量単位コード・名称・記号)"]
B --> C["🔢 標準精度・原価計算精度を設定<br/>(数量の丸め桁数)"]
C --> D["💾 保存"]
D --> E{単位変換が必要?}
E -->|不要| F["✅ 完了<br/>品目マスタで選択可能に"]
E -->|必要| G["🔄 変換タブへ移動<br/>変換先数量単位を選択"]
G --> H["⚖️ 掛算レートを入力<br/>(割算レートは自動計算)"]
H --> I{品目固有の変換?}
I -->|全品目共通| F
I -->|品目固有| J["📦 品目を指定して保存<br/>(品目の基本単位=変換元 必須)"] --> F
⚠️ 注意: 品目を指定した変換では、変換元の数量単位が「品目マスタの基本単位」と一致していないと保存時にエラーになります(システム設定で検証が有効な場合)。
アクセス方法
Section titled “アクセス方法”メニューから「在庫管理 > 品目マスタ管理 > 数量単位」を開きます。
- ツールバーの「新規」ボタンをクリック
- 基本情報を入力:
- 数量単位コード: EDI X12 準拠の単位コード(必須、例:
EA) - 名称: 単位名(例:
個) - 単位記号: 画面表示用の記号(例:
個、kg) - 標準精度: 数量計算時の丸め桁数(例:
0) - 原価計算精度: 原価計算時の丸め桁数(例:
2)
- 数量単位コード: EDI X12 準拠の単位コード(必須、例:
- 「保存」をクリック
単位変換の登録
Section titled “単位変換の登録”- 「変換」タブに移動
- 変換先数量単位を選択
- 掛算レートを入力(例: 1箱=24個なら
24)- 割算レートは保存時に逆数が自動計算されます
- 品目固有の変換の場合は品目を選択
- 「保存」をクリック
項目リファレンス
Section titled “項目リファレンス”数量単位タブ
Section titled “数量単位タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 数量単位コード | 必須 | 文字列(4) | EDI X12 の単位コード |
| UN/CEFACT Code | - | 文字列 | 国際貿易で使う単位コード |
| 名称 | 必須 | 文字列 | 単位の名称 |
| 単位記号 | - | 文字列 | 画面・帳票表示用の記号 |
| 単位タイプ | - | リスト | 時間系単位等の分類 |
| 標準精度 | 必須 | 整数 | 数量の丸め桁数 |
| 原価計算精度 | 必須 | 整数 | 原価計算時の丸め桁数 |
| デフォルト | 必須 | チェック | デフォルト単位として使用 |
| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 数量単位 | 必須 | 選択 | 変換元の単位 |
| 変換先数量単位 | 必須 | 選択 | 変換先の単位 |
| 品目 | - | 検索 | 品目固有の変換の場合に指定 |
| 掛算レート | 必須 | 数値 | 変換元×レート=変換先 |
| 割算レート | 必須 | 数値 | 変換元÷レート=変換先(自動補完) |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 掛算レートと割算レートは両方入力が必要ですか?
Section titled “Q. 掛算レートと割算レートは両方入力が必要ですか?”いいえ。どちらか一方を入力すれば、保存時にもう一方が逆数として自動計算されます(MUOMConversion.beforeSave() の getOppositeRate() による補完)。両方入力する場合は整合性に注意してください。
Q. 変換元と変換先に同じ単位を指定するとどうなりますか?
Section titled “Q. 変換元と変換先に同じ単位を指定するとどうなりますか?”保存時にエラーになります。ソースコード上、変換元 UOM と変換先 UOM が同一の場合は保存が拒否されます。また掛算レートが 0 以下の場合も保存できません。
Q. 品目指定の変換で「ProductUOMConversionUOMError」が出ます
Section titled “Q. 品目指定の変換で「ProductUOMConversionUOMError」が出ます”品目を指定した変換では、変換元の数量単位が品目マスタの基本単位と一致している必要があります(システム設定 ProductUOMConversionUOMValidate、デフォルト有効)。また、品目の基本単位は最小単位である必要があり、割算レートが 1 未満だとエラーになります(ProductUOMConversionRateValidate)。
Q. 分→時間などの時間単位は変換定義が必要ですか?
Section titled “Q. 分→時間などの時間単位は変換定義が必要ですか?”不要です。分・時間・日・営業日・週・月・営業月・年の間は、明示的な定義がなくてもシステムが自動変換します(MUOMConversion.deriveRate()。例: 1時間=60分、営業日=8時間)。それ以外の単位は必ず直接定義してください。
🛠 技術仕様(開発者向け)
数量単位は C_UOM テーブル(アクセスレベル: System+Client)に格納されます。MUOM クラス(375行)が単位マスタと丸め処理を、MUOMConversion クラス(916行)が変換レートの検証・変換計算・時間単位の自動導出を担います。両クラスとも Immutable キャッシュ対応です。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MUOM {
+get(ctx, C_UOM_ID) MUOM
+getPrecision(ctx, C_UOM_ID) int
+round(BigDecimal, boolean) BigDecimal
+isMinute() boolean
+isHour() boolean
+isDay() boolean
+markImmutable() MUOM
}
class MUOMConversion {
+convert(ctx, C_UOM_ID, C_UOM_To_ID, qty)$ BigDecimal
+deriveRate(ctx, from, to)$ BigDecimal
+convertProductTo(ctx, M_Product_ID, C_UOM_To_ID, qty)$ BigDecimal
+convertProductFrom(ctx, M_Product_ID, C_UOM_To_ID, qty)$ BigDecimal
+getProductConversions(ctx, M_Product_ID)$ MUOMConversion[]
+getOppositeRate(rate)$ BigDecimal
#beforeSave(newRecord) boolean
}
class X_C_UOM {
<<generated>>
}
class X_C_UOM_Conversion {
<<generated>>
}
class PO {
<<abstract>>
}
MUOM --|> X_C_UOM
MUOMConversion --|> X_C_UOM_Conversion
X_C_UOM --|> PO
X_C_UOM_Conversion --|> PO
MUOMConversion --> MUOM : from/to
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MUOM.java / MUOMConversion.java
関連DBテーブル
Section titled “関連DBテーブル”C_UOM(数量単位)
Section titled “C_UOM(数量単位)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_UOM_ID | ID | PK | 数量単位ID | 主キー |
| X12DE355 | String(4) | Y | EDI X12 単位コード | |
| UNCEFACT | String(10) | N | UN/CEFACT コード | |
| Name | String(60) | Y | 名称 | 識別子 |
| UOMSymbol | String(10) | N | 単位記号 | |
| UOMType | List | N | 単位タイプ | 時間系判定に使用 |
| StdPrecision | Integer | Y | 標準精度 | 数量の丸め桁 |
| CostingPrecision | Integer | Y | 原価計算精度 | |
| IsDefault | YesNo | Y | デフォルト |
C_UOM_Conversion(単位変換)
Section titled “C_UOM_Conversion(単位変換)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_UOM_Conversion_ID | ID | PK | 変換ID | |
| C_UOM_ID | TableDirect | Y | 変換元単位 | |
| C_UOM_To_ID | Table | Y | 変換先単位 | |
| M_Product_ID | Search | N | 品目 | 品目固有変換の場合 |
| MultiplyRate | Number | Y | 掛算レート | callout: CalloutEngine.rate |
| DivideRate | Number | Y | 割算レート | callout: CalloutEngine.rate |
ビジネスロジック
Section titled “ビジネスロジック”MUOMConversion.beforeSave() の検証(916行中の主要処理):
- 同一単位チェック:
C_UOM_ID = C_UOM_To_IDはエラー - レート自動補完: 掛算レートのみ入力→割算レートを逆数で補完(逆も同様。
getOppositeRate()) - レート正値チェック: 補完後の掛算レートが 0 以下はエラー
- 品目単位一致: SysConfig
ProductUOMConversionUOMValidate(既定 Y)が有効な場合、品目指定時は変換元 UOM=品目の基本単位を強制 - 最小単位チェック: SysConfig
ProductUOMConversionRateValidate(既定 Y)が有効な場合、品目指定時に割算レート < 1 はエラー(基本単位は最小単位であること)
変換計算は static メソッド群で提供され、deriveRate() が分/時間/日/営業日/週/月/営業月/年の相互レートをハードコードで導出します(例: 営業日=480分、営業月=160時間)。品目別変換は convertProductTo() / convertProductFrom() がキャッシュ(s_conversionProduct)経由で高速化しています。
拡張ポイント
Section titled “拡張ポイント”- Callout:
MultiplyRate/DivideRateに標準 calloutorg.compiere.model.CalloutEngine.rateが設定済み(片方入力で他方を画面上でも即時計算) - Model Validator: 単位コード体系の強制や変換レートの範囲制限は
C_UOM/C_UOM_Conversionへの OSGi Model Validator で追加可能 - SysConfig:
ProductUOMConversionUOMValidate/ProductUOMConversionRateValidateで品目変換の検証強度を切替可能
関連プロセス
Section titled “関連プロセス”標準の関連プロセスはありません(マスタメンテナンスのみ)。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”単位変換レートの承認制や独自の丸めルールなど、数量単位まわりの要件も Model Validator でコア改変なしに拡張できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。