累積またはカスケードする割引の作成
1つの価格表に累積される1つ以上の割引を適用します。
カスケードする1つ以上の割引を適用することもできます。 たとえば、実行中の正価です。
割引は、様々なタイプの調整に従って、単純なルールまたは価格設定マトリックスを介して適用します。
-
割引額
-
割引率
-
値入れ額
-
値入れ率
-
価格上書き
重要な概念をいくつか次に示します。
-
「カスケード割引」。 各割引ルールが品目に適用される割引を減算する計算。 カスケード・ディスカウントの動作は次のとおりです。
-
ルール名に従って、アルファベット順の昇順で割引を減算します。
-
各調整を適用する際に、定価が基準として使用されます。
-
各ルールに割引を適用するたびに、Running Net Priceの値を減らします。
-
各ルールの基準を一定に保つことはできません。 かわりに、割引はルールからルールにカスケードされます。
-
-
「累積割引」。 各割引ルールが品目に適用される割引を減算する計算。 累積割引の動作は次のとおりです。
-
ルール名に従って、アルファベット順の昇順で割引を減算します。
-
各ルールが適用される間、合計割引額が累計されます。
-
各調整を適用する際に、定価を基準として使用します。
-
各割引を適用するときに定価の値を変更しません。
-
各ルールの基準を一定に保ちます。 割引は、ルールごとに変わりません。
-
-
「実行中の正価」。 価格設定中に値上げまたは値下げが可能なオブジェクトで、品目の価格に対して他の計算が実行されます。
構成品目に対して累計またはカスケードされる割引は作成できません。
設定の概要
-
価格要素と価格設定基準を作成します。
-
価格設定アルゴリズムを変更します。
-
割引の価格設定アルゴリズムを変更します。
-
割引ルールを作成します。
-
設定をテストします。
このトピックの例では、価格設定を設定する1つの方法について説明します。 これは、価格設定の様々な設定方法について学習するために使用できる一般的な概要としてのみ意図されています。 ビジネス要件に応じて、実装に異なるプロシージャ、異なるステップ、異なる値および異なるオブジェクトを使用する必要があります。
1. 価格要素と価格設定基準の作成
実行中の正価に使用する価格要素と価格設定基準を作成します。
-
「設定および保守」作業領域に移動してから、タスクに移動します:
-
オファリング: オーダー管理
-
機能領域: 価格設定
-
タスク: 価格要素の管理
-
-
「価格要素の管理」ページで、「処理」>「行の追加」をクリックして値を設定し、「保存してクローズ」をクリックします。
属性
値
要素コード
ELEMENT_FOR_NET_PRICE
要素名
定価の実行
タイプ
価格
アクティブ
チェック・マークが含まれます。
-
検索ページで、価格設定ベースの管理を検索して開きます。
-
「価格設定ベースの管理」ページで、「処理」>「作成」をクリックし、値を設定して「保存してクローズ」>「完了」>「完了」をクリックします。
属性
値
名前
定価の実行
使用方法
修正基準
価格要素
定価の実行
説明
実行中の正価に対する累積およびカスケード割引の価格設定基準。
アクティブ
チェック・マークが含まれます。
サービス・マッピング属性の作成
属性に従って単純な割引と割引のどちらを使用するかに応じて、販売サービスのマッピングを異なる方法で変更します。
-
価格設定管理作業領域に移動し、「タスク」>「サービス・マッピングの管理」をクリックします。
-
「サービス・マッピングの管理」ページで、「販売」をクリックします。
-
「サービス・マッピングの編集」ページで、「サービス」>「例による問合せ」をクリックし、値を入力して、キーボードのEnterキーを押します。
属性
値
サービス
PriceRequestInternal
単純な割引のサービス・マッピングの変更
ここでは、Salesサービス・マッピングで行った変更を示します。

PriceRequestInternalサービスのTermQueueエンティティにTermName_Custom属性を追加します。
層調整に割引を追加する必要がある場合は、TermQueueエンティティのかわりにTierLineQueueエンティティを使用します。 属性に従って割引を適用する必要がある場合は、「価格設定の品目への独自の属性の追加」を参照してください。
-
詳細領域のエンティティ・タブで、値を含む「行」をクリックします。
属性
値
Entity
TermQueue
-
詳細領域で、「処理」>「行の追加」をクリックし、値を設定します。
属性
値
Entity
TermQueue
読取
チェック・マークが含まれます。
書込み
チェック・マークが含まれます。
-
エンティティ領域で、「表示」>「列」>「すべて表示」をクリックし、「処理」>「行の追加」をクリックして値を設定し、「保存」をクリックします。
属性
値
属性
TermName_Custom
別名
TermName
読取
チェック・マークが含まれます。
書込み
チェック・マークが含まれます。
タイプ
文字列
属性に従った割引のサービス・マッピングの変更
ここでは、Salesサービス・マッピングで行った変更を示します。

PriceRequestInternalサービスのMatrixQueueエンティティにTermName_Custom属性を追加します。
-
詳細領域のエンティティ・タブで、値を含む「行」をクリックします。
属性
値
Entity
MatrixQueue
-
詳細領域で、「処理」>「行の追加」をクリックし、値を設定します。
属性
値
Entity
MatrixQueue
読取
チェック・マークが含まれます。
書込み
チェック・マークが含まれます。
-
エンティティ領域の「表示」>「列」>「すべて表示」で、「処理」>「行の追加」をクリックして値を設定し、「保存」をクリックします。
属性
値
属性
TermName_Custom
別名
TermName
読取
チェック・マークが含まれます。
書込み
チェック・マークが含まれます。
タイプ
文字列
階層調整のサービス・マッピングの変更
TierQueueエンティティを追加します。

演習
- 「タスク」>「サービス・マッピングの管理」をクリックします。
- 「サービス・マッピングの管理」ページの名前列で、「販売」をクリックします。
- 「サービス・マッピングの編集」ページで、「サービス」をクリックします。
- 「例による問合せ」をクリックし、PriceRequestInternalを問い合せます。
- PriceRequestInternalの詳細領域のエンティティ・タブで、「例による問合せ」をクリックし、TierQueueを問い合せます。
- TierQueueのエンティティ領域で、「表示」>「列」をクリックし、タイプにチェック・マークが含まれていることを確認します。
- 「処理」>「行の追加」をクリックし、値を設定します。
属性
値
名前 TermName_Custom 別名 TermName タイプ 文字列 - 「保存してクローズ」をクリックします。
2. 価格設定アルゴリズムの変更
割引を計算する価格設定アルゴリズムを変更します。
割引を適用する価格設定アルゴリズムの変更
変更するアルゴリズムを次に示します。

割引を適用する価格設定アルゴリズムを変更します。
-
「タスク」>「アルゴリズムの管理」をクリックします。
-
「アルゴリズムの管理」ページで、「例による問合せ」をクリックし、値を入力して、キーボードの「入力」キーを押します。
属性
値
名前
ディスカウントを適用
-
「処理」>「バージョンの作成」をクリックします。
-
名前列で、作成したばかりのバージョンの「リンク」をクリックします。
-
「アルゴリズムの編集」ページで、価格設定条件の記述ステップが見つかるまで「ステップ」を展開します。
-
名前列にWrite Pricing Termsが含まれる「行」をクリックします。
-
「ステップ詳細」領域の「最初の行のアクション」領域で、次のコードを見つけます:
//if (TermQuery.Name!=null) ts.Name = TermQuery.Name
-
コードからスラッシュ(//)を削除します。
たとえば:
if (TermQuery.Name!=null) ts.Name = TermQuery.Name
このステップでは、このトピックの前のサービス・マッピングで設定したTermQuery属性を確認するようにアルゴリズムに指示します。
-
「保存してクローズ」>「処理」>「公開」をクリックします。
価格設定条件を適用する価格設定アルゴリズムの変更
実行中の正価を処理できるように、価格設定条件を適用する価格設定アルゴリズムを変更します。
-
「タスク」>「アルゴリズムの管理」をクリックします。
-
「アルゴリズムの管理」ページで、「例による問合せ」をクリックし、値を入力して、キーボードの「入力」キーを押します。
属性
値
名前
価格設定条件の適用
-
「処理」>「バージョンの作成」をクリックします。
-
名前列で、作成したばかりのバージョンの「リンク」をクリックします。
-
「変数」>「アクション」>「行の追加」をクリックして値を設定し、「保存」をクリックします。
属性
値
名前
RunningNetPriceElem
データ型
文字列
Input/Output
なし
デフォルト式
'ELEMENT_FOR_NET_PRICE'
この値は、このトピックで以前に作成した価格設定要素を識別します。
一重引用符(')を含める必要があります。
-
「アルゴリズム」をクリックします。
-
「ステップ」領域で、「名前」列の「適用可能な料金の検索」という「行」をクリックします。
-
実行中の正価を作成するステップを追加します。
-
「ステップの追加>コンポジット・ステップ」をクリックし、「もし」をクリックします。
次に、追加するステップを示します。
-
ステップ詳細領域で値を設定し、「保存」をクリックします。
属性
値
名前
実行中の正価の作成のチェック
条件
'DISCOUNT_LINE' == TermType
一重引用符(')を含める必要があります。
-
「ステップ」領域で、作成した「行」、「実行中の正価の作成」を選択します。
-
「ステップの追加>サブアルゴリズム」をクリックします。
ステップにのみ条件を追加できます。 そのため、ステップを作成し、実行する価格設定アルゴリズムと、このアルゴリズムに送信する変数を指定するサブアルゴリズムを追加します。
-
ステップ詳細領域で、値を設定します。
属性
値
名前
実行中の正価の作成
説明
このステップでは、実行中の正価の手数料コンポーネントを作成します。
アルゴリズム名
RunningUnitPriceを使用してChargeComponentを作成
-
入力変数領域で値を設定します。
変数
割当値
PriceRequest
PriceRequest
PriceElementCode
RunningNetPriceElem
IsForCeilingPrice
BaseCeilingPriceElementCode
これらの変数は使用しないでください。 これらはOracle内部使用専用です。
RoundingAdjustmentElementCode
'QP_ROUNDING_ADJUSTMENT'
PerformRounding
false
IsForMargin
false
PriceElementUsageCode
空のままにします
ChargeAppliesToCode
'PRICE'
RoundingAdjustmentElementUsageCode
'PRICE_ADJUSTMENT'
-
出力変数領域で値を設定します。
変数
割当値
PriceRequest
PriceRequest
-
-
実行中の正価を削除するステップを追加します。
ステップを追加します。
-
「名前」列に「カスタム調整の処理」フラグがある「ステップ」をクリックします。
-
「ステップの追加>条件付きアクション」をクリックし、値を設定します。
属性
値
名前
実行中の正価の削除
説明
このステップでは、実行中の正価の手数料コンポーネントを削除します。
条件
RunningNetPriceElem == Comp.PriceElementCode
-
データ・セット領域で、「行の追加」をクリックし、値を設定します。
名前
変数パス
プライマリ
Comp
PriceRequest.ChargeComponent
チェック・マークが含まれます。
-
条件の実行領域で、「条件の追加」>「デフォルト処理」をクリックし、値を設定します。
属性
値
処理
//This action cascades the discounts. Comp.delete()
-
「保存」をクリックします。
-
-
アルゴリズムで、予期した順序でルールが適用されることを確認します。 このステップは、割引リストに複数のルールがある場合に実行します。
-
名前列にその他の調整タイプの処理がある「ステップ」をクリックします。
-
条件付きアクション領域のこれらのアクションの実行列で、鉛筆をクリックします。
-
「アクションの編集」ダイアログで、コードを確認します。
finer('\tSetting up queue for applying discount matrix '+TermSetup.AttributePricingMatrixId) mq = MatrixQ.insert([ParentEntityCode:'CHARGE', ParentEntityId:TermQ.ChargeId]) mq.DynamicMatrixId = TermSetup.AttributePricingMatrixId mq.ApplyToRollupFlag = ('Y' == TermSetup.ApplyToRollupFlag) mq.FromCurrencyCode = TermSetup.PricingCurrencyCode
-
mq.FromCurrencyCode = TermSetup.PricingCurrencyCode
がある行を見つけます。 コードの最後の行です。 -
見つけたコードの後に新しい行を追加し、新しい行に
mq.TermName=TermSetup.Name
を追加します。これが修正されたコードです。
finer('\tSetting up queue for applying discount matrix '+TermSetup.AttributePricingMatrixId) mq = MatrixQ.insert([ParentEntityCode:'CHARGE', ParentEntityId:TermQ.ChargeId]) mq.DynamicMatrixId = TermSetup.AttributePricingMatrixId mq.ApplyToRollupFlag = ('Y' == TermSetup.ApplyToRollupFlag) mq.FromCurrencyCode = TermSetup.PricingCurrencyCode mq.TermName=TermSetup.Name
-
「OK > 保存」をクリックします。
-
3A. 単純割引の価格設定アルゴリズムの変更
このセクションは、単純な割引を適用する場合にのみ実行します。
-
関数を追加します。
-
「関数」をクリックします。
追加する関数を次に示します。
価格設定アルゴリズムが調整基準を取得する関数で使用できるビュー・オブジェクトを追加します。
-
「処理」>「行の追加」をクリックし、値を設定します。
名前
問合せタイプ
getAdjustmentBasis
ビュー・オブジェクト参照
-
引数領域に引数を追加します。
名前
コメント
BasisId
修正基準を識別する値です。
Language
言語を識別する略語。
-
「ビュー・オブジェクト問合せ>行の追加」をクリックし、値を設定します。
属性
値
アプリケーション・モジュール
oracle.apps.scm.pricing.priceExecution.pricingProcesses.publicModel.applicationModule.PricingProcessAM
アプリケーション構成
${(PriceRequest.PricingServiceParameter[0]?.CacheEnabledFlag==null || PriceRequest.PricingServiceParameter[0].CacheEnabledFlag) ? 'PricingProcessAMShared' : 'PricingProcessAMLocal'}
ビュー・オブジェクト
AdjustmentBasis1
単一行
チェック・マークが含まれます。
-
バインド変数領域でバインド変数を追加し、「保存」をクリックします。
バインド変数名
バインド変数値
basisId
BasisId
ラング
Language
-
-
調整基準の値を取得するステップを変更します。
-
「アルゴリズム」をクリックします。
-
ステップ領域で、名前列の基準値の取得を含む「ステップ」をクリックします。
-
ステップ詳細エリアのデフォルト・アクション・エリアで、最後までスクロールし、次のコードを見つけます:
else { finer('\tFound '+component .PriceElementCode+' charge component '+component .ChargeComponentId+' with unit price '+component .UnitPrice.Value) TermQ.AdjustmentBasisValue = component .UnitPrice.Value }
-
閉じ中カッコの直前に次の行を追加します:
//We're adding this line for cascading discounts: TermQ.TermName = TermSetup.Name
たとえば:
else { finer('\tFound '+component .PriceElementCode+' charge component '+component .ChargeComponentId+' with unit price '+component .UnitPrice.Value) TermQ.AdjustmentBasisValue = component .UnitPrice.Value //We're adding this line for cascading discounts: TermQ.TermName = TermSetup.Name }
これをここに追加します:
-
「保存」をクリックします。
-
-
単純調整を適用するステップを変更します。
-
ステップ領域で、名前列の単純調整の適用を含む「ステップ」をクリックします。
-
データ・セット領域で、データ・セットを追加します。
名前
変数パス
カーディナリティ
RunningPriceComp
PriceRequest.ChargeComponent
複数
この値は、期間キュー内の1つの期間に対して、実行中の価格に対して多数の手数料コンポーネントを使用することを指定します。
BasisComp
PriceRequest.ChargeComponent
複数
この値は、料金コンポーネントの多数の価格設定ベースを期間キュー内の1つの期間に使用するように指定します。
-
データ・セット領域の名前列にTermQが含まれている行で、値を設定します。
属性
値
ソート・キー
TermName
-
条件の実行領域のローカル変数領域で、ローカル変数を追加します。
変数名
デフォルト
BasisElementCode
空のままにします。
RunningPrice
空のままにします。
-
Default Action(デフォルト・アクション)領域で、次のコードを見つけます。
AdjustmentValue = AdjustmentValue * (-1) } } else
-
調整基準に従って割引をカスケードするコードを次に示します。 見つけたコードの直後に追加します。
// cascade your discount modifications according to the adjustment basis { BasisElementCode = getBasis(TermSetup.AdjustmentBasisId)?.PriceElementCode if (BasisElementCode != null) { TermQ.AdjustmentBasisValue = BasisComp.locate([ChargeId: TermQ.ChargeId, PriceElementCode: BasisElementCode])?.UnitPrice?.Value }
- このコードを見つけます。
finer(' Unit price adjustment = '+AdjustmentValue)
- 先ほど見つけたコードの直前に、新しい行に閉じ中カッコを追加します:
}
-
変更されたコード全体を次に示します。 変更は「太字」フォントで行われます:
def runningUnitPriceCurAdj = Charge.RunningUnitPrice def termInDifferentCurrency = (TermSetup.PricingCurrencyCode != null && TermSetup.PricingCurrencyCode != Line.AppliedCurrencyCode && !TermSetup.AdjustmentTypeCode.contains('PERCENT')) if (termInDifferentCurrency) { convRateRow = locateConversionRate(ConvRate, Header, Line, Charge, PricingTermRule, TermSetup, Message, Line.AppliedCurrencyCode, TermSetup.PricingCurrencyCode) if (convRateRow) { runningUnitPriceCurAdj *= convRateRow.ConversionRate } } if ('ROOT' == Line.ItemType && 'Y' == TermSetup.ApplyToRollupFlag) { finer(' Adjustment type = '+TermSetup.AdjustmentTypeCode) finer(' Unit price = '+Charge.RunningUnitPrice) finer(' Adjustment amount = '+TermSetup.AdjustmentAmount) finer(' Basis value = '+TermQ.AdjustmentBasisValue?:0) AdjustmentValue = pricingUtil.computeUnitAdjustment(TermSetup.AdjustmentTypeCode, runningUnitPriceCurAdj, TermSetup.AdjustmentAmount, TermQ.AdjustmentBasisValue?:0) if (termInDifferentCurrency) { convRateRow = locateConversionRate(ConvRate, Header, Line, Charge, PricingTermRule, TermSetup, Message, TermSetup.PricingCurrencyCode, Line.AppliedCurrencyCode) if (convRateRow) { AdjustmentValue *= convRateRow.ConversionRate } } if ('ERROR' != PricingTermRule.MessageTypeCode && AdjustmentValue!=null) { spread = Spread.insert([ParentChargeId: Charge.ChargeId]) spread.UnitAdjustment = AdjustmentValue //spread.createDataObject('ExtendedAdjustmentAmount') //spread.ExtendedAdjustmentAmount.Value = AdjustmentValue //spread.ExtendedAdjustmentAmount.CurrencyCode = Charge.CurrencyCode spread.PriceElementCode = TermElementCode spread.PriceElementUsageCode = priceElementUsageCode spread.SourceId = TermSetup.TermId spread.SourceTypeCode = 'PRICING_TERM' spread.SpreadId = ++spreadId // Code Changes for Bug#20265319 spread.ExplanationMessageName = TermExplanationMsg } } else { finer(' Adjustment type = '+TermSetup.AdjustmentTypeCode) finer(' Unit price = '+Charge.RunningUnitPrice) finer(' Adjustment amount = '+TermSetup.AdjustmentAmount) finer(' Basis value = '+TermQ.AdjustmentBasisValue?:0) if ( TermSetup.AdjustmentTypeCode in ['ORA_QP_ACCRUAL_AMOUNT','ORA_QP_ACCRUAL_DIFFERENCE','ORA_QP_ACCRUAL_PERCENT'] ) { AdjustmentValue = pricingUtil.computeAccrualAdjustment(TermSetup.AdjustmentTypeCode, TermSetup.AccrualTypeCode, runningUnitPriceCurAdj, TermSetup.AdjustmentAmount,TermQ.AdjustmentBasisValue?:0) TermElementCode = 'QP_ACCRUAL' priceElementUsageCode = null //For Un-Reference Return lines, reverse the polarity of adjustment value if ( Line.UnreferencedReturnLineFlag ) { AdjustmentValue = AdjustmentValue * (-1) } } else { BasisElementCode = getBasis(TermSetup.AdjustmentBasisId)?.PriceElementCode if (BasisElementCode != null) { TermQ.AdjustmentBasisValue = BasisComp.locate([ChargeId: TermQ.ChargeId, PriceElementCode: BasisElementCode])?.UnitPrice?.Value } AdjustmentValue = pricingUtil.computeUnitAdjustment(TermSetup.AdjustmentTypeCode, runningUnitPriceCurAdj, TermSetup.AdjustmentAmount, TermQ.AdjustmentBasisValue?:0) } finer(' Unit price adjustment = '+AdjustmentValue) Comp = ChargeComponent.insert([ChargeComponentId:++ServiceParam.ChargeComponentIdCntr]) Comp.ChargeId = TermQ.ChargeId Comp.createDataObject('UnitPrice') Comp.UnitPrice.Value = AdjustmentValue Comp.UnitPrice.CurrencyCode = Charge.CurrencyCode Comp.CurrencyCode = Charge.CurrencyCode if (termInDifferentCurrency) { convRateRow = locateConversionRate(ConvRate, Header, Line, Charge, PricingTermRule, TermSetup, Message, TermSetup.PricingCurrencyCode, Line.AppliedCurrencyCode) if (convRateRow) { Comp.UnitPrice.Value *= convRateRow.ConversionRate } } if ( Charge.PricedQuantity!=null ) { Comp.createDataObject('ExtendedAmount') Comp.ExtendedAmount.Value = Comp.UnitPrice.Value*Charge.PricedQuantity.Value Comp.ExtendedAmount.CurrencyCode = Comp.UnitPrice.CurrencyCode if (Line.ItemType in ['STANDARD', 'COMPONENT', 'ROOT'] && null != Line.ServiceDuration?.Value && null != Line.ServiceDurationPeriodCode ) { Comp.createDataObject('CoverageExtendedAmount') if ('ONE_TIME' == Charge.PriceTypeCode) { Comp.CoverageExtendedAmount.Value = Comp.ExtendedAmount.Value } else if ('RECURRING' == Charge.PriceTypeCode) { if (Charge.PricePeriodicityCode != Line.ServiceDurationPeriodCode) { // Partial Price Period with Conversion Rate from OKC tables Comp.CoverageExtendedAmount.Value = Comp.ExtendedAmount?.Value * Charge.PartialPeriodDurationConversionRate?:0 } else { //no partial Period pricing based on ServiceDuration Comp.CoverageExtendedAmount.Value = Comp.ExtendedAmount.Value * Line.ServiceDuration?.Value } } Comp.CoverageExtendedAmount.CurrencyCode = Comp.ExtendedAmount.CurrencyCode } } assert Charge.CompSeqCntr != null Comp.SequenceNumber = (Long) Charge.CompSeqCntr++ Comp.PriceElementCode = TermElementCode Comp.PriceElementUsageCode = priceElementUsageCode Comp.ExplanationMessageName = TermExplanationMsg Comp.PriceValidFrom = Line.PricingDate Comp.PriceValidUntil = TermSetup.EndDate Comp.SourceId = TermQ.TermId Comp.SourceTypeCode = 'PRICING_TERM' finest('\tCreated ' + Comp.PriceElementCode + ' charge component ' + Comp.ChargeComponentId + ' with unit adjustment ' + Comp.UnitPrice.Value + ' ' + Comp.UnitPrice.CurrencyCode) // Adjust running unit price Charge.RunningUnitPrice += Comp.UnitPrice.Value if (Line.MessageTypeCode != 'ERROR' && Comp.PriceElementCode == 'QP_ACCRUAL') ChannelProgram.ApplicationStatusCode = 'ORA_APPLIED' finest('\tAdjusted running unit price by ' + Comp.UnitPrice.Value) pricingUtil.computeHeaderCurrencyAmounts(Comp, Charge, Line, Header, ConvRate, Messages) }
-
これらの置換を行います。
コード内の変数 |
変数の置換に使用できるSQL問合せからの属性 |
---|---|
customer_id |
CustomerId |
selling_business_unit_id |
SellingBusinessUnitId |
selling_legal_entity_id |
SellingLegalEntityId |
inventory_item_id |
InventoryItemId |
inventory_organization_id |
InventoryOrganizationId |
unit_code |
LineQuantityUOMCode |
line_quantity_uom_code |
LineQuantityUOMCode |
5. 設定のテスト
-
オーダー管理にサインインし、販売オーダーを作成します。
-
CustomerをPennyPack Systemsなどの値に設定します。
-
「処理」>「価格設定セグメントおよび戦略の表示」をクリックし、セグメントがデフォルト・セグメントであり、戦略がPennyPackシステムに対して正しいことを確認します。
-
オーダー明細領域で、品目AS54888を検索し、結果を待って検索属性をタブ・アウトしてから、Order ManagementがPennyPackシステムの価格表から価格を取得することを確認します。
-
AS54888品目をオーダー明細に追加し、オーダー明細の「金額」をクリックしてから、Pricingで正味価格が正しく計算され、割引が適用されていることを確認します。