与信チェックのスキップ
オーダー管理で与信チェックを実装したが、販売オーダーの改訂時に履行明細が与信チェックに失敗した場合は、履行明細のステータスが与信レビュー保留でスタックし、販売オーダーの他の明細との履行では明細が移動しない場合があります。 この問題を解決できます。
次のいずれかを実行できます:
- 支払いまたは修正。
- 販売オーダーにある請求先顧客の請求書に支払を送信します。
- 与信限度額を修正します。
- 改訂を下書きステータスに変更し、再送信します。
- 販売オーダーの与信チェックを完全にスキップします。 これを行うには、2つの異なる方法があります。
- オーダー・インポートを使用して、改訂済販売オーダーのソースで承認されたクレジット属性をYに設定します。 詳細は、「与信チェックを含むソース・オーダーのインポート」を参照してください。
-
オーダー管理拡張を使用して、改訂済販売オーダーのPreCreditCheckedFlag属性をYに設定します。 拡張により、拡張で指定した条件に従って、オーダー管理で改訂の与信チェックのコールがスキップされます。
このトピックでは、オーダー管理拡張を使用して、単一の販売オーダーの与信チェックをスキップする様々な方法について説明します。 オーダー管理拡張の作成方法の詳細は、「Order Management拡張の作成の概要」を参照してください。
販売オーダー改訂の与信チェックをスキップ
- 保存時イベントに拡張を作成し、オーダー改訂の与信チェックをスキップという名前を付けます。
- このコードを内線番号に追加します。
import oracle.apps.scm.doo.common.extensions.ValidationException; Boolean isCCMgmtEnabled = false; BigDecimal refHeaderId = header.getAttribute("ReferenceHeaderId"); if(refHeaderId != null) { def lookupVO =context.getViewObject("oracle.apps.financials.assets.shared.publicView.LookupPVO"); def vc = lookupVO.createViewCriteria(); def vcrow = vc.createViewCriteriaRow(); vcrow.setAttribute("LookupType", 'AR_FEATURES');//ACCOUNT_TYPE AR_FEATURES vcrow.setAttribute("EnabledFlag", 'Y'); vcrow.setAttribute("LookupCode", 'AR_CREDIT_MGMT'); def rowset = lookupVO.findByViewCriteria(vc, -1); rowset.reset(); if(rowset.hasNext()){ isCCMgmtEnabled = true; } if(!isCCMgmtEnabled) header.setAttribute("PreCreditCheckedFlag", "Y"); }
これが機能です。
if(refHeaderId != null)
は、販売オーダーが当初オーダーであるか改訂であるかを決定します。-
与信管理で与信チェックが使用可能かどうかを決定します。 そうでない場合は、
header.setAttribute("PreCreditCheckedFlag", "Y"
によって有効になります。
当初オーダーの与信チェックのスキップ
- 保存時イベントに拡張機能を作成し、販売オーダーの与信チェックをスキップという名前を付けます。
- このコードを内線番号に追加します。
import oracle.apps.scm.doo.common.extensions.ValidationException; Boolean isCCMgmtEnabled = false; BigDecimal refHeaderId = header.getAttribute("ReferenceHeaderId"); Boolean ccHoldFoundOnOriginalLines = false; if(refHeaderId != null) { def holdInstanceVO =context.getViewObject("oracle.apps.scm.doo.publicView.analytics.HoldInstancePVO"); def hodlInstanceVc = holdInstanceVO.createViewCriteria(); def holdInstanceVrow = hodlInstanceVc.createViewCriteriaRow(); holdInstanceVrow.setAttribute("HeaderHeaderId", refHeaderId); holdInstanceVrow.setAttribute("FulfillLineOnHold", 'Y'); def holdInstanceRowset = holdInstanceVO.findByViewCriteria(hodlInstanceVc, -1); holdInstanceRowset.reset(); while(holdInstanceRowset.hasNext()) { def holdInstance = holdInstanceRowset.next(); def holdDefs = holdInstance.getAttribute("HoldDefinition"); String holdCode = holdDefs.getAttribute("HoldHoldCode"); if("DOO_CREDIT_CHECK".equalsIgnoreCase(holdCode)) { ccHoldFoundOnOriginalLines = true; break; } } if(!ccHoldFoundOnOriginalLines) { def lookupVO =context.getViewObject("oracle.apps.financials.assets.shared.publicView.LookupPVO"); def vc = lookupVO.createViewCriteria(); def vcrow = vc.createViewCriteriaRow(); vcrow.setAttribute("LookupType", 'AR_FEATURES');//ACCOUNT_TYPE AR_FEATURES vcrow.setAttribute("EnabledFlag", 'Y'); vcrow.setAttribute("LookupCode", 'AR_CREDIT_MGMT'); def rowset = lookupVO.findByViewCriteria(vc, -1); rowset.reset(); if(rowset.hasNext()) { isCCMgmtEnabled = true; } if(!isCCMgmtEnabled) header.setAttribute("PreCreditCheckedFlag", "Y"); } }
これが機能です。
- 当初販売オーダーに与信チェックが保留されている明細があるかどうかを決定します。 そうでない場合は、拡張子を終了します。
- 与信管理で与信チェックを使用可能にするかどうかを決定します。 そうでない場合は、
header.setAttribute("PreCreditCheckedFlag", "Y"
によって有効になります。
拡張可能フレックスフィールドを使用する場合の与信チェックのスキップ
- フレックスフィールドを設定します。
- 事前定義済のヘッダー情報拡張可能フレックスフィールドを編集します。
- 「拡張可能フレックスフィールドの編集」ページのカテゴリ領域で「追加ヘッダー情報」を選択します。
- 関連コンテキスト領域で、新しいコンテキストを作成します。
属性 値 表示名 フレックスフィールドがある販売オーダーの与信チェックをスキップ 関連カテゴリ 追加ヘッダー情報 動作 単一行 - 追加したコンテキストにセグメントを作成します。
このフレックスフィールドの編集方法の詳細は、「オーダー管理での拡張可能フレックスフィールドの使用の概要」を参照してください。属性 値 順序 10 名前 クレジット・チェックのスキップ 表の列 ATTRIBUTE_CHAR1 Code クレジット・チェックのスキップ
- 保存時イベントに拡張機能を作成し、フレックスフィールドがある販売オーダーの与信チェックをスキップという名前を付けます。
- このコードを内線番号に追加します。
Boolean isCCMgmtEnabled = false; BigDecimal refHeaderId = header.getAttribute("ReferenceHeaderId"); if(refHeaderId != null) { def lookupVO =context.getViewObject("oracle.apps.financials.assets.shared.publicView.LookupPVO"); def vc = lookupVO.createViewCriteria(); def vcrow = vc.createViewCriteriaRow(); vcrow.setAttribute("LookupType", 'AR_FEATURES');//ACCOUNT_TYPE AR_FEATURES vcrow.setAttribute("EnabledFlag", 'Y'); vcrow.setAttribute("LookupCode", 'AR_CREDIT_MGMT'); def rowset = lookupVO.findByViewCriteria(vc, -1); rowset.reset(); if(rowset.hasNext()){ isCCMgmtEnabled = true; } if(!isCCMgmtEnabled) { def headerEFF = header.getContextRow("Override Credit Failure for Revision"); if(headerEFF != null) { def segmentCode = headerEFF.getAttribute("skipCreditCheck"); if(segmentCode != null) { if(segmentCode.equals("Y")) header.setAttribute("PreCreditCheckedFlag", "Y"); else if(segmentCode.equals("N")) header.setAttribute("PreCreditCheckedFlag", "N"); } } }
これが機能です。
- 販売オーダーが当初オーダーか改訂かを決定します。
- 与信管理で与信チェックを使用可能にするかどうかを決定します。 そうでない場合は、オーダー・ヘッダーの改訂の与信失敗の上書きフレックスフィールド・コンテキストを読み取り、与信チェックのスキップ・セグメントの値を読み取ります。 セグメントに次のものが含まれている場合:
- Yのコードでは、与信チェックをスキップするためにPreCreditCheckedFlagをYに設定します。
- Yではなく、コードはPreCreditCheckedFlagをNに設定し、オーダー管理は与信チェックを実行します。
オーダー改訂の合計に従って与信チェックをスキップ
- 保存時イベントに拡張機能を作成し、オーダー合計が変更されない場合に与信チェックをスキップという名前を付けます。
- このコードを内線番号に追加します。
import oracle.apps.scm.doo.common.extensions.ValidationException; import oracle.apps.scm.doo.common.extensions.Message; String headerId = header.getAttribute("HeaderId"); String refHeaderId = header.getAttribute("ReferenceHeaderId"); //skip if its new order if( refHeaderId == null ) return; String currTotal,refTotal; currTotal= getTotalValue(headerId); refTotal= getTotalValue(refHeaderId); if(currTotal.equals(refTotal)){ //skip credit check if total is same header.setAttribute("PreCreditCheckedFlag","Y"); } Object getTotalValue(String header_id){ String soTotal; def vo = context.getViewObject("oracle.apps.scm.doo.publicView.analytics.OrderTotalPVO"); def vc = vo.createViewCriteria(); def vcrow = vc.createViewCriteriaRow(); vcrow.setAttribute("HeaderHeaderId", header_id); // it was refHeaderId earlier vcrow.setAttribute("OrderTotalPrimaryFlag", "Y"); vc.add(vcrow); def rowset = vo.findByViewCriteria(vc,-1); def totalSet = rowset.first(); if(totalSet!=null) soTotal = totalSet.getAttribute("OrderTotalTotalAmount"); return soTotal; }
これが機能です。
- 販売オーダーが当初オーダーか改訂かを決定します。
- 改訂の合計が当初販売オーダーの合計と一致するかどうかを決定します。 はいの場合、オーダー管理は改訂に対して与信チェックを実行します。 いいえの場合、オーダー管理ではチェックがスキップされます。
- この拡張は、与信管理が使用可能かどうかを決定しません。
オーダー改訂の支払条件に従って与信チェックをスキップ
- 保存時イベントに拡張を作成し、支払条件に従って与信チェックをスキップという名前を付けます。
- このコードを内線番号に追加します。
import oracle.apps.scm.doo.common.extensions.ValidationException; String customerPONumber = header.getAttribute("CustomerPONumber"); if(customerPONumber.equals("RD_TEST")) { BigDecimal headerId = header.getAttribute("HeaderId"); BigDecimal refHeaderId = header.getAttribute("ReferenceHeaderId"); Boolean ccHoldFoundOnOriginalLines = false; if(refHeaderId != null) { BigDecimal currentOrderAmount = new BigDecimal(0); BigDecimal refTotalAmount = new BigDecimal(0); def orderTotals = header.getAttribute("OrderTotals"); orderTotals.reset(); while(orderTotals.hasNext()) { def orderTotal = orderTotals.next(); String totalCode = orderTotal.getAttribute("TotalCode"); if(totalCode.equals("QP_TOTAL_PAY_NOW")) { currentOrderAmount = orderTotal.getAttribute("TotalAmount"); } } def headereVO =context.getViewObject("oracle.apps.scm.doo.publicView.analytics.HeaderPVO"); def headereVC = headereVO.createViewCriteria(); def headerVCRow = headereVC.createViewCriteriaRow(); headerVCRow.setAttribute("HeaderId", refHeaderId);//ACCOUNT_TYPE AR_FEATURES def headerRowset = headereVO.findByViewCriteria(headereVC, -1); headerRowset.reset(); if(headerRowset.hasNext()) { def refHeader = headerRowset.next(); def refOrderTotlasVO =context.getViewObject("oracle.apps.scm.doo.publicView.analytics.OrderTotalPVO"); def refOrderTotlasVC = refOrderTotlasVO.createViewCriteria(); def refOrderTotlasVCRow = refOrderTotlasVC.createViewCriteriaRow(); refOrderTotlasVCRow.setAttribute("OrderTotalHeaderId", refHeader.getAttribute("HeaderId"));//ACCOUNT_TYPE AR_FEATURES def refOrderTotlasRowset = refOrderTotlasVO.findByViewCriteria(refOrderTotlasVC, -1); refOrderTotlasRowset.reset(); while(refOrderTotlasRowset.hasNext()) { def refOrderTotal = refOrderTotlasRowset.next(); String refTotalCode = refOrderTotal.getAttribute("OrderTotalTotalCode"); if(refTotalCode.equals("QP_TOTAL_PAY_NOW")) { refTotalAmount = refOrderTotal.getAttribute("OrderTotalTotalAmount"); } } } if(currentOrderAmount.compareTo(refTotalAmount) == 0) { def hasPaymentTermChange = false; def lines = header.getAttribute("Lines"); while( lines.hasNext() ) { def line = lines.next(); def fulfillLinePaymentTermId = line.getAttribute("PaymentTermCode"); //header.setAttribute("Comments",fulfillLinePaymentTermId); def refFlineId = line.getAttribute("ReferenceFulfillmentLineIdentifier"); // header.setAttribute("Comments","1"); def refFlineVO =context.getViewObject("oracle.apps.scm.doo.publicView.analytics.FulfillLinePVO"); def refFlineVC = refFlineVO.createViewCriteria(); def refFlineVCRow = refFlineVC.createViewCriteriaRow(); refFlineVCRow.setAttribute("FulfillLineId", refFlineId); def refFlineRowset = refFlineVO.findByViewCriteria(refFlineVC, -1); refFlineRowset.reset(); if(refFlineRowset.hasNext()) { def refFline = refFlineRowset.next(); def refPaymentTerm = refFline.getAttribute("FulfillLinePaymentTermId"); if(fulfillLinePaymentTermId != refPaymentTerm) { hasPaymentTermChange = true; } } } if(!hasPaymentTermChange) header.setAttribute("PreCreditCheckedFlag", "Y"); } } }
これが機能です。
- 販売オーダーが当初オーダーか改訂かを決定します。
- 改訂の合計が元の販売オーダーの合計と一致するかどうか、および改訂のオーダー・ヘッダーの支払条件が元のオーダーの支払条件と一致するかどうかを決定します。
- 合計または支払条件が一致しない場合、オーダー管理は与信チェックを実行します。
- 合計と支払条件が一致する場合、オーダー管理は与信チェックをスキップします。
- この拡張は、与信管理が使用可能かどうかを決定しません。
CustomerPONumberには、テスト目的でRD_TESTが含まれます。 この値を削除するか、独自の値を使用する必要があります。
すべての販売オーダーのクレジット・チェックを無効にします
すべての販売オーダーの与信チェックを無効にできます。
- 「設定および保守」作業領域に移動してから、タスクに移動します。
- オファリング: 財務
- 機能領域: 売掛/未収金
- タスク: 売掛/未収金参照の管理
- 「売掛/未収金参照の管理」ページで、値を検索します。
属性 値 参照タイプ AR_FEATURES - 検索結果の財務一般参照タイプ領域の参照コード列にAR_CREDIT_MGMTがある行で、使用可能属性からチェック・マークを削除します。