コンテンツにスキップ

iDempiere 見積依頼案件の使い方|購買管理 操作マニュアル・技術仕様

📖 購買管理の全体像: 購買管理の全体図 も合わせてご覧ください。

見積依頼案件(RfQ Topic)は、見積依頼(RfQ)を送る仕入先候補のリストを、案件(テーマ)単位で管理するマスタです。「事務用品」「金属加工」といった案件を作り、そこに見積依頼先を登録しておくと、見積依頼伝票を起票したときに一括で見積回答伝票を作成・招待できます。

📌 ポイント: 見積依頼案件は見積依頼伝票の前提となるマスタです。案件に依頼先を登録していないと、見積依頼伝票から仕入先へ一斉に依頼を出すことができません。

  • 案件(テーマ)単位での見積依頼先リストの管理
  • 依頼先(取引先・住所・担当者)の登録
  • 購読日付(SubscribeDate)・解除日付(OptOutDate)による依頼先の有効期間管理
  • 品目・品目カテゴリによる「この依頼先はこの品目だけ」という絞り込み設定
  • セルフサービス(IsSelfService)による仕入先自身からの登録・変更の許可
  • 印刷書式(AD_PrintFormat_ID)の指定

見積依頼案件は 3 階層のタブ構成です。

タブ名テーブル項目数役割
見積依頼案件C_RfQ_Topic7項目案件の基本情報(名称・説明・印刷書式)
見積依頼者C_RfQ_TopicSubscriber9項目案件に紐づく見積依頼先リスト
見積品目制限C_RfQ_TopicSubscriberOnly7項目依頼先ごとの対象品目/品目カテゴリの絞り込み

💡 ヒント: 「見積品目制限」タブに 1 件もレコードを登録しない場合、その依頼先は見積依頼伝票の全明細に対して回答を求められます(タブ説明に明記)。特定の品目だけ扱う仕入先には、制限レコードを登録して絞り込みます。

graph TD
    A["🚀 メニューから開く<br/>購買管理 > 見積依頼案件"] --> B["➕ 案件を新規作成<br/>名称・説明を入力"]
    B --> C["👥 見積依頼者タブで<br/>仕入先を登録"]
    C --> D{"品目を限定する?"}
    D -->|限定しない| E["✅ 全明細に回答を求める"]
    D -->|限定する| F["📦 見積品目制限タブで<br/>品目/品目カテゴリを登録"]
    E --> G["💾 保存"]
    F --> G
    G --> H["🧾 見積依頼伝票で<br/>この案件を指定"]
    H --> I["📧 見積回答伝票の作成・招待"]

メニューから開く 購買管理 > 見積依頼案件 案件を新規作成 名称・説明を入力 見積依頼者タブで 仕入先を登録 品目を限定する? 全明細に回答を求める 見積品目制限タブで 品目/品目カテゴリを登録 保存 見積依頼伝票で この案件を指定 見積回答伝票の作成・招待 限定しない 限定する

アクセス方法(メニューパス)

Section titled “アクセス方法(メニューパス)”

メニューから「購買管理 > 見積依頼案件」を開きます。

  1. 新規」ボタンをクリック
  2. 必須項目を入力:
    • 名称Name): 案件名(例: 事務用品調達
  3. 必要に応じて設定:
    • 説明Description
    • セルフサービスIsSelfService): 仕入先自身による登録・変更を許可する場合にチェック
    • 印刷書式AD_PrintFormat_ID): 見積依頼書の帳票レイアウト
  4. 保存」をクリック
  1. 見積依頼者」タブに移動
  2. 依頼先ごとにレコードを追加:
    • 取引先C_BPartner_ID): 仕入先(必須)
    • 取引先住所C_BPartner_Location_ID): 送付先住所(必須)
    • ユーザーAD_User_ID): 担当者(メール送信先として使用)
    • 購読日付SubscribeDate): 依頼対象に加えた日付
    • 解除日付OptOutDate): 依頼対象から外した日付
  3. 保存」をクリック

⚠️ 注意: 依頼先を外す場合は、レコードを削除するのではなく 解除日付(OptOutDate を設定するか「有効」チェックを外す運用が推奨されます。過去の見積依頼との関係を保ったまま除外できます。

  1. 対象の見積依頼者を選択した状態で「見積品目制限」タブに移動
  2. 制限レコードを追加:
    • 品目M_Product_ID): 特定品目に限定する場合
    • 品目カテゴリM_Product_Category_ID): カテゴリ単位で限定する場合
    • 説明: 制限の理由など
  3. 複数登録すると、そのいずれかに該当する明細が対象になります
項目名必須説明
クライアント必須選択テナント
組織必須選択組織
名称必須文字列案件名
説明-文字列案件の説明
有効必須チェックレコードの有効フラグ
セルフサービス必須チェックセルフサービスでの登録・変更を許可
印刷書式-選択帳票レイアウト(既定 0)
項目名必須説明
見積依頼案件必須選択親の案件
取引先必須検索見積依頼先の仕入先
取引先住所必須選択依頼先住所
ユーザー-選択依頼先の担当者
購読日付-日付依頼対象に加えた日付
解除日付-日付依頼対象から外した日付
有効必須チェック有効フラグ
項目名必須説明
見積依頼者情報必須選択親の見積依頼者
品目-検索対象品目
品目カテゴリ-選択対象品目カテゴリ
説明-文字列補足
有効必須チェック有効フラグ

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

Q. 見積品目制限を登録しないとどうなりますか?

Section titled “Q. 見積品目制限を登録しないとどうなりますか?”

その見積依頼者は、見積依頼伝票の全明細に対して回答を求められます(タブ説明: “If no product / category is entered, the subscriber is requested to answer requests for all lines in a RfQ”)。特定品目だけを扱う仕入先には制限レコードを登録してください。

Q. 品目とカテゴリの両方を登録できますか?

Section titled “Q. 品目とカテゴリの両方を登録できますか?”

登録できます。MRfQTopicSubscriber.isIncluded(int M_Product_ID) が、その依頼者に紐づく制限レコード(C_RfQ_TopicSubscriberOnly)を走査して、指定品目が対象かどうかを判定します。品目そのものの一致に加え、品目カテゴリでの一致も対象になります。

Q. 依頼先を一時的に除外したいときは?

Section titled “Q. 依頼先を一時的に除外したいときは?”

「有効」チェックを外すか、解除日付(OptOutDate)を設定します。レコードを削除すると履歴が失われるため、運用上は無効化を推奨します。

Q. セルフサービスとは何ですか?

Section titled “Q. セルフサービスとは何ですか?”

IsSelfService は「セルフサービス経由での登録・変更を許可する」フラグです。仕入先自身がポータルから見積依頼案件の購読を管理する運用を想定した項目で、案件・依頼者の双方に用意されています。

Q. 案件を作らずに見積依頼はできますか?

Section titled “Q. 案件を作らずに見積依頼はできますか?”

見積依頼伝票(C_RfQ)は見積依頼案件(C_RfQ_Topic_ID)が必須項目です。まず案件を作成し、依頼先を登録してから見積依頼伝票を起票してください。

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

見積依頼案件は 3 つのテーブルで構成されます。C_RfQ_Topic(“Topic for Request for Quotations”、アクセスレベル 3)、C_RfQ_TopicSubscriber(“Request for Quotation Topic Subscriber”、アクセスレベル 3)、C_RfQ_TopicSubscriberOnly(“Include Subscriber only for certain products or product categories”、アクセスレベル 2)です。モデルクラスは MRfQTopic(108行)、MRfQTopicSubscriber(140行)、MRfQTopicSubscriberOnly(67行)で、いずれも Document 型ではないマスタ系クラスです。

classDiagram
    class MRfQTopic {
        +getSubscribers() MRfQTopicSubscriber[]
    }
    class MRfQTopicSubscriber {
        +getRestrictions(boolean requery) MRfQTopicSubscriberOnly[]
        +isIncluded(int M_Product_ID) boolean
    }
    class MRfQTopicSubscriberOnly {
    }
    class X_C_RfQ_Topic {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    MRfQTopic --|> X_C_RfQ_Topic
    X_C_RfQ_Topic --|> PO
    MRfQTopic --> MRfQTopicSubscriber : has many
    MRfQTopicSubscriber --> MRfQTopicSubscriberOnly : has many
    MRfQTopicSubscriber --> MRfQResponse : invited to

+getSubscribers() MRfQTopicSubscriber[] +getRestrictions(boolean requery) MRfQTopicSubscriberOnly[] +isIncluded(int M_Product_ID) boolean <> <> > X_C_RfQ_Topic X_C_RfQ_Topic --

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

カラム名必須説明備考
C_RfQ_Topic_IDIDPK案件ID主キー
AD_Client_IDTable DirectYクライアントdefault @#AD_Client_ID@
AD_Org_IDTable DirectY組織default @#AD_Org_ID@
NameStringY名称
DescriptionStringN説明
IsSelfServiceYes-NoYセルフサービス
AD_PrintFormat_IDTable DirectN印刷書式default 0
IsActiveYes-NoY有効default Y

C_RfQ_TopicSubscriber(見積依頼者)

Section titled “C_RfQ_TopicSubscriber(見積依頼者)”
カラム名必須説明備考
C_RfQ_TopicSubscriber_IDIDPK依頼者ID主キー
C_RfQ_Topic_IDTable DirectY案件FK更新不可
C_BPartner_IDSearchY取引先
C_BPartner_Location_IDTable DirectY取引先住所
AD_User_IDTable DirectN担当者招待メールの宛先
SubscribeDateDateN購読日付
OptOutDateDateN解除日付
IsActiveYes-NoY有効default Y

C_RfQ_TopicSubscriberOnly(見積品目制限)

Section titled “C_RfQ_TopicSubscriberOnly(見積品目制限)”
カラム名必須説明
C_RfQ_TopicSubscriberOnly_IDIDPK制限ID
C_RfQ_TopicSubscriber_IDTable DirectY依頼者FK
M_Product_IDSearchN対象品目
M_Product_Category_IDTable DirectN対象品目カテゴリ
DescriptionStringN説明
IsActiveYes-NoY有効
erDiagram
    C_RfQ_Topic ||--o{ C_RfQ_TopicSubscriber : "subscribers"
    C_RfQ_TopicSubscriber ||--o{ C_RfQ_TopicSubscriberOnly : "product restrictions"
    C_RfQ_TopicSubscriber }o--|| C_BPartner : "vendor"
    C_RfQ_TopicSubscriberOnly }o--o| M_Product : "product"
    C_RfQ_TopicSubscriberOnly }o--o| M_Product_Category : "category"
    C_RfQ_Topic ||--o{ C_RfQ : "used by"
    C_RfQ_TopicSubscriber ||--o{ C_RfQResponse : "responds"

product restrictions used by

案件に紐づく見積依頼者(C_RfQ_TopicSubscriber)を取得します。見積依頼伝票の「見積回答要求及び見積回答伝票作成」処理は、このリストを起点に見積回答伝票(C_RfQResponse)を生成します。

MRfQTopicSubscriber.isIncluded(int M_Product_ID)

Section titled “MRfQTopicSubscriber.isIncluded(int M_Product_ID)”

指定した品目がその依頼者の対象範囲に含まれるかを判定します。判定には getRestrictions(boolean requery) で取得した制限レコード(C_RfQ_TopicSubscriberOnly)を使用します。

flowchart TD
    A["isIncluded(M_Product_ID)"] --> B["getRestrictions() で制限を取得"]
    B --> C{"制限レコードが 0 件?"}
    C -->|Yes| D["対象に含める<br/>(全明細に回答を求める)"]
    C -->|No| E{"品目 または 品目カテゴリが<br/>いずれかの制限に一致?"}
    E -->|Yes| D
    E -->|No| F["対象外"]

isIncluded(M_Product_ID) getRestrictions() で制限を取得 制限レコードが 0 件? 対象に含める (全明細に回答を求める) 品目 または 品目カテゴリが いずれかの制限に一致? 対象外

MRfQTopicSubscriberOnly(67行)は制限レコードを表すだけの薄いクラスで、独自のビジネスロジックは持ちません。判定ロジックは依頼者側(MRfQTopicSubscriber)に集約されています。

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

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

いずれも Document 型ではないため、modelChange() で制御します。

public class CustomRfQTopicValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (po instanceof MRfQTopicSubscriber
&& (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) {
MRfQTopicSubscriber sub = (MRfQTopicSubscriber) po;
// 例: 解除日付が購読日付より前にならないようにする
if (sub.getOptOutDate() != null && sub.getSubscribeDate() != null
&& sub.getOptOutDate().before(sub.getSubscribeDate())) {
throw new AdempiereException("解除日付は購読日付以降にしてください");
}
}
return null;
}
}

C_RfQ_Topic / C_RfQ_TopicSubscriber / C_RfQ_TopicSubscriberOnly の各カラムには標準の Callout(AD_Column.Callout)が設定されていません。取引先選択時に住所・担当者を自動補完したい場合は、独自 Callout を AD_Column に登録します。

「どの仕入先に見積を出すか」の判定を独自条件(過去実績・評価点など)で行いたい場合は、isIncluded() の結果を利用する側(見積回答伝票の生成処理)をカスタムプロセスとして実装するのが安全です。

プロセス名説明
Create and Invite見積回答伝票を作成し、仕入先へ招待メールを送信
Invite and Remind仕入先へ見積回答の招待・催促メールを送信

見積依頼先の選定基準(過去の納期実績・品質評価・与信)を仕組みに落とし込むと、相見積の質が安定します。 依頼先の自動抽出や仕入先ポータル連携は、OSGi プラグインで無理なく追加できます。

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

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