iDempiere 見積依頼伝票の使い方|購買管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 購買管理の全体像: 購買管理の全体図 も合わせてご覧ください。
見積依頼伝票(RfQ: Request for Quotation)は、複数の仕入先へ同じ条件で見積を依頼し、集まった回答を比較・ランク付けして発注につなげるための伝票です。見積依頼案件(RfQ Topic)に登録した依頼先へ一斉に依頼を出し、回答(見積回答伝票)を横並びで評価できます。
📌 ポイント: 見積依頼伝票は「明細(品目)」の下にさらに「数量(Qty)」の階層を持ちます。同じ品目について 100 個・500 個・1,000 個の 3 段階で単価を聞くといった数量別見積が、標準機能で扱えます。
見積依頼伝票でできること
Section titled “見積依頼伝票でできること”- 見積依頼案件(
C_RfQ_Topic_ID)に基づく依頼先への一斉見積依頼 - 品目ごと・数量ごとの見積依頼(1 明細に複数の数量段階)
- 基準価格(
BenchmarkPrice)との比較 - 回答受付の可否(
IsRfQResponseAccepted)・招待仕入先限定(IsInvitedVendorsOnly)の制御 - 見積タイプ(
QuoteType)による回答粒度の指定 - 見積回答伝票の一括作成と招待メール送信(
PublishRfQ) - 回答のランク付け(
RankRfQ)と採用提示額(BestResponseAmt)の反映 - 採用結果からの発注伝票作成(
CreatePO)・受注伝票作成(CreateSO) - 既存の見積依頼伝票からの明細コピー(
CopyLines) - 見積依頼と回答の一括クローズ(
Processing)
見積依頼伝票は 3 階層のタブ構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 見積依頼伝票 | C_RfQ | 30項目 | ヘッダー(案件・見積タイプ・回答日付・各種処理ボタン) |
| 見積依頼伝票明細 | C_RfQLine | 11項目 | 見積対象の品目・作業日程 |
| 見積依頼伝票明細数量 | C_RfQLineQty | 13項目 | 数量段階ごとの依頼条件・基準価格・採用結果 |
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
💡 ヒント: 数量段階を 1 つしか使わない場合でも、明細数量タブに 1 行は必要です。数量タブが空だと、仕入先に提示する数量が決まらず回答を受け取れません。
基本操作手順
Section titled “基本操作手順”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 “アクセス方法(メニューパス)”メニューから「購買管理 > 見積依頼伝票」を開きます。
新規登録(必須項目ベース)
Section titled “新規登録(必須項目ベース)”- 「新規」ボタンをクリック
- ヘッダー必須項目を入力:
- 伝票番号(
DocumentNo) / 名称(Name) - 見積依頼案件(
C_RfQ_Topic_ID): 依頼先リストを持つ案件 - 見積依頼タイプ(
QuoteType): 回答の粒度(既定値はS) - 回答日付(
DateResponse): 回答期限 - 通貨(
C_Currency_ID) / 社内担当者(SalesRep_ID)
- 伝票番号(
- 回答条件を設定:
- 見積総量(
IsQuoteAllQty): すべての数量について回答を求める - 見積総額(
IsQuoteTotalAmt): 総額での回答を認める - 招待仕入先のみ(
IsInvitedVendorsOnly): 招待した仕入先だけ回答可 - 回答受付(
IsRfQResponseAccepted、既定 Y): 回答の受付可否
- 見積総量(
- 必要に応じて 作業開始(予定)日・納品(予定)日数・作業完了(予定)日 を入力
- 「保存」をクリック
💡 ヒント: 作業日程の 3 項目(開始日・日数・完了日)は、2 つ入力すれば残り 1 つが自動計算されます。開始日と日数を入れれば完了日が、開始日と完了日を入れれば日数が埋まります。
明細と数量の登録
Section titled “明細と数量の登録”- 「見積依頼伝票明細」タブで見積対象を登録:
- 明細番号(
Line、既定: 最大値+10) - 品目(
M_Product_ID) - 説明 / コメント: 仕様や条件の記述
- 明細単位の 作業開始(予定)日 / 納品(予定)日数 / 作業完了(予定)日
- 明細番号(
- 「見積依頼伝票明細数量」タブで数量段階を登録:
- 数量単位(
C_UOM_ID) / 数量(Qty、既定 1) - 基準価格(
BenchmarkPrice): 回答を比較する基準(必須) - 見積依頼数量(
IsRfQQty、既定 Y): 見積回答伝票の生成対象にする - 購入数量(
IsPurchaseQty): 発注伝票作成時に使用する数量 - 申入れ数量(
IsOfferQty): 受注伝票(顧客への提示)で使用する数量 - マージン %(
Margin): 転売時の利益率
- 数量単位(
見積依頼の発信と回答の評価
Section titled “見積依頼の発信と回答の評価”| ボタン | カラム | 役割 |
|---|---|---|
| 見積回答要求及び見積回答伝票作成 | PublishRfQ | 見積回答伝票を作成し、依頼先へ招待メールを送信 |
| 見積回答をランク付けする | RankRfQ | 回答内容に基づきランキングを算出し、採用提示額を更新 |
| 既存伝票から明細行をコピーする | CopyLines | 別の見積依頼伝票から明細をコピー |
| 発注伝票作成 | CreatePO | 採用した回答から仕入先向け発注伝票を作成 |
| 受注伝票作成 | CreateSO | 顧客向けの受注伝票/見積を作成 |
| 見積依頼クローズ処理 | Processing | 見積依頼伝票と関連する見積回答伝票をクローズ |
項目リファレンス
Section titled “項目リファレンス”見積依頼伝票タブ(主要項目)
Section titled “見積依頼伝票タブ(主要項目)”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 伝票番号 | 必須 | 文字列 | 伝票の採番 |
| 名称 | 必須 | 文字列 | 見積依頼の名称 |
| 見積依頼案件 | 必須 | 選択 | 依頼先リストを持つ案件 |
| 見積依頼タイプ | 必須 | リスト | 回答の粒度(既定 S) |
| 回答日付 | 必須 | 日付 | 回答期限 |
| 通貨 | 必須 | 選択 | 見積通貨 |
| 社内担当者 | 必須 | 選択 | 担当者 |
| 見積総量 | 必須 | チェック | すべての数量について回答を求める |
| 見積総額 | 必須 | チェック | 総額のみの回答を認める |
| 招待仕入先のみ | 必須 | チェック | 招待した仕入先だけ回答可 |
| 回答受付 | 必須 | チェック | 回答の受付可否(既定 Y) |
| 作業開始(予定)日 | - | 日付 | 作業開始予定 |
| 納品(予定)日数 | - | 整数 | 納品までの日数 |
| 作業完了(予定)日 | - | 日付 | 作業完了予定 |
| 取引先 / 取引先住所 | - | 検索 | 転売先の顧客(受注伝票作成時に使用) |
| マージン % | - | 数値 | 転売時の利益率 |
| 処理済み | 必須 | チェック | 処理済みフラグ |
見積依頼伝票明細数量タブ
Section titled “見積依頼伝票明細数量タブ”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 数量単位 | 必須 | 選択 | 数量の単位 |
| 数量 | 必須 | 数量 | 見積を求める数量(既定 1) |
| 基準価格 | 必須 | 単価 | 回答を比較する基準価格 |
| 見積依頼数量 | 必須 | チェック | 見積回答伝票生成の対象(既定 Y) |
| 購入数量 | 必須 | チェック | 発注伝票で使用する数量 |
| 申入れ数量 | 必須 | チェック | 受注伝票で使用する数量 |
| 採用提示額 | - | 金額 | ランク付けで更新される最良回答額 |
| 申入れ額 | - | 金額 | 顧客への提示額 |
| マージン % | - | 数値 | 利益率 |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”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 項目を相互補完しているためです。
- 開始日あり+日数が 0 以外 → 完了日 = 開始日 + 日数
- 開始日あり+日数が 0+完了日あり → 日数 = 開始日と完了日の差
- 開始日なし+日数が 0 以外+完了日あり → 開始日 = 完了日 − 日数
意図した日程にならない場合は、どの 2 項目を「入力値」として扱いたいかを整理してください。
Q. 回答が返ってこない仕入先を確認するには?
Section titled “Q. 回答が返ってこない仕入先を確認するには?”標準レポート「RfQ Unanswered(未回答の見積依頼)」が、クローズ・処理済みでない見積依頼のうち、回答が「完成」になっていないものを一覧します。催促は「Invite and Remind」プロセスで送信できます。
Q. 見積依頼を締め切るには?
Section titled “Q. 見積依頼を締め切るには?”ヘッダーの「見積依頼クローズ処理」ボタン(Processing)を実行します。見積依頼伝票と、それに紐づく見積回答伝票がまとめてクローズされます(プロセス “Close RfQ”)。
Q. 採用提示額(BestResponseAmt)はいつ入りますか?
Section titled “Q. 採用提示額(BestResponseAmt)はいつ入りますか?”「見積回答をランク付けする」(RankRfQ、プロセス “Rank Responses”)の実行時です。完成した回答を数量ごとに比較してランキングを付け、最良の回答額を数量レコードの BestResponseAmt に反映します。無効な回答はランク 999 として扱われます。
- 見積依頼案件(RfQ Topic)の使い方
- 見積回答伝票(RfQ Response)の使い方
- 発注伝票(Purchase Order)の使い方
- 購買依頼伝票(Requisition)の使い方
- 受注伝票(Sales Order)の使い方
- 画面リファレンス: 見積依頼伝票
🛠 技術仕様(開発者向け)
見積依頼伝票は 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 フラグと各種ボタンで行います。
アーキテクチャ概要
Section titled “アーキテクチャ概要”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
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MRfQ.java / MRfQLine.java / MRfQLineQty.java
関連DBテーブル
Section titled “関連DBテーブル”C_RfQ(見積依頼伝票・主要カラム)
Section titled “C_RfQ(見積依頼伝票・主要カラム)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_RfQ_ID | ID | PK | 見積依頼ID | 主キー |
| AD_Client_ID / AD_Org_ID | Table Direct | Y | クライアント / 組織 | default @#AD_Client_ID@ / @#AD_Org_ID@ |
| DocumentNo | String | Y | 伝票番号 | |
| Name | String | Y | 名称 | |
| C_RfQ_Topic_ID | Table Direct | Y | 見積依頼案件 | |
| QuoteType | List | Y | 見積依頼タイプ | default S |
| DateResponse | Date | Y | 回答日付 | |
| C_Currency_ID | Table Direct | Y | 通貨 | default @$C_Currency_ID @ |
| SalesRep_ID | Table | Y | 社内担当者 | |
| IsQuoteAllQty | Yes-No | Y | 見積総量 | |
| IsQuoteTotalAmt | Yes-No | Y | 見積総額 | |
| IsInvitedVendorsOnly | Yes-No | Y | 招待仕入先のみ | |
| IsRfQResponseAccepted | Yes-No | Y | 回答受付 | default Y |
| IsSelfService | Yes-No | Y | セルフサービス | default Y |
| DateWorkStart / DeliveryDays / DateWorkComplete | - | N | 作業日程 | beforeSave で相互補完 |
| C_BPartner_ID / C_BPartner_Location_ID | Search | N | 転売先の顧客 | |
| Margin | Number | N | マージン % | |
| C_Order_ID | Search | N | 生成された受注伝票 | |
| PublishRfQ / RankRfQ / CreateSO / CreatePO / CopyLines / Processing | Button | N | 各種処理ボタン | |
| Processed | Yes-No | Y | 処理済み |
C_RfQLine(見積依頼伝票明細)
Section titled “C_RfQLine(見積依頼伝票明細)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_RfQLine_ID | ID | PK | 明細ID | 主キー |
| C_RfQ_ID | Search | Y | 見積依頼FK | 更新不可 |
| Line | Integer | Y | 明細番号 | default @SQL=SELECT COALESCE(MAX(Line),0)+10 ... |
| M_Product_ID | Search | N | 品目 | |
| M_AttributeSetInstance_ID | Product Attribute | Y | 属性セットインスタンス | |
| Description / Help | - | N | 説明・コメント | |
| DateWorkStart / DeliveryDays / DateWorkComplete | - | N | 明細単位の作業日程 |
C_RfQLineQty(見積依頼伝票明細数量)
Section titled “C_RfQLineQty(見積依頼伝票明細数量)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| C_RfQLineQty_ID | ID | PK | 数量ID | 主キー |
| C_RfQLine_ID | Table Direct | Y | 明細FK | 更新不可 |
| C_UOM_ID | Table Direct | Y | 数量単位 | |
| Qty | Quantity | Y | 数量 | default 1 |
| BenchmarkPrice | Costs+Prices | Y | 基準価格 | |
| IsRfQQty | Yes-No | Y | 見積依頼数量 | default Y |
| IsPurchaseQty | Yes-No | Y | 購入数量 | 発注伝票作成で使用 |
| IsOfferQty | Yes-No | Y | 申入れ数量 | 受注伝票作成で使用 |
| BestResponseAmt | Amount | N | 採用提示額 | ランク付けで更新 |
| OfferAmt | Amount | N | 申入れ額 | |
| Margin | Number | N | マージン % |
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"
ビジネスロジック
Section titled “ビジネスロジック”beforeSave() の日程補完
Section titled “beforeSave() の日程補完”// Calculate Complete Date (also used to verify)if (getDateWorkStart() != null && getDeliveryDays() != 0) setDateWorkComplete(TimeUtil.addDays(getDateWorkStart(), getDeliveryDays()));// Calculate Delivery Dayselse if (getDateWorkStart() != null && getDeliveryDays() == 0 && getDateWorkComplete() != null) setDeliveryDays(TimeUtil.getDaysBetween(getDateWorkStart(), getDateWorkComplete()));// Calculate Start Dateelse if (getDateWorkStart() == null && getDeliveryDays() != 0 && getDateWorkComplete() != null) setDateWorkStart(TimeUtil.addDays(getDateWorkComplete(), getDeliveryDays() * -1));同じロジックは MRfQResponse.beforeSave() にも実装されており、依頼側と回答側で日程の扱いが揃えられています。
checkQuoteTotalAmtOnly() の検証
Section titled “checkQuoteTotalAmtOnly() の検証”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 を返す"]
このメソッドは見積回答伝票の checkComplete() から呼び出され、回答を「完成」にできるかどうかの前提チェックとして機能します。
MRfQ.getResponses(boolean activeOnly, boolean completedOnly) により、有効な回答のみ・完成した回答のみといった条件で見積回答伝票を取得できます。ランク付け処理や発注作成処理は、このメソッドで対象を絞り込みます。
数量と回答の対応
Section titled “数量と回答の対応”MRfQLineQty.getResponseQtys(boolean onlyValidAmounts) は、その数量段階に対する回答明細価格(C_RfQResponseLineQty)を取得します。引数を true にすると、isValidAmt()(価格がゼロでない・割引が 100% 以内・正味額が正)を満たす回答だけが返されます。
拡張ポイント(カスタマイズ箇所)
Section titled “拡張ポイント(カスタマイズ箇所)”OSGi Model Validator(推奨)
Section titled “OSGi Model Validator(推奨)”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; }}Callout
Section titled “Callout”C_RfQ / C_RfQLine / C_RfQLineQty の各カラムには標準の Callout(AD_Column.Callout)が設定されていません。品目選択時に単位や基準価格を自動セットしたい場合は、独自 Callout を AD_Column に登録します。
評価ロジックの拡張
Section titled “評価ロジックの拡張”ランク付けは価格を軸としたロジックですが、納期・品質評価を加味した独自スコアリングを行いたい場合は、Rank Responses に相当するカスタムプロセスを実装し、C_RfQResponseLineQty.Ranking と C_RfQLineQty.BestResponseAmt を更新する形が安全です。
関連プロセス
Section titled “関連プロセス”| プロセス名 | 説明 |
|---|---|
| Create and Invite | 見積回答伝票を作成し、仕入先へ招待メールを送信 |
| Invite and Remind | 仕入先へ招待・催促メールを送信 |
| Rank Responses | 完成した回答をランク付けし、採用提示額を更新 |
| Create Purchase Order | 採用した回答から発注伝票を作成 |
| Create Sales Order | 申入れ数量から受注伝票を作成 |
| Copy Lines | 他の見積依頼伝票から明細をコピー |
| Close RfQ | 見積依頼と関連する回答をクローズ |
| RfQ Unanswered | 未回答の見積依頼を一覧するレポート |
| RfQ Response | 完成した回答の明細を一覧するレポート |
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”相見積の評価軸は価格だけではありません。納期・品質・与信を含めた総合評価での自動ランク付けや、仕入先ポータルからの直接回答受付も実装可能です。 見積依頼から発注までの一連の流れを、自社の調達ルールに合わせて設計できます。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。