ヘッダーをスキップ

Oracle Advanced Pricingインプリメンテーション・マニュアル
リリース12
E05612-01
目次へ
目次
前のページへ
前へ
次のページへ
次へ

モディファイア

この章では次のトピックについて説明します。

モディファイアの概要

モディファイアは、価格設定プロセスに作用する、価格表、算式および基本契約とは別の価格設定処理です。モディファイアにより、ネット価格は増額または減額します。モディファイア処理には、値引、追加料金の設定、出荷費用の請求、受注条件(支払方法、運送方法または出荷方法)の変更、または販促用の価格設定処理に基づく価格の調整があります。

実装に関する主な決定事項: 価格設定処理におけるモディファイアの使用方法。価格設定プロセスを適切に表現するモディファイア。

Oracle Advanced Pricingでは、シード済のモディファイア・リストとモディファイア明細タイプが提供されます。モディファイア・リスト・タイプは、値引、追加料金、取引、販促品、運送費および特別手数料です。

次の表に、モディファイア・リスト内に作成できるモディファイア・タイプを示します。

モディファイア・タイプ(先頭行) 値引リスト 追加料金リスト 取引(販促品と関連付けられる必要あり) 販促品 運送費および特別手数料リスト
値引 可能 可能 可能 可能 不可
追加料金 可能 可能 可能 可能 不可
他の品目値引 不可 不可 可能 可能 不可
条件代替 不可 不可 可能 可能 不可
品目アップグレード 不可 不可 可能 可能 不可
価格分岐 可能 可能 可能 可能 不可
販促品 不可 不可 可能 可能 不可
クーポン発行 不可 不可 可能 可能 不可
運送および特別手数料 不可 不可 不可 不可 可能

重要: 使用している現行の価格設定取引エンティティについてのみモディファイア・リストを表示または更新できます。

階層品目カテゴリの価格設定

価格とモディファイアを階層品目カテゴリおよび平坦化された品目カテゴリに基づいて設定できます。価格表またはモディファイアの階層カテゴリに対してカテゴリ・ベースの価格設定を定義できます。これを行うには、データを作成するソース・システムの機能領域にデフォルトの階層カテゴリ・セット(カタログ)を設定する必要があります。詳細は、「階層品目カテゴリの価格設定」を参照してください。

モディファイアおよびモディファイア明細でのHTMLユーザー・インタフェースの使用方法

Oracle Advanced Pricingには、HTMLベースのユーザー・インタフェース(UI)が用意されています。このUIの、ガイドつきのステップ、使いやすいページおよびショートカット・リンクを使用して、モディファイア、価格表およびクオリファイアを設定および保守できます。

HTMLユーザー・インタフェースでは、次のモディファイア・リスト・タイプおよびモディファイア明細タイプを作成できます。

モディファイア・リスト・タイプ

モディファイア明細タイプ

モディファイア・リストを作成すると、価格調整のタイプおよび価格設定エンジンによって価格設定要求に適用される特典のタイプを定義するモディファイア明細を追加できます。HTML UIでは、次のモディファイア明細タイプが使用できます。

関連トピック

『Oracle Advanced Pricingユーザーズ・ガイド』の「モディファイア」

実装計画

クライアントのビジネスの価格設定使用例を分析および理解するときに、論理的な価格設定ソリューションを開発するために、実装に関するいくつかの主な決定事項について検討する必要があります。この章では、これらの決定事項について説明します。組織の価格帯をビジュアル化すると、Oracle Advanced Pricingの効果的な実装計画を開発するのに役立つ場合があります。

次の例では、組織のモディファイアをOracle Advanced Pricingのコンポーネントにマッピングするための視覚的なガイドを示します。

ソース価格設定データは、品目「Super Wine」に品目カテゴリ「Wine」が定義されているという前提に基づいています。顧客区分「VIP」に属する顧客「XYZ Corporation」から、2000年6月15日に数量15の発注がありました。

バケット 価格設定フェーズ 非互換グループ クオリファイア/製品属性(優先) モディファイア/価格表 値引 小計
基準価格 リスト明細基準価格 排他 顧客区分: VIP (310)
品目コード: Super Wine (220)
法人価格表: $1000 NULL NULL
基準価格 リスト明細基準価格 排他 品目カテゴリ: Wine (290) 指定仕入先: $800 NULL NULL
基準価格 リスト明細基準価格 NULL NULL NULL NULL $1,000
バケット1 リスト明細調整 レベル1 品目数量> 10 (800)
品目コード: Super Wine (220)
7月4日販促 10% $100 NULL
バケット1 リスト明細調整 レベル1 顧客区分: VIP (310) サマー・キャンペーン 15% NULL NULL
バケット1 リスト明細調整 レベル2 顧客ID: XYZ Corp (260) VIP値引 $40 $40 NULL
バケット1 リスト明細調整 レベル2 顧客ID: XYZ Corp (260) 平日値引 $20 NULL NULL
バケット1 全明細調整 レベル1 品目カテゴリ: Wine (290) 一般値引: $20 $10 NULL
バケット1 全明細調整 排他 受注日< 01-DEC-2000 (510) 季節値引: $10 NULL NULL
バケット1 ヘッダー・レベル調整 レベル1 NULL 優先顧客 10% 100 NULL
バケット1 明細手数料 レベル1 NULL 取扱手数料 $20 $20 NULL
バケット1 ヘッダー・レベル手数料 レベル1 NULL NULL NULL NULL
バケット1 ヘッダー・レベル手数料 NULL NULL NULL NULL $750
バケット2 調整 レベル2 NULL 高頻度使用の追加料金 2% ($15) NULL
バケット2 全明細調整 レベル2 NULL NULL NULL NULL
バケット2 ヘッダー・レベル調整 レベル2 NULL NULL NULL NULL
バケット2 明細手数料 レベル2 NULL NULL NULL NULL
バケット2 ヘッダー・レベル手数料 レベル2 NULL NULL NULL NULL
バケット2 ヘッダー・レベル手数料 レベル2 NULL NULL NULL NULL
バケット2 NULL NULL NULL NULL NULL $765

モディファイア・レベルおよび適用方法

価格設定エンジンは、モディファイア・レベルを使用して、特定のモディファイアに対する価格設定要求の適格性およびモディファイアを適用するレベル(受注、明細、または明細のグループ)を判断します。

たとえば、明細レベルで適用される容積ベースの値引モディファイアでは、適用対象の明細の容積のみが考慮されます。明細グループ・レベルで適用される容積ベースの値引モディファイアでは、価格設定要求で適用対象となる明細全体の容積が考慮されます。

実装に関する主な決定事項: モディファイア適用方法の割当て

使用可能な適用方法から選択して、異なる価格設定処理を作成できます。

使用可能な適用方法は、選択したモディファイアの明細タイプとレベルによって異なります。これは、「値引/手数料」タブで確認できます。価格設定処理の値を操作するために算式を使用できます。

次の表は、様々なモディファイア・レベルに対して使用できる適用方法を示しています(適用方法は、一番上の行に記載されています)。

モディファイア適用方法: 明細レベル

モディファイア明細タイプ(下の列) パーセント値 パーセント算式 金額値 金額算式 新価格値 新価格算式 総額値 総額算式
値引 可能 可能 可能 可能 可能 可能 可能 可能
追加料金 可能 可能 可能 可能 可能 可能 可能 可能
運送費/特別手数料 可能 可能 可能 可能 不可 不可 可能 可能
他の品目値引(取得品) 可能 不可 可能 不可 可能 不可 可能 不可
価格分岐 可能 可能 可能 可能 可能 可能 可能 可能
販促品(取得品) 可能 不可 可能 不可 可能 不可 可能 不可

モディファイア適用方法: 明細グループ・レベル

モディファイア明細タイプ(下の列) パーセント値 パーセント算式 金額値 金額算式 新価格値 新価格算式 総額値 総額算式
値引 可能 可能 可能 可能 可能 可能 可能 可能
追加料金 可能 可能 可能 可能 可能 可能 可能 可能
他の品目値引(取得品) 可能 不可 可能 不可 可能 不可 可能 不可
価格分岐 可能 可能 可能 可能 可能 可能 可能 可能
販促品(取得品) 可能 不可 可能 不可 可能 不可 可能 不可

モディファイア適用方法: 受注レベル

モディファイア明細タイプ(下の列) パーセント値 パーセント算式 金額値 金額算式 新価格値 新価格算式 総額値 総額算式
値引 可能 可能 不可 不可 不可 不可 不可 不可
追加料金 可能 可能 不可 不可 不可 不可 不可 不可
運送費/特別手数料 不可 不可 不可 不可 不可 不可 可能 可能

明細のグループの動作に関する考慮事項

次の項では、モディファイア・タイプ(「値引」、「他の品目値引」、「価格分岐ヘッダー」、「販促品」)に対する値引を明細グループ・レベルで適用する場合の特別な考慮事項を説明します。

明細グループ・レベルのモディファイア・タイプについては、次の考慮事項に注意してください。

例: 明細のグループの処理および除外品目

除外品目が1つ設定された明細グループ・レベルの受注明細をモディファイアが評価する方法を説明するために、次の2つのモディファイアを設定しました。

この2つのモディファイアの設定は、次の表に要約されています。

モディファイア名 レベル 品目カテゴリ 数量 除外品目
Modifier_Shampoo1 明細のグループ Shampoo > 100個 なし
Modifier_Shampoo2 明細のグループ Shampoo > 100個 Shampoo1

次の表に示すように、顧客が2つのShampoo品目(Shampoo1とShampoo2)およびConditionerを発注したとします。

受注明細ID 品目カテゴリ 品目 数量
1 Shampoo Shampoo 1 70
2 Shampoo Shampoo 2 40
3 Conditioner Conditioner 30

2つのモディファイアModifier_Shampoo1およびModifier_Shampoo2は、Shampoo受注に適用されます。ただし、後述するように、モディファイア設定に基づいて行われる明細のグループの評価は、モディファイアによって異なります(1つのモディファイアは除外品目を考慮しますが、もう1つのモディファイアは考慮しません)。

Shampoo受注に適用されるModifier_Shampoo1

Modifier_Shampoo1が適用される前に、Shampoo受注の明細が評価されます。

このチェックの結果、モディファイアModifier_Shampoo1が適用されます。その理由は、次のとおりです。

Shampoo受注に適用されるModifier_Shampoo2

Modifier_Shampoo2が適用される前に、次のように受注明細が評価されます。

受注数量が100を超えていないため、このチェックの結果、モディファイアModifier_Shampoo2は適用されません。

関連トピック

ソース・システム・リージョンの機能領域

モディファイアに関するその他の考慮事項

実装に関する主な決定事項: 顧客階層および製品階層がモディファイアの体系に与える影響

クオリファイアを使用すると、モディファイアの体系を顧客階層に関連付けることができます。このトピックの詳細は、「実装方法」を参照してください。

モディファイアは、品目番号、品目カテゴリまたは全品目に対して設定できます。価格設定属性を使用すると、製品階層を詳細に定義できます。

品目および品目カテゴリの除外

除外を選択すると、個々の品目または品目カテゴリをモディファイアの適用対象から除外できます。品目が除外品目カテゴリ内および非除外品目カテゴリ内にある場合、除外品目カテゴリが優先されます。階層カテゴリが除外品目で指定されている場合、そのカテゴリに関連付けられている最終品目および子カテゴリに属する品目はすべて除外されます。

たとえば、全品目に対するモディファイアで品目カテゴリ"IC 1"が除外されているとします。品目Zは、IC1、IC2およびIC3に属しています。エンジンによって品目ZがIC1内にあることが評価されると、その品目がIC2およびIC3にある場合でも、モディファイアは適用されません。

単位(UOM)

モディファイアに関して単位換算は使用できません。価格設定エンジンは、価格設定単位に対して選択された単位(UOM)と一致するか、またはNULL値のモディファイア明細のみを評価します。たとえば、品目Aの単位が個で、価格表明細で基準単位としてチェックされているとします。品目Aの受注単位はダースです。したがって、エンジンは個またはNULL値のモディファイア明細のみを考慮します。単位は、価格分岐以外のモディファイア・タイプに対しては必須フィールドではありません。

注意: ボリューム・タイプが「品目金額」の場合、販促モディファイアの単位は必須ではありません。次の場合のみ単位は必須です。

価格設定フェーズ

価格設定フェーズによって、価格設定エンジンがモディファイアを適用する時期が決まります。たとえば、リスト明細調整フェーズ内のモディファイアは、明細が入力された後でのみ適用されます。全明細調整フェーズ内のモディファイアは、明細が保存された後でのみ適用されます。パフォーマンスに影響を与える可能性がある不必要な価格設定エンジンの呼出しに注意してください。

優先

優先の値は、「コンテキストと属性」ウィンドウで定義された製品属性(品目番号、品目カテゴリなど)およびクオリファイア属性の設定に基づいてデフォルト設定されます。詳細は、「実装方法」および「優先と最善価格」を参照してください。

非互換レベル

モディファイアを他のモディファイアと同じ非互換グループ・レベルに設定すると、相互に非互換にすることができます。このように設定すると、価格設定エンジンは、受注明細または受注に対してフェーズごとに1つのモディファイアのみを適用します。非互換レベルの詳細は、「優先と最善価格」を参照してください。

バケット

価格設定バケットによって、値引およびその他の特典がフェーズ全体でどのように計算されるかが管理されます。値引および特典をバスケットにグループ化することにより、すべての価格設定フェーズにわたって正味販売価格を割り出すことができます。

NULLバケット

NULLバケットに割り当てられたモディファイアは、最後に適用され、常に定価から調整されます。受注レベルのモディファイアは、NULLバケット内に置く必要があります。価格設定エンジンは、NULLバケットの販売価格を計算する際、次のステップを使用します。

  1. 定価を使用してパーセント値引を計算します。

  2. すべてのバケット・モディファイア値を合計して、バケット小計を作成します。

  3. 最後に番号が割り当てられたバケットの後に小計を適用します。

次のように、各バケットにそれぞれ異なる調整を割り当てて設定したとします。

バケットを使用して、定価が$55のSP ATO Modelの価格を計算します。次の表に、最終価格の計算方法を示します。

バケット モディファイア調整 計算価格 最終価格
バケット1 10%値引 55 - (10%*55) $49.50
バケット2 10%追加料金 49.5 + (10%*49.5) $54.45
NULLバケット 50%値引注意: モディファイアは最後に適用され、定価から値引が計算されます。 54.45 - (50%*55) $26.95

実装に関する主な決定事項: 必要なバケット・レベル数

必要なバケット数は、クライアントの請求書の小計をカウントして決定します。当初の定価と最終的なネット価格の間に番号を追加して、モディファイアの計算順序を管理します。これらの小計に基づいて、バケットへの値引の割当てを計画します。

NULLのバケットの場合は、定価からモディファイアによる値引が計算された後、最終的なバケットの小計に調整が適用されます。受注レベルのモディファイアは、常にNULLバケット内にあります。

Oracle Advanced Pricingでは、定義できるバケットの数は制限されていません。

手動モディファイア

指定されたバケットに手動モディファイアを適用した場合、後続のバケット内のすべてのモディファイアが再評価されます。

価格設定管理

次の価格設定管理は、モディファイアおよびモディファイア明細の適用方法を定義するために設定できます。

モディファイア・タイプの設定

手動モディファイア

値引、追加料金、運送費および点の価格分岐について手動調整を定義できます。受注明細で販売価格を直接上書きするには、手動値引または手動追加料金を定義する必要があります。手動調整を定義するときは、次のガイドラインに従ってください。

Oracle Order Managementで手動調整を適用する方法は、『Oracle Order Management Suiteインプリメンテーション・マニュアル』または『Oracle Order Managementユーザーズ・ガイド』を参照してください。

他の品目値引

他の品目値引を適用するには、すべての品目が受注で正しく順序付けされている必要があります。価格設定フェーズは、受注のすべての明細を考慮するイベントに関連付けられている必要があります。他の品目値引は、手動または上書き可能にできません。他の品目値引では、取得品の明細に対する非互換性は無視されます。

「取得」リージョンと特典品目

「取得」リージョンの特典品目は、品目レベルでのみ定義できます。取得価格および取得単位フィールドの値は入力しないでください。特典品目の価格は受注で設定される必要があります。

価格設定エンジンでは、定型の他の品目値引はサポートされていないため、取得品の数量は1に設定する必要があります。エンジンは、品目のすべての数量に対して値引を適用します。たとえば、ペストリー5個とクッキー2個を注文すると、クッキー2個が50%値引されるとします。このモディファイアを使用すると、ペストリー10個とクッキー4個を注文した場合は、クッキー4個が50%値引されます。同様に、ペストリー10個とクッキー3個を注文した場合は、クッキー3個がすべて50%値引されます。

パーセントの適用方法を使用して値引する場合、パーセントは、「モディファイア要約」タブで定義されたバケット値に基づきます。たとえば、他の品目値引がバケット2にある場合は、バケット1に対する調整が取得品目にすべて適用された後で、5%の値引が行われます。

販促品

「PCを1台購入すると無料のマウスが提供されるか、PCを1台購入すると無料のスピーカが提供される」という販促品を、モディファイアを使用して設定する方法を次に示します。

方法1

  1. 2つのモディファイアを設定する方法:

  2. 2つのモディファイアを相互に非互換にし、優先を設定して、優先度の高いモディファイアが自動的に適用されるようにします。

方法2

  1. 2つの他の品目値引モディファイアを設定する方法:

  2. 2つのモディファイアを相互に非互換にし、優先を設定します。PCが注文され、マウスまたはスピーカーがその受注に追加されると、マウスまたはスピーカーのいずれかが無料になります。

    注意: モディファイア詳細の定義ウィンドウの「取得」リージョンには、スタンドアロンの価格表明細のみが値リストに表示されます。サービス品目および価格分岐明細(ヘッダーおよび子)は表示されないため、値リストからは選択できません。

「取得」リージョンで設定した特典品目は、品目レベルでのみ定義できます。

価格設定エンジンは、販促品用の追加の受注明細を戻し、「価格計算フラグ」を「No」に設定します。フラグの値が「Yes」または「P」に変更されないかぎり、追加のモディファイアは明細に適用されません。このため、無償品目の販売価格がマイナスになることはありません。価格計算フラグが「No」に設定されている受注明細がある場合は、受注レベルの追加のモディファイアは適用されません。

注意: 販促品は、受注レベルではサポートされません。

警告: 「価格計算フラグ」を無償品目の価格を計算するように変更しないでください。

条件代替

支払、運送および出荷の条件は、条件代替モディファイアを使用して置換できます。

品目アップグレード

品目アップグレード・モディファイアの場合は、品目とアップグレード品目の間の関連がOracle Inventoryで定義されている必要があります。

価格分岐

価格分岐は、容積の価格設定コンテキストがある価格表とモディファイア・リストの両方に対して作成できます。価格分岐には、次のような特徴があります。

重要: R12より前のリリースで作成された価格分岐のコピー: R12より前のリリースから価格分岐をコピーした場合(たとえば、価格分岐が設定された価格表またはモディファイア・リストをコピーした場合など)、価格分岐は、前述の項で説明した価格分岐フォーマットに更新されます。更新内容を検証して、変換された価格分岐設定がユーザーの価格設定の目的を満たしているか確認する必要があります。

受注数量が価格表の価格範囲内にない場合でも、価格は計算され、受注明細のデフォルト値として設定されます。したがって、必要な価格設定結果が得られるように価格範囲が正しく設定されていることを確認してください。たとえば、品目AS54888の価格表について次の範囲の価格分岐を作成するとします(適用方法は単価)。

価格タイプが点の場合: 受注数量が価格表の価格範囲内になければ価格は戻されません。

価格タイプが範囲の場合: 価格表の価格範囲内にない受注数量については、価格0が取得されます。

たとえば、品目AS54888を10個受注したとすると、価格は次のように計算されます(価格タイプが範囲の場合)。

(5*1) + (2*0.75) + (3*0)/10 = 0.65(単価)

最後の3つについては、価格範囲外であるため、単価0が戻されます。したがって、必要な価格結果を得るには、価格分岐を正しく設定しておくことが重要になります。

点および範囲の価格分岐

価格分岐の設定時には、分岐処理の適用方法を決めるために、点または範囲の価格分岐を選択できます。

点の価格分岐

次の例の値引ルールについて考えます。

明細レベルの価格分岐で受注数量が55の場合は、受注明細に5%の値引が適用されます。明細グループ・モディファイアの場合は、その受注の明細のグループすべての合計数量が値引の対象となります。

範囲の価格分岐

点の価格分岐の例を使用すると、範囲の価格分岐では、受注数量が55の場合は、最初の10個の注文が1%、次の40個は2%、残りの5個は5%値引されます。その後で、値引が平均され、受注明細に適用されます。

累積範囲分岐

累積範囲分岐によって、モディファイアの通常の範囲分岐機能が拡張されます。累積範囲分岐の使用により、Oracle Order Managementなどの呼出し側アプリケーションは、累積属性を介して累積値を価格設定エンジンに渡すことができます。累積範囲分岐の設定および使用方法は、「累積範囲分岐の使用」を参照してください

重要: Oracle Order Managementの場合、明細を分割すると、数量が異なる価格区分に入った場合は販売価格が変更されます。その時点で、結果は分割前の価格計算フラグの値によって異なります。価格が自動的に変更されないようにするには、「価格計算フラグ」フィールドを設定して、明細の分割前に価格を固定します。

クーポン発行

モディファイア・ウィンドウでクーポン発行を定義するときに、2つのモディファイア明細を設定する必要があります。価格調整または特典がクーポン発行にリンクされます。クーポン発行明細を設定するときは、モディファイア番号が必須です。価格設定エンジンは、番号を使用してクーポンに対する一意の連続番号を生成し、それを呼出し側アプリケーションに渡します。顧客は、呼出し側アプリケーションで、クーポンの使用時にこの番号を引用します。

販促要求

モディファイアの設定時に次のいずれかを選択して、販促要求を作成できます。

「請求」ボックスを選択した場合、顧客は、販促品名または番号を指定して販促要求を行う必要があります。

価格設定エンジンは、受注が価格設定エンジンに送信された後、販促要求に対する受注の適格性を検証します。

自動および手動両方の販促要求を設定することもできます。呼出し側アプリケーションが販促要求を適用する方法は、呼出し側アプリケーションによって異なります。

定型モディファイア

「モディファイア要約」タブの「分岐タイプ」フィールドで、モディファイアに定型のマークを付けることができます。次のモディファイア・タイプの定型化が可能です。

定型クーポン発行の例として、注文5個につき、将来の受注が10%値引されるクーポンが発行されるとします。15個注文すると、クーポンは3つ発行されます。

ポイント値引の設定

「モディファイア設定」ウィンドウで、金銭的なポイントおよび非金銭的なポイントの両方を作成できます。ポイントは、パーセント、金額または総額として与えられ、受注明細の販売価格には影響を与えません。ポイントには失効日を設定できます。また、ポイントは請求書に請求品目として表示されません。ポイントの累計は、OE_Price_Adjustments表に格納されます。「ポイント加算フラグ」を選択すると、ポイントへの参照を作成できます。

ポイント値引を設定するときは、次のことに注意してください。

将来使用する目的で確保されているフィールド

金銭的なポイントを含むバケット

ポイントは受注明細の販売価格に影響を与えないため、価格設定エンジンは、ポイントをバケットの計算の対象としません。エンジンは、バケット番号を使用して、ポイント値の計算の対象となる価格を設定します。次の表に、この概念を示します。

バケット モディファイア 価格調整 ポイント金額 バケット小計 販売価格
定価 N/A N/A N/A N/A $100.00
1 7%値引 $7.00 N/A $7.00 $93.00
1 10%ポイント N/A $10.00 N/A $93.00
2 10%ポイント N/A $9.30 N/A $93.00
2 5ドル値引 $5.00 N/A $5.00 88.00

会計に関する制限事項

ポイント消費

ポイントは、ポイント消費画面で検証し、消費済のマークを付けることができます。この画面は、取引からポイント・レコードを反映するオンライン・ビューです。消費済レコードと未消費レコードをすべて表示したり、モディファイア番号、顧客または消費済のみなど、特定の問合せを使用して表示することもできます。

顧客名または顧客番号を問い合せると、モディファイア番号に関係なく、その顧客の消費済レコードと未消費レコードがすべて戻されます。モディファイアで問い合せると、特定のモディファイアが、そのモディファイアの対象となるすべての顧客に対するレコードとともに戻されます。

取引タイプおよびソース・システムは、すべての自動消費処理によって設定されます。これには、手動消費、およびOracle Accounts Receivable、Oracle Accounts Payableまたはその他のソース・システムなど、他の取引ソースによって作成された消費の両方が反映されます。ポイント消費は、次の項目を入力することによって手動で更新できます。

累積範囲分岐の使用

累積範囲分岐では、分岐点の開始部にゼロではなく累積値を使用することにより、モディファイアの通常の範囲分岐機能を拡張します。

価格設定エンジンで行われる評価は、通常分岐と累積範囲分岐で異なります。

Oracle Order Managementなどの呼出し側アプリケーションは、累積属性を介して累積値を価格設定エンジンに渡します。累積属性は、モディファイア設定で使用され、価格分岐ヘッダーのモディファイアに添付されます。

たとえば、累積値8を含む品目XYZを5個という受注の場合、9番目から13番目の品目については、適切な範囲分岐で価格設定されます。

累積範囲分岐の場合、受注の価格設定は、上位範囲の分岐から開始できます。それに対し、通常分岐の場合、すべての受注は最下位の分岐から開始します。累積範囲分岐機能の例および詳細は、『Oracle Advanced Pricingユーザーズ・ガイド』を参照してください。

累積値を価格設定エンジンに渡す場合は、次の方法を使用します。

累積範囲分岐のランタイム・ソースの設定

ランタイム・ソースは、属性マッピングとは異なり、累積範囲分岐でのみ使用できます。累積範囲分岐の計算時、価格設定エンジンはランタイム・ソースApplication Program Interface(API)を呼び出し、属性マッピング設定でRUNTIME SOURCEとして定義されている累積属性の累積値を取得します。

RUNTIME SOURCED APIは、累積値を戻すPL/SQL関数です。ユーザーが関数を記述する必要がある点で、これはGet_Custom_Price APIと同様ですが、累積にのみ使用されます。ランタイム・ソースは、計算途中の実行時に取得が行われるため、標準の属性マッピング・ルールとは異なります。ランタイム・ソースは、累積値を導出するためにランタイム情報(クオリファイア、製品、価格設定属性などのモディファイアに関連する値)が必要な場合に使用することをお薦めします。

ランタイム・ソースを実装および使用する場合の一般的なステップは、次のとおりです。

  1. 提供されている仕様に従って、パッケージQP_RUNTIME_SOURCEについて機能Get_numeric_attribute_valueを定義および記述します。

  2. ソースをデータベースにコンパイルします。

  3. 属性マッピングでマッピング・メソッドRUNTIME SOURCEを使用して、VOLUMEコンテキストの下に価格設定属性を定義します。

  4. プロファイル「QP: 累積属性使用可」を有効にします。

  5. 「累積属性」フィールドで、価格分岐モディファイアにこの属性を添付して定義します。

モディファイアを選択すると、ランタイム・ソースが呼び出され、調整金額が計算される前に累積値が取得されます。

ランタイム・ソースの設定方法

関数Get_numeric_attribute_valueの仕様は、パッケージQP_RUNTIME_SOURCEで提供されています(ファイルQPXRSRCB.plsにあります)。次のパラメータで対応する本体を記述する必要があります。

p_req_line_attrs_tbl表体系は、パッケージQP_FORMULA_PRICE_CALC_PVTにあるものと同等です。

p_accum_recレコードには3つのフィールドが含まれていますが、将来の要件に対応するためにフィールド数が増える可能性があります。

ランタイム・ソースの適用方法

ランタイム・ソースAPIは、価格設定対象となる各明細に対して累積値を戻します。累計は、受注ごとまたは受注全体に対して行われます。そのため、いずれかまたはすべての入力パラメータに基づく正しい値を戻すコード・ロジックを記述する必要があります。

このユーザー定義ロジックは、任意数の入力パラメータに基づきます。たとえば、受注品目に基づく累計を行う場合は、要求明細の品目番号に対応する属性のみを評価する必要があります。要件によって複数の入力パラメータを必要とする複雑な導出が要求される場合も、このAPIによって対応できます。ただし、PL/SQLコードにロジックを正しく実装する必要があります。

累計は、設計上価格設定エンジンではなく、呼出し側アプリケーションによって行われます。累積値は、ユーザー定義表に格納されます。そのため、Get_numeric_attribute_value内のすべてのSQL問合せは、これらの表に対して実行し、値を取得する必要があります。UPDATE文、INSERT文またはDELETE文の操作は、呼出し側アプリケーション内部で行う必要があるため、これらの文はランタイム・ソースの外側に置かれます。

ランタイム・ソースのサンプル・コード

次の例で、関数本体のサンプル・コードを示します。この使用例では、顧客区分および受注タイプの組合せに基づく累計を行います。ここでは、顧客区分をコンテキスト「CUSTOMER」、属性「PRICING_ATTRIBUTE31」として定義し、受注タイプはコンテキスト「ORDER」、属性「PRICING_ATTRIBUTE40」として定義します。また、説明用に、累積値をユーザー定義表accum_val_tblに格納します。ここでは、パフォーマンスは考慮されていません。

FUNCTION Get_numeric_attribute_value(
     p_list_line_id          IN NUMBER,
     p_list_line_no          IN VARCHAR2,
     p_order_header_id       IN NUMBER,
     p_order_line_id         IN NUMBER,
     p_price_effective_date  IN DATE,
     p_req_line_attrs_tbl    IN ACCUM_REQ_LINE_ATTRS_TBL,
     p_accum_rec             IN ACCUM_RECORD_TYPE
) RETURN NUMBER
IS
     v_cust_class   VARCHAR2(240);
     v_order_type   VARCHAR2(240);
     v_req          accum_req_line_attrs_rec;
     i              NUMBER;
     accum_value    NUMBER
BEGIN
     -- this loop extracts the customer class and the order type that is
     -- passed on the request line.  We only use the p_req_line_attrs_tbl
     -- input parameter here.
     i := p_req_line_attrs_tbl.FIRST;
     WHILE I IS NOT NULL LOOP
          v_req := p_req_line_attrs_tbl(i);
          IF (v_req.context = 'CUSTOMER' AND
              v_req.attribute = 'PRICING_ATTRIBUTE31')
          THEN
              v_cust_class := v_req.value;
     ELSIF (v_req.context = 'ORDER' AND
          v_req.attribute = 'PRICING_ATTRIBUTE40')
     THEN
          v_order_type := v_req.value;
     END IF;
          i := p_req_line_attrs_tbl.NEXT(i);
     END LOOP;
     -- supposing the customer class and order type are not null, now
     -- query the user-defined table for the stored accumulation value
     -- and return this value.
     SELECT value
     INTO accum_value
     FROM accum_val_tbl
     WHERE customer_class = v_cust_class
     AND order_type = v_order_type;
     RETURN accum_value;
END Get_numeric_attribute_value;

この例では、顧客区分および受注タイプを要求明細から抽出し、顧客区分と受注タイプの各ペアの累積値を格納するaccum_val_tblへの問合せで使用します。値が選択されると、関数によって価格設定エンジンにその値が戻され、計算が続行されます。この関数は異なるペアの数に基づき、表にデータが格納されている方法を利用して、要求明細で渡された各ペアに対して、それぞれ異なる正しい累積値を戻します。

ランタイム・ソース関数は、様々な方法で記述でき、その実装は使用例および要件によって異なります。必要に応じて、PL/SQL言語の制限内ではロジックを単純にも複雑にも記述できます。それでも、この関数はロジックを処理し、対応する累積値について適切なデータ表を問い合せ、数値を戻す必要があります。