iDempiere 営業ステージの使い方|販売管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 販売管理の全体像: 販売管理の全体図 も合わせてご覧ください。
営業ステージは、商談(営業案件)の進捗段階を定義するマスタです。各ステージに「可能性(%)」を持たせておくことで、営業案件でステージを選択したときに成約可能性が自動セットされ、パイプラインの加重見込金額を一貫した基準で算出できます。
📌 ポイント: ステージに設定した「可能性(%)」は、営業案件側で Callout(
CalloutOpportunity.salesStage)により自動転記されます。ステージ設計の段階で可能性の数値を決めておくことが、パイプライン精度の要になります。
営業ステージでできること
Section titled “営業ステージでできること”- 商談の進捗段階(初回接触・提案・見積提示・クロージング等)の定義
- ステージごとの成約可能性(%)の設定
- クローズステータス(
IsClosed)による「終了ステージ」の識別 - 成約フラグ(
IsWon)による「受注」と「失注」の区別 - 当該ステージに滞留している営業案件の一覧確認(営業案件タブ)
- ステージ名称の多言語化(翻訳タブ)
営業ステージはシンプルな3タブ構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 営業ステージ | C_SalesStage | 約9項目 | ステージの基本定義(可能性・クローズ・成約) |
| 営業案件(オポチュニティ) | C_Opportunity | 約17項目 | 当該ステージにある営業案件の一覧・編集 |
| 翻訳 | C_SalesStage_Trl | 約8項目 | 多言語対応の翻訳 |
💡 ヒント: 営業案件タブは参照・編集用の子タブです。案件そのものの登録・運用は 営業案件(オポチュニティ) から行うほうが、見積/受注タブや営業活動タブも併せて扱えるため実務的です。
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>販売管理 > 見込顧客管理 > 営業ステージ"] --> B["➕ 新規でステージを登録<br/>(検索キー・名称)"]
B --> C["📊 可能性(%)を入力<br/>(例: 提案=30、見積提示=60)"]
C --> D{終了ステージか?}
D -->|進行中| E["クローズステータス = OFF"]
D -->|受注で終了| F["クローズステータス = ON<br/>Won = ON<br/>可能性 = 100"]
D -->|失注で終了| G["クローズステータス = ON<br/>Won = OFF<br/>可能性 = 0"]
E --> H["💾 保存"]
F --> H
G --> H
H --> I["🔗 営業案件でステージを選択<br/>→ 可能性(%)が自動セット"]
アクセス方法
Section titled “アクセス方法”メニューから「販売管理 > 見込顧客管理 > 営業ステージ」を開きます。
- ツールバーの「新規」ボタンをクリック
- 基本情報を入力:
- 検索キー: ステージの一意コード(例:
20-PROPOSAL。並び順を意識した番号プレフィクスが便利です) - 名称: ステージ名(例:
提案中) - 説明: ステージの定義や判定基準(任意、255文字まで)
- 可能性: 成約可能性(%)(必須。例:
30)
- 検索キー: ステージの一意コード(例:
- 終了ステージの場合は追加設定:
- クローズステータス: 商談が終了する段階の場合にチェック
- Won: 受注(成約)で終了するステージの場合にチェック
- 「保存」をクリック
⚠️ 注意: 「可能性」は必須項目です。ここに入力した値が営業案件の可能性(%)の初期値として使われ、案件額×可能性(
WeightedAmt)の計算根拠になります。空欄のまま運用すると加重見込が正しく積み上がりません。
ステージ設計の例
Section titled “ステージ設計の例”| 検索キー | 名称 | 可能性 | クローズ | Won |
|---|---|---|---|---|
| 10-LEAD | 初回接触 | 10 | - | - |
| 20-PROPOSAL | 提案中 | 30 | - | - |
| 30-QUOTE | 見積提示 | 60 | - | - |
| 40-NEGOTIATION | 最終交渉 | 80 | - | - |
| 90-WON | 受注 | 100 | ✔ | ✔ |
| 99-LOST | 失注 | 0 | ✔ | - |
項目リファレンス
Section titled “項目リファレンス”営業ステージタブ
Section titled “営業ステージタブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| クライアント | 必須 | 選択 | テナント(既定値は現在のクライアント) |
| 組織 | 必須 | 選択 | 組織(既定値は現在の組織) |
| 検索キー | 必須 | 文字列(60) | ステージの一意コード |
| 名称 | 必須 | 文字列(60) | ステージ名 |
| 説明 | - | 文字列(255) | ステージの補足説明 |
| 可能性 | 必須 | 金額 | 成約可能性(%)。営業案件へ自動転記される |
| クローズステータス | 必須 | チェック | 商談が終了する段階か(既定値 N) |
| Won | - | チェック | 受注(成約)で終了するステージか |
| 有効 | 必須 | チェック | レコードが有効か(既定値 Y) |
全項目は 画面リファレンス: 営業ステージ を参照してください。
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. ステージを変更したら営業案件の「可能性」が書き換わりました
Section titled “Q. ステージを変更したら営業案件の「可能性」が書き換わりました”営業案件の営業ステージ欄には Callout(CalloutOpportunity.salesStage)が設定されており、選択したステージの Probability を SQL で取得して案件の可能性欄へ転記します。自動セット後に案件ごとに手動で上書きすることは可能です。
Q. 既存ステージの「可能性」を変更すると、過去の案件にも反映されますか?
Section titled “Q. 既存ステージの「可能性」を変更すると、過去の案件にも反映されますか?”反映されません。Callout はユーザーがステージを選択した時点で値を転記する仕組みのため、既に保存済みの案件の可能性は変わりません。過去案件も揃えたい場合は、案件側で再度ステージを選び直すか、一括更新の仕組みを別途用意する必要があります。
Q. 「クローズステータス」と「Won」はどう使い分けますか?
Section titled “Q. 「クローズステータス」と「Won」はどう使い分けますか?”「クローズステータス」は商談が終了したかどうか(進行中か否か)、「Won」は終了の結果が受注(成約)だったかを表します。したがって失注ステージは「クローズステータス=ON / Won=OFF」、受注ステージは「両方 ON」となります。なお IsWon のみ必須ではないため、進行中ステージでは空のままで構いません。
Q. 使わなくなったステージを削除できますか?
Section titled “Q. 使わなくなったステージを削除できますか?”C_SalesStage は削除可能なテーブルですが、営業案件から参照されているステージは参照整合性により削除できません。運用中のステージを整理する場合は「有効」チェックを外して無効化してください。無効化すると新規案件で選択できなくなり、既存案件のデータはそのまま保持されます。
🛠 技術仕様(開発者向け)
営業ステージは C_SalesStage(テーブル名: Sales Stage、説明: Stages of the sales process、アクセスレベル 3 = Client+Org、削除可、高ボリュームではない)に格納されるマスタです。専用のビジネスロジッククラス(MSalesStage)は存在せず、自動生成クラス X_C_SalesStage(281行)のみが提供されます。したがって beforeSave / afterSave などのカスタムロジックはコア側に実装されていません。
営業ステージ側にロジックが無い一方、値を利用する側(営業案件)に Callout が置かれている点がこのマスタの特徴です。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class X_C_SalesStage {
<<generated>>
+setProbability(BigDecimal)
+getProbability() BigDecimal
+setIsClosed(boolean)
+isClosed() boolean
+setIsWon(boolean)
+isWon() boolean
+getKeyNamePair() KeyNamePair
}
class PO {
<<abstract>>
}
class MOpportunity {
+beforeSave() boolean
}
class CalloutOpportunity {
+salesStage(...) String
}
X_C_SalesStage --|> PO
MOpportunity --> X_C_SalesStage : references
CalloutOpportunity --> X_C_SalesStage : reads Probability
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/X_C_SalesStage.java(生成クラス)
Callout: org.adempiere.base.callout/src/org/compiere/model/CalloutOpportunity.java
関連DBテーブル
Section titled “関連DBテーブル”C_SalesStage(営業ステージ)
Section titled “C_SalesStage(営業ステージ)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_SalesStage_ID | ID | PK | 営業ステージID | 主キー |
| C_SalesStage_UU | UUID(36) | N | UUID | |
| AD_Client_ID | TableDirect | Y | クライアント | 既定値 @#AD_Client_ID@ |
| AD_Org_ID | TableDirect | Y | 組織 | 既定値 @#AD_Org_ID@ |
| Value | String(60) | Y | 検索キー | 識別子 |
| Name | String(60) | Y | 名称 | 識別子 |
| Description | String(255) | N | 説明 | |
| Probability | Amount(10) | Y | 可能性(%) | 営業案件へ Callout で転記 |
| IsClosed | YesNo | Y | クローズステータス | 既定値 N |
| IsWon | YesNo | N | 成約(Won) | |
| IsActive | YesNo | Y | 有効 | 既定値 Y |
| テーブル | 役割 | 備考 |
|---|---|---|
| C_Opportunity | 営業案件 | C_SalesStage_ID で参照。Callout 設定列 |
| C_SalesStage_Trl | 翻訳 | Name / Description の多言語化 |
erDiagram
C_SalesStage ||--o{ C_Opportunity : "stage of"
C_SalesStage ||--o{ C_SalesStage_Trl : "translations"
C_Opportunity ||--o{ C_ContactActivity : "activities"
C_Opportunity }o--|| C_BPartner : "customer"
C_Opportunity }o--o| C_Order : "converted to"
ビジネスロジック
Section titled “ビジネスロジック”- モデルクラスのカスタムロジックなし:
C_SalesStageには M クラスが存在せず、X_C_SalesStageがPOを直接継承します。保存時の追加検証は行われません(可能性の 0〜100 範囲チェックなども標準では未実装です)。 CalloutOpportunity.salesStage: 営業案件のC_SalesStage_ID列に登録された Callout です。処理はSELECT Probability FROM C_SalesStage WHERE C_SalesStage_ID = ?を実行し、取得値をmTab.setValue("Probability", probability)で案件の可能性欄へセットします。isCalloutActive()または値が null の場合は何もしません。MOpportunity.beforeSave(): ステージそのものではなく案件側の処理ですが、C_Order_IDが設定されている場合に受注伝票のGrandTotalをOpportunityAmtへ上書きします。ステージ設計と併せて把握しておくべき挙動です。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”ステージ遷移の制約や可能性の値域チェックは Model Validator で追加できます。
public class CustomSalesStageValidator implements ModelValidator { @Override public int modelChange(PO po, int type) throws Exception { if (po instanceof X_C_SalesStage) { X_C_SalesStage stage = (X_C_SalesStage) po; if (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE) { // 例: 可能性は 0〜100 に限定 BigDecimal p = stage.getProbability(); if (p != null && (p.signum() < 0 || p.compareTo(Env.ONEHUNDRED) > 0)) { throw new AdempiereException("可能性は0〜100の範囲で入力してください"); } // 例: Won を立てるならクローズも必須 if (stage.isWon() && !stage.isClosed()) { throw new AdempiereException("Won のステージはクローズステータスも ON にしてください"); } } } return null; }}Callout の拡張
Section titled “Callout の拡張”C_Opportunity.C_SalesStage_ID 列の Callout 欄には標準で org.compiere.model.CalloutOpportunity.salesStage が設定されています。独自 Callout を追加する場合は、AD_Column の Callout 欄にセミコロン区切りで追記します(既存の記述を消さないでください)。ステージ選択時に予定クローズ日付を自動計算する、といった拡張に向いています。
関連プロセス
Section titled “関連プロセス”営業ステージウィンドウには標準の関連プロセス(ボタン起動のプロセス)は定義されていません。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”営業ステージの遷移ルールやパイプライン集計の基準は、Model Validator と独自 Callout でコア改変なしに業務へ合わせられます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。