Troubleshoot Problems in Downstream Fulfillment

Fix problems in your Order Management implementation that happen in downstream fulfillment.

Common Errors

Trouble

Shoot

I encounter an error message.

Order promising can't schedule the item because the requested date happens after the order promising horizon.

Set the Requested Ship Date on the sales order so there's enough time to schedule, ship, and deliver the item.

As an alternative:

  1. Go to the Setup and Maintenance work area, then open the Manage Administrator Profile Values task.

  2. Search the Profile Option Code attribute for MSP_GOP_HORIZON_DAYS.

  3. Change the Profile Value attribute so the end of the horizon happens after the requested ship date.

  4. Collect data and refresh the Order Promising server.

The price on my order line in Order Management is different than the price on the invoice in Accounts Receivable. It's frequently off by a dollar or less.

Create a rounding rule so that Pricing rounds the value before Order Management sends it to Accounts Receivable. For details, see Manage Rounding Rules.

If you create a rounding rule for this purpose, and if you import your sales order, then you must set the Freeze Price attribute to N in your import payload. If its Y, then the prices are frozen and Pricing won't apply the rounding rule. For details, see Freeze Price on Sales Orders.

I can't release a hold on a fulfillment line even after I release the credit check hold and approve the order. I get an error that's similar to:

No reservation is defined for the orchestration process

This problem might happen when your orchestration process has a reservation task but you don't actually use that task. Examine your orchestration process definition and remove any reservation tasks that you aren't using.

I use a web service to create a sales order and then update the price, but I encounter an error that's similar to one of these errors:

An order was not created because a value was not provided for the required attribute SOURCE_CHARGE_COMPONENT_ID in the source order with the following details: source order 132947, source order line 1, source order schedule 1, source order charge 300001671561802, source order charge component. Provide the required value, and resubmit the order.

The attribute SourceChargeComponentId is missing for service TaskLayerResponseAM.

The attribute HeaderCurrencyUnitPrice is missing for service TaskLayerResponseAM.

This problem might happen when you don't include a value for the SourceChargeComponentIdentifier attribute and the HeaderCurrencyUnitPrice attribute in your response payload.

You must include these values.

If you're creating a return, then you must include these values from the original sales order.

For details, see Create Your Own Task Type.

I Have a Billing Problem

Trouble

Shoot

I have an item that I normally ship, such as the AS54888 Desktop Computer. I have a unique need to invoice the item but not actually ship it.

I enable attributes for my item.

  • I enable the Stock attribute and the Shippable attribute for the AS54888 item in the master organization.

  • I enable the Nonstock attribute and Nonshippable attribute for the AS54888 item in the inventory organization.

I create a sales order, add the AS54888 item, then click Submit. The orchestration process skips the Shipping step because the inventory organization says the AS54888 isn't stockable or shippable, but then the line gets stuck in the Awaiting Shipping status. Sometimes I encounter an error.

The value provided for the item ID attribute is invalid. Value provided: 100000046397982.

This error happens on the shipping step of my orchestration process.

This problem happens because the fulfillment line in Order Management gets attribute values for the item from the master organization in the Product Information Management work area. It doesn't get attribute values from the inventory organization in the Inventory Management work area.

To fix the problem, create an assignment rule that assigns the item to an orchestration process that doesn't ship but that does do billing. For example:

If Item = AS54888, then Do Process Name is set to DOO_BillonlyGenericProcess

I encounter an error when I run the Import AutoInvoice scheduled process.

You must enter a value in either the Original System Bill-to Customer Reference column or the Bill-to Customer Account Number column.

This error happens when you set the value instead of the Id during set up. Try this:

  1. Make sure you have the privileges that you need to administer the Project Financial Management offering.

  2. Go to the Setup and Maintenance work area, then go to the task.

    • Offering: Project Financial Management

    • Functional Area: Project Billing Base

    • Task: Manage Transaction Sources

  3. On the Manage Transaction Sources page, in the Name attribute, search for, then open Distributed Order Orchestration.

  4. On the Edit Transaction Source page, in the Customer area, set the option to Id for these attributes.

    • Bill-to Customer

    • Bill-to Address

    • Bill-to Contact

    set the option to Id
  5. Run the Import AutoInvoice scheduled process again.

For details about the scheduled process, see Guidelines for Setting Up Order-to-Cash and Update Intercompany Receivables Invoice Import Details.

I encounter an error.

Data validation failed for Create Billing Lines fulfillment task because required data values were not provided. The payment term in the fulfillment line is null. Source Order Information: xxxxxx

This error happens when you don't set the payment term on the order header or order line, and the customer account setup doesn't set the payment term.

Set the payment term when you set up the account.

Order Management typically sets the payment term from the customer account setup when you create a sales order, by default. Learn how to specify the payment term. For details, see Overview of Displaying Customer Details on Sales Orders.

As an alternative, instruct your users to create an order revision, then set the payment term on the order header or order line.

Deactivating Customer Data After You Submit a Sales Order

If you deactivate customer data on a sales order after you submit it, and if you need to change something on the order, then you might need to wait for Order Management to fulfill and close all lines that reference the deactivated customer data.

For example, assume you:

  1. Create a sales order:
    • You set the Bill-to Customer to Computer Supply and Rentals.
    • You add two order lines.
  2. You submit the order.
    • Order Management sends order line 1 to Accounts Receivable and the line's status is Awaiting Billing.
    • Order line 2 is in the Manual Shipping status.
  3. You deactivate the Computer Supply and Rentals bill-to customer in Oracle Customer Data Management.
  4. You need to modify the quantity on line 2, so you create an order revision but encounter an error when you submit the revision.

THE VALUE XXX GIVEN FOR ATTRIBUTE BILL-TO CUSTOMER WHICH IS DEPENDENT ON ATTRIBUTE BILL-TO CONTACT WITH VALUE YYY IS INVALID

This error happens because Order Management attempts to validate the Computer Supply and Rentals bill-to customer when you submit the revision, but finds that Computer Supply and Rentals is no longer active. A similar error might happen if you deactivate the ship-to customer.

To avoid this problem, wait until all of these lines on the order are in Closed status, then create a revision.

I Can't Convert Currency During Billing

I encounter an error.

The conversion type is invalid. If the currency of the transaction is the same as the ledger currency, enter User and set CONVERSION_RATE to 1.

This problem happens when you don't set up a value that Order Management can use as the default for the conversion rate type. Order Management uses the conversion rate type when it converts a foreign currency transaction to the ledger currency.

  1. Go to the Setup and Maintenance work area, click Tasks > Search, then search for and open the Manage Administrator Profile Values task.

  2. On the Manage Administrator Profile Values page, search the Profile Option Code attribute for AR_DEFAULT_EXCHANGE_RATE_TYPE.

  3. In the Profile Values area, add a value. Make sure you set the Profile Level attribute to Site.

If you're using an order management extension to do the conversion, then use this extension code instead of setting the profile value.

import oracle.apps.scm.doo.common.extensions.ValidationException;

import oracle.apps.scm.doo.common.extensions.Message;

def orgId = header.getAttribute("BusinessUnitIdentifier");
def buPrimaryLedgerId=getBUPrimaryLedgerId(orgId);
def ledgerCurrCode=getLedgerCurrency(buPrimaryLedgerId);

def headerCurrCode=header.getAttribute("TransactionalCurrencyCode");

if(!headerCurrCode.equalsIgnoreCase(ledgerCurrCode) && header.getAttribute("CurrencyConversionTypeCode")==null){
String messageText = "Currency Conversion Type must be specified on the Order Header when the Sales Order Currency and the Currency associated to the Selling Business Unit is not the same";
List messages = new ArrayList();
messages.add(new Message(Message.MessageType.ERROR, messageText));
ValidationException ex = new ValidationException(messages);
throw ex;
}

Object getBUPrimaryLedgerId(Long orgId) {
def buPrimaryLedgerId;
def bussUnitPVO=context.getViewObject("oracle.apps.financials.commonModules.businessUnits.publicView.BusinessUnitPVO");
def buvc = bussUnitPVO.createViewCriteria();
def buvcRow = buvc.createViewCriteriaRow();
buvcRow.setAttribute("BusinessUnitId",orgId);
def buRowset = bussUnitPVO.findByViewCriteria(buvc, -1);
if(buRowset.hasNext()){
def buRow = buRowset.next();
buPrimaryLedgerId=buRow.getAttribute("PrimaryLedgerId");
}
return buPrimaryLedgerId;
}

Object getLedgerCurrency(String ledgerId) {
def ledgerCurrCode;
def ledgerPVO=context.getViewObject("oracle.apps.financials.generalLedger.ledgers.ledgerDefinitions.publicView.LedgerPVO");
def lvc = ledgerPVO.createViewCriteria();
def lvcRow = lvc.createViewCriteriaRow();
lvcRow.setAttribute("LedgerId",ledgerId);
def lRowset = ledgerPVO.findByViewCriteria(lvc, -1);
if(lRowset.hasNext()){
def ledgerRow = lRowset.next();
ledgerCurrCode=ledgerRow.getAttribute("CurrencyCode");
}
return ledgerCurrCode;
}

I Have a Problem with Sales Order Status

Trouble

Shoot

I create a sales order and submit it. Supply Chain Orchestration creates the supply order and reserves the item in inventory.

Assume today is January 1, 2021. Global Order Promising examines your supply chain, determines that it can't fulfill the item until January 7, and communicates these details to Order Management. Order Management sets the Scheduled Ship Date attribute on the fulfillment line to January 7, and changes the Status attribute on the order line to Waiting.

I expected the status on the order line to be Awaiting Shipping, not Waiting.

I go to the Inventory Management work area, select Shipments > Manage Shipment Lines, but can't find shipment lines for the sales order.

Here's what happened. If the Scheduled Ship Date attribute on the fulfillment line happens 5 or more days after the current date in a back-to-back flow, then the orchestration process sets the Status attribute on the order line to Waiting.

If the Supply Type attribute on the line for the supply order is:

  • ATP. Promising examines the on-hand inventory and uses it to schedule the order line. You can use the Supply Orchestration work area to reserve inventory and pick the item.

  • Buy. Wait until the purchase order is finished, then use Supply Chain Orchestration to reserve inventory and pick the item.

For details, see Manage Your Supply Process.

We have a custom orchestration process that sends a request to some other system during compensation, such as sending a request for a credit check to a 3rd party vendor, sending a screening request to trade compliance, and so on. At run time, I revise a sales order, the orchestration process runs, but the order gets stuck in Change Pending status.

This problem might happen because Order Management never receives a reply from the request.

The Warehouse Hasn't Reserved Inventory for My Item

Assume you create a sales order, submit it, and have a fulfillment line with these values.

Attribute

Value

Item

AS54888

Quantity

100

You go to a fulfillment view in the Order Management work area, and see that there's an error on the fulfillment line.

A reservation was not created because the reservation quantity is greater than the available-to-reserve quantity.

Several problems might cause this error. Here are some corrections you can try.

Change the Warehouse

Go to the Order Management work area, open your sales order, then use the Warehouse attribute on the fulfillment line to change the warehouse.

Modify an Available-To-Promise Rule

Assume set up an infinite available-to-promise rule to schedule the order line. However, at run time there's no on-hand quantity in the sourcing warehouse.

Order Promising doesn't track actual supply when you use an infinite available-to-promise rule. It assumes that supply is always available. To fix this problem, you can remove the infinite available-to-promise rule.

Modify a Sourcing Rule

Assume you create a sourcing rule but didn't set the From Quantity or Less Than Quantity attributes. You might have set these values in the Order Promising work area or during order import.

Here's how you can fix this problem.

  1. Go to the Global Order Promising work area.

  2. On the Global Order Promising page, click Tasks > Manage Sourcing Rules.

  3. On the Manage Sourcing Rules page, search for, then open your sourcing rule for editing.

  4. On the Edit Sourcing Rules page, in the Effective Start Date, click View > Columns, then add a check mark to the From Quantity option and the Less Than Quantity option.

  5. Set the values.

    Attribute

    Value

    From Quantity

    0

    Less Than Quantity

    9999999

    These values will work for most implementations, but you can use different ones to meet your requirements. For details, see Create Sourcing Rules That Source According to Quantity and Supplier.

    If you import the sourcing rule, then set the values in your import payload instead of using the work area.

    Attribute

    Value

    FROM_QTY

    0

    TO_QTY

    9999999

  6. Go to the Scheduled Processes work area, then run the Refresh and Start the Order Promising Server scheduled process.

Modify the Orchestration Process

You can remove the reservation step from you orchestration process and avoid the error message. The sales order will go to the Awaiting Shipping status even though there isn't any on-hand quantity available. If you remove the step, then you must manually reserve inventory for each sales order.

I Can't Update My Sales Credits

I encounter an error:

You do not have the required access to update line attribute "Sales Credit". Source Order Information: 36919901-3-1

Assume you use SourceTransactionSalesCreditIdentifier in an extension to populate the flineId for all sales credits that are in the same flineId. If you have more than one sales credit on the same fulfillment line, then the extension will create more than one record for SourceTransactionSalesCreditIdentifier, and the extension can't tell which credit to apply to the line.

To avoid this problem, you can use SalesCreditIdentifier to explicitly populate the value in SourceTransactionSalesCreditIdentifier:

sc.setAttribute("SourceTransactionSalesCreditIdentifier", sc.getAttribute("SalesCreditIdentifier"));

For example:

Bad Good
def sc = salesCredits.createRow(); sc.setAttribute("SourceTransactionSalesCreditIdentifier", flineId); sc.setAttribute("SalespersonIdentifier", 5507); sc.setAttribute("Percent", new BigDecimal(50)); sc.setAttribute("SalesCreditTypeCode", 1); salesCredits.insertRow(sc); def sc = salesCredits.createRow(); sc.setAttribute("SalespersonIdentifier", 5507); sc.setAttribute("Percent", new BigDecimal(50)); sc.setAttribute("SalesCreditTypeCode", 1); salesCredits.insertRow(sc); sc.setAttribute("SourceTransactionSalesCreditIdentifier", sc.getAttribute("SalesCreditIdentifier"));