iDempiere 販売手数料及びロイヤリティー計算の使い方|販売管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 販売管理の全体像: 販売管理の全体図 も合わせてご覧ください。
販売手数料及びロイヤリティー計算は、営業担当者や代理店へ支払う手数料の 計算ルール を定義するウィンドウです。「誰に」「どの取引を対象に」「どの計算式で」「どの頻度で」支払うかをここで決め、「手数料作成」ボタンで実際の計算を実行します。
📌 ポイント: 計算結果はこの画面には残りません。「手数料作成」を実行すると販売手数料及びロイヤリティー計算結果(
C_CommissionRun)が生成され、金額の確認と仕入請求伝票の作成はそちらで行います。
販売手数料の計算ルールでできること
Section titled “販売手数料の計算ルールでできること”- 手数料の受取先(取引先/販売代理)と支払通貨の指定
- 計算ベースの選択(受注・売上請求・入金のいずれを対象にするか)
- 計算頻度の指定(週次・月次・四半期・年次)
- 複数の計算行(手数料詳細)による段階的・多条件の手数料設計
- 対象取引の絞り込み(組織・取引先・取引先グループ・品目・品目カテゴリ・販売地域・支払方法)
- 金額と数量の両方を使った計算式(乗数・控除・マイナス抑止)
- 他の手数料ルールからの計算行の一括コピー
- 手数料計算の実行と、直近実行日の記録
販売手数料及びロイヤリティー計算は 2 タブ構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 手数料 | C_Commission | 13項目 | 受取先・通貨・計算ベース・頻度・実行ボタン |
| 手数料詳細 | C_CommissionLine | 19項目 | 対象取引の絞り込み条件と計算式 |
graph TD
subgraph "販売手数料及びロイヤリティー計算(Window ID: 207)"
T1["💰 手数料<br/>C_Commission<br/>13項目"]
T2[" └ 手数料詳細<br/> C_CommissionLine<br/> 19項目"]
end
T1 --> T2
💡 ヒント: 1 つの取引に対して複数の手数料を支払う設計(伝票入力者・品目カテゴリ責任者・取引先グループ担当者など)が可能です。受取先ごとに手数料ルールを分けて作成してください。
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>販売管理 > 販売管理設定 > 販売手数料及びロイヤリティー計算"] --> B["➕ 新規で手数料ルールを作成<br/>(名称・受取先・通貨)"]
B --> C["💵 料金 または 品目 を必ず指定<br/>(請求伝票の明細に使う)"]
C --> D["⚙️ 計算ベースと頻度タイプを選択"]
D --> E["📋 手数料詳細タブで計算行を登録"]
E --> F["🔍 絞り込み条件を設定<br/>(取引先・品目・地域など)"]
F --> G["🧮 乗数・控除を設定<br/>(金額乗数・掛算数量)"]
G --> H["💾 保存"]
H --> I["▶️ 手数料作成ボタンを実行<br/>(開始日付を指定)"]
I --> J["📊 計算結果画面で金額を確認<br/>C_CommissionRun"]
J --> K["🧾 請求書作成で仕入請求伝票を生成"]
アクセス方法(メニューパス)
Section titled “アクセス方法(メニューパス)”メニューから「販売管理 > 販売管理設定 > 販売手数料及びロイヤリティー計算」を開きます。
新規登録(手数料ルール)
Section titled “新規登録(手数料ルール)”- ツールバーの「新規」ボタンをクリック
- 必須項目を入力:
- 名称: 手数料ルール名(例:
代理店A 月次販売手数料) - 取引先/販売代理: 手数料を受け取る取引先
- 通貨: 手数料の計算・支払通貨
- 計算ベース: 受注/売上請求/入金 のいずれか
- 頻度タイプ: 週次/月次/四半期/年次
- 名称: 手数料ルール名(例:
- 料金 または 品目 のいずれかを必ず指定
- 「手数料詳細作成」(List Details)で明細レベルまで記録するかを選択
- 「保存」をクリック
⚠️ 注意: 「料金」と「品目」の両方が未入力だと保存できません(
MCommission.beforeSave()がChargeOrProductMandatoryエラーを返します)。ここで指定した料金/品目が、後工程で作成される仕入請求伝票の明細行になります。
手数料詳細(計算行)の登録
Section titled “手数料詳細(計算行)の登録”- 「手数料詳細」タブに移動
- 「新規」で計算行を追加(明細番号は 10 刻みで自動採番)
- 絞り込み条件を必要に応じて設定:
- 取引先グループ / 取引先: 対象顧客の限定
- 品目カテゴリ / 品目: 対象商品の限定
- 販売地域: 取引先住所の地域による限定
- 組織: 対象組織の限定
- 支払方法: 支払方法による限定
- 手数料のみの注文書/請求書: 受取先が社内担当者として設定されている伝票のみを対象にする
- 計算式のパラメータを設定:
- 控除金額 / 金額乗数
- 控除数量 / 掛算数量
- 正数のみ: マイナスの手数料を発生させない場合にチェック
- 「保存」をクリック
💡 ヒント: 絞り込み条件を何も入力しなければ、対象期間のすべての取引が計算対象になります。まず条件なしで金額感を確認し、そこから条件を絞り込んでいくと設計しやすくなります。
各計算行の手数料額は次の式で求められます。
手数料額 = (換算金額 − 控除金額) × 金額乗数 + (実績数量 − 控除数量) × 掛算数量- 換算金額(
ConvertedAmt): 対象取引の金額を手数料通貨へ換算した合計 - 正数のみ(
IsPositiveOnly)にチェックすると、括弧内がマイナスになった場合は 0 として扱われます
| 手数料の型 | 金額乗数 | 掛算数量 | 控除金額 | 設定例 |
|---|---|---|---|---|
| 売上の 3% | 0.03 | 0 | 0 | 一般的な販売手数料 |
| 1個あたり100円 | 0 | 100 | 0 | 数量ベースのロイヤリティ |
| 100万円超部分の 5% | 0.05 | 0 | 1000000 | 控除金額でしきい値を設定 |
| 売上の 2% + 1個50円 | 0.02 | 50 | 0 | 金額・数量の併用 |
計算行のコピー
Section titled “計算行のコピー”- 手数料タブで「詳細コピー」ボタンをクリック
- コピー元の手数料ルールを選択
- 選択元の全計算行が現在のルールへ複製されます(
copyLinesFrom())
手数料の実行
Section titled “手数料の実行”- 手数料タブで「手数料作成」ボタンをクリック
- 開始日付(StartDate)を指定して実行
- 頻度タイプに応じて対象期間が自動決定され、計算結果が生成されます
- 実行後、「最新実行日」に開始日付が記録されます
項目リファレンス
Section titled “項目リファレンス”| 項目名 | カラム | 必須 | 型 | 説明 |
|---|---|---|---|---|
| 名称 | Name | 必須 | 文字列(60) | 手数料ルール名(識別子) |
| 説明 | Description | - | 文字列(255) | 補足説明 |
| 取引先/販売代理 | C_BPartner_ID | 必須 | 選択 | 手数料を受け取る取引先 |
| 通貨 | C_Currency_ID | 必須 | 選択 | 手数料の計算・支払通貨 |
| 料金 | C_Charge_ID | 条件付必須 | 選択 | 請求伝票の明細に使う料金 |
| 品目 | M_Product_ID | 条件付必須 | 選択 | 請求伝票の明細に使う品目 |
| 計算ベース | DocBasisType | 必須 | リスト | I=売上請求/O=受注/R=入金(既定 I) |
| 頻度タイプ | FrequencyType | 必須 | リスト | W=週次/M=月次/Q=四半期/Y=年次(既定 M) |
| 手数料詳細作成 | ListDetails | 必須 | チェック | 明細単位で内訳を残すか |
| 詳細コピー | CreateFrom | - | ボタン | 他ルールから計算行をコピー |
| 手数料作成 | Processing | - | ボタン | 手数料計算の実行 |
| 最新実行日 | DateLastRun | - | 日時 | 直近実行の開始日付 |
手数料詳細タブ
Section titled “手数料詳細タブ”| 項目名 | カラム | 必須 | 型 | 説明 |
|---|---|---|---|---|
| 明細番号 | Line | 必須 | 整数 | 10 刻みで自動採番 |
| 手数料のみの注文書/請求書 | CommissionOrders | 必須 | チェック | 受取先が担当者の伝票に限定 |
| 組織 | Org_ID | - | 選択 | 対象組織の限定 |
| 取引先グループ | C_BP_Group_ID | - | 選択 | 対象顧客グループの限定 |
| 取引先 | C_BPartner_ID | - | 選択 | 対象顧客の限定 |
| 品目カテゴリ | M_Product_Category_ID | - | 選択 | 対象商品カテゴリの限定 |
| 品目 | M_Product_ID | - | 選択 | 対象商品の限定 |
| 販売地域 | C_SalesRegion_ID | - | 選択 | 取引先住所の地域による限定 |
| 支払方法 | PaymentRule | - | リスト | 支払方法による限定 |
| 控除数量 | QtySubtract | 必須 | 数値 | 数量から差し引く値 |
| 掛算数量 | QtyMultiplier | 必須 | 数値 | 数量に掛ける単価 |
| 控除金額 | AmtSubtract | 必須 | 金額 | 金額から差し引く値 |
| 金額乗数 | AmtMultiplier | 必須 | 数値 | 金額に掛ける率 |
| 正数のみ | IsPositiveOnly | 必須 | チェック | マイナス手数料を発生させない |
業務フロー上の位置づけ
Section titled “業務フロー上の位置づけ”graph TD
A["受注伝票 / 売上請求伝票 / 入金"] --> B["手数料ルール<br/>C_Commission"]
B --> C["手数料詳細(計算行)<br/>C_CommissionLine"]
C --> D["手数料作成プロセス<br/>CommissionCalc"]
D --> E["手数料計算結果<br/>C_CommissionRun"]
E --> F["手数料金額<br/>C_CommissionAmt"]
F --> G["手数料詳細内訳<br/>C_CommissionDetail"]
E --> H["仕入請求伝票<br/>C_Invoice(APInvoice)"]
H --> I["支払処理"]
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 保存時に「料金または品目が必須」と出ます。
Section titled “Q. 保存時に「料金または品目が必須」と出ます。”MCommission.beforeSave() が C_Charge_ID と M_Product_ID の両方が未設定のレコードを拒否しているためです。手数料の支払は仕入請求伝票として発行され、その明細行に料金または品目が必要になります。手数料専用の料金(Charge)を 1 つ作っておくのが一般的です。
Q. 計算ベース(受注・売上請求・入金)で何が変わりますか?
Section titled “Q. 計算ベース(受注・売上請求・入金)で何が変わりますか?”対象取引と、取引を拾う伝票状態が変わります。
| 計算ベース | 対象 | 対象となる伝票状態 |
|---|---|---|
| 受注(O) | 受注伝票の明細 | 完了(CO)・締切(CL) |
| 売上請求(I) | 売上請求伝票の明細 | 完了(CO)・締切(CL)・記帳取消済(RE) |
| 入金(R) | 入金伝票 | 完了(CO)・締切(CL)・記帳取消済(RE) |
入金ベースは「回収できた分だけ手数料を払う」設計に、受注ベースは「受注時点で早めに支払う」設計に向きます。
Q. 対象期間はどう決まりますか?
Section titled “Q. 対象期間はどう決まりますか?”「手数料作成」実行時に指定した 開始日付 と、手数料ルールの 頻度タイプ から自動計算されます(CommissionCalc.setStartEndDate())。月次なら開始日付が属する月の初日〜末日、四半期・年次・週次も同様にその期間の始点と終点が求められます。開始日付を省略すると実行日が使われます。
Q. 同じ取引に複数の手数料を支払えますか?
Section titled “Q. 同じ取引に複数の手数料を支払えますか?”支払えます。手数料ルールは受取先ごとに作成するため、同一の受注・請求に対して「伝票入力者への手数料」「品目カテゴリ責任者への手数料」「取引先グループ担当者への手数料」を別々のルールとして並行運用できます。
Q. 「手数料詳細作成(ListDetails)」のチェックは何に影響しますか?
Section titled “Q. 「手数料詳細作成(ListDetails)」のチェックは何に影響しますか?”計算 SQL の粒度が変わります。チェックありなら伝票明細 1 行ごとに C_CommissionDetail レコードが作られ、どの取引が手数料の対象になったかを追跡できます。チェックなしの場合は通貨単位で集約(GROUP BY C_Currency_ID)され、内訳が残りません。監査性を重視するならチェックを推奨します。
Q. マイナスの手数料が出てしまいます。
Section titled “Q. マイナスの手数料が出てしまいます。”返品や貸方メモが対象期間に含まれると、金額がマイナスになることがあります。「正数のみ」(IsPositiveOnly)にチェックすると、(換算金額 − 控除金額)および(実績数量 − 控除数量)がマイナスになった場合に 0 として扱われ、マイナスの手数料が発生しなくなります。
- 販売手数料及びロイヤリティー計算結果の使い方
- 販売地域の使い方
- 受注伝票(Sales Order)の使い方
- 売上請求書(Sales Invoice)の使い方
- 仕入請求伝票(Purchase Invoice)の使い方
- 料金(Charge)の使い方
- 画面リファレンス: 販売手数料及びロイヤリティー計算
🛠 技術仕様(開発者向け)
販売手数料及びロイヤリティー計算はマスタ/ルール定義型のウィンドウ(AD_Window_ID: 207)で、ヘッダーが C_Commission、計算行が C_CommissionLine です。いずれも IsDeleteable=Y / IsHighVolume=N / AccessLevel=3(クライアント+組織レベル)。ビジネスロジックは MCommission(163行)と MCommissionLine(98行)が担い、実際の計算は独立したプロセスクラス CommissionCalc(454行)が実行します。伝票(Document)型ではないため DocAction / DocStatus は持たず、処理は Processing ボタンによるプロセス起動のみです。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MCommission {
+getLines() MCommissionLine[]
+copyLinesFrom(MCommission) int
+setDateLastRun(Timestamp) void
#beforeSave(boolean) boolean
}
class MCommissionLine {
<<model>>
}
class X_C_Commission {
<<generated>>
}
class PO {
<<abstract>>
}
class CommissionCalc {
<<SvrProcess>>
#doIt() String
#setStartEndDate() void
#getCommissionCalculationSQL(MCommissionLine) String
}
MCommission --|> X_C_Commission
X_C_Commission --|> PO
MCommission --> MCommissionLine : has many
CommissionCalc --> MCommission : reads rule
CommissionCalc --> MCommissionRun : creates
CommissionCalc --> MCommissionAmt : creates
CommissionCalc --> MCommissionDetail : creates
パッケージ: org.compiere.model / org.compiere.process
ソースファイル:
org.adempiere.base/src/org/compiere/model/MCommission.javaorg.adempiere.base/src/org/compiere/model/MCommissionLine.javaorg.adempiere.base.process/src/org/compiere/process/CommissionCalc.javaorg.adempiere.base.process/src/org/compiere/process/CommissionCopy.java(79行)
関連DBテーブル
Section titled “関連DBテーブル”C_Commission(手数料ルール)
Section titled “C_Commission(手数料ルール)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_Commission_ID | ID | PK | 手数料ID | 主キー |
| C_Commission_UU | UUID | N | UUID | |
| AD_Client_ID | Table Direct | Y | クライアント | default @#AD_Client_ID@ |
| AD_Org_ID | Table Direct | Y | 組織 | default @#AD_Org_ID@ |
| Name | String(60) | Y | 名称 | 識別子 |
| Description | String(255) | N | 説明 | |
| C_BPartner_ID | Search | Y | 取引先/販売代理 | 手数料の受取先 |
| C_Currency_ID | Table Direct | Y | 通貨 | 手数料通貨 |
| C_Charge_ID | Table Direct | N | 料金 | beforeSave で品目とのいずれか必須 |
| M_Product_ID | Search | N | 品目 | beforeSave で料金とのいずれか必須 |
| DocBasisType | List(1) | Y | 計算ベース | default I(I/O/R) |
| FrequencyType | List(1) | Y | 頻度タイプ | default M(W/M/Q/Y) |
| ListDetails | Yes-No | Y | 手数料詳細作成 | 明細粒度で内訳を保存 |
| CreateFrom | Button | N | 詳細コピー | CommissionCopy を起動 |
| Processing | Button | N | 手数料作成 | CommissionCalc を起動 |
| DateLastRun | Date+Time | N | 最新実行日 | null では上書きしない |
C_CommissionLine(手数料詳細=計算行)
Section titled “C_CommissionLine(手数料詳細=計算行)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_CommissionLine_ID | ID | PK | 計算行ID | 主キー |
| C_Commission_ID | Table Direct | Y | 手数料FK | 親(IsParent=Y) |
| Line | Integer | Y | 明細番号 | default はSQL採番(MAX+10) |
| CommissionOrders | Yes-No | Y | 手数料のみの注文書/請求書 | SalesRep 条件を付加 |
| Org_ID | Table | N | 組織 | 絞り込み条件 |
| C_BP_Group_ID | Table Direct | N | 取引先グループ | 絞り込み条件 |
| C_BPartner_ID | Search | N | 取引先 | 絞り込み条件 |
| M_Product_Category_ID | Table Direct | N | 品目カテゴリ | 絞り込み条件 |
| M_Product_ID | Search | N | 品目 | 絞り込み条件 |
| C_SalesRegion_ID | Table Direct | N | 販売地域 | 取引先住所経由で判定 |
| PaymentRule | List(1) | N | 支払方法 | 絞り込み条件 |
| QtySubtract | Number | Y | 控除数量 | |
| QtyMultiplier | Number | Y | 掛算数量 | |
| AmtSubtract | Amount | Y | 控除金額 | |
| AmtMultiplier | Number | Y | 金額乗数 | |
| IsPositiveOnly | Yes-No | Y | 正数のみ | マイナス値を 0 に丸める |
erDiagram
C_Commission ||--o{ C_CommissionLine : "calculation rules"
C_Commission ||--o{ C_CommissionRun : "runs"
C_CommissionLine ||--o{ C_CommissionAmt : "amount per line"
C_CommissionRun ||--o{ C_CommissionAmt : "amounts"
C_CommissionAmt ||--o{ C_CommissionDetail : "details"
C_Commission }o--|| C_BPartner : "paid to"
C_Commission }o--o| C_Charge : "invoice charge"
C_Commission }o--o| M_Product : "invoice product"
C_CommissionLine }o--o| C_SalesRegion : "region filter"
C_CommissionRun ||--o| C_Invoice : "AP invoice"
ビジネスロジック
Section titled “ビジネスロジック”MCommission.beforeSave()
Section titled “MCommission.beforeSave()”保存前の検証は 1 点のみです。
if (getC_Charge_ID() == 0 && getM_Product_ID() == 0) { log.saveError("FillMandatory", Msg.translate(getCtx(), "ChargeOrProductMandatory")); return false;}料金・品目のいずれも未設定の場合、ChargeOrProductMandatory メッセージで保存が失敗します。これは後工程の CommissionAPInvoice が請求明細を作れなくなるのを防ぐためのガードです。
MCommission.getLines()
Section titled “MCommission.getLines()”IsActive='Y' AND C_Commission_ID=? の条件で C_CommissionLine を Line, C_CommissionLine_ID 順に取得します。無効化された計算行は計算対象外になります。
MCommission.copyLinesFrom()
Section titled “MCommission.copyLinesFrom()”コピー元ルールの全計算行を PO.copyValues() で複製し、C_Commission_ID を自身に付け替えて保存します。保存に失敗した行があるとログに Line difference が出力されます。「詳細コピー」ボタン(CommissionCopy)から呼ばれます。
setDateLastRun() のオーバーライド
Section titled “setDateLastRun() のオーバーライド”null が渡された場合は super を呼ばず、既存の最新実行日を保持します。計算プロセスが失敗した際に実行履歴が消えないようにするための実装です。
CommissionCalc(手数料作成プロセス)の処理フロー
Section titled “CommissionCalc(手数料作成プロセス)の処理フロー”flowchart TD
A["doIt 開始"] --> B["setStartEndDate<br/>頻度タイプから期間を確定"]
B --> C["MCommissionRun を新規作成<br/>StartDate と説明をセット"]
C --> D["計算行ごとにループ"]
D --> E{"計算ベース"}
E -->|R 入金| F["getPaymentCommissionSQL<br/>DocStatus IN CL/CO/RE"]
E -->|O 受注| G["getOrderCommissionSQL<br/>DocStatus IN CL/CO"]
E -->|I 売上請求| H["getInvoiceCommissionSQL<br/>DocStatus IN CL/CO/RE"]
F --> I["getCommissionLineWhereClause<br/>絞り込み条件を付加"]
G --> I
H --> I
I --> J{"手数料詳細作成?"}
J -->|OFF| K["GROUP BY C_Currency_ID で集約"]
J -->|ON| L["明細1行ごとに取得"]
K --> M["MCommissionAmt を作成<br/>createDetail で内訳を登録"]
L --> M
M --> N["calculateCommission で金額算出"]
N --> O["m_com.setDateLastRun<br/>最新実行日を記録"]
対象期間の算出(setStartEndDate)
Section titled “対象期間の算出(setStartEndDate)”指定された開始日付(未指定なら実行時刻)を起点に、頻度タイプごとに期間を確定します。
| 頻度タイプ | コード | 期間の決まり方 |
|---|---|---|
| 週次 | W | 開始日付が属する週の始点〜終点 |
| 月次 | M | 開始日付が属する月の初日〜末日(既定値) |
| 四半期 | Q | 開始日付が属する四半期の初日〜末日 |
| 年次 | Y | 開始日付が属する年の初日〜末日 |
絞り込み条件の生成(getCommissionLineWhereClause)
Section titled “絞り込み条件の生成(getCommissionLineWhereClause)”計算行に設定された値のみが WHERE 句に追加されます。未設定の項目は条件になりません。
| 計算行の項目 | 生成される条件(概略) |
|---|---|
| 手数料のみの注文書/請求書 | h.SalesRep_ID を受取取引先に紐づくユーザーに限定 |
| 組織(Org_ID) | h.AD_Org_ID = <値> |
| 取引先 | h.C_BPartner_ID = <値> |
| 取引先グループ | h.C_BPartner_ID IN (グループ所属の取引先) |
| 販売地域 | h.C_BPartner_Location_ID IN (当該地域の住所) |
| 品目 | l.M_Product_ID = <値> |
| 品目カテゴリ | l.M_Product_ID IN (カテゴリ所属の品目) |
| 支払方法 | h.PaymentRule = '<値>' |
📌 ポイント: 販売地域の絞り込みは伝票ヘッダーの地域項目ではなく 取引先住所(
C_BPartner_Location) を経由して判定されます。取引先住所に販売地域が未設定だと、地域条件付きの計算行は 1 件も拾えません。
手数料額の計算(MCommissionAmt.calculateCommission)
Section titled “手数料額の計算(MCommissionAmt.calculateCommission)”内訳(C_CommissionDetail)の ConvertedAmt と ActualQty を合計したうえで、計算行のパラメータを適用します。
BigDecimal qty = getActualQty().subtract(cl.getQtySubtract());if (cl.isPositiveOnly() && qty.signum() < 0) qty = Env.ZERO;qty = qty.multiply(cl.getQtyMultiplier());
BigDecimal amt = getConvertedAmt().subtract(cl.getAmtSubtract());if (cl.isPositiveOnly() && amt.signum() < 0) amt = Env.ZERO;amt = amt.multiply(cl.getAmtMultiplier());
setCommissionAmt(amt.add(qty));拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”public class CustomCommissionValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof MCommissionLine) { MCommissionLine line = (MCommissionLine) po; if (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE) { // 例: 手数料率の上限を 20% に制限 if (line.getAmtMultiplier() != null && line.getAmtMultiplier().doubleValue() > 0.20) { throw new AdempiereException("金額乗数は 0.20(20%)以下にしてください"); } } } return null; }
@Override public String docValidate(PO po, int timing) { return null; // C_Commission は Document 型ではないため不要 }}計算ロジックそのものの差し替え
Section titled “計算ロジックそのものの差し替え”CommissionCalc は SvrProcess の派生クラスで、setStartEndDate() / getCommissionCalculationSQL() などが protected として公開されています。独自の期間区切り(決算期基準の月次など)や独自の対象取引 SQL が必要な場合は、CommissionCalc を継承したクラスを作り、AD_Process のクラス名を差し替えるのが最小改変の実装になります。コア側のソースを直接編集する必要はありません。
Callout
Section titled “Callout”C_Commission / C_CommissionLine の各カラムには標準の Callout が設定されていません(gw_column.tsv の callout 列がすべて空)。入力時の連動(例: 品目カテゴリを選ぶと既定の乗数をセット)を追加する場合は IColumnCallout を OSGi サービスとして登録します。
関連プロセス
Section titled “関連プロセス”| プロセス名 | 実装クラス | 説明 |
|---|---|---|
| 手数料作成(Generate Commission) | CommissionCalc(454行) | 対象期間の取引を集計し計算結果を生成 |
| 詳細コピー(Copy Lines) | CommissionCopy(79行) | 他の手数料ルールから計算行を複製 |
| 請求書作成(Create Invoice) | CommissionAPInvoice(114行) | 計算結果から仕入請求伝票を生成(計算結果画面のボタン) |
| 手数料計算明細レポート | レポート(RV_CommissionRunDetail) | 計算結果を受注/請求の内訳付きで出力 |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”販売手数料の計算式は業種ごとの差が大きく、標準の「乗数と控除」だけでは表現しきれない累進レートや複合条件が必要になることがあります。CommissionCalc の継承による計算ロジック拡張なら、コア改変なしで自社ルールを実現できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。