Oracle Advanced Pricingインプリメンテーション・マニュアル リリース12 E05612-01 | ![]() 目次 | ![]() 前へ | ![]() 次へ |
この章では次のトピックについて説明します。
Oracle Advanced Pricingは、すべての統合アプリケーションから呼び出すことができるAPIベースのエンジンです。この章では、Advanced Pricingとの統合を成功させるために不可欠な情報について説明します。
詳細は、次を参照してください。
このマニュアルの「属性マッピング」および「技術的な考慮事項」
『Oracle Order Management Suite APIおよびオープン・インタフェース・マニュアル』の「Pricing API」とスクリプト例の項
『Oracle Advanced Pricingユーザーズ・ガイド』
次のステップは、Oracle Pricingとの統合に必要なプロセスを示します。
手順1: 価格設定に関するエンド・トゥ・エンドのビジネス・ニーズを確認します。
アプリケーションで必要とする価格設定機能を判断するには、『Oracle Advanced Pricingユーザーズ・ガイド』およびこのマニュアルの該当の項を参照してください。
各取引の相違点を評価し、取引サイクルの各フェーズで呼び出す価格設定イベントを選択します。新規価格設定フェーズの作成方法や、価格設定フェーズおよびイベントの詳細は、『Oracle Advanced Pricingユーザーズ・ガイド』を参照してください。
ビジネス・ニーズを確認し、価格設定取引エンティティ(PTE)を選択します。新規PTEが必要な場合は、「価格設定取引エンティティの新規作成」を参照し、PTEの作成方法を確認してください。新規PTEを作成する場合、シード済コンテキストおよび属性は使用できません。新規作成したPTEに新規コンテキストおよび属性を作成するか、既存の属性をこのPTEにリンクする必要があります。
価格設定エンジンは要求タイプを使用して呼び出す必要があります。各要求タイプはPTEにリンクされます。要求タイプにより、価格設定エンジンの呼出し時に検索される価格表およびモディファイアと、build_context APIの呼出し時に実行される属性マッピング・ルールの2つが決まります。各モディファイアまたは価格表はソース・システムに関連付けられるため、PTEにも関連付けられます。価格設定エンジンは、PTEにリンクされたソース・システムに属すモディファイアまたは価格表を参照します。
属性マッピング・ルールは、個々の取引システムによってそれぞれのPTEについてシードされます。PTEは一連の要求タイプおよびソース・システムにリンクされます。すでに定義されている属性マッピング・ルールと取引データが対応するかどうかを確認します。対応しない場合は、カスタム・マッピングの定義方法について属性マッピングの項を参照してください。
手順2: PL/SQLグローバル体系を決定します。
APIを呼び出してコンテキストを作成する前に、クオリファイア/価格設定属性情報を作成する必要のある要約明細(受注ヘッダー)または要求明細(受注明細)に関する情報を、要求タイプに対応するグローバル・レコード体系で設定する必要があります。要求タイプONTには、受注明細用としてoe_order_pub.g_line、受注ヘッダー用としてoe_order_pub.g_hdrの各グローバル体系が使用されます。要求タイプASOには、グローバル体系aso_pricing_int.g_line_recおよびaso_pricing_int.g_header_recが使用されます。
oe_order_pub.g_line/g_hdr体系や、aso_pricing_int.g_line_recおよびaso_pricing_int.g_header_recのOrder Capture APIドキュメントの詳細は、『Oracle Order Management Open Interfaces, API, & Electronic Messaging Guide』を参照してください。
要求をこれらの体系のいずれかにマップできるかどうかを確認します。呼出し側アプリケーションによって使用される体系に特定の属性マッピング・ルールを定義する必要があります。要求体系をこれらの体系のいずれかにマップできない場合は、新規体系を定義し、この新規体系を使用して属性マッピング・ルールを作成する必要があります。
手順3: 調整情報を保持する表を確認します。
受注/見積/価格設定要求に与えられるすべての特典の分岐を表示するために価格設定エンジンから戻される情報を保持する必要がある場合は、受注管理または受注獲得で使用される価格調整表の使用可否を確認します。
OE_PRICE_ADJUSTMENTS/ASO_PRICE_ADJUSTMENTS
価格調整を保持します。
OE_PRICE_ADJ_ATTRIBS/ASO_PRICE_ADJ_ATTRIBS
調整を行うために適用する資格条件を保持します。
OE__PRICE_ADJ_ASSOCS/ ASO_PRICE_ADJ_RELATIONSHIPS -
価格分岐、販促品およびその他の品目特典用の複数の調整レコード間の関連を保持します。
独自の表を作成する必要がある場合は、上の表の表定義を参考にして表を作成してください。
手順4: 価格設定要求体系を設定します。
次に、QP_PREQ_PUB.PRICE_REQUESTのAPI体系を示します。
(p_control_rec IN
QP_PREQ_GRP.CONTROL_RECORD_TYPE,
x_return_status OUT VARCHAR2,
x_return_status_text OUT VARCHAR2
);
管理レコードp_control_recを設定します。
管理レコードのパラメータの詳細は、『Oracle Order Management Suite APIおよびオープン・インタフェース・マニュアル』のPricingのAPIの項を参照してください。管理レコードにより、価格設定エンジンが価格を戻す方法が決まります。
APIのQP_Price_Request_Context.Set_Request_Id()を呼び出します。
価格設定のrequest_idを設定し、現行の価格設定エンジン呼出しに属する価格設定一時表のデータを価格設定エンジンが識別できるようにします。一時表のデータが、各価格設定エンジン呼出しの前に削除されることはありません。かわりに、以前の価格設定エンジン呼出しのデータが価格設定一時表に残ることがあります。呼出し側アプリケーションは、価格設定エンジンを呼び出すたびにrequest_idを設定する必要があります。これが最初のステップになります。
APIのQP_Price_Request_Context.Set_Request_Id()は、コミットまたはロールバックせずに同じセッションで行われたすべての価格設定エンジン呼出しに対して一意のrequest_idを設定します。これにより、呼出し間の価格設定一時表のデータを削除する必要がなくなります。また、request_idが設定されていない場合、呼出し側アプリケーションは、コミットまたはロールバックせずに次の価格設定エンジン呼出しを行う前に価格設定一時表のデータを削除する必要があります。コミットまたはロールバックを行うと一時表内のデータがパージされ、レコードを削除する必要がなくなります。
属性マッピングに使用されるグローバル体系を設定します。たとえば、要求タイプONTを使用している場合、PL/SQL体系OE_ORDER_PUB.G_LINEを設定します。
APIのQP_ATTR_MAPPING_PUB.Build_contextsを呼び出します。
QP_Attribute_Mapping_PUB.Build_Contexts
( p_request_type_code IN VARCHAR2,
p_line_index IN NUMBER,
p_pricing_type_code IN VARCHAR2
);
このAPIは、属性マッピング・ルールに記載されているパブリック・レコード体系を参照します。このため、各明細の要求明細情報が要求体系にロードされ、明細ごとにAPIが呼び出される必要があります。「コンテキストのビルド」APIは、渡されたline_indexを使用して、マップされている属性を価格設定一時表に挿入します。したがって、要求明細に使用したものもと同じline_indexを使用する必要があります。
属性マッピング・ルールまたはレコード体系が見つからない場合、クオリファイアおよび価格設定属性をqp_preq_line_attrs_tmpに挿入できます。たとえば、価格設定エンジンが特定の価格表から価格をフェッチするには、qualifier_context=MODLISTを使用して価格表をqp_preq_line_attrs_tmpに渡します。
qualifier_attribute=QUALIFIER_ATTRIBUTE4およびqualifier_attr_value_fromにより、price_list_idを保持します。
inventory_item_idはpricing_context=ITEMを使用して一時表qp_preq_line_attrs_tmpに渡されるため、pricing_attribute=PRICING_ATTRIBUTE1およびpricing_attr_value_fromは、item_idを保持します。
「コンテキストのビルド」APIは、p_pricing_type_codeのL(要求明細)を使用して呼び出す必要があります。
要求明細をロードするためのCopy_Line_to_requestの詳細は、『Oracle Order Management Open Interfaces, API, & Electronic Messaging Guide』の「受注管理体系を使用したサンプル・コード」を参照してください。APIのQP_PREQ_GRP.Insert_Lines2を呼び出し、要求明細を価格設定一時表qp_preq_lines_tmpに挿入します。
API体系およびパラメータの説明の詳細は、『Oracle Order Management Open Interfaces, API, & Electronic Messaging Guide』を参照してください。
ユーザー入力の価格設定属性および販促/取引の要求またはクーポンを一時表qp_preq_line_attrs_tmpに追加します。価格設定が資格をチェックしないようにするには、販促品を適用する前にqp_preq_line_attrs_tmpのvalidated_flagを「Y」(販促請求)に設定します。
Append_ask_forプロシージャの詳細は、『Oracle Order Management Open Interfaces, API, & Electronic Messaging Guide』の「受注管理体系を使用したサンプル・コード」を参照してください。これらの属性は、APIのQP_PREQ_GRP.insert_line_attrs2を使用して一時表qp_preq_line_attrs_tmpに挿入できます。
API体系およびパラメータの説明の詳細は、『Oracle Order Management Open Interfaces, API, & Electronic Messaging Guide』を参照してください。
注意: 価格設定インタフェース表および一時表にキーを渡す場合、line_index、line_detail_index などのキーは、pls_integerデータ型の範囲内にする必要があります。
手動調整を適用する場合や、価格設定エンジンにその他の調整を考慮させる場合、これらのレコードを、applied_flagおよびupdated_flagを「Y」(Yes)に設定して価格設定一時表qp_preq_ldets_tmpに挿入します。QP_PREQ_GRP.insert_ldets2 APIを使用して、調整またはモディファイアを価格設定エンジンに渡します。
要約明細が設定されていることを確認します。
価格設定エンジンに対するすべての要求には、受注ヘッダーの情報とともにqp_preq_lines_tmpの要約レコードが含まれている必要があります。価格設定エンジンは、渡された要約明細に対して受注レベルのモディファイアを適用します。要約明細が渡されない場合、価格設定エンジンは、受注レベルの調整を適用できないことがあります。
要約明細のline_type_codeをORDERに設定します受注ヘッダーの場合は、ステップ1〜6を繰り返し、要約明細に対するQP_ATTR_MAPPING_PUB.build_context()の呼出し時にp_pricing_type=Hを使用します。
copy_Header_to_request()を使用して要約レコードを設定する方法の詳細は、『Oracle Order Management Open Interfaces, API, & Electronic Messaging Guide』の「受注管理体系を使用したサンプル・コード」を参照してください。
パーセント価格があるサービス明細については、親明細が渡されることを確認します。サービス品目の価格設定方法の詳細は、「サービス品目の価格設定」を参照してください。
手順5: Price_request()を呼び出します。
APIを呼び出します。
QP_PREQ_PUB.PRICE_REQUEST
(p_control_rec IN QP_PREQ_GRP.CONTROL_RECORD_TYPE,
x_return_status OUT VARCHAR2,
x_return_status_text OUT VARCHAR2);
手順6: 価格設定要求の結果を解釈します。
エラーの処理:
価格設定エンジンは、ハード・エラーとソフト・エラーを戻すことができます。x_return_statusの値がFND_API.G_RET_STS_SUCCESSである場合、価格設定エンジンの呼出しは成功です。
ソフト・エラーは、価格設定時の明細レベルの例外を示します。これらのエラーは、qp_preq_lines_tmp.pricing_status_codeに設定されます。次に、明細に対する3つの成功コードを示します。
G_STATUS_NEW
G_STATUS_UPDATED;
G_STATUS_UNCHANGED
次は、呼出し側アプリケーションからの処理が必要なコードです。
G_STATUS_DELETED
G_STATUS_TRANSIENT
G_STATUS_GROUPING
G_STATUS_INVALID_PRICE_LIST
G_STATUS_GSA_VIOLATIONG_STS_LHS_NOT_FOUND
G_STATUS_FORMULA_ERROR
G_STATUS_OTHER_ERRORSG_STATUS_SYSTEM_GENERATED
G_STATUS_BEST_PRICE_EVAL
G_STATUS_INCOMP_LOGIC
G_STATUS_CALC_ERROR
G_STATUS_UOM_FAILURE
G_STATUS_PRIMARY_UOM_FLAG
G_STATUS_OTHER_ITEM_BENEFITS
G_STATUS_INVALID_UOM
G_STATUS_DUP_PRICE_LIST
G_STATUS_INVALID_UOM_CONV
G_STATUS_INVALID_INCOMP
G_STATUS_BEST_PRICE_EVAL_ERROR
G_STATUS_LIMIT_HOLD
G_STATUS_LIMIT_EXCEEDED
G_STATUS_LIMIT_ADJUSTED
G_STATUS_LIMIT_CONSUMED
GSA違反のG_STATUS_GSA_VIOLATIONは、特殊ケースです。GSA違反の動作の詳細は、次の項の「GSA違反」トピックを参照してください。
様々なステータス・コードの詳細は、このマニュアルのトラブルシューティングの項を参照してください。
要求明細に対してフェッチされた価格表
price_list_idは、qp_preq_lines_tmpのprice_list_id列に設定します。
定価(値引されない基準価格)はunit_priceに戻され、値引価格(すべての値引/追加料金が適用された後)はadjusted_unit_priceに戻されます。これらは、pricing_uom_code単位で表される単位当たりの価格です。pricing_uom_codeは、line_uom_code(受注単位)とは異なることがあります。したがって、価格表がEACH単位で設定されているとともに「主」とマークされており、受注がダース単位で行われたときにダース用の価格表明細がない場合、価格はEACHで戻されます。
priced_quantityには、pricing_uom_code単位で表されたline_quantity(受注明細数量)が保持されます。価格表明細にパーセント価格が設定されている場合、パーセントはpercent_priceに戻され、価格計算に使用された親明細の価格はparent_priceに戻されます。
受注明細に対してフェッチされたモディファイア
モディファイア/調整は、一時表qp_preq_ldets_tmpに戻されます。Pricingには、ビューqp_ldets_vがあります。このビューは、呼出し側アプリケーションが調整の詳細を取引表で挿入/更新するときに参照する必要があります。このレコードのcreated_from_list_line_typeがOID(他の品目値引)、PRG(販促品)、CIE(クーポン発行)またはPBH(価格分岐)である場合、qp_preq_rtd_lines_tmpに関連が保持されます。たとえば、無償品目用として作成された新規明細を検索するには、タイプがPRGの調整明細をqp_ldets_vで検索します。次に、line_detail_indexをqp_preq_rltd_lines_tmpで検索し、related_line_detail_indexをフェッチします。ここで、line_detail_index = related_line_detail_indexを条件としてqp_ldets_vを検索します。これに該当するline_indexが無償品目明細となります。
qp_ldets_v.list_line_type_code = IUEであるレコードが見つかった場合、受注明細に与えられた品目の無償アップグレードがあります。
qp_ldets_v.list_line_type_code=TSNである場合、調整のタイプは条件アップグレードです。
qp_ldets_v.accrual_flagが「Y」に設定されている場合、調整のタイプはポイントで、adjusted_unit_priceの計算には含まれません。Benefit_qtyは非金銭的なポイントに設定されます。
automatic_flag=Yであるすべての調整や、ユーザーによって渡されたautomatic_flag=Nでapplied_flag=Yおよびupdated_flag=Yを持つ手動調整は、エンジンによって適用されています。
qp_ldets_v .operand_calculation_code holds qp_list_lines.arithmetic_operator (%,AMT,LUMPSUM,NEWPRICE).
この値はqp_ldets_v.operand_valueに保持されます。operand_valueの$値は、qp_ldets_v.adjustment_amountに含まれます。adjustment_amountは、価格設定単位(UOM)で表される単位当たりの価格です。
運送費はqp_ldets_v.list_line_type_code=FREIGHT CHARGEであり、charge_type_codeおよびcharge_subtype_codeが設定されています。現在、charge_type_codeとsub_type_codeの組合せに対しては1つの運送費(最高金額)のみが戻されます。
クオリファイアおよび属性
qp_preq_qual_tmp表には、価格調整と一致したクオリファイアが保持されます。この情報は、特定の受注明細に対して一定の調整が適用された理由を追跡するときに役立ちます。qp_preq_line_attrs_tmp体系には、調整レコードと一致した製品属性および価格設定属性が保持されます。
この項では、価格設定エンジンによってサポートされている機能の概要と価格設定エンジンによるこれらの機能の処理方法について説明します。これには、各機能の戻り値に関する情報や、同じ要求明細に対して同じ結果を取得するために後続の呼出しに要求情報を渡す方法に関する情報などが含まれます。
呼出し側アプリケーションが特定のモディファイアを要求明細に適用するために価格設定エンジンに適用する必要がある場合、pricing_status_code = QP_PREQ_GRP.G_STATUS_UNCHANGEDとしてqp_preq_ldets_tmpに挿入する必要があります。QP_PREQ_GRP.insert_ldets2 APIを使用して、調整またはモディファイアを価格設定エンジンに渡すことができます。
手動調整
ユーザーから値引および追加料金タイプと認定され、(非互換性設定ルールのために)非互換解決の一部として削除されるすべての自動モディファイア(automatic_flag = Y)は、プロファイル「QP: 手動値引戻し」が「Y」に設定されている場合、手動値引として戻されます。これらの値引以外にも、値引タイプとして認定されているすべての手動モディファイアも戻されます。呼出し側アプリケーションには、追加料金値引も未適用として戻されます。
注意: 手動調整が適用されたり自動調整が上書きされた場合、これらのモディファイアに対する価格設定の変更は適用できなくなります。これらのモディファイアに対する資格チェックは行われません。たとえば、資格が変更された場合(モディファイアの適格性の基準が変更された場合など)、要求明細が認定されなくても、手動で上書きされたモディファイアは適用され続けます。たとえば、受注見積に手動モディファイアを適用した後、見積が認定されないように変更を行うと、このモディファイアは削除されません。この条件は、モディファイアに対するクオリファイアの変更にも該当します。
自動上書き可能なモディファイアについても同じように処理できます。自動モディファイアを上書きし、単位を変更すると、モディファイアは見積から削除されなくなります。
手動調整の適用
手動調整は、次の2つの方法で適用できます。
呼出し側アプリケーションは、applied_Flag = Yおよびupdated_Flag = Yとして手動調整を価格設定エンジンに渡すことができます。価格設定エンジンは、この手動調整を適用します。呼出し側アプリケーションは、新規オペランドqp_preq_ldets_tmp.operand_valueを渡すことにより、手動調整を上書きできます。手動調整を価格設定エンジンに渡すには、適用対象の要求明細に対して調整をqp_preq_ldets_tmpに挿入します。
たとえば、呼出し側アプリケーションは3つの要求明細を使用して価格設定エンジンを呼び出します。第2要求明細に適用するため、10%の手動調整が設定されます。次に、呼出し側アプリケーションは、列をupdated_flag = Yおよびapplied_flag = Yとして第2要求明細のline_indexを使用し、手動調整をline_detail_tblに渡します。価格設定エンジンAPIは、調整金額を計算し、この手動調整を第2要求明細に適用します。applied_flagおよびupdated_flagは「Y」として戻されます。これは、これらが適用されたことを示します。
呼出し側アプリケーションは、新規販売価格をqp_preq_lines_tmp.updated_adjusted_unit_priceに渡すことにより、販売価格を上書きできます。次に、価格設定エンジンは、要求明細が認定されている適切な手動上書き可能モディファイアを選択し、新規販売価格と一致する調整金額およびオペランドを逆算します。この場合、価格設定エンジンは、calculation_code = BACK_CALCULATE、updated_flag = Yおよびapplied_flag = Yとしてこの手動モディファイアを渡し戻します。逆算は、自動調整と上書き可能手動調整がすべて適用された後に行われます。このため、計算された販売価格には目的の販売価格が反映されます。
たとえば、呼出し側アプリケーションが3つの要求明細を価格設定エンジンに渡す場合、第2要求明細の販売単価80USドルで、定価が100USドルであるときに、販売単価を上書きして90USドルにするとします。 この場合、ユーザーは、第2要求明細に該当するレコードの要求明細のqp_preq_lines_tmp.updated_adjusted_unit_priceに80USドルを渡す必要があります。このとき、価格設定エンジンは、すべての自動調整およびユーザーによって渡された手動上書き調整を適用します。
価格設定エンジンは、販売価格が上書きされたことを登録します。価格設定エンジンは、認定されたすべての手動上書き可能調整を選択し、値引または追加料金を適用する必要があるかどうかを判断します。この場合、すでに適用されている手動上書き可能調整が優先されます。すでに適用されている手動上書き可能調整がない場合、価格設定エンジンは、手動上書き可能追加料金をランダムに選択し、調整金額(この場合は追加料金$10)を逆算し、これをcalculation_code = BACK_CALCULATEとして戻します。
追加料金調整が適用されない場合、価格設定エンジンは、手動上書き可能値引調整を適用しようとします。認定された手動上書き可能調整が適用されない場合、第2要求明細に関するエラー・ステータスが戻され、pricing_status_textには手動調整が適用されないことが示されます。逆算時にエラーが発生した場合、第2要求明細に関するエラー・ステータスが戻されます。エラーが発生すると、第2要求明細のpricing_status_codeのエラー・コードはQP_PREQ_PUB.G_BACK_CALCULATION_STSになります。
適用された手動調整の削除
適用された手動調整を削除するには、価格設定エンジンから戻された適用済調整が格納される呼出し側アプリケーションの取引表からこれらの手動調整を削除する必要があります。つまり、呼出し側アプリケーションも、調整の属性および関連を削除する必要があります。手動調整が価格分岐である場合、価格分岐の子明細、価格分岐と子明細の属性、および価格分岐と子明細の関連も適用する必要があります。
これらはいったん取引表から削除されると、価格設定エンジンに対する後続の呼出しに渡されなくなり、適用もされません。
適用された自動上書き調整の削除
ビジネス上、自動上書き調整の削除がサポートされている場合、呼出し側アプリケーションは、これらの調整をapplied_flag = Nおよびupdated_flag = Yとして挿入する必要があります。また、これらの調整は、後続の価格設定エンジン呼出し時に価格設定エンジンに渡す必要があります。要求明細がこの自動調整に適格であっても、この自動調整は適用されません。
自動上書き可能モディファイアの適用
自動上書き可能モディファイアを適用するには、updated_flag = Y、applied_flag = Yおよびpricing_status_code = QP_PREQ_GRP.G_STATUS_UNCHANGEDとしてモディファイアをqp_preq_ldets_tmpに挿入することにより、モディファイアを価格設定エンジンに渡します。価格設定エンジンにより、このモディファイアが適用されます。
手動/上書き可能価格分岐
手動上書き可能価格分岐を適用するには、価格分岐ヘッダー調整および子明細を価格分岐モディファイアと子分岐明細の関連とともに上書き済オペランドを使用して渡します。分岐が評価され、上書済価格分岐が適用されます。また、価格設定エンジンから以前に戻された容積属性を価格分岐モディファイアおよび子明細とともに必ず渡す必要があります。価格設定エンジンは価格分岐モディファイアに関する品目数量/金額情報を導出するために価格設定を参照しないため、容積属性が必要です。関連を挿入するには、QP_PREQ_GRP.insert_rltd_lines2 APIを使用します。
価格設定を使用して、GSA価格表を作成できます。品目の価格がGSA以外の顧客の品目のGSA価格未満である場合、GSA違反が発生します。価格設定エンジンは、価格設定エンジン呼出しの終わりにGSA違反をチェックします。GSA違反が起きた場合は、要求明細のpricing_status_codeはQP_PREQ_GRP.G_STATUS_GSA_VIOLATIONに設定されます。呼出し側アプリケーションは、警告またはエラー・メッセージを表示して、GSA違反を処理します。GSA顧客の場合、価格設定エンジンは、GSA価格表の価格を提供します。この要求明細は、GSA顧客に対してさらに値引の対象となる資格を付与できます。
価格設定エンジンがGSA違反のチェックを行うのは、管理レコードのGSA_CHECK_FLAGが「Y」として渡され、要求明細でGSAクオリファイア(コンテキスト= CUSTOMER、属性= QUALIFIER_ATTRIBUTE15)が値「N」(顧客がGSA以外であることを示す)として渡された場合のみです。属性マッピングAPIは、ARの場合は顧客でチェックされたgsa_indicatorフラグに基づいて、あるいは請求先事業所のgsa_indicatorが「Y」に設定されている場合にGSAクオリファイアを戻します。
Order Managementにおいて、プロファイル「GSA違反」が「警告」に設定されている場合、警告メッセージが表示されます。プロファイルが「エラー」に設定されている場合、エラー・メッセージが出されます。
価格設定エンジンは、すべてのモディファイアを取得した後、バケット・ルールを適用し、販売単価を計算します。
価格設定エンジンに渡された属性またはファクタに基づいて、算式が処理され、オペランドが評価されます。
端数処理とは、定価および販売価格の端数処理を示します。端数処理は、価格設定エンジンの入力であるcontrol_recordのrounding_flag、およびプロファイル「QP: 販売価格端数処理オプション」の値によって管理されます。詳細は、このマニュアルの「プロファイル・オプション」を参照してください。端数処理フラグの値の詳細は、『Oracle Order Management Open Interfaces, API, & Electronic Messaging Guide』を参照してください。
受注明細に適用される運送費が評価され、要求明細の手数料タイプ(charge_type_codeおよびcharge_subtype_code)ごとに最大運送費が適用されます。運送費は販売価格に影響しません。適用が必要な手動および上書き手数料は、すべての手動調整(値引および追加料金)と同様に、applied_flag = Yおよびupdated_flag = Yとして価格設定エンジンに渡す必要があります。
クーポンの発行時には、一意のクーポン番号が生成されます。この一意のクーポン番号とともに、レコードがQP_COUPONS表に挿入されます。この番号が表に表示され、ユーザーが選択可能なクーポンが示されます。この番号は一意です。この番号は、後で値引を消費するときに使用できます。1つのクーポン番号は1つの消費に相当します。いったん使用(消費)されたクーポン番号は再使用できなくなります。ユーザーがクーポンを消費するには、クーポン番号を把握している必要があります。
次に注文を行う場合、クーポン番号を入力すると、クーポンに適した値引が認定され、値引が適用されます。クーポンはいったん消費されると削除されます。
注意: クーポン発行モディファイアの場合、「特典数量」フィールドおよび「特典単位」フィールドに入力した値にかかわらず、発行されるクーポンは1つのみとなります。
クーポンはQP_COUPONS表に格納され、消費されると消費済としてマークされます。
クーポンを消費するには、クーポンを受注明細のクオリファイアとして価格設定エンジンに渡す必要があります(コンテキスト = MODLIST、属性 = QUALIFIER_ATTRIBUTE3、値 = <クーポン番号>)。クーポンは、ask_for_promotionsとともに明細の属性として格納できます。価格設定エンジンが後続の価格再設定呼出しにクーポン値引を提供できるようにするには、クーポンを属性として渡す必要があります。
設定時にクーポン発行モディファイアがクオリファイアを持つようにできます。クーポンが消費されると、すべてのクオリファイアが渡されたかどうかについての資格チェックが行われます。クオリファイアが渡されなかった場合、クーポンに関連するモディファイアの要求明細は認定されません。この資格チェックが行われないようにするには、このクーポンのクオリファイア・レコードに対するqp_preq_line_attrs_tmpのvalidated_flagに値「Y」を渡します。
Order Managementでは、受注に対するクーポンが認定されると、受注が取り消されたり品目が戻されても、クーポンは削除されません。価格再設定時には、新規クーポンが発行され続けます。
受注明細について品目アップグレードが認定されると、品目アップグレード・モディファイアがこの明細に対して適用され、qp_ldets_v temporary一時表に表示されます。qp_ldets_v一時表では、related_item_id列にはアップグレードされた品目のinventory_item_idがあり、inventory_item_id列には元の品目のinventory_item_idがあります。呼出し側アプリケーションは、明細上の当初の受注品目をアップグレードされた品目に置換できます。価格再設定時には、呼出し側アプリケーションは元の品目を明細に渡し戻し、受注の価格が同じ方法で再設定されるようにする必要があります。これを行うには、属性マッピングの前に元のinventory_item_idを品目アップグレード・モディファイアからパブリック・レコード体系にロードします。
品目アップグレード・モディファイアを設定するには、関連タイプを販促アップグレードとして在庫品目関連に購買品目とアップグレード品目間の関連を定義する必要があります。
受注明細に対して販促品モディファイア(PRG)が認定されると、無償品目明細用の新規受注明細が作成されます。通常、PRGは、品目Aを購買すれば品目Bをx%オフで購買可能、という方式で設定されます。この場合、品目Aを受注したときにこの品目に対してPRGが認定されると、品目Bについて新規受注明細が作成され、この新規明細に対してx%の値引が適用されます。1つ購買すれば1つ無償という場合、この値引は100%になります。
価格設定エンジンによって作成される新規明細は、QP_PREQ_GRP.G_BY_ENGINEに設定されたqp_preq_lines_tmp一時表のprocessed_codeの値によって識別できます。
呼出し側アプリケーションは、無償品目明細を示す新規受注明細を作成する必要があります。この無償品目は、qp_preq_line_attrs_tmpの属性としてこの明細に渡されます。この無償品目明細の値引はqp_ldets_v一時表に渡されます。PRGモディファイアを認定された受注明細は親モディファイアであり、無償品目明細の値引は子明細です。
qp_preq_rltd_lines_tmp一時表にはrelationship_type_code = QP_PREQ_GRP.G_GENERATED_LINEとして親子関連が作成されます。line_detail_indexは親明細のline_detail_indexで、related_line_detail_indexは子明細のline_detail_indexです。価格設定エンジンから戻された前述の情報は、呼出し側アプリケーションによって取引表に格納される必要があります。
価格再設定時には、価格設定エンジンのパブリックAPIのQP_PREQ_PUBにより、価格設定の既存の無償品目明細と販促品モディファイアが比較されます。販促品モディファイアが変更されていない場合、QP_PREQ_GRP.G_STATUS_UNCHANGEDの値がqp_preq_lines_tmpのprocess_status列に設定されます。この場合、呼出し側アプリケーションは無償品目明細を変更する必要はありません。価格設定が変更された場合、process_statusにはQP_PREQ_GRP.G_STATUS_UPDATED値が設定されます。要求明細の1つが販促品明細に対して認定される新規の価格設定エンジン呼出しの場合、process_status = QP_PREQ_GRP.G_STATUS_NEWとして新規明細がqp_preq_lines_tmpに作成されます。この場合、呼出し側アプリケーションはこの明細を取引システムに挿入できます。
process_status = QP_PREQ_GRP.G_STATUS_NEW/G_STATUS_UPDATEDとして無償品目明細が作成される場合、呼出し側アプリケーションは別の呼出しを行い、無償品目明細の運送費を計算する必要があります。販促品の運送費に対する暗黙的呼出しの詳細は、「無償品目明細の運送費」を参照してください。
無償品目明細が必要ない場合は、無償品目明細を明細から削除できます。無償品目を再作成する必要がないことを価格設定エンジンに認識させるには、次の手順を実行します。
無償品目明細、その属性、調整、購買明細と無償品目明細の関連をシステムから削除します。購買明細のPRG調整は保持しますが、updated_flag = QP_PREQ_GRP.G_YESと設定してこれを更新済としてマークします。
受注/見積に同じPRG(Aを購買すればBとCが無償という方式で販促品モディファイアが設定されている場合)があるために、その他の無償品目明細が存在する場合、updated_flag = Yと設定し、残りの無償品目明細に対する値引を更新済としてマークします。
これで、削除した無償品目明細が再作成されなくなります。呼出し側アプリケーションが無償品目をその他の品目に置換する必要がある場合も、この方法を採用する必要があります。
購買明細を削除する場合、呼出し側アプリケーションは、この購買明細に関連付けられているすべての無償品目、購買明細の調整、無償品目明細の調整、および購買明細と無償品目明細の関連を削除する必要があります。
無償品目明細の運送費
無償品目明細には運送費が適用されません。無償品目の運送費を取得するには、2回目の価格設定エンジン呼出しを行い、price_flag = QP_PREQ_GRP.G_PHASEである無償品目明細のみを挿入します。これにより、無償品目明細の運送費が検索されます。運送費は無償品目明細の価格に影響しません。無償品目明細に運送費(存在する場合)を適用できないのは、運送費を検索するための属性が無償品目明細にマップされていないためです。無償品目明細は価格設定情報とともに挿入され、この明細に挿入される属性は製品のみです。無償品目の運送費を取得するには、呼出し側アプリケーションが価格設定エンジンに対して別の暗黙的呼出しを行う必要があります。運送費呼出しは、process_status = QP_PREQ_GRP.G_STATUS_NEW / G_STATUS_UPDATEDである明細がqp_preq_lines_tmpに存在する場合のみ行う必要があります。この場合、呼出し側アプリケーションはこの暗黙的呼出しを行うことにより、すべての無償品目明細を価格設定エンジンに渡せます。明細グループ・ベースのモディファイアがある場合、受注または見積の価格再設定時に受注または見積に対して無償品目明細が認定されます。たとえば、2つの販促品モディファイアがある場合、Aを追加するとBが無償になります。
PRG1: Aを購買するとBが無償
PRG2: AおよびBを購買するとCが無償
Bの運送費の計算時には、Aも渡されている場合、受注または見積に対して無償品目Cを認定することもできます。これを行うには、呼出し側アプリケーションが受注または見積のすべての明細を暗黙的呼出しに渡し、運送費を評価する必要があります。この場合、QP_UTIL_PUB.Get_Order_Line_statusが呼び出され、Get_Order_Line_Statusの出力によってall_lines_flag = QP_PREQ_GRP.G_YESが渡される場合のみ、すべての明細を渡す必要があります。そうでない場合、無償品目明細のみを渡します。Get_Order_Line_Statusによってall_lines_flag = QP_PREQ_GRP.G_YESが渡されるのは、明細グループ・モディファイアまたは他の品目値引モディファイアがある場合です。すべての明細を渡すことにより、見積/受注に対して適用可能なすべてのモディファイアが認定され、後続の価格再設定時に価格が変更されないようにします。
他の品目値引(OID)は、新規受注明細が作成されない点を除いて、前述した無償品目や販促品と非常に似ています。他の品目値引は購買品目Aとして設定され、品目Aと品目Bの両方を受注した場合、品目Bに対してx%の値引が適用されます。
したがって、OIDとして認定されるには、品目Aと品目Bの両方が要求明細に含まれている必要があります(品目Aと品目Bが含まれる要求明細を価格設定エンジンに渡す必要があります)。この場合、品目Aが含まれる要求明細にOIDモディファイアが適用され、品目Bが含まれる明細に値引が適用されます。
OIDモディファイアは、OIDモディファイアの主要品目である品目Aが含まれる要求明細のline_indexが含まれ、created_from_list_line_type = QP_PREQ_GRP.G_OTHER_ITEM_DISCOUNTであるqp_ldets_vにあります。OID値引は、品目Bが含まれる要求明細のline_indexとともに挿入されます。また、他の明細に対するOIDモディファイアと値引調整間の関連レコードもqp_preq_rltd_lines_tmpに作成されます。この場合、relationship_type_code = QP_PREQ_GRP.G_GENERATED_LINEで、OIDモディファイアのline_detail_indexはline_detail_index、値引調整のline_detail_indexはrelated_line_detail_indexです。これらすべての情報は、呼出し側アプリケーションの取引表に格納する必要があります。
Order Management(OM)およびOrder Capture(OC)のコンフィギュレータは、OM APIおよびOC APIを使用して価格設定エンジンを呼び出します。展開品目および構成品目の場合、unit_priceは0(ゼロ)にデフォルト設定されています。価格設定エンジンが呼び出される場合、展開品目または構成品目が含まれる受注明細がOMプロファイル「OM: 展開品目の手数料」に応じてprice_flag = NまたはPとして価格設定エンジンに渡されます。
このプロファイルが「Y」に設定されている場合、展開品目の運送費を計算する必要があります。この場合、price_flagは「P」です。そうでない場合は「N」です。いずれの場合も、unit_priceは計算されません。
サービス品目の価格設定の要求は、Oracle Order Management、Oracle Quoting、Oracle Istore、およびOracle Service Contractsなどの統合アプリケーションによって渡すことができます。
品目に親明細の価格のパーセントとして設定されている価格表明細がある(たとえば、ゴールド・サポートと呼ばれるサービス品目の価格がプラチナ・サービスと呼ばれる親サービス可能品目の価格の10%である)場合、親明細をqp_preq_lines_tmpに渡し、親子の関連をqp_preq_rltd_lines_tmpに渡す必要があります。価格設定にサービス関連およびその他の関連を渡す場合は、API QP_PREQ_GRP.insert_rltd_lines2を使用して次のパラメータを設定します。
relationship_type Line_Index:= <親明細索引>;
Related_Line_Index:= <子明細>;
Relationship_Type_Code:= QP_PREQ_GRP.G_SERVICE_LINE;
12か月間にわたるサービス品目の価格を設定する場合など、一定期間における品目の価格を設定する必要がある場合、期間をuom_quantityとしてqp_preq_lines_tmp体系に渡す必要があります。サービスの開始日および終了日が既知の場合は、それを、contract_start_dateまたはcontract_end_dateとしてqp_preq_lines_tmp体系に渡すことができます。
サービス品目の価格表明細が渡され、親明細の定価に基づいてパーセント価格が計算されます。この場合、親明細が別の受注/見積に属しているのが最適です。親明細を削除または更新する場合、サービス明細も削除または渡す必要があります。
価格設定エンジンに渡されるOrder Management属性
サービス品目の価格設定時には、次のOrder Management属性が価格設定エンジンのアプリケーション・プログラム・インタフェース(API)によって渡されます。
受注数量(API: P_Line_Tbl.Line_Quantity): サービス可能品目単位で表されるサービス品目の受注数量。
受注単位コード(API: P_Line_Tbl.Line_Uom_Code): タイム・スケールの単位。
サービス継続期間およびサービス期間(API: P_line_Tbl.UOM_Quantity): 受注したサービスの継続期間。たとえば、1年間のコンピュータ保守を受注した場合、「サービス継続期間」を1に、「サービス期間」を「年」に設定します。これらの値は、受注の品目を入力する際に、「サービス」タブ内で使用可能となります。APIで、P_line_Tbl.UOM_Quantityは、受注単位コードのサービス期間で表されるサービス継続期間を意味します。
サービス継続期間と価格設定
サービス品目の価格設定時、Oracle Advanced Pricingは、単位(UOM)換算を評価して、次の基準を使用してサービス継続期間を判断します。
価格設定する取引でサービス日付が指定されている場合、Oracle Advanced PricingはOracle Service Contractsを呼び出して、サービス継続期間を計算するかまたは価格設定単位に換算します。Service ContractsのAPIは、OKS_OMINT_PUB.get_target_quantityです。
価格設定する取引でサービス日付が指定されていない場合、Oracle Advanced PricingはOracle Inventoryの単位換算設定を使用して、サービス継続期間を価格設定単位に換算します。
期間換算の詳細は、『Oracle Service Contracts Implementation Guide』および『Oracle Service Contracts User's Guide』を参照してください。
次の表に、サービス継続期間が渡される場合と渡されない場合に価格設定が金額を評価する方法を比較して示します。表では、次の用語が使用されます。
製品: サービスが換算されている製品。たとえば、保証が含まれているラップトップ・モデルなど。
サービス継続期間: サービスの継続期間。たとえば、1年保証、5年保証など。
金額: 数量によって掛けられる販売単価。
-- | 要求単位、つまり単位換算なしで検出される価格表 | 価格表単位と要求単位の間で必要な単位換算 | 金額算式1 |
---|---|---|---|
サービス継続期間が渡されている(Order Management、QuotingおよびiStore) |
|
| 単価×価格設定数量。 |
サービス継続期間が渡されない場合(Service Contracts) |
|
| 単価×価格設定数量×製品数量 |
注意: 1 価格要求(価格設定エンジンではなく)を呼出し側のアプリケーションによって金額が計算されます。
サービス品目のサービス継続期間および拡張され定価の計算例
次に、価格設定がサービス品目の金額を判断するためどのようにサービス継続期間を計算するかの例を示します。価格表設定、入力(価格設定が呼び出し側アプリケーションから受け取る日付およびサービス継続期間)、および価格設定が計算する出力(単価など)の詳細を表に示します。例では、次の価格表設定が使用されます。
価格表1(PL1): 120ドル/年
価格表2(PL2): 10ドル/月
注意: PL1およびPL2の設定は同じ、つまり10ドル/月と120ドル/年は等しいことに注意してください。定価は、使用される価格表に関わりなく、同様に計算されます。
次の表に、呼出し側アプリケーションから価格設定に送られる、サービス日付、単位、およびサービス継続期間などの価格要求の入力を示します。価格設定は、これらの入力を評価して、拡張された販売価格を計算します。
サービス開始日 | サービス終了日 | サービス単位 | サービス継続期間 | 製品数量 |
---|---|---|---|---|
2006年1月1日 | 2007年12月31日 | 年 | 2 | 10 |
次の表に、サービス継続期間が渡される場合と渡されない場合に、価格設定が拡張された定価、単価、価格設定数量(出力)を計算する方法を示します。どちらの場合も、金額は2400ドルです(金額は、Oracle Order ManagementやOracle Service Contractsなど、Oracle Advanced Pricingを呼び出しているアプリケーションによって計算されます)。
-- | 単価 | 価格設定数量 | 金額1 (単価×価格設定数量) |
---|---|---|---|
PL1を使用(単位換算なし) | 240ドル(定価×サービス継続期間: 120×2) | 10(製品数量と同じ) | 240*10 = $2400 |
PL2を使用(単位換算) | 10ドル(価格表上の定価と同じ) | 240(製品数量×PL単価でのサービス継続期間 - 月: 10×12×2) | 10*240 = $2400 |
-- | 単価 | 価格設定数量 | 金額1 (単価×価格設定数量×製品数量) |
---|---|---|---|
PL1を使用(単位換算なし) | 120ドル(価格表上の定価と同じ) | 2(PL単価でのサービス継続期間 - 年) | 120*2*10 = $2400 |
PL2を使用(単位換算) | 10ドル(価格表上の定価と同じ) | 24(PL単価でのサービス継続期間 – 年: 12×2) | 10*24*10 = $2400 |
1価格設定エンジンではなく呼出し側アプリケーションによって、価格要求後の金額が計算されます。どちらの場合も金額が同じであることに注意してください。
注意: 次の場合は、サービス日付およびサービス継続期間が渡されます。
単位換算が実行されない場合は、単価においてサービス継続期間が考慮されます。
単価 = (価格表からの定価)×サービス継続期間
= 120*2 = $240
単位換算が実行される場合、価格設定数量においてサービス継続期間が考慮されます。
価格設定数量 = 製品数量×単位換算ファクタ×サービス継続期間
= 10*12*2 = 240.
サービス日付が渡され、サービス継続期間が渡されない場合は、次のようになります。
単価は常に価格表上の定価となります。
価格設定数量は常にPL単位でのサービス継続期間となります。
呼出し側アプリケーションは、販促品/モディファイアをクオリファイアとして要求明細に渡すことにより、要求明細に販促要求を適用するよう要求できます。コンテキスト = MODLIST、属性 = QUALIFIER_ATTRIBUTE1、value_from = 販促要求のlist_header_idとして販促要求をクオリファイアとして渡すと、販促要求のすべてのモディファイアが要求明細に適用されます。また、呼出し側アプリケーションは、特定のモディファイア明細を適用するよう要求することもできます。この場合、コンテキスト = MODLIST、属性 = QUALIFIER_ATTRIBUTE2、value_from = 要求対象のモディファイア明細のlist_line_idとしてモディファイア明細を渡す必要があります。これは、Append_ask_forプロシージャの一部として販促/モディファイア要求を属性としてqp_preq_line_attrs_tmpに挿入することで実行できます。
validated_flagが「Y」としてqp_preq_line_attrs_tmpのクオリファイア・レコードに渡される場合、価格設定エンジンは販促/モディファイア要求のクオリファイア設定を参照しません。validated_flagは適切に渡される必要があります。また、販促要求を取引表に格納し、価格再設定呼出しごとにこれらを渡すことにより、販促要求が一貫して適用されるようにする必要があります。
適用された販促要求の削除:
販促要求を削除する必要がある場合は、販促要求を取引表から削除し、価格設定エンジンを呼び出し、販促要求が適用されないようにする必要があります。また、販促要求のモディファイアが上書きされている場合、この販促要求は削除されません。呼出し側アプリケーションは、この販促要求を取引表から削除する必要があります。販促要求の削除時には、販促要求のlist_header_idがある調整を削除する必要があります。呼出し側アプリケーションが特定のモディファイア明細を要求した場合、要求されたモディファイア明細のvalue_fromとlist_line_idが同じである調整を削除する必要があります。
要求明細に対して条件代替(TSN)モディファイアが認定されると、created_from_list_line_type = QP_PREQ_GRP.G_TERMS_SUBSTITUTIONとしてqp_ldets_vに明細詳細レコードが挿入されます。
価格設定では、次の3つのタイプの条件アップグレードがサポートされています。
qp_ldets_v.substitution_attribute = QUALIFIER_ATTRIBUTE1である場合、substitution_toにpayment_term_idが保持されます。
If qp__ldets_v.substitution_attribute = QUALIFIER_ATTRIBUTE10である場合、
substitution_toには運送条件コードが保持されます。
qp_ldets_v.substitution_attribute = QUALIFIER_ATTRIBUTE11である場合、
substitution_toには出荷方法が保持されます。
条件タイプであるsubstitution_attributeに基づいて、要求明細に対してTSNモディファイアが認定されると、該当する条件(受注/見積/要求の支払/出荷/運送条件など)をqp_ldets_v.substitution_toの値に置換する必要があります。属性マッピング・ルールがある場合は、価格再設定呼出しを行う前にレコード体系に古い条件を設定し、古い条件が戻されるようにする必要があります。あるいは、属性マッピング・ルールがなく、属性が直接渡される場合は、古い条件が価格設定エンジンに渡されるようにする必要があります。
また、要求明細に対してTSNモディファイアが認定されなくなったために、TSNモディファイアが後続の価格再設定呼出しに渡されない場合、TSNモディファイアを取引表から削除する前に古い条件を置換する必要があります。
Oracle Advanced Pricingは、価格設定またはクオリファイア属性により設定できるクロス受注ボリューム・ベースのモディファイアを備えています。価格設定属性には、「期間1 品目数量」や「期間1 品目金額」などがあります。これらの属性は営業単位固有であり、オーダー管理PTEでシードされます。クロス受注ボリューム金額(期間1 品目金額など)は、販売価格ではなく定価により計算されます。したがって、計算された金額は、販売価格に基づくOrder Managementに表示される受注合計とは異なるものになります。
特定の営業単位のクロス受注ボリューム合計を検出するには、コンカレント・プログラム「クロス受注ボリューム・ローダー」を実行する必要があります。このプログラムは、受注管理(OM)表の受注情報を検証し、OM表のOE_ITEM_CUST_VOLS_ALLおよびOE_ITEM_CUST_VOLS_ALLを設定します。詳細は、『Oracle Advanced Pricingユーザーズ・ガイド』のレポートおよびコンカレント・プログラムに関する項を参照してください。
注意: モディファイア・レベル: クロス受注ボリューム属性によってモディファイアを設定している場合は、「明細のグループ」モディファイア・レベルではなく「明細」モディファイア・レベルを選択します。これをお薦めする理由は次のとおりです。1)クロス受注ボリューム属性は、現在のオーダーの受注に基づかず、以前に記帳された受注に基づく。2)クロス受注ボリューム・ロード属性の使用時には、以前の受注全体の明細の合計がすでに考慮される。
定型価格: クロス受注ボリューム・ローダーでは、定型価格が計算から除外されます。チャージ周期がNULLの受注明細のみ、この計算に含められます。
また、シード済属性マッピング・ルールにより、OMクロス受注ボリューム表から特定の属性のクロス受注ボリューム合計が取得されます。価格設定エンジンは、build_contexts APIが戻すクロス受注ボリューム属性に基づいて、要求明細に対してモディファイアを認定します。呼出し側アプリケーションが新規request_type_codeまたは別のグローバル体系を使用している場合、次の手順を実行して、価格設定エンジンがクロス受注ボリューム・ベースの値引を処理するようにします。
モディファイアの設定時に使用されるクロス受注ボリューム属性ごとに前述の表または新規の表にクロス受注ボリューム合計を設定するコンカレント・プログラムを作成します。
モディファイアの設定時に使用されるクロス受注ボリューム属性ごとにクロス受注ボリューム合計を抽出する属性マッピング・ルールを作成します。
クロス受注ボリュームの詳細は、『Oracle Advanced Pricingユーザーズ・ガイド』のクロス受注ボリューム・ロードおよびクロス受注ボリューム・レポートに関する項を参照してください。
販促限度は、モディファイアに対して設定されます。価格設定エンジン呼出しが行われると、要求明細に適したモディファイアが認定されます。これらのモディファイアに限度が設定されている場合、適用されるモディファイアはこの限度から消費されます。価格設定エンジンは、限度残高詳細を保守する限度エンジンを呼び出します。限度機能を使用するには、price_request_codeを渡して各要求明細を一意に識別する必要があります。
たとえば、request_type_code||'-'||header_id||'-'||line_idを連結してprice_request_codeを作成します。限度消費は価格設定限度表で要求明細ごとに更新され、price_request_codeは要求明細を識別するためのキーとして使用されます。価格設定エンジン呼出しの後は、限度に関するエラーを処理する必要があります。限度が原因でエラーが発生した場合、各要求明細のqp_preq_lines_tmp.pricing_status_codeにエラー・ステータスが設定されます。エラーは適切に処理される必要があります。価格設定エンジン呼出しの目的が受注の価格設定である場合、限度が原因で明細の1つに対してエラー・ステータスが出されると、ビジネス要件に応じて受注または特定の明細が保留されたり、警告メッセージが表示されることがあります。
限度消費
限度消費では、手動モディファイアまたは上書きされた自動/手動モディファイアおよびフェーズ外のモディファイアは評価されません。フェーズ外のモディファイアとは、現在の価格設定イベントに属さない価格設定フェーズ内にある以前の価格設定イベントで適用されたモディファイアです。たとえば、受注明細が入力済および保存済で、その受注明細の価格が$80であったとします。限度は、たとえば10ドルのみを消費するバケットされた新規価格モディファイアで20ドルに定義されています。限度APIは、調整金額により新規価格モディファイアを適用するため、10ドルのみを消費できます。限度が20ドルすべてを消費できるというように、以前のバケットでモディファイアが上書きされている場合でも、限度エンジンは上書きされたモディファイアを参照せず、10ドルのみの消費を許可します。これは、以前のバケットにフェーズ外モディファイアまたは手動モディファイア、あるいは上書きされたモディファイアが存在する、バケットされたモディファイアで定義された限度に固有の問題です。
受注明細が戻されたり修正または取消しが行われる場合、限度残高を更新する必要があります。呼出し側アプリケーションが価格設定エンジン呼出しを行う場合、価格設定エンジンはこの処理をprice_request_code passedに対して実行します。価格設定エンジン呼出しが行われない場合、この処理を行うためのAPIが提供されます。限度消費詳細を更新するには、次のAPIを呼び出す必要があります。
QP_UTIL_PUB.Reverse_Limits (p_action_code IN VARCHAR2,
p_cons_price_request_code IN VARCHAR2,
p_orig_ordered_qty IN NUMBER DEFAULT NULL,
p_amended_qty IN NUMBER DEFAULT NULL,
p_ret_price_request_code IN VARCHAR2 DEFAULT NULL,
p_returned_qty IN NUMBER DEFAULT NULL,
x_return_status OUT VARCHAR2,
x_return_message OUT VARCHAR2);
このAPIの詳細は、『Oracle Order Management Open Interfaces, API, & Electronic Messaging Guide』を参照してください。
複数通貨機能では、渡された価格表が渡された通貨に含まれる必要があります。または、渡された通貨が渡された価格表に含まれる必要があります。渡された通貨コードが複数通貨価格表の一部ではない場合、価格設定エンジンは価格を見つけることができません。これらが確実に含まれるよう、価格設定には、渡された通貨および価格表を検証するためのAPIが用意されています。この検証は、統合コードで行う必要があります。このAPIは次のようになります。
QP_UTIL_PUB.Validate_Price_list_Curr_code
(
l_price_list_id IN NUMBER
l_currency_code IN VARCHAR2
l_pricing_effective_date IN DATE
l_validate_result OUT VARCHAR2
);
詳細は、『Oracle Order Management Open Interfaces, API, & Electronic Messaging Guide』を参照してください。価格を導出するためにプロファイル「QP: 複数通貨インストール済」が「Y」に設定されている場合、価格設定エンジンは複数通貨の価格表を検索します。
また、価格設定では、端数処理した販売価格または調整金額を戻すAPIが用意されており、複数通貨の価格表および受注通貨に基づいて端数処理ファクタが使用されます。価格設定エンジンによる端数処理とは別に端数処理を行う必要がある場合、このAPIを使用できます。APIは次のように呼び出します。
QP_UTIL_PUB.Round_price(p_operand => null
,p_rounding_factor => null
,p_use_multi_currency => p_use_multi_currency
,p_price_list_id => p_price_list_id
,p_currency_code => p_currency_code
,p_pricing_effective_date => p_pricing_effective_date
,x_rounded_operand => l_rounding_factor
,x_status_code => l_status_code
,p_operand_type => 'R'
);
以前に価格設定した受注または見積の価格表または通貨を変更する場合、異なる通貨に基づいて異なる価格が戻されることがあるため、要求の価格を必ず再設定してください。
価格設定エンジン呼出しを行うサンプル・スクリプトは複数あります。これらのサンプル・スクリプトには次のものがあります($QP_TOP/patch/115/sqlを参照)。
qp_engine_testing.sql: 価格要求のPL/SQL体系を設定して価格設定エンジン呼出しのデモを行います。
qp_manual_adjustments.sql: 手動調整の適用方法のデモを行います。
qp_override_selling_price.sql: 販売価格の上書きのデモを行います。
qp_direct_insert.sql: パフォーマンスを向上させるために価格要求情報を価格設定一時表に挿入するデモを行います。
qp_test_service.sql: サービス品目の価格設定の設定のデモを行います。
qp_test_oid.sql - 他の品目値引設定のデモを行います。
他のOracle Applicationsによる複数通貨機能の組込み要件
Oracle Advanced Pricingでは、複数通貨価格表機能を使用して、複数通貨を同じ価格表または基本契約に添付できます。これにより、処理されるデータ量を削減し、ユーザーによる保守作業量を大幅に軽減できます。また、GL日次レート、固定レート、ユーザー入力および機能呼出しなど、換算レートを導出するための方法を各種設定できます。
複数通貨の価格表を使用したインストールをサポートするために、呼出し側アプリケーションによって次のステップが使用されます。
Order Management Minipack-Hまたはアプリケーション・リリース11.5.8以上をインストールします。
サイト・レベルのプロファイル・オプション「QP: 複数通貨インストール済」を「Yes」に設定します。
コンカレント・プログラム「複数通貨換算基準で価格表の更新」を実行します。コンカレント・プログラムの実行後、すべての価格表および基本契約価格表が複数通貨の価格表に変換されます。
ユーザーが複数通貨の価格表に変換した場合、通貨の換算を有効にするには、価格設定エンジンを呼び出すアプリケーションが管理レコード変数use_multi_currencyを「Yes(Y)」として価格設定エンジン呼出しに渡す必要があります。この変数は、呼出し側アプリケーションが複数通貨機能を起動するかどうかを決定するためのファクタです。
ヘッダーおよび明細の価格表名の呼出し側アプリケーションLOV(値リスト)を変更し、複数通貨の価格表および通貨を示す必要があります。
ユーザーが初めて受注通貨を入力して「価格表」をクリックする場合、値リストには、「通貨換算基準」の「換算先通貨」が受注(取引)通貨と同じ価格表のみが表示されます。また、受注の価格設定の有効日(入力されている場合)は、「換算先通貨」の有効日の範囲内である必要があります。このことは、ヘッダー・レベルと明細レベル両方の値リストに当てはまります。価格設定はQP_PRICELISTS_LOV_Vビューを備え、これにより、呼出し側アプリケーションは、特定の取引のための価格表の値リストを表示できます。
ユーザーが初めて価格表を入力して「通貨」をクリックする場合、値リストには、「通貨換算基準」のすべての「換算先通貨」が表示されます。また、受注(取引)の価格設定の有効日(入力されている場合)は、「換算先通貨」の有効日の範囲内である必要があります。このことは、ヘッダー・レベルと明細レベル両方の値リストに当てはまります。価格設定に用意されているAPIを呼び出すアプリケーションは、QP_UTIL_PUB.Get_Currencyと呼ばれます。
現在、受注処理APIは、渡された通貨および価格表を検証します。この場合、通貨は、この価格表に添付されている通貨換算基準の換算先通貨の1つである必要があります。呼出し側アプリケーションは、QP_UTIL_PUB.Validate_Price_List_Curr_Codeと呼ばれる価格設定APIを呼び出す必要があります。
価格表の新規端数処理APIを組み込みます。価格再設定処理の場合、呼出し側アプリケーションは、価格再設定処理時に価格表端数処理用のQP_UTIL_PUB.round_priceを呼び出す必要があります。これにより、「丸め処理先」の値を使用して価格の端数が処理されます。
「換算タイプ」が「取引」である場合、呼出し側アプリケーション統合は、「受注」ヘッダーに入力された換算レートおよび換算タイプ(存在する場合)を価格設定エンジンに渡す必要があります。
呼出し側アプリケーション統合は、機能通貨を価格設定エンジンの管理レコード変数function_currencyに渡す必要があります。
受注管理体系を使用したサンプル・コード
procedure copy_Line_to_request(
p_Line_rec OE_Order_PUB.Line_Rec_Type
,px_req_line_tbl in out nocopy QP_PREQ_GRP.LINE_TBL_TYPE
,p_pricing_event varchar2
,p_Request_Type_Code varchar2
)
is
l_line_index pls_integer := nvl(px_req_line_tbl.count,0);
l_uom_rate NUMBER;
v_discounting_privilege VARCHAR2(30);
begin
l_line_index := l_line_index+1;
px_req_line_tbl(l_line_index).Line_id := p_Line_rec.line_id;
px_req_line_tbl(l_line_index).REQUEST_TYPE_CODE :=
p_Request_Type_Code;
px_req_line_tbl(l_line_index).LINE_INDEX := l_line_index;
px_req_line_tbl(l_line_index).LINE_TYPE_CODE := 'LINE';
If p_Line_rec.pricing_date is null or
p_Line_rec.pricing_date = fnd_api.g_miss_date then
px_req_line_tbl(l_line_index).PRICING_EFFECTIVE_DATE :=
trunc(sysdate);
Else
px_req_line_tbl(l_line_index).PRICING_EFFECTIVE_DATE :=
p_Line_rec.pricing_date;
End If;
px_req_line_tbl(l_line_index).LINE_QUANTITY :=
p_Line_rec.Ordered_quantity ;
px_req_line_tbl(l_line_index).LINE_UOM_CODE :=
p_Line_rec.Order_quantity_uom;
px_req_line_tbl(l_line_index).CURRENCY_CODE :=
OE_Order_PUB.g_hdr.transactional_curr_code;
If (p_Line_rec.service_period = p_Line_rec.Order_quantity_uom) Then
px_req_line_tbl(l_line_index).UOM_QUANTITY :=
p_Line_rec.service_duration;
Else
INV_CONVERT.INV_UM_CONVERSION(From_Unit =>
p_Line_rec.service_period
,To_Unit => p_Line_rec.Order_quantity_uom
,Item_ID => p_Line_rec.Inventory_item_id
,Uom_Rate => l_Uom_rate);
px_req_line_tbl(l_line_index).UOM_QUANTITY :=
p_Line_rec.service_duration * l_uom_rate;
End If;
px_req_line_tbl(l_line_index).Active_date_first_type := 'ORD';
px_req_line_tbl(l_line_index).Active_date_first :=
OE_Order_Pub.G_HDR.Ordered_date;
If p_Line_rec.schedule_ship_date is not null then
px_req_line_tbl(l_line_index).Active_date_Second_type := 'SHIP';
px_req_line_tbl(l_line_index).Active_date_Second :=
p_Line_rec.schedule_ship_date;
End If;
px_req_line_tbl(l_line_index).PRICE_FLAG :=
nvl(p_Line_rec.calculate_Price_flag,'Y');
end copy_Line_to_request;
copy_attributes_to_Requestプロシージャ
p_line_index number
,p_pricing_contexts_Tbl
QP_Attr_Mapping_PUB.Contexts_Result_Tbl_Type
,p_qualifier_contexts_Tbl QP_Attr_Mapping_PUB.Contexts_Result_Tbl_Type
,px_Req_line_attr_tbl in out nocopy
QP_PREQ_GRP.LINE_ATTR_TBL_TYPE
,px_Req_qual_tbl in out nocopy
QP_PREQ_GRP.QUAL_TBL_TYPE
)
is
i pls_integer := 0;
l_attr_index pls_integer := nvl(px_Req_line_attr_tbl.last,0);
l_qual_index pls_integer := nvl(px_Req_qual_tbl.last,0);
begin
i := p_pricing_contexts_Tbl.First;
While i is not null loop
l_attr_index := l_attr_index +1;
px_Req_line_attr_tbl(l_attr_index).VALIDATED_FLAG := 'N';
px_Req_line_attr_tbl(l_attr_index).line_index := p_line_index;
-- Product and Pricing Contexts go into pricing contexts...
px_Req_line_attr_tbl(l_attr_index).PRICING_CONTEXT
:=
p_pricing_contexts_Tbl(i).context_name;
px_Req_line_attr_tbl(l_attr_index).PRICING_ATTRIBUTE :=
p_pricing_contexts_Tbl(i).Attribute_Name;
px_Req_line_attr_tbl(l_attr_index).PRICING_ATTR_VALUE_FROM :=
p_pricing_contexts_Tbl(i).attribute_value;
i := p_pricing_contexts_Tbl.Next(i);
end loop;
-- Copy the qualifiers
i := p_qualifier_contexts_Tbl.First;
While i is not null loop
l_qual_index := l_qual_index +1;
If p_qualifier_contexts_Tbl(i).context_name ='MODLIST' and
p_qualifier_contexts_Tbl(i).Attribute_Name
='QUALIFIER_ATTRIBUTE4' then
If OE_Order_PUB.G_Line.agreement_id is not null and
OE_Order_PUB.G_Line.agreement_id <>
fnd_api.g_miss_num then
px_Req_Qual_Tbl(l_qual_index).Validated_Flag := 'Y';
px_Req_Qual_Tbl(l_qual_index).Validated_Flag
:= 'N';
End If;
Else
px_Req_Qual_Tbl(l_qual_index).Validated_Flag := 'N';
End If;
px_Req_qual_tbl(l_qual_index).line_index := p_line_index;
px_Req_qual_tbl(l_qual_index).QUALIFIER_CONTEXT :=
p_qualifier_contexts_Tbl(i).context_name;
px_Req_qual_tbl(l_qual_index).QUALIFIER_ATTRIBUTE :=
p_qualifier_contexts_Tbl(i).Attribute_Name;
px_Req_qual_tbl(l_qual_index).QUALIFIER_ATTR_VALUE_FROM :=
p_qualifier_contexts_Tbl(i).attribute_value;
i := p_qualifier_contexts_Tbl.Next(i);
end loop;
end copy_attributes_to_Request;
procedure copy_Header_to_request(
p_header_rec OE_Order_PUB.Header_Rec_Type
,px_req_line_tbl in out nocopy QP_PREQ_GRP.LINE_TBL_TYPE
--,p_pricing_event varchar2
,p_Request_Type_Code varchar2
,p_calculate_price_flag varchar2
)
is
l_line_index pls_integer := px_req_line_tbl.count;
begin
l_line_index := l_line_index+1;
px_req_line_tbl(l_line_index).REQUEST_TYPE_CODE
:=p_Request_Type_Code;
--px_req_line_tbl(l_line_index).PRICING_EVENT :=p_pricing_event;
--px_req_line_tbl(l_line_index).LIST_LINE_LEVEL_CODE
:=p_Request_Type_Code;
px_req_line_tbl(l_line_index).LINE_INDEX := l_line_index;
px_req_line_tbl(l_line_index).LINE_TYPE_CODE := 'ORDER';
-- Hold the header_id in line_id for 'HEADER' Records
px_req_line_tbl(l_line_index).line_id := p_Header_rec.header_id;
if p_header_rec.pricing_date is null or
p_header_rec.pricing_date = fnd_api.g_miss_date then
ptrunc(sysdate);
x_req_line_tbl(l_line_index).PRICING_EFFECTIVE_DATE :=
Else
px_req_line_tbl(l_line_index).PRICING_EFFECTIVE_DATE :=
p_header_rec.pricing_date;
End If;
px_req_line_tbl(l_line_index).CURRENCY_CODE :=
p_Header_rec.transactional_curr_code;
px_req_line_tbl(l_line_index).PRICE_FLAG := p_calculate_price_flag;
px_req_line_tbl(l_line_index).Active_date_first_type := 'ORD';
px_req_line_tbl(l_line_index).Active_date_first :=
p_Header_rec.Ordered_date;
end copy_Header_to_request;
価格設定エンジンの挿入APIの呼出しについては、$QP_TOP/patch/115/sqlのサンプル・スクリプトqp_direct_insert.sqlを参照してください。
このAPIによって、変更済明細および関連する明細を価格設定エンジンに渡すことができます。これによって、不要な価格設定処理が減り、パフォーマンスが向上します。
一般的な価格設定では、受注または見積ごとに複数の受注明細または見積明細があります。Oracle Advanced Pricingを使用して取引の価格設定を行うOrder ManagementやOrder Captureなどの呼出し側アプリケーションは、単一の価格設定要求内の1つ以上の受注明細を使用して、価格設定エンジンを呼び出します。受注ごとに全受注明細を渡すのではなく、変更された明細(新規に入力された明細、または更新された既存の明細)のみを価格設定エンジンに渡すと効率的です。これは、価格設定エンジンで不要な明細(処理しても同じ価格になる明細)を処理する必要がないためです。
呼出し側アプリケーションは、QP_UTIL_PUB.Get受注明細ステータスを呼び出して、エンジンに渡す明細を決定します。このAPIの出力レコードには、次の3つのフラグがあります。
All_Lines_Flag(YesまたはNo)
このフラグは、呼出し側アプリケーションに、全明細をエンジンに渡す必要があるかどうかを指示します。このフラグの値は、価格設定によって決まります。これらのモディファイアの場合、価格設定エンジンが値引の適格性を評価するために全明細情報が必要です。
Changed_Lines_Flag(YesまたはNo)
このフラグが'Y'に設定されている場合は、変更済明細のみエンジンに渡すことができます。明細レベルのモディファイアのみ存在する場合、このフラグは「Y」です。
Summary_Line_Flag(YesまたはNo)
このフラグの値は、受注レベルのモディファイア設定によって決まります。これらのモディファイアで、このフラグはY(Yes)に設定されます。これによって、受注要約明細のみエンジンに渡すことができます。
変更済明細API以外に、QP_ATTR_MAPPING_PUB.Build_contexts APIを署名Build_Contextsとともに使用できます。
( p_request_type_code, p_line_index,
p_check_line_flag,
p_pricing_event,
p_pricing_type_code,
p_org_id,
x_pass_line)
変更済明細APIがAll_lines_flagをY(Yes)として渡した場合、build_contexts APIを属性マッピングに使用できます。変更された実績明細ではp_check_line_flagがN(No)として渡され、変更されなかった残りの明細ではp_check_line_flagがY(Yes)として渡されます。p_check_line_flagがY(Yes)として渡された明細で、このAPIは、アクティブで詳細な明細グループまたは他の品目値引タイプのモディファイア、あるいはその明細に対して指定される製品属性に基づいて定義された追加購入製品を伴う販促品モディファイアが存在するかどうかをチェックします。
このようなモディファイアが存在する場合は、「コンテキストのビルド」APIが、すべての製品/価格設定/クオリファイア属性を指定するとともにx_pass_lineをYとして戻して、呼出し側がこの明細を価格設定エンジンに渡す必要があることを示します。これは、明細が変更されていない場合も、受注/見積上の残りの明細の価格が影響を受ける可能性があるためです。このようなアクティブなモディファイアが見つからない場合、その明細には属性が指定されず、x_pass_lineはNoとして戻され、これによって、呼出し側がパフォーマンスのオーバーヘッドを回避するためにこの明細を価格設定エンジンに渡す必要はなくなります。
事例1
100明細を持つ受注で5明細が変更されました。設定: All_Lines_Flag = 'N', Changed_Lines_Flag = 'Y', Summary_Line_Flag = 'N' 結果: 変更された5明細のみ価格設定エンジンに渡されます。
事例2
100明細を持つ受注で全明細が変更されました。
設定: All_Lines_Flag = 'Y'、Changed_Lines_Flag = 'Y/N'、Summary_Line_Flag = 'N'
結果: 100明細すべてが価格設定エンジンに渡されます。
事例3
100明細を持つ受注で5明細が変更され、他の品目値引、販促品または明細のグループの値引のいずれかです。
設定: All_Lines_Flag = 'Y'、Changed_Lines_Flag = 'Y/N'、Summary_Line_Flag = 'N'
結果: 全明細が価格設定エンジンに渡されます。
事例4
100明細を持つ受注で5明細が変更され、受注レベルのモディファイアです。
設定: All_Lines_Flag = 'N'、Changed_Lines_Flag = 'Y'、Summary_Line_Flag = 'Y'
結果: 5明細および要約明細が価格設定エンジンに渡されます。
事例5
100明細を持つ受注で変更された明細はありませんでした。
設定: All_Lines_Flag = 'N'、Changed_Lines_Flag = 'N'、Summary_Line_Flag = 'N'
結果: 明細は価格設定エンジンに渡されません。
事例6
2明細が100明細を持つ受注に新規に追加されました。
設定: All_Lines_Flag = 'N'、Changed_Lines_Flag = 'Y'、Summary_Line_Flag = 'N'
結果: 追加された2明細のみ価格設定エンジンに渡されます。
この項では、Oracle Service Contracts(OKS)がOracle Advanced Pricing(QP)に統合されているときに使用できる使用の按分機能と価格表のロック機能について説明します。OKS APIは、サービス継続期間の計算および開始日と終了日の決定に使用されます。使用の按分は、使用呼出しを行うすべての呼出し側アプリケーションで使用できます。価格表のロックは、OKSによる使用に対してのみ有効です。価格表のロックとは、次を示します。
別の価格表名を使用して有効日なしで指定したソース価格表のコピー(ロック済価格表)を作成します(これにより、OKSは、関連するService Contractの有効日を管理できるようになります)。
ソース価格表明細(ソース価格表に属す明細)のコピー(ロック済価格表明細)をロック済価格表の子として作成します。ロック済価格表明細は有効日なしで作成されるため、OKSは価格を効率的に管理できるようになります。また、ロック済価格表明細には価格設定属性(コンテキスト = 内部QP、属性 = 価格表明細ID、値 = <新規作成されたロック済価格表明細のlist_line_id<:gt>)が作成されるため、このlist_line_id価格設定属性が適切に指定された場合のみ、価格設定エンジンの呼出し側がロック済価格表明細を使用できるようになります。
たとえば、Oracle Service Contractsが法人価格表でlist_line_id = 201である価格表明細をロックする必要がある場合、次のようになります。
ロック済価格表明細は、OKS LOCKED Corporateという名前で作成されます。命名規則は、次のとおりです。
<Source System Code> || 'LOCKED' || <Source Price List>.
ロック済価格表明細はlist_line_id = 201である価格表明細からコピーされ、ロック済価格表OKS LOCKED Corporateに作成されます。たとえば、list_line_id = 301であるロック済明細は、次のように設定された価格設定属性を持ちます。
コンテキスト = 内部QP
属性 = 価格表明細ID
値 = 301
注意: ロック済価格表は、特定のソース価格表およびソース・システム・コードに対して1回のみ作成されます。後続のロック要求については、既存のロック済価格表の下位にロック済価格表が新しく作成されます。
すでにロック済の価格表および価格表明細のロック
以前のリリースでは、ロック済の価格表および価格表明細は、ユーザー・インタフェース(UI)から作成する必要がありました。ただし、現在のリリースでは、APIがOKSコードからプログラムで呼び出され、ユーザーの介入なしに価格表および価格表明細をロックします。すでにロック済の価格表および明細もロックできるようになりました。
たとえば、<ソース・システム・コード> ||'LOCKED'|| <ソース価格表名>という名前のすでにロック済の価格表をロックするとします。ただし、ソース価格表名には、たとえば<ソース・システム・コード> ||'LOCKED'プリフィクスのようにすでにロックされた名前が割り当てられている場合、新しい名前は、<ソース・システム・コード> ||' LOCKED'|| <バージョン番号> || ' ' <元のソース価格表名>の形式を使用して、ロックされた価格表に自動的に割り当てられます。バージョン番号は2以降となります。たとえば、ソース価格表がCorporateという名前の場合、ロック済価格表は、QP LOCKED Corporateという名前になります。ただし、ソース価格表名がQP LOCKED Corporateの場合、ロック済価格表名はQP LOCKED2 Corporateとなります。
価格明細のロック
すでにロック済の価格表明細もロックできます。ソース価格表の価格表明細が、ロック済価格表の子としてコピーされる(ロック済価格表明細となる)と、価格明細がロックされます。たとえば、Oracle Service Contracts(OKS)がOKS LOCKED法人価格表でlist_line_id = 201である価格表明細をロックする必要があるとします。価格明細はすでにロック済であるため、その価格設定属性では、コンテキスト = QP Internal、属性 = List Line Id、値 = 201となります。
その後の手順は、次のようになります。新しくロックされる価格表明細は、list_line_id = 201の価格表明細のコピーとして、ロック済価格表であるOKS LOCKED2法人価格表の下に作成されます。たとえばlist_line_id = 301の新しいロック済明細には、list_line_id = 201のソース価格表明細からコピーされたその他の価格設定属性に加えて、コンテキスト = QP Internal、属性 = List Line Id、および値 = 301の新しい価格設定属性が添付されます。
ただし、list_line_id = 201のソース価格表明細に添付されているコンテキスト = QP Internal、属性 = List Line Id、および値 = 201の価格設定属性は、ソースからlist_line_id = 301を持つ新しくロックされる価格表明細にコピーされません。
注意: ロック済価格表は、特定のソース価格表およびソース・システム・コードに対して1回のみ作成されます。後続のロック要求については、既存のロック済価格表の下位にロック済価格表が新しく作成されます。
コピーされた価格表の有効日
ロック済価格表および価格表明細に有効日はコピーされません。ただし、OKSにより、関連するService Contractで有効日を使用することで、有効日を管理できます。
次のステップは、価格表のロックの処理フローを示します。
アプリケーションOracle Service Contracts(OKS)は、オーサリング単位を使用し、価格設定エンジンに対してオーサリング呼出しを行います。オーサリング単位には、四半期、月、年などの品目単位を使用できます。
価格設定エンジンは、価格表明細および価格分岐を戻します(数量が渡されない場合、価格分岐は計算されません)。
OKSによって価格表明細/分岐(ロック済分岐など)がOKSのユーザー・インタフェースでOKSユーザーに表示され、更新が可能になります。価格表明細の製品は、ステップ2で戻された価格表明細と同じである必要があります。
OKSによって「価格表」ウィンドウが表示され、ロック済価格表、ロック済価格表明細およびその分岐の作成がサポートされます。ウィンドウ・パラメータには次の関連値が渡され、'OKS '|| 'LOCKED ' || <ソース価格表名>という名前で新規価格表の作成および問合せが行われます。
LOCK_MODE(='Y')
SOURCE_PRICE_LIST_ID
SOURCE_LIST_LINE_ID
ORIG_SYS_HEADER_REF(= 契約番号)
STARTUP_MODE(= OKS)
STARTUP_MODE = OKS
NULLに設定されたSTART_DATE_ACTIVEおよびEND DATE ACTIVE列
list_line_idと同じ値を使用してロック済PBH(価格分岐ヘッダー)明細に価格設定属性が作成されます。これにより、価格設定エンジンがこの特定の明細を選択できるようになります。ロック済PBH価格表明細の有効日(START_DATE_ACTIVEおよびEND_DATE_ACTIVE)はNULLに設定されます。
OKSは、請求時に価格設定エンジンを呼び出すときに、価格表明細IDの外部キーを格納し、価格表IDを渡します。
ロック済価格分岐をさらに更新するために、OKSは、適切なパラメータ(LOCK_MODE= 'N'、LOCKED_PRICE_LIST_ID、LOCKED_LIST_LINE_ID、STARTUP_MODE = 'OKS')を使用して価格表フォームを起動し、指定したロック済価格表およびロック済価格表明細を問い合せます。
OKSは、請求時に価格設定エンジンを呼び出し、按分用の単位を提供します。この場合、価格設定エンジンが正確に同じ価格を戻すことが前提です。
LIST_SOURCE_CODE = 'OKS'であり、orig_system_header_refがNULLでない場合、OKSによって作成された価格表は「価格設定」ウィンドウでは更新できなくなります。
ロック済価格分岐がある価格表は、パージAPIを使用して削除できます。ただし、パージするのは、無効な価格表のみにする必要があります。OKSは、価格設定パブリックAPIを使用して価格表を無効化します。
請求呼出し時には、契約IDおよび価格表がクオリファイアとして渡されます。また、価格表明細IDが価格設定属性として渡されます。
価格表のロックの統合フローの例
次のステップは、Oracle Service Contracts(OKS)がOracle Advanced Pricing(QP)に統合されているときの価格表のロックの統合フローを示します。
契約ヘッダーを定義し、価格表名(法人など)を選択します。
契約明細を入力し、品目を選択します。
契約ヘッダーの価格表(法人など)を使用して価格設定エンジンが呼び出されます。価格分岐情報が戻され、情報が「契約」ウィンドウに表示されます。
品目の価格をロックするには、「ロック」ボタンをクリックします。
この時点で、次のウィンドウ・パラメータが設定されます。
Startup_mode(OKS)
Lock_mode(Y/N)
Source_price_list_id(Lock_mode = Yである場合)
source_list_line_id(Lock_mode = Yである場合)
locked_price_list_id(Lock_mode = Nである場合)
locked_list_line_id(Lock_mode = Nである場合)
これにより、「価格表の設定」ウィンドウが呼び出されます。
その後で、次の処理が行われます。
この呼出しがOKSからである(Startup_Mode = OKS)かどうかチェックします。
Startup_Mode = OKSである場合、Lock_mode = Yであるかどうかチェックします。Startup_Mode = OKSでない場合、更新ステップに進みます。
Lock_mode = Yである場合、レコードがqp_list_headers_bにあるかどうかチェックします。この場合、次のようになります。
Source_system_code =「QP: ソース・システム・コード」のプロファイル・オプション値
Locked_from_list_header_id = Source_price_list_id
レコードがない場合は、新規価格表を作成する必要があります。このため、新規価格表のレコード体系が設定されます。ソース・システム・コードがOKSであり、「有効日:自」および「有効日:至」列がNULLであることを確認します。
レコードがある場合、ロック済価格表に新規明細を作成する必要があり、明細体系を設定する必要があります。
PBH明細、その属性および価格分岐の子明細をコピーします。次のようにする必要があります。
コピー済(ロック済)PBH明細レコードの「有効日:自」および「有効日:至」列をNULLに設定します。
新規作成したPBH明細のlist_line_idを使用して、価格設定属性をPBH明細に追加します。レコードを転記します。
新しく挿入またはロックした価格表を問い合せます。
価格表明細ブロックの問合せ前に、WHERE句を設定して、新しく作成またはロックしたPBH明細を問い合せます。
「価格表明細」タブにナビゲートします。「価格分岐」タブをクリックし、価格分岐を更新します。
グローバル変数を設定(.pldファイルに設定)し、最後に作成または変更したprice_list_idおよびlist_line_idをOKSに渡し戻します。
問合せ後に、WHERE句を消去して元のステータスに戻します。
モードが「更新」である場合、ステップg)以降のステップを実行します。
すでにロックされている既存のPBH明細を問い合せている場合、OKSは、List_line_idを価格設定属性として価格設定エンジンを呼び出す必要があります。これを行うには、「サービス契約オーサリング」ウィンドウにナビゲートします。
削除またはロック解除を行うには、価格設定APIを直接呼び出して価格表明細を削除する必要があります。
アプリケーションがOKSである場合、Oracle Advanced Pricing(QP)は、シード・データをデフォルトのプロファイル「QP: ソース・システム・コード」に変更する必要があります。また、OKSをオーダー管理PTEに追加します。
QPは、List_Line_Idを価格設定属性としてシードする必要があります。この価格設定属性には、PRICING ATTRIBUTEの価格設定コンテキストは使用できません。前述の価格設定属性を割り当てるには一般的な価格設定コンテキストが必要であるため、QP INTERNALと呼ばれる新規価格設定コンテキストも作成/シードされます。
ロック済価格表の名前は、プリフィクス<ソース・システム・コード> || ' LOCKED ' || <ソース価格表名>(OKS LOCKED Corporateなど)である必要があります。
価格表のロック機能に関連する変更
「価格表」ウィンドウには、次のパラメータが追加されました。これらはエンド・ユーザーからは見えませんが、価格表のロック機能との統合には必要です。
パラメータ | データ型 | 意味/値 |
---|---|---|
LOCK_MODE | CHAR(1) | 有効値は「Y/N」です。ロック・モードがYesとNoのどちらであるかを示します。「価格表」ウィンドウの起動時に、OKSによって適切な値が渡されます。 |
LOCKED_PRICE_LIST_ID | NUMBER | Lock_Mode = Nである場合、「価格表」ウィンドウの起動時に、OKSによってロック済価格表のlist_header_idが渡されます。 |
LOCKED_LIST_LINE_ID | NUMBER | Lock_Mode = Nである場合、「価格表」ウィンドウの起動時に、OKSによってロック済価格表明細のlist_line_idが渡されます。 |
SOURCE_PRICE_LIST_ID | NUMBER | Lock_Mode = Yである場合、「価格表」ウィンドウの起動時に、OKSによってソース価格表のlist_header_idが渡されます。 |
SOURCE_LIST_LINE_ID | NUMBER | Lock_Mode = Yである場合、「価格表」ウィンドウの起動時に、OKSによってソース価格表明細のlist_line_idが渡されます。 |
次のグローバル変数により、情報がOKSに渡し戻されます。
パラメータ | 意味/値 |
---|---|
LOCKED_PRICE_LIST_ID | OKSによって起動された「価格表」ウィンドウで作成または変更された最後のロック済価格表のLIST_HEADER_IDを持ちます。 |
LOCKED_LIST_LINE_ID | OKSによって起動された「価格表」ウィンドウで作成または変更された最後のロック済価格表明細のLIST_LINE_IDを持ちます。 |
価格表ロック機能には、次の変更も関連しています。
PTEコードORDFULの下位の新規ソース・システム・コードOKS
PTEコードORDFULの下位の新規要求タイプ・コードOKS
SOURCE_SYSTEM参照タイプの下位のOKSに対する新規参照コード
REQUEST_TYPE参照タイプの下位のOKSに対する新規参照コード
OKSアプリケーションのアプリケーション・レベルでシステム・プロファイル・オプション「QP: ソース・システム・コード」のデフォルト値を「OKS」に設定
新規価格設定コンテキスト「内部QP」(コード = QP_INTERNAL)
価格設定コンテキスト「内部QP」の下位の新規価格設定属性「価格表明細ID」(コード = LIST_LINE_ID、列 = PRICING_ATTRIBUTE1)
「ORDFUL」PTEにリンクされた新規価格設定属性
Oracle Service Contracts(OKS)は、Oracle Advanced Pricingの顧客に対し按分請求をサポートします。次のステップは、呼出し側アプリケーションに必要な変更と価格設定エンジンの動作を示します。
呼出し側アプリケーションは、ボリューム数量(500など)およびMONTHなどの(usage_break_UOM)とともに請求呼出しを価格設定エンジンに発行します。呼出し側アプリケーションがusage_break_UOM属性を渡さない場合、換算は必要なく、通常の価格分岐評価が行われます。
価格設定エンジンは、次を評価します。
価格分岐ヘッダー(PBH)明細
分岐単位コンテキスト(BREAK_UOM)
分岐単位属性(USAGE_UOM)
分岐単位を設定しない場合、通常の価格分岐評価が行われます。
価格設定は、単位換算のために契約APIを呼び出します。この契約APIには、qp_preq_lines_tempのservice_start_dateおよびend_dateとともに設定分岐単位が渡されます。
このAPIは、按分用として換算ファクタを戻します。契約プロファイルが設定されていない場合、標準単位換算が行われます。たとえば、換算が1/3の場合、「分岐: 自/至」値は、下表のように換算されます。
元の開始値/終了値 | 変更後の開始値 | 変更後の終了値 |
---|---|---|
0 - 1000 | 0 | 333.333.....3 |
1000 - 2000 | 333.333...3 | 666.666...6 |
2000 - 3000 | 666.666...6 | 1000 |
注意: 表に示された値は、切り捨てられません。
価格設定エンジンは、前述の「分岐: 自/至」を評価し、呼出し側アプリケーションに設定分岐単位を戻します。
OKSは按分計算のために次の値を価格設定エンジンに渡す必要があります。コンテキスト = BreakUOM、属性 = Pricing_Attribute1、値 = 請求単位
注意: 固定使用または実績使用に基づいて請求される新規に按分される連続する価格分岐が、リリース12以前に按分された価格分岐と異なる金額を持つ場合があります。按分される連続する価格分岐の層は、最小まで計算されません(つまり、前の自然数に設定されます)。
按分機能に関連する変更
「価格表」ウィンドウでは、「価格表明細」タブに価格分岐を入力するための2つの追加列が表示されます。
1番目の列は、ボリューム分岐単位を定義します。
2番目の列は、呼出し側アプリケーションが容積使用単位を渡す属性を定義します。OKSの場合、これはハードコードされてコンテキストBreakUOM属性がPricing_attribute1(使用単位)となります。
ユーザーは、0-1000 BreakUOM = QTRなどの分岐を設定します。
これらの列を表示するには、プロファイル・オプション「QP: 分岐単位按分を許可」を「Yes」に設定する必要があります。有効値は「Yes」または「No」です。これは、サイト・レベルおよびアプリケーション・レベルの両方で設定できます。
継続期間は、特定のサービスに対する期間を定義します。一部期間の価格設定は、契約継続期間が変更された場合に、価格を変更するために必要です。たとえば、現在2年間のサービス・プログラムを契約中の顧客ABC Applications Softwareが、サービス契約を更新して、拡張したノートPCサービス・プログラムに対し、さらに10か月の追加を望んでいるとします。
Oracle Advanced PricingをOracle Service Contractsとともに使用して、継続期間および一部期間の価格設定を計算できます。Service Contractsを使用すると、Service Contracts換算ルーチン(単位換算を使用または不使用)を呼び出して明細数量を導出することにより、契約のサービス継続期間が契約の開始日/終了日から計算されます。
注意: 日付が渡されない場合は、在庫換算ルーチンが使用されます。
すべての呼出し側アプリケーションで一部期間の価格設定が一貫性を持つようにするため、Oracle Advanced Pricingでは、単位数量または契約の開始日が価格設定エンジンに渡されているかどうかによって、サービス明細の一部期間の価格設定の計算方法が異なります。
単位数量/継続期間が渡され、契約の日付が渡されている場合、Advanced Pricingは渡された日付を無視し、渡された継続期間を使用して単価を計算します。
価格設定エンジンが、渡されたサービス単位(line_uom_code)内に価格を検出できず、また単位換算が必要な場合、Advanced Pricingは新しいOKS換算APIのOKS_OMINT_PUB.get_target_durationを呼び出して、価格表単位での継続期間を計算し、その継続期間の単価を導出します。継続期間が渡されている場合、Advanced Pricingは、サービスの全継続期間の単価を計算します。また、価格分岐は明細数量(親数量)に基づいて評価されます。
単位数量/継続期間が渡され、日付が渡されていない場合、Advanced Pricingは、渡された継続期間を使用して、サービスの全継続期間の単価を計算します。また、価格分岐は明細数量に基づいて評価されます。line_uom_codeと価格表単位が一致しない場合、価格設定エンジンは在庫換算APIを使用して継続期間を計算します。
Oracle Service Contracts(OKS)での使用の按分の例を次に示します。
例1
プロファイル「QP: 分岐単位按分を許可」= Y
品目に価格分岐価格表明細(AS999など)を設定します。
分岐単位 = QTR(四半期)
分岐タイプ = POINT
ボリューム属性品目数量の分岐明細
0〜1000、値 = 100
1000 - 2000、値 = 90
2000 - 3000、値 = 80
価格表をクオリファイアとして渡し、数量500、usage_pricing_type = REGULARで同じ品目AS999に対して価格設定エンジンを呼び出します。また、この場合、価格設定コンテキスト = BREAK_UOM、属性 = PRICING_ATTRIBUTE1、値 = MTH(月)とします。
予想結果:
価格設定エンジンから戻されるunit_priceは、次のような価格分岐子明細の使用の按分に基づいて90(明細数量500)になります。
0–333.333.....3、値 = 100
333.333.....3–666.666...6、値 = 90
666.666...6–1000、値 = 80
例2
プロファイル「QP: 分岐単位按分を許可」= Y
品目に価格分岐価格表明細(AS999など)を設定します。
分岐単位 = QTR(四半期)
分岐タイプ = RANGE
ボリューム属性品目数量の分岐明細
0–1000、値 = 100
1000–2000、値 = 90
2000–3000、値 = 80
価格表をクオリファイアとして渡し、数量910、usage_pricing_type = REGULARで同じ品目AS999に対して価格設定エンジンを呼び出します。また、この場合、価格設定コンテキスト = BREAK_UOM、属性 = PRICING_ATTRIBUTE1、値 = MTH(月)とします。
予想結果:
価格設定エンジンから戻されるunit_priceは、次のような価格分岐子明細の使用の按分に基づいて90.98(数量910)になります。
0–333.333.....3、値 = 100
333.333.....3–666.666...6、値 = 90
666.666...6–1000、値 = 80
例3
プロファイル「QP: 分岐単位按分を許可」= Y
品目に価格分岐価格表明細(AS999など)を設定します。
分岐単位 = QTR(四半期)
分岐タイプ = POINT
ボリューム属性品目数量の分岐明細
0〜1000、値 = 100
1000 - 2000、値 = 90
価格表をクオリファイアとして渡して数量500、usage_pricing_type <> REGULARで同じ品目AS999に対して価格設定エンジンを呼び出します。また、この場合、次のように設定します。
価格設定コンテキスト = BREAK_UOM
属性 = PRICING_ATTRIBUTE1
値 = MTH(月)
予想結果:
渡されるusage_pricing_typeがREGULARではなく按分が行われないので、価格設定エンジンから戻されるunit_priceは100(明細数量500)になります。
例4
プロファイル「QP: 分岐単位按分を許可」= Y
品目に価格分岐価格表明細(AS999など)を設定します。
分岐単位 = QTR(四半期)
分岐タイプ = POINT
ボリューム属性品目数量の分岐明細
0〜1000、値 = 100
1000 - 2000、値 = 90
価格表をクオリファイアとして渡して数量500、usage_pricing_type = REGULARで同じ品目AS999に対して価格設定エンジンを呼び出します。ただし、この場合、明細には次の価格設定属性は渡しません。
価格設定コンテキスト = BREAK_UOM
属性 = PRICING_ATTRIBUTE1
値 = MTH(月)
予想結果:
分岐単位属性が価格設定エンジンに渡されず按分が行われないので、価格設定エンジンから戻されるunit_priceは100(明細数量500)になります。
例5
プロファイル「QP: 分岐単位按分を許可」= Y
品目に価格分岐価格表明細(AS999など)を設定します。
分岐単位 = NULL
分岐タイプ = POINT
ボリューム属性品目数量の分岐明細
0〜1000、値 = 100
1000 - 2000、値 = 90
価格表をクオリファイアとして渡して数量500、usage_pricing_type = REGULARで同じ品目AS999に対して価格設定エンジンを呼び出します。また、この場合、次のように設定します。
価格設定コンテキスト = BREAK_UOM
属性 = PRICING_ATTRIBUTE1
値 = MTH(月)
予想結果:
価格分岐ヘッダー明細の分岐単位がNULLであり按分が行われないので、価格設定エンジンから戻されるunit_priceは100(明細数量500)になります。
携帯電話サービスなどのように、固定した定型サービス価格(近距離または長距離通話プランの月額、ナンバー・ディスプレイやキャッチホンなどその他のサービスの月額など)を顧客に課するサービスがあります。月ごと、四半期ごとなど、これらの料金の請求の周期が、「チャージ周期」です。サービスの提供会社では、同じサービスをそれぞれ異なるチャージ周期を持つ様々なプランで顧客に提供することを選択する場合があります。たとえば、携帯電話会社では、同じ通話サービスを、月または四半期ごとのいずれかの定額で提供する場合があります。
これらの定型価格は、通常、顧客がサービスの登録を行うときに設定されます。顧客が品目を定型価格で発注すると、その発注、見積、または買い物かごに対して月や年などの周期が指定され、そのサービスに対する適切な価格が取得されます。
注意: 「受注額」クオリファイアの値およびクロス受注ボリューム計算では、1回分の料金明細のみが集計され、定型価格明細は除外されます。
「チャージ周期」属性: 価格表明細またはモディファイア明細の定型価格にチャージ周期を設定する場合は、このシード済コンテキスト/属性を選択します。
注意: 「チャージ周期」値は、価格設定においてシードされません。「チャージ周期」価格設定属性の値リストは、プロファイル「OM: 賦課周期の単位区分」に登録されている単位区分に基づきます。この単位区分には、MONTH、QUARTER、およびYEARなどの単位があります。
関連トピック
通信サービスの定型価格の設定の詳細は、『Oracle Telecommunications Service Ordering Process Guide』を参照してください。