コンテンツにスキップ

iDempiere 価格表の使い方|在庫管理 操作マニュアル・技術仕様

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

価格表は、品目の販売価格・仕入価格を定義するマスタです。伝票の通貨と税の扱い(税込/税抜)は価格表で決まり、受注・発注・請求書の明細行に単価を自動セットします。「価格表 → 価格表バージョン → 品目価格」の3階層で構成され、日付の異なる価格改定をバージョンとして並行管理できます。

📌 ポイント: 伝票に適用されるのは「伝票日付以前で最も新しい有効開始日を持つバージョン」です。価格改定は既存バージョンを書き換えるのではなく、新しい有効開始日のバージョンを追加するのが基本です。

  • 品目ごとの3価格(営業定価・実績価格・限度価格)の管理
  • 価格表バージョンによる期間別の価格改定管理(有効開始日ベース)
  • 割引スキーマ(プライスリストスキーマ)を使った品目価格の自動生成
  • 販売用/購買用価格表の使い分け(通貨・税込/税抜の指定)
  • 限度価格を下回る販売を防ぐ限度価格チェック
  • 取引先・数量分岐ごとの個別価格設定(取引先別分岐価格)
タブ名テーブル項目数役割
価格表M_PriceList約12項目ヘッダー(名称・通貨・税込・販売用・限度価格チェック等)
バージョンM_PriceList_Version約10項目有効開始日ごとの価格セット。プライスリストスキーマと自動作成ボタン
品目価格M_ProductPrice約8項目品目ごとの3価格(営業定価・実績価格・限度価格)
取引先別分岐価格設定M_ProductPriceVendorBreak約10項目取引先×数量分岐ごとの個別価格
翻訳M_PriceList_Version_Trl / M_PriceList_Trl各数項目多言語対応の翻訳

💡 ヒント: 品目価格はこの画面から手入力もできますが、品目数が多い場合はバージョンタブの「品目価格自動作成」ボタンで一括生成するのが実務の基本です。

graph TD
    A["🚀 メニューから開く<br/>在庫管理 > 品目マスタ管理 > 価格表"] --> B["➕ 価格表ヘッダーを登録<br/>(名称・通貨・販売用/購買用・税込)"]
    B --> C["📅 バージョンタブで<br/>有効開始日と<br/>プライスリストスキーマを設定"]
    C --> D{価格の入力方法}
    D -->|自動生成| E["⚙️ 品目価格自動作成ボタン<br/>(ベース価格表 or 購買情報から計算)"]
    D -->|手入力| F["✏️ 品目価格タブで<br/>品目ごとに3価格を入力"]
    E --> G["🔍 品目価格タブで<br/>生成結果を確認・微調整"]
    F --> H["💾 保存"]
    G --> H
    H --> I["🔗 取引先マスタに<br/>販売/購買価格表として設定"]

メニューから開く 在庫管理 > 品目マスタ管理 > 価格表 価格表ヘッダーを登録 (名称・通貨・販売用/購買用・税込) バージョンタブで 有効開始日と プライスリストスキーマを設定 品目価格自動作成ボタン (ベース価格表 or 購買情報から計算) 品目価格タブで 品目ごとに3価格を入力 品目価格タブで 生成結果を確認・微調整 保存 取引先マスタに 販売/購買価格表として設定 価格の入力方法 自動生成 手入力

メニューから「在庫管理 > 品目マスタ管理 > 価格表」を開きます。

  1. ツールバーの「新規」ボタンをクリック
  2. 基本情報を入力:
    • 名称: 価格表名(例: 標準販売価格表
    • 通貨: 価格表の通貨(伝票の通貨がこれで決まります)
    • 販売用価格表: 販売用ならチェック(外すと購買用)
    • 税込: 価格に税を含める場合にチェック
    • 価格精度: 価格の小数桁数(デフォルト2)
    • 限度価格チェック: 限度価格未満の価格入力を禁止する場合にチェック
  3. 保存」をクリック

バージョンの作成と品目価格の自動生成

Section titled “バージョンの作成と品目価格の自動生成”
  1. バージョン」タブに移動し「新規
  2. 以下を入力:
    • 名称: バージョン名(デフォルトは当日日付)
    • 有効開始日: このバージョンが有効になる日(この日を含む)
    • プライスリストスキーマ: 価格計算ルール(必須)
    • ベース価格表: 計算元にする既存バージョン(未指定なら品目の購買情報が計算元)
  3. 保存」後、「品目価格自動作成」ボタンを実行
  4. 品目価格」タブで生成された3価格を確認し、必要に応じて個別修正
  1. 品目価格」タブで「新規
  2. 品目を選択し、3価格を入力:
    • 営業定価(PriceList): いわゆる定価・希望小売価格
    • 実績価格(PriceStd): 伝票に既定でセットされる標準単価
    • 限度価格(PriceLimit): 下限価格(限度価格チェック有効時はこれ未満で伝票エラー)
項目名必須説明
名称必須文字列価格表の名称
通貨必須選択価格表の通貨。伝票通貨がこれで決まる
販売用価格表必須チェックON=販売用、OFF=購買用
税込必須チェック価格に税を含むか
価格精度必須整数価格の小数桁数(デフォルト2)
限度価格チェック必須チェック限度価格未満の価格を許可しない
デフォルト必須チェック既定の価格表として使用
ベース価格表-選択この価格表に品目が無い場合に参照する価格表
項目名必須説明
名称必須文字列バージョン名(デフォルト=当日日付)
有効開始日必須日付この日(当日を含む)から有効
プライスリストスキーマ必須選択価格自動生成の計算ルール
ベース価格表-選択計算元バージョン。未指定なら品目の購買情報を使用
品目価格自動作成-ボタン品目価格を一括生成するプロセスを起動

全項目は 全項目一覧はリファレンス参照 をご覧ください。

Q. 伝票にはどのバージョンの価格が適用されますか?

Section titled “Q. 伝票にはどのバージョンの価格が適用されますか?”

伝票日付以前(ValidFrom <= 伝票日付)の有効なバージョンのうち、有効開始日が最も新しいものが自動選択されます。未来日付のバージョンを事前に登録しておけば、その日から自動的に新価格へ切り替わります。

Q. 品目価格自動作成の計算元は何ですか?

Section titled “Q. 品目価格自動作成の計算元は何ですか?”

バージョンで「ベース価格表」を指定した場合はそのバージョンの品目価格、未指定の場合は品目マスタの購買情報(M_Product_PO)の価格が計算元になります。計算元価格にプライスリストスキーマの計算ルール(割増・割引・丸め)を適用して3価格を生成します。

Q. 価格表に登録の無い品目を伝票で選ぶとどうなりますか?

Section titled “Q. 価格表に登録の無い品目を伝票で選ぶとどうなりますか?”

ヘッダーの「ベース価格表」が設定されていれば、そちらの価格が代わりに参照されます。ベース価格表も無ければ価格が取得できず、明細で価格0のまま手入力が必要になります。

Q. 限度価格チェックはどこで効きますか?

Section titled “Q. 限度価格チェックはどこで効きますか?”

「限度価格チェック」が ON の価格表を使う伝票では、明細単価が限度価格(PriceLimit)を下回ると保存・完了時にエラーになります。値引き権限の統制に利用できます。

Q. 取引先別分岐価格設定タブは何に使いますか?

Section titled “Q. 取引先別分岐価格設定タブは何に使いますか?”

同じ品目でも「この取引先には」「この数量(分岐値)以上なら」この3価格、という個別価格を定義するタブです。取引先を空欄にすれば全取引先共通の数量分岐価格になります。

🛠 技術仕様(開発者向け)

価格表は M_PriceList(ヘッダー)→ M_PriceList_Version(バージョン)→ M_ProductPrice(品目価格)の3階層マスタです。モデルクラスは MPriceList(377行)、MPriceListVersion(211行)、MProductPrice(213行)で、いずれもキャッシュ参照用の markImmutable() を持ちます。M_ProductPriceVendorBreak は生成クラス X_M_ProductPriceVendorBreak のみ(M クラス無し)。Document 型ではありません。

classDiagram
    class MPriceList {
        +get(M_PriceList_ID) MPriceList
        +getDefault(ctx, IsSOPriceList) MPriceList
        +getPricePrecision(ctx, M_PriceList_ID) int
        +getPriceListVersion(Timestamp valid) MPriceListVersion
        +getStandardPrecision() int
    }
    class MPriceListVersion {
        +getPriceList() MPriceList
        +getProductPrice(boolean refresh) MProductPrice[]
        +setName() void
    }
    class MProductPrice {
        +get(ctx, PLV_ID, Product_ID) MProductPrice
        +setPrices(PriceList, PriceStd, PriceLimit) void
    }
    class X_M_ProductPriceVendorBreak {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    MPriceList --|> PO
    MPriceList --> MPriceListVersion : has many
    MPriceListVersion --> MProductPrice : has many
    MPriceListVersion --> X_M_ProductPriceVendorBreak : has many
    MPriceListVersion --> MDiscountSchema : calculation rule

+get(M_PriceList_ID) MPriceList +getDefault(ctx, IsSOPriceList) MPriceList +getPricePrecision(ctx, M_PriceList_ID) int +getPriceListVersion(Timestamp valid) MPriceListVersion +getStandardPrecision() int +getPriceList() MPriceList +getProductPrice(boolean refresh) MProductPrice[] +setName() void +get(ctx, PLV_ID, Product_ID) MProductPrice +setPrices(PriceList, PriceStd, PriceLimit) void <> <>

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

カラム名必須説明備考
M_PriceList_IDIDPK価格表ID主キー
NameString(60)Y名称識別子
C_Currency_IDTableDirectY通貨伝票通貨を決定
IsSOPriceListYesNoY販売用価格表
IsTaxIncludedYesNoY税込
EnforcePriceLimitYesNoY限度価格チェック
PricePrecisionIntegerY価格精度デフォルト2
IsDefaultYesNoYデフォルト
BasePriceList_IDTableNベース価格表品目未登録時のフォールバック

M_PriceList_Version(価格表バージョン)

Section titled “M_PriceList_Version(価格表バージョン)”
カラム名必須説明備考
M_PriceList_Version_IDIDPKバージョンID
M_PriceList_IDTableDirectY価格表FK親リンク
NameString(60)Y名称デフォルト @#Date@
ValidFromDateY有効開始日デフォルト @#Date@
M_DiscountSchema_IDTableYプライスリストスキーマ価格生成ルール
M_Pricelist_Version_Base_IDTableNベース価格表バージョン計算元
ProcCreateButtonN品目価格自動作成M_PriceList_Create 起動
カラム名必須説明
M_PriceList_Version_IDTableDirectYバージョンFK(親)
M_Product_IDSearchY品目FK
PriceListCosts+PricesY営業定価
PriceStdCosts+PricesY実績価格(標準単価)
PriceLimitCosts+PricesY限度価格

M_ProductPriceVendorBreak(取引先別分岐価格)

Section titled “M_ProductPriceVendorBreak(取引先別分岐価格)”
カラム名必須説明
M_PriceList_Version_IDTableDirectYバージョンFK
M_Product_IDSearchY品目FK
C_BPartner_IDSearchN取引先(空欄=全取引先)
BreakValueNumberY分岐値(この値以上で適用)
PriceList / PriceStd / PriceLimitCosts+PricesY3価格
erDiagram
    M_PriceList ||--o{ M_PriceList_Version : "versions"
    M_PriceList_Version ||--o{ M_ProductPrice : "product prices"
    M_PriceList_Version ||--o{ M_ProductPriceVendorBreak : "BP break prices"
    M_PriceList_Version }o--|| M_DiscountSchema : "calculation rule"
    M_ProductPrice }o--|| M_Product : "product"
    M_PriceList ||--o{ C_BPartner : "default price list"
    M_PriceList ||--o{ C_Order : "determines currency/tax"

product prices BP break prices calculation rule default price list determines currency/tax

バージョン選択(MPriceList.getPriceListVersion)

Section titled “バージョン選択(MPriceList.getPriceListVersion)”

伝票日付に対する適用バージョンは次の条件で決定されます(ソース確認済み):

M_PriceList_ID=? AND TRUNC(ValidFrom)<=? -- 伝票日付
ORDER BY ValidFrom DESC -- 最初の1件(最も新しい有効開始日)

有効フラグ ON のレコードのみ対象です。該当バージョンが無い場合は null(価格取得不可)になります。

品目価格自動作成(M_PriceList_Create プロセス)

Section titled “品目価格自動作成(M_PriceList_Create プロセス)”

バージョンタブの「品目価格自動作成」ボタンは M_PriceList_Create(543行、org.adempiere.base.process/src/org/compiere/process/M_PriceList_Create.java)を起動します。主要処理:

  1. 購買情報のクレンジング: M_Product_PO の NULL 価格を 0 に補正し、PricePO 未設定なら PriceLastPO をコピー。現在の仕入先(IsCurrentVendor)が1件も無い品目には仕入先を自動設定
  2. 対象品目の抽出: プライスリストスキーマの明細行(M_DiscountSchemaLine)ごとに、ベース価格表バージョン(未指定時は M_Product_PO)から対象品目を抽出
  3. 価格計算: スキーマ行の変換ルール(割増・割引・丸め)を適用して営業定価・実績価格・限度価格を生成

📌 ポイント: 価格生成に使うのは割引スキーマの「明細行(M_DiscountSchemaLine)」で、受発注時の値引計算に使う「割引条件設定(M_DiscountSchemaBreak)」とはテーブルが異なります。詳細は 割引スキーマ を参照してください。

明細行の価格取得は MProductPrice.get(ctx, M_PriceList_Version_ID, M_Product_ID, trxName) で「バージョン×品目」の交差レコードを取得します。MPriceList.get() / getDefault() はキャッシュ経由の高速参照に対応しています。

拡張ポイント(カスタマイズ箇所)

Section titled “拡張ポイント(カスタマイズ箇所)”

IPricingRule(価格計算エンジンの差し替え)

Section titled “IPricingRule(価格計算エンジンの差し替え)”

IPricingRule インターフェースを OSGi サービスとして実装すると、標準の価格解決(価格表バージョン→品目価格)をコア改変なしで拡張できます。得意先グループ別価格・期間限定価格などに活用できます。

M_ProductPrice の登録・変更に独自制約(例: 実績価格が限度価格を下回らないことの強制チェック)を追加する場合は ModelValidator の modelChangeTYPE_BEFORE_NEW / TYPE_BEFORE_CHANGE をフックします。このウィンドウの各テーブルに標準の Callout はありません(AD 定義確認済み)。

プロセス名説明
品目価格自動作成(M_PriceList_Create)ベース価格表または購買情報からスキーマ適用で品目価格を一括生成

iDempiereの価格表は IPricingRule や Model Validator により、独自の価格決定ロジックをコア改変なしで組み込めます。

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

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