Cancel Backorders and Enforce Single Shipments
Set up Oracle Order Management so it automatically cancels backorders and enforces single shipments.
The contract that you have with your customer might include specific fulfillment requirements, such as whether your customer accepts a backorder, or will accept receiving the order line in more than one shipment.
You can set up Order Management so it considers the on-hand supply that's available to meet demand when you confirm the pick or confirm the shipment in Oracle Shipping. If supply can't meet demand, then you can automatically cancel the quantity on the line that Order Management can't fulfill. You can also automatically cancel the quantity that remains open after the first shipment even if on-hand quantity is available. For example, when your customer accepts only a single shipment for each order line.
Summary
Here's a summary of how it works:
- Assume you sell an item named Glorious Bouquet. You create a sales order in the
Order Management work area, add the bouquet to an order line, set these
attributes on the order line, then submit the sales order:
Attribute Value Quantity 10 Cancel Backorders Yes Automatically cancel any quantity that you can't fulfill because on-hand quantity can't meet demand when Shipping creates a pick wave, confirms the pick slip, or confirms shipment.
Enforce Single Shipment Yes Automatically cancel any quantity that remains open on the order line after Shipping confirms and closes the first shipment.
- You create a pick wave in the warehouse. If Shipping:
- Hasn't put any quantity on backorder, then you proceed to confirm the pick.
- Has put some or all of the quantity on backorder, then Shipping allocates the quantity that's in stock, cancels the backordered quantity, then sends details about the cancel to Order Management so Order Management can process it and update the order line.
- You confirm the pick in the warehouse. If Shipping:
- Hasn't put any quantity on backorder, then you proceed to confirm the shipment.
- Has put some or all of the quantity on backorder, then Shipping prepares the quantity that's in stock, cancels the backordered quantity, then sends details about the cancel to Order Management so Order Management can process it and update the order line.
- You confirm the shipment in the warehouse. If Shipping:
- Hasn't put any quantity on backorder, then it finishes the shipment and sends the order line to Order Management so Order Management can update the line.
- Has put some or all of the quantity on backorder, then Shipping ships the quantity that's in stock, cancels the backordered quantity, then sends the order line to Order Management so Order Management can process the cancel and fulfill the order.
Shipping does these checks during various pick and pack operations in the warehouse.
Order Management sends the attribute values to Shipping after you submit the sales order. You can then go to the Inventory Management work area and view them in the Cancel Backorders attribute and the Enforce Single Shipment attribute on the Manage Shipment Lines page.
For background, see Using Shipping.
Cancel Backorders
You might need to cancel a backorder at different times during fulfilment, such as when you release a pick, confirm a pick, or confirm a shipment. For example:
- Quantity isn't available when you release the pick.
- Quantity is available but Shipping finds that some of the quantity is damaged or there's a problem with packing when it confirms the pick.
- Quantity is available but you want to cancel the current line so you can use some or all of that line's quantity for a different, more urgent sales order.
Your customer might also have some specific requirements:
- Fulfill the quantity that's available but cancel the quantity that isn't.
- Cancel an order line that you can't fulfill.
- If you can't fulfill any line in the sales order, then cancel all the lines in the order.
- Ship all quantity in a single shipment and cancel any quantity that would need another shipment.
If you add a check mark to the Cancel Backorders attribute on the order line, and if there isn't enough on-hand quantity to meet demand, then Shipping automatically cancels the backorder when you start to release or confirm the pick, or confirm the shipment.
Shipping won't always cancel the shipment line. Here are some examples where enabling the Cancel Backorders attribute on the order line won't result in Shipping cancelling the shipment line:
- The shipment line is part of a pick-to-order configured item or kit, and Shipping backordered only part of that item or kit.
- The shipment line is part of a shipment set and Shipping backorders it when it confirms the pick.
- You go to the Inventory Management work area, then use the Backorder action or the Submit for Cycle Count action on the Manage Shipment Lines page to backorder the shipment line.
Enforce Single Shipment
If you enable the Enforce Single Shipment attribute on an order line, and if:
- Shipping can ship only part of the order line's quantity, Shipping will cancel the quantity that it can't ship.
- You use the Shipment Transaction Requests REST API or the Perform Shipping Transaction Import FBDI to ship only part of an order line, and if Shipping hasn't already sent the shipment line to the warehouse, then Shipping will cancel that line. If Shipping already sent the line to the warehouse, then Shipping won't cancel it.
- You assign more than one shipment to the sales order, then you can't confirm the shipment, send a manifest request, or create a fiscal document for the sales order.
- You use Oracle Transportation Management or some other transportation management system to plan the shipment's transportation, then you can't assign more than one shipment to the order line.
Cancel the Shipment Line
Shipping cancels the shipment line, and the Process Responses from Order Fulfillment scheduled process makes these updates on the fulfillment line:
- Uses the predefined Cancel Backorders reason to update the ordered quantity, canceled quantity, and the cancel's reason code. Order Management doesn't split the order line or revise the sales order, but it does update the order line.
- Uses the updated order quantity to recalculate the charges on the order line.
Note
- You must run the Update Sales Order Totals scheduled process to update the order header's totals.
- If an order line has a credit authorization, then you must run the Adjust Amounts for Credit Authorizations scheduled process so it can adjust the amounts according to the revised ordered quantity.
We recommend that you set up these scheduled processes so they run on a schedule. This way, you don't have to run them manually.
If the cancel happens in a back-to-back flow, then you must set the Cancel Supply When Canceling Backorders order management parameter to Yes to make sure you update the quantities on purchase order, work order, or transfer order. For more, see Manage Order Management Parameters.
If you enable the Cancel Backorders business event, then Order Management will raise that event when Shipping starts the cancel. For more, see Overview of Sending Notifications from Order Management to Other Systems.
Shipment Sets
You can use a shipment set to control how you want to cancel order lines. Assume you enable the Cancel Backorders attribute. Here's how Shipping handles the set:
Shipment Set | If Entire Quantity Isn't Available |
---|---|
All lines are in the same set. | For any line, then cancel all lines in the sales order. |
Each line is in its own set. | For a line, then cancel only that line. Apply this logic to each line. |
No line is in a set. | For a line, then ship the quantity that's available and cancel the remaining quantity on that line. Apply this logic to each line. |
If the shipment line is a component in a configured item or kit, or is part of a shipment set, and if Shipping backorders the line when confirming the pick, then Shipping doesn't cancel the line.
Enforce Shipment Sets
You can enable the Enforce Shipment Sets shipping parameter to make sure Oracle Shipping picks and ships all lines in a shipment set together.
Assume you have 2 lines that you need to ship in a single shipment. Purchasing has accepted the purchase order for line 1 but not for line 2. You pick release both lines. Line 1's status goes to Staged but line 2's status goes to Ready to Release so you can't ship the entire sales order together. If you enable Enforce Shipment Sets, then Shipping will wait until line 1 and 2 are both Staged before it proceeds with shipping the order.
For background, see Impact of Shipping Parameters for Kit Items on Transfer Orders and Considerations for Managing Shipping Parameters.
Try It
- Go to the Setup and Maintenance work area, then select the Manufacturing and Supply Chain Materials Management offering.
- Click Change Feature Opt In.
- In the row that has Shipping in the Name column, click the pencil.
- Enable the Cancel Sales Order Backorders Automatically and Enforce Single
Shipment feature, then click Done.
After you opt in, you must not disable this feature at any future time. Disabling after you enable will cause problems with downstream fulfillment. This feature will always be enabled starting with update 24D.
- Enable the Cancel Backorders business event.
Order Management will automatically raise that event when Shipping cancels the line. It might also raise other events depending on processing requirements, such as the Fufillment Line Status Update event or the Order Attribute Update event. For more, see Overview of Using Business Events with Order Management.
- Set the Cancel Supply When Canceling Backorders parameter. Use this parameter to
control behavior in your back-to-back flow. Set a value:
- Yes. If Shipping canceled only part of the shipment line, then the Process Responses from Order Fulfillment scheduled process will update Oracle Supply Chain Orchestration's supply order so the supply order has the updated the quantity. It will also update, cancel, or close any purchase order, work order, or transfer order that's attempting to fulfil the remaining quantity.
- No. Don't update or cancel the supply order, and don't cancel or close the transfer order, purchase order, or work order. Set to No when you want to manually review and cancel the supply order.
If Shipping confirms the shipment, and if there's no more quantity on the line waiting to ship, then the scheduled process will close the supply order even if you set this parameter to No.
For more, see Manage Order Management Parameters.
- Set up these scheduled processes. Set up their schedules so they run at frequent
intervals:
- Adjust Amounts for Credit Authorizations. If your
order line will have a credit authorization, then you must run this
scheduled process so it can adjust your customer's credit authorization
amounts. If Shipping cancels:
- Part of the quantity. This scheduled process will use the updated amount when it reauthorizes the credit according to the revised quantity that's on the line after the cancel.
- The entire quantity. This scheduled process will cancel the credit authorization on the order line.
- Update Sales Order Totals. Use this process to update the totals on the order header after Shipping cancels the backorder.
- Adjust Amounts for Credit Authorizations. If your
order line will have a credit authorization, then you must run this
scheduled process so it can adjust your customer's credit authorization
amounts. If Shipping cancels:
- Collect and refresh.
- Collect data for the Order Orchestration Reference Objects entity. This collection will collect the predefined Cancel Backorders reason code. For more, see Collect Planning Data for Order Management.
- Run the Refresh and Start the Order Promising Server scheduled process. For more, see Refresh the Order Promising Server for Order Management.
- Test your set up.
To get detailed examples that walk you through the end-user experience for this feature, including helpful screen prints, go to Technical Reference for Order Management (Doc ID 2051639.1), then download the Cancel Backorder and Enforce Single Shipment attachment. The attachment has these examples:
- Cancel Backorder
- Cancel Backorder and Enforce Single Shipment
- Use Business Events
- Apply Credit Adjustments
- Fulfill Back-to-Back Orders
- Cancel Backorders with Shipment Tolerances
Guidelines
You can use this feature with:
- Standard items
- Assemble-to-order items
- Pick-to-order items
- Items that use dual units of measure
- Kits
- Shipping tolerances
You can't use this feature with covered items, coverage items, or subscriptions.
You can use this feature with these flows:
- Ship from warehouse
- Back-to-back
You can't use this feature with a drop shipment, transfer order, or return order.
Note
- You can set the Cancel Backorders attribute and the Enforce Single Shipment attribute only on the order line. You can't set them on the order header, and you can't default their values from the header.
- You can't modify the Cancel Backorders attribute or the Enforce Single Shipment attribute after you submit the sales order. However, you can create an order revision, add a new line to the revision, and then set them on the new line.
- If you enable the Enforce Single Shipment attribute, then you must also enable the Cancel Backorders attribute.
- If you use your own orchestration process instead of a predefined one to fulfill your item, then you must include the Shipped value and Canceled value in the Wait for Shipment task's exit criteria. If you don't, then the Shipment task might remain active even if Order Management cancels the order line. For more, see Guidelines for Setting Up Orchestration Processes.
- Cancel Backorders controls the cancel when you release the pick, and when you confirm the pick and confirm shipment. Enforce Single Shipment applies only when you confirm the shipment.
Cancel Backorder
- You can enable the Cancel Backorders attribute and also specify a shipping tolerance on the order line. Shipping will cancel the backordered quantity when it confirms the shipment, stage the remaining quantity, then cancel part of that staged quantity according to the shipping tolerance that you set on the line. For background, see Set Up Shipping Tolerances in Order Management.
- The Cancel Backorders attribute applies only on items that you can physically ship. It doesn't apply on items that you can't ship, such as a subscription.
- Shipping might cancel some of the quantity on an order line when it releases the pick, another quantity when it confirms the pick, and yet another quantity when it confirms shipment, but Shipping will only cancel backordered quantity. If you decide to keep some quantity in a staged status during shipping, then Shipping won't cancel that quantity.
- Oracle Pricing doesn't recalculate a volume discount after a cancel. Assume you have an order line where Pricing applies a $10 discount when the quantity exceeds 100. The quantity on the line is 110, so Pricing applies the $10 discount. Shipping cancels a quantity of 20, and now the line's quantity is 90. Pricing won't recalculate the discount. Pricing will keep the $10 discount even though the quantity is now 90.
Cancellation Reason
If you revise a sales order, cancel a quantity in that revision, and provide a reason for the cancel, then Order Management will use that reason, but it won't overwrite the reason that you provide with the predefined Cancel Backorders reason for any subsequent backorder that you cancel. We recommend that you don't use the predefined Cancel Backorders reason through the Order Management workarea, REST API, or a SOAP service because it might a cause a problem in a subsequent report or reconciliation.
Assume you revise an order line. The original quantity is 10, you cancel a quantity
of 2, and you set the Cancellation Reason attribute to The item is
damaged
for that canceled quantity. Oracle Shipping finds that a
quantity of 3 is on backorder and cancels it. Shipping won't use the predefined
Cancel Backorders reason but will instead use your The item is
damaged
reason. If you then use the Order Management workarea, REST
API, or a SOAP service to cancel a quantity, then you must not use the Cancel
Backorders reason with that cancel because it won't match Shipping's reason.
REST API
If you send the shipment line to your warehouse, and if you use the:
- Shipment Line Change Requests REST API to backorder a shipment line, then Shipping will cancel the backordered quantity.
- Shipment Transaction Requests REST API or the Perform Shipping Transaction Import FBDI to do a shipping transaction, and if you specify any quantity as backordered in your import payload, then Shipping will cancel that quantity.
Configured Items and Kits
A pick-to-order configured item or a kit is typically part of a shipment set. If you cancel a backorder for the item or kit, then Order Management will cancel only the entire item or kit. It won't cancel child components in the item or kit.
Behavior varies depending on when you cancel.
Cancel When You | Result |
---|---|
Release the pick. |
If:
|
Confirm the shipment. | Shipping ships the lines that it can fulfill, and backorders the remaining lines, leading to one or more remnant lines. For more about remnants, see Fulfill Configured Items. |
Import Your Data
You can set the Cancel Backorders attribute and the Enforce Single Shipment attribute in the Order Management work area. You can also import them through an order management extension, the Sales Orders for Order Hub Requests REST API, or file-based data import (FBDI).
You can't use a SOAP web service with this feature. If you import a web service payload, and if that payload sets the value for the Cancel Backorders attribute or the Enforce Single Shipment attribute, then Order Management will automatically set the value for those attributes to N. If you must import, don't use a web service. Instead, use an order management extension, REST API, or FBDI.
Use an Order Management Extension
Use the On Save or the On Start of Submit extension point. As an option, you can apply a condition. Assume you want to apply this feature only with purchase orders that have a Cancel_Backorders prefix:
def poNumber = header.getAttribute("CustomerPONumber" );
if (poNumber == null) return;
if (!poNumber.startsWith("Cancel_Backorders")) return;def lines = header.getAttribute("Lines");
while(lines.hasNext()){
def line = lines.next(); line.setAttribute("CancelBackordersFlag", "Y");
line.setAttribute("EnforceSingleShipmentFlag", "Y");}
Assume you import sales orders that have these purchase orders:
- Cancel_Backorders-001
- Cancel_Backorders-002
- 003
Order Management will use this feature with the sales orders that have the 001 and 002 purchase orders, but not the 003 purchase order.
Use REST API
Assume you need to cancel back orders but don't want to enforce single shipments. Set these values:
- Set CancelBackordersFlag to true.
- Set EnforceSingleShipmentFlag to false.
For example, use this payload with the Sales Orders for Order Hub Requests REST API:
{
"SourceTransactionNumber": "Cancel_Backorders-001",
"SourceTransactionSystem": "GPR",
"SourceTransactionId": "Cancel_Backorders-001",
"BusinessUnitId": 204,
"BuyingPartyId": 1006,
"BuyingPartyContactId": 2663,
"TransactionalCurrencyName": "US Dollar",
"RequestedShipDate": "2024-01-14",
"RequestingBusinessUnitId": 204,
"RequestingLegalEntityId": 204,
"FreezePriceFlag": "N",
"FreezeTaxFlag": "N",
"FreezeShippingChargeFlag": "N",
"RequestedFulfillmentOrganizationCode": "M1",
"SubmittedFlag": true,
"PackingInstructions": "DOO_OrderFulfillmentGenericProcess",
"CustomerPONumber": "Cancel_Backorders-001",
"billToCustomer": [
{
"CustomerAccountId": 1006,
"SiteUseId": 1025,
"ContactFirstName": "Charles",
"ContactLastName": "Baker"
}
],
"shipToCustomer": [
{
"PartyId": 1006,
"SiteId": 1036
}
],
"lines": [
{
"SourceTransactionLineId": "1",
"SourceTransactionLineNumber": "1",
"SourceScheduleNumber": "1",
"SourceTransactionScheduleId": "1",
"ProductNumber": "AS54888",
"OrderedUOMCode": "Ea",
"OrderedQuantity": 10,
"CancelBackordersFlag": true,
"EnforceSingleShipmentFlag": false
}
]
}
Use File Based Data Import
Set these attributes to Y or to N on the DOO_ORDER_LINES_ALL_INT worksheet:
- Cancel Backorders. Allows you to cancel order lines that have items that are on back order.
- Enforce Single Shipment. Allows you to cancel the part of the order line's quantity that they can't ship in one shipment. If you set Enforce Single Shipment to Y, then you must also set Cancel Backorders to Y.
Note
- Use the SourceSalesOrderImportTemplate.xlsm template.
- You must import FBDI through REST API. For details, see Use REST API with FBDI to Import Large Volumes of Sales Orders.
Troubleshoot
The fulfillment line couldn't be updated because the line isn't ready to process the response from the fulfillment system. Details: A wide range of issues might cause this problem, such as the line isn't on a wait step, the line is locked, there's a problem with the data, and so on. To fix it, go to the Scheduled Processes work area and run the Process Responses from Order Fulfillment scheduled process. Set the Task Type parameter to the Shipment task type, and set the From Load Request and the To Load Request parameters to the 100104459930247 identifier when you run it.
You might also encounter a problem when Shipping attempts to fulfill more than one split cancel for a sales order. You might see more than one instance of the Process Response from Fulfillment System scheduled processing running at the same time, and each one with a different load request. As a result, you might have order lines that go into in error in Order Management. To fix this problem, wait for all the current instances of Process Responses from Order Fulfillment to finish running, then manually run Process Responses from Order Fulfillment Post. Set these parameters when you run it:
Attribute | Value |
---|---|
Task Type | Shipment |
Record Set | Process Records That Failed |
Incremental | Yes |
For more, see Process Responses from Order Fulfillment.
I Don't See the Cancel Backorders Reason
If you don't see the Cancel Backorders reason after you cancel the backorder, then you might need to collect data. Run this SQL:
SELECT * FROM fusion.MSC_XREF_MAPPING WHERE entity_name = 'RETURN_REASON' AND attribute_name = 'LOOKUP_CODE'
AND source_value = 'ORA_CANCEL_BACKORDERS';
If it doesn't return the Cancel Backorders reason, then collect the Order Orchestration Reference Objects entity. See Collect Planning Data for Order Management.