Skip to content

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

This content is not available in your language yet.

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

見積依頼伝票(RfQ: Request for Quotation)は、複数の仕入先へ同じ条件で見積を依頼し、集まった回答を比較・ランク付けして発注につなげるための伝票です。見積依頼案件(RfQ Topic)に登録した依頼先へ一斉に依頼を出し、回答(見積回答伝票)を横並びで評価できます。

📌 ポイント: 見積依頼伝票は「明細(品目)」の下にさらに「数量(Qty)」の階層を持ちます。同じ品目について 100 個・500 個・1,000 個の 3 段階で単価を聞くといった数量別見積が、標準機能で扱えます。

  • 見積依頼案件(C_RfQ_Topic_ID)に基づく依頼先への一斉見積依頼
  • 品目ごと・数量ごとの見積依頼(1 明細に複数の数量段階)
  • 基準価格(BenchmarkPrice)との比較
  • 回答受付の可否(IsRfQResponseAccepted)・招待仕入先限定(IsInvitedVendorsOnly)の制御
  • 見積タイプ(QuoteType)による回答粒度の指定
  • 見積回答伝票の一括作成と招待メール送信(PublishRfQ
  • 回答のランク付け(RankRfQ)と採用提示額(BestResponseAmt)の反映
  • 採用結果からの発注伝票作成(CreatePO)・受注伝票作成(CreateSO
  • 既存の見積依頼伝票からの明細コピー(CopyLines
  • 見積依頼と回答の一括クローズ(Processing

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

タブ名テーブル項目数役割
見積依頼伝票C_RfQ30項目ヘッダー(案件・見積タイプ・回答日付・各種処理ボタン)
見積依頼伝票明細C_RfQLine11項目見積対象の品目・作業日程
見積依頼伝票明細数量C_RfQLineQty13項目数量段階ごとの依頼条件・基準価格・採用結果
graph TD
    subgraph "見積依頼伝票(Window ID: 315)"
        T1["📄 見積依頼伝票<br/>C_RfQ<br/>30項目"]
        T2["📦 見積依頼伝票明細<br/>C_RfQLine<br/>11項目"]
        T3["🔢 見積依頼伝票明細数量<br/>C_RfQLineQty<br/>13項目"]
    end
    T1 --> T2
    T2 --> T3

見積依頼伝票(Window ID: 315) 見積依頼伝票 C_RfQ 30項目 見積依頼伝票明細 C_RfQLine 11項目 見積依頼伝票明細数量 C_RfQLineQty 13項目

💡 ヒント: 数量段階を 1 つしか使わない場合でも、明細数量タブに 1 行は必要です。数量タブが空だと、仕入先に提示する数量が決まらず回答を受け取れません。

graph TD
    A["🚀 メニューから開く<br/>購買管理 > 見積依頼伝票"] --> B["➕ ヘッダーを入力<br/>見積依頼案件・見積依頼タイプ<br/>回答日付・通貨・社内担当者"]
    B --> C["📦 明細タブで品目を登録"]
    C --> D["🔢 明細数量タブで<br/>数量段階と基準価格を登録"]
    D --> E["📧 見積回答要求及び<br/>見積回答伝票作成"]
    E --> F["⏳ 仕入先が回答を入力<br/>(見積回答伝票)"]
    F --> G["🏅 見積回答をランク付けする"]
    G --> H{"採用先を決定"}
    H -->|購買| I["🧾 発注伝票作成"]
    H -->|販売転売| J["🛒 受注伝票作成"]
    I --> K["🔒 見積依頼クローズ処理"]
    J --> K

メニューから開く 購買管理 > 見積依頼伝票 ヘッダーを入力 見積依頼案件・見積依頼タイプ 回答日付・通貨・社内担当者 明細タブで品目を登録 明細数量タブで 数量段階と基準価格を登録 見積回答要求及び 見積回答伝票作成 ⏳ 仕入先が回答を入力 (見積回答伝票) 見積回答をランク付けする 採用先を決定 発注伝票作成 受注伝票作成 見積依頼クローズ処理 購買 販売転売

⚠️ 注意: 見積タイプに「総額のみ(Quote Total Amt Only)」を指定した場合、各明細に登録できる数量は 1 件までです。2 件以上の数量段階を登録すると、回答の完成チェック時にエラーとなります。

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

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

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

  1. 新規」ボタンをクリック
  2. ヘッダー必須項目を入力:
    • 伝票番号DocumentNo) / 名称Name
    • 見積依頼案件C_RfQ_Topic_ID): 依頼先リストを持つ案件
    • 見積依頼タイプQuoteType): 回答の粒度(既定値は S
    • 回答日付DateResponse): 回答期限
    • 通貨C_Currency_ID) / 社内担当者SalesRep_ID
  3. 回答条件を設定:
    • 見積総量IsQuoteAllQty): すべての数量について回答を求める
    • 見積総額IsQuoteTotalAmt): 総額での回答を認める
    • 招待仕入先のみIsInvitedVendorsOnly): 招待した仕入先だけ回答可
    • 回答受付IsRfQResponseAccepted、既定 Y): 回答の受付可否
  4. 必要に応じて 作業開始(予定)日納品(予定)日数作業完了(予定)日 を入力
  5. 保存」をクリック

💡 ヒント: 作業日程の 3 項目(開始日・日数・完了日)は、2 つ入力すれば残り 1 つが自動計算されます。開始日と日数を入れれば完了日が、開始日と完了日を入れれば日数が埋まります。

  1. 見積依頼伝票明細」タブで見積対象を登録:
    • 明細番号Line、既定: 最大値+10)
    • 品目M_Product_ID
    • 説明 / コメント: 仕様や条件の記述
    • 明細単位の 作業開始(予定)日 / 納品(予定)日数 / 作業完了(予定)日
  2. 見積依頼伝票明細数量」タブで数量段階を登録:
    • 数量単位C_UOM_ID) / 数量Qty、既定 1)
    • 基準価格BenchmarkPrice): 回答を比較する基準(必須)
    • 見積依頼数量IsRfQQty、既定 Y): 見積回答伝票の生成対象にする
    • 購入数量IsPurchaseQty): 発注伝票作成時に使用する数量
    • 申入れ数量IsOfferQty): 受注伝票(顧客への提示)で使用する数量
    • マージン %Margin): 転売時の利益率
ボタンカラム役割
見積回答要求及び見積回答伝票作成PublishRfQ見積回答伝票を作成し、依頼先へ招待メールを送信
見積回答をランク付けするRankRfQ回答内容に基づきランキングを算出し、採用提示額を更新
既存伝票から明細行をコピーするCopyLines別の見積依頼伝票から明細をコピー
発注伝票作成CreatePO採用した回答から仕入先向け発注伝票を作成
受注伝票作成CreateSO顧客向けの受注伝票/見積を作成
見積依頼クローズ処理Processing見積依頼伝票と関連する見積回答伝票をクローズ

見積依頼伝票タブ(主要項目)

Section titled “見積依頼伝票タブ(主要項目)”
項目名必須説明
伝票番号必須文字列伝票の採番
名称必須文字列見積依頼の名称
見積依頼案件必須選択依頼先リストを持つ案件
見積依頼タイプ必須リスト回答の粒度(既定 S
回答日付必須日付回答期限
通貨必須選択見積通貨
社内担当者必須選択担当者
見積総量必須チェックすべての数量について回答を求める
見積総額必須チェック総額のみの回答を認める
招待仕入先のみ必須チェック招待した仕入先だけ回答可
回答受付必須チェック回答の受付可否(既定 Y)
作業開始(予定)日-日付作業開始予定
納品(予定)日数-整数納品までの日数
作業完了(予定)日-日付作業完了予定
取引先 / 取引先住所-検索転売先の顧客(受注伝票作成時に使用)
マージン %-数値転売時の利益率
処理済み必須チェック処理済みフラグ
項目名必須説明
数量単位必須選択数量の単位
数量必須数量見積を求める数量(既定 1)
基準価格必須単価回答を比較する基準価格
見積依頼数量必須チェック見積回答伝票生成の対象(既定 Y)
購入数量必須チェック発注伝票で使用する数量
申入れ数量必須チェック受注伝票で使用する数量
採用提示額-金額ランク付けで更新される最良回答額
申入れ額-金額顧客への提示額
マージン %-数値利益率

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

Q. 「総額のみ」の見積タイプでエラーになります

Section titled “Q. 「総額のみ」の見積タイプでエラーになります”

MRfQ.checkQuoteTotalAmtOnly() は、見積タイプが「総額のみ(QUOTETYPE_QuoteTotalOnly)」の場合に全明細を走査し、1 明細に数量が 2 件以上登録されているとエラーメッセージを返します(メッセージには該当明細の行番号と数量件数が含まれます)。総額のみの依頼では、各明細の数量を 1 件に絞ってください。

Q. 見積依頼タイプの 3 種類の違いは?

Section titled “Q. 見積依頼タイプの 3 種類の違いは?”

MRfQ は 3 つの判定メソッドを持ちます。

判定メソッド定数意味
isQuoteTotalAmtOnly()QUOTETYPE_QuoteTotalOnly総額のみの回答
isQuoteSelectedLines()QUOTETYPE_QuoteSelectedLines選択した明細のみ回答
isQuoteAllLines()QUOTETYPE_QuoteAllLinesすべての明細に回答

回答の完成チェック(見積回答伝票の checkComplete())は、このタイプと IsQuoteAllQty / IsQuoteTotalAmt の組み合わせで検証内容を切り替えます。

Q. 作業完了日が勝手に変わります

Section titled “Q. 作業完了日が勝手に変わります”

MRfQ.beforeSave() が作業日程の 3 項目を相互補完しているためです。

  1. 開始日あり+日数が 0 以外 → 完了日 = 開始日 + 日数
  2. 開始日あり+日数が 0+完了日あり → 日数 = 開始日と完了日の差
  3. 開始日なし+日数が 0 以外+完了日あり → 開始日 = 完了日 − 日数

意図した日程にならない場合は、どの 2 項目を「入力値」として扱いたいかを整理してください。

Q. 回答が返ってこない仕入先を確認するには?

Section titled “Q. 回答が返ってこない仕入先を確認するには?”

標準レポート「RfQ Unanswered(未回答の見積依頼)」が、クローズ・処理済みでない見積依頼のうち、回答が「完成」になっていないものを一覧します。催促は「Invite and Remind」プロセスで送信できます。

ヘッダーの「見積依頼クローズ処理」ボタン(Processing)を実行します。見積依頼伝票と、それに紐づく見積回答伝票がまとめてクローズされます(プロセス “Close RfQ”)。

Q. 採用提示額(BestResponseAmt)はいつ入りますか?

Section titled “Q. 採用提示額(BestResponseAmt)はいつ入りますか?”

「見積回答をランク付けする」(RankRfQ、プロセス “Rank Responses”)の実行時です。完成した回答を数量ごとに比較してランキングを付け、最良の回答額を数量レコードの BestResponseAmt に反映します。無効な回答はランク 999 として扱われます。

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

見積依頼伝票は C_RfQ(“Request for Quotation”)、C_RfQLine(“Request for Quotation Line”)、C_RfQLineQty(“Request for Quotation Line Quantity”)の 3 テーブルで構成され、いずれもアクセスレベル 1(組織)です。モデルクラスは MRfQ(320行)、MRfQLine(271行)、MRfQLineQty(224行)です。DocStatus / DocAction を持たないプロセス実行型の伝票で、状態管理は Processed フラグと各種ボタンで行います。

classDiagram
    class MRfQ {
        +get(int C_RfQ_ID) MRfQ
        +getLines() MRfQLine[]
        +getResponses(boolean activeOnly, boolean completedOnly) MRfQResponse[]
        +isQuoteTotalAmtOnly() boolean
        +isQuoteSelectedLines() boolean
        +isQuoteAllLines() boolean
        +checkQuoteTotalAmtOnly() String
        #beforeSave(boolean) boolean
    }
    class MRfQLine {
        +getQtys() MRfQLineQty[]
    }
    class MRfQLineQty {
        +get(ctx, C_RfQLineQty_ID, trxName) MRfQLineQty
        +getUomName() String
        +getResponseQtys(boolean onlyValidAmounts) MRfQResponseLineQty[]
    }
    class X_C_RfQ {
        <<generated>>
    }
    class PO {
        <<abstract>>
    }
    MRfQ --|> X_C_RfQ
    X_C_RfQ --|> PO
    MRfQ --> MRfQLine : has many
    MRfQLine --> MRfQLineQty : has many
    MRfQ --> MRfQResponse : responses
    MRfQ --> MRfQTopic : based on

+get(int C_RfQ_ID) MRfQ +getLines() MRfQLine[] +getResponses(boolean activeOnly, boolean completedOnly) MRfQResponse[] +isQuoteTotalAmtOnly() boolean +isQuoteSelectedLines() boolean +isQuoteAllLines() boolean +checkQuoteTotalAmtOnly() String #beforeSave(boolean) boolean +getQtys() MRfQLineQty[] +get(ctx, C_RfQLineQty_ID, trxName) MRfQLineQty +getUomName() String +getResponseQtys(boolean onlyValidAmounts) MRfQResponseLineQty[] <> <> > X_C_RfQ X_C_RfQ --

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

C_RfQ(見積依頼伝票・主要カラム)

Section titled “C_RfQ(見積依頼伝票・主要カラム)”
カラム名必須説明備考
C_RfQ_IDIDPK見積依頼ID主キー
AD_Client_ID / AD_Org_IDTable DirectYクライアント / 組織default @#AD_Client_ID@ / @#AD_Org_ID@
DocumentNoStringY伝票番号
NameStringY名称
C_RfQ_Topic_IDTable DirectY見積依頼案件
QuoteTypeListY見積依頼タイプdefault S
DateResponseDateY回答日付
C_Currency_IDTable DirectY通貨default @$C_Currency_ID @
SalesRep_IDTableY社内担当者
IsQuoteAllQtyYes-NoY見積総量
IsQuoteTotalAmtYes-NoY見積総額
IsInvitedVendorsOnlyYes-NoY招待仕入先のみ
IsRfQResponseAcceptedYes-NoY回答受付default Y
IsSelfServiceYes-NoYセルフサービスdefault Y
DateWorkStart / DeliveryDays / DateWorkComplete-N作業日程beforeSave で相互補完
C_BPartner_ID / C_BPartner_Location_IDSearchN転売先の顧客
MarginNumberNマージン %
C_Order_IDSearchN生成された受注伝票
PublishRfQ / RankRfQ / CreateSO / CreatePO / CopyLines / ProcessingButtonN各種処理ボタン
ProcessedYes-NoY処理済み
カラム名必須説明備考
C_RfQLine_IDIDPK明細ID主キー
C_RfQ_IDSearchY見積依頼FK更新不可
LineIntegerY明細番号default @SQL=SELECT COALESCE(MAX(Line),0)+10 ...
M_Product_IDSearchN品目
M_AttributeSetInstance_IDProduct AttributeY属性セットインスタンス
Description / Help-N説明・コメント
DateWorkStart / DeliveryDays / DateWorkComplete-N明細単位の作業日程

C_RfQLineQty(見積依頼伝票明細数量)

Section titled “C_RfQLineQty(見積依頼伝票明細数量)”
カラム名必須説明備考
C_RfQLineQty_IDIDPK数量ID主キー
C_RfQLine_IDTable DirectY明細FK更新不可
C_UOM_IDTable DirectY数量単位
QtyQuantityY数量default 1
BenchmarkPriceCosts+PricesY基準価格
IsRfQQtyYes-NoY見積依頼数量default Y
IsPurchaseQtyYes-NoY購入数量発注伝票作成で使用
IsOfferQtyYes-NoY申入れ数量受注伝票作成で使用
BestResponseAmtAmountN採用提示額ランク付けで更新
OfferAmtAmountN申入れ額
MarginNumberNマージン %
erDiagram
    C_RfQ_Topic ||--o{ C_RfQ : "topic"
    C_RfQ ||--o{ C_RfQLine : "lines"
    C_RfQLine ||--o{ C_RfQLineQty : "quantities"
    C_RfQ ||--o{ C_RfQResponse : "responses"
    C_RfQLine ||--o{ C_RfQResponseLine : "response lines"
    C_RfQLineQty ||--o{ C_RfQResponseLineQty : "response qtys"
    C_RfQ ||--o| C_Order : "creates SO/PO"
    C_RfQLine }o--o| M_Product : "product"

response lines response qtys creates SO/PO

// Calculate Complete Date (also used to verify)
if (getDateWorkStart() != null && getDeliveryDays() != 0)
setDateWorkComplete(TimeUtil.addDays(getDateWorkStart(), getDeliveryDays()));
// Calculate Delivery Days
else if (getDateWorkStart() != null && getDeliveryDays() == 0 && getDateWorkComplete() != null)
setDeliveryDays(TimeUtil.getDaysBetween(getDateWorkStart(), getDateWorkComplete()));
// Calculate Start Date
else if (getDateWorkStart() == null && getDeliveryDays() != 0 && getDateWorkComplete() != null)
setDateWorkStart(TimeUtil.addDays(getDateWorkComplete(), getDeliveryDays() * -1));

同じロジックは MRfQResponse.beforeSave() にも実装されており、依頼側と回答側で日程の扱いが揃えられています。

flowchart TD
    A[checkQuoteTotalAmtOnly] --> B{"見積タイプ = 総額のみ?"}
    B -->|No| C["null を返す(検証不要)"]
    B -->|Yes| D["全明細を走査"]
    D --> E{"明細の数量件数 > 1?"}
    E -->|Yes| F["エラーメッセージを返す<br/>@Line@ n: #@C_RfQLineQty@=x"]
    E -->|No| G["null を返す"]

見積タイプ = 総額のみ? null を返す(検証不要) 全明細を走査 明細の数量件数 > 1? エラーメッセージを返す @Line@ n: #@C_RfQLineQty@=x null を返す

このメソッドは見積回答伝票の checkComplete() から呼び出され、回答を「完成」にできるかどうかの前提チェックとして機能します。

MRfQ.getResponses(boolean activeOnly, boolean completedOnly) により、有効な回答のみ・完成した回答のみといった条件で見積回答伝票を取得できます。ランク付け処理や発注作成処理は、このメソッドで対象を絞り込みます。

MRfQLineQty.getResponseQtys(boolean onlyValidAmounts) は、その数量段階に対する回答明細価格(C_RfQResponseLineQty)を取得します。引数を true にすると、isValidAmt()(価格がゼロでない・割引が 100% 以内・正味額が正)を満たす回答だけが返されます。

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

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

C_RfQ は Document 型ではないため、modelChange() を使用します。

public class CustomRfQValidator implements ModelValidator {
@Override
public int modelChange(PO po, int type) throws Exception {
if (po instanceof MRfQ && (type == TYPE_BEFORE_NEW || type == TYPE_BEFORE_CHANGE)) {
MRfQ rfq = (MRfQ) po;
// 例: 回答期限が過去日の見積依頼を禁止する
if (rfq.getDateResponse() != null
&& rfq.getDateResponse().before(new Timestamp(System.currentTimeMillis()))) {
throw new AdempiereException("回答日付は本日以降を指定してください");
}
}
return null;
}
}

C_RfQ / C_RfQLine / C_RfQLineQty の各カラムには標準の Callout(AD_Column.Callout)が設定されていません。品目選択時に単位や基準価格を自動セットしたい場合は、独自 Callout を AD_Column に登録します。

ランク付けは価格を軸としたロジックですが、納期・品質評価を加味した独自スコアリングを行いたい場合は、Rank Responses に相当するカスタムプロセスを実装し、C_RfQResponseLineQty.RankingC_RfQLineQty.BestResponseAmt を更新する形が安全です。

プロセス名説明
Create and Invite見積回答伝票を作成し、仕入先へ招待メールを送信
Invite and Remind仕入先へ招待・催促メールを送信
Rank Responses完成した回答をランク付けし、採用提示額を更新
Create Purchase Order採用した回答から発注伝票を作成
Create Sales Order申入れ数量から受注伝票を作成
Copy Lines他の見積依頼伝票から明細をコピー
Close RfQ見積依頼と関連する回答をクローズ
RfQ Unanswered未回答の見積依頼を一覧するレポート
RfQ Response完成した回答の明細を一覧するレポート

相見積の評価軸は価格だけではありません。納期・品質・与信を含めた総合評価での自動ランク付けや、仕入先ポータルからの直接回答受付も実装可能です。 見積依頼から発注までの一連の流れを、自社の調達ルールに合わせて設計できます。

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

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