Skip to content

iDempiere 数量単位の使い方|在庫管理 操作マニュアル・技術仕様

This content is not available in your language yet.

📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。

数量単位(Unit of Measure)は、個・kg・箱・時間など、金額以外のあらゆる数量の単位を定義するマスタです。品目マスタ・受発注・在庫・価格表など数量を扱うすべての画面で参照され、単位間の変換レートもここで定義します。

📌 ポイント: 単位変換は直接定義した組み合わせのみ有効です。A→B と B→C を定義しても A→C は自動計算されません(A→C を明示的に登録する必要があります)。

  • 個・kg・箱などの数量単位の登録(EDI X12 コード・UN/CEFACT コード対応)
  • 数量の丸め桁数の定義(標準精度・原価計算精度)
  • 単位間の変換レート定義(掛算レート・割算レートは片方入力で自動補完)
  • 品目を指定した個別の単位変換(例: この品目だけ 1箱=24個)
  • 分・時間・日など時間系単位の自動変換(未定義でもシステムが補完)
  • 単位名称の多言語翻訳

数量単位はシンプルな 3 タブ構成です。

タブ名テーブル項目数役割
数量単位C_UOM約12項目単位の基本定義(コード・記号・精度)
変換C_UOM_Conversion約8項目単位間の変換レート(品目指定も可)
翻訳C_UOM_Trl約9項目単位名称・記号の多言語翻訳
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

メニューから開く 在庫管理 > 品目マスタ管理 > 数量単位 新規で基本情報を入力 (数量単位コード・名称・記号) 標準精度・原価計算精度を設定 (数量の丸め桁数) 保存 完了 品目マスタで選択可能に 変換タブへ移動 変換先数量単位を選択 掛算レートを入力 (割算レートは自動計算) 品目を指定して保存 (品目の基本単位=変換元 必須) 単位変換が必要? 品目固有の変換? 不要 必要 全品目共通 品目固有

⚠️ 注意: 品目を指定した変換では、変換元の数量単位が「品目マスタの基本単位」と一致していないと保存時にエラーになります(システム設定で検証が有効な場合)。

メニューから「在庫管理 > 品目マスタ管理 > 数量単位」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • 数量単位コード: EDI X12 準拠の単位コード(必須、例: EA
    • 名称: 単位名(例:
    • 単位記号: 画面表示用の記号(例: kg
    • 標準精度: 数量計算時の丸め桁数(例: 0
    • 原価計算精度: 原価計算時の丸め桁数(例: 2
  3. 保存」をクリック
  1. 変換」タブに移動
  2. 変換先数量単位を選択
  3. 掛算レートを入力(例: 1箱=24個なら 24
    • 割算レートは保存時に逆数が自動計算されます
  4. 品目固有の変換の場合は品目を選択
  5. 保存」をクリック
項目名必須説明
数量単位コード必須文字列(4)EDI X12 の単位コード
UN/CEFACT Code-文字列国際貿易で使う単位コード
名称必須文字列単位の名称
単位記号-文字列画面・帳票表示用の記号
単位タイプ-リスト時間系単位等の分類
標準精度必須整数数量の丸め桁数
原価計算精度必須整数原価計算時の丸め桁数
デフォルト必須チェックデフォルト単位として使用
項目名必須説明
数量単位必須選択変換元の単位
変換先数量単位必須選択変換先の単位
品目-検索品目固有の変換の場合に指定
掛算レート必須数値変換元×レート=変換先
割算レート必須数値変換元÷レート=変換先(自動補完)

全項目一覧はリファレンス参照

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 キャッシュ対応です。

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

+get(ctx, C_UOM_ID) MUOM +getPrecision(ctx, C_UOM_ID) int +round(BigDecimal, boolean) BigDecimal +isMinute() boolean +isHour() boolean +isDay() boolean +markImmutable() MUOM +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 <> <> > X_C_UOM MUOMConversion -- > PO X_C_UOM_Conversion --

パッケージ: org.compiere.model ソースファイル: org.adempiere.base/src/org/compiere/model/MUOM.java / MUOMConversion.java

カラム名必須説明備考
C_UOM_IDIDPK数量単位ID主キー
X12DE355String(4)YEDI X12 単位コード
UNCEFACTString(10)NUN/CEFACT コード
NameString(60)Y名称識別子
UOMSymbolString(10)N単位記号
UOMTypeListN単位タイプ時間系判定に使用
StdPrecisionIntegerY標準精度数量の丸め桁
CostingPrecisionIntegerY原価計算精度
IsDefaultYesNoYデフォルト
カラム名必須説明備考
C_UOM_Conversion_IDIDPK変換ID
C_UOM_IDTableDirectY変換元単位
C_UOM_To_IDTableY変換先単位
M_Product_IDSearchN品目品目固有変換の場合
MultiplyRateNumberY掛算レートcallout: CalloutEngine.rate
DivideRateNumberY割算レートcallout: CalloutEngine.rate

MUOMConversion.beforeSave() の検証(916行中の主要処理):

  1. 同一単位チェック: C_UOM_ID = C_UOM_To_ID はエラー
  2. レート自動補完: 掛算レートのみ入力→割算レートを逆数で補完(逆も同様。getOppositeRate()
  3. レート正値チェック: 補完後の掛算レートが 0 以下はエラー
  4. 品目単位一致: SysConfig ProductUOMConversionUOMValidate(既定 Y)が有効な場合、品目指定時は変換元 UOM=品目の基本単位を強制
  5. 最小単位チェック: SysConfig ProductUOMConversionRateValidate(既定 Y)が有効な場合、品目指定時に割算レート < 1 はエラー(基本単位は最小単位であること)

変換計算は static メソッド群で提供され、deriveRate() が分/時間/日/営業日/週/月/営業月/年の相互レートをハードコードで導出します(例: 営業日=480分、営業月=160時間)。品目別変換は convertProductTo() / convertProductFrom() がキャッシュ(s_conversionProduct)経由で高速化しています。

  • Callout: MultiplyRate / DivideRate に標準 callout org.compiere.model.CalloutEngine.rate が設定済み(片方入力で他方を画面上でも即時計算)
  • Model Validator: 単位コード体系の強制や変換レートの範囲制限は C_UOM / C_UOM_Conversion への OSGi Model Validator で追加可能
  • SysConfig: ProductUOMConversionUOMValidate / ProductUOMConversionRateValidate で品目変換の検証強度を切替可能

標準の関連プロセスはありません(マスタメンテナンスのみ)。


単位変換レートの承認制や独自の丸めルールなど、数量単位まわりの要件も Model Validator でコア改変なしに拡張できます。

As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。

OSS ERP導入・カスタマイズサービスの詳細はこちら