Pick Pack and Ship using Shipping Public APIIntroduction:The shipping Public API’s (Application Program Interface) are pl/sql packages which when calledusing wrapper files will perform the same actions possible from the Shipping applications UI.The real time nature of the shipping API’s in Release 11i and R12 has provided options for thecustomers to customize their shipping flows as per the business needs.In order to call these API’s we only need to pass the required parameters. It is mandatory thatall the required parameters need to be initialized before they are passed to the called shippingAPI. The optional parameters are optional and can be passed as additional information ifneeded.The parameters can also be classified as standard parameters and specific parameters.Standard parameters are almost common to all the shipping API’s and the Specific Parametersare specific to a particular shipping API and are discussed seperately for each of the API called inthe flow. These standard and specific parameters can be one of the madatory or optionparameter.Summary of the Flow Sequence:We have created the following business flow to demonstrate the usage of various shippingpublic API’s during Pick, Pack and Ship activities.The diagram also shows the relevant shipping API’s used during each of these specific steps.
Standard Parameters:1. p_api_version_number: This is used to compare the incoming API calls version number with the current version number (always set to 1.0).2. p_init_msg_list: This is used to Initialize message list and use FND_API.G_TRUE to reset the list.3. p_commit: Will commit the changes to the database. The Default Value is FND_API.G_FALSE4. x_return_status: Requests that the API return the status of the data after it completes its function. Valid values include: • Success : FND_API.G_RET_STS_SUCCESS • Error : FND_API.G_RET_STS_ERROR • Unexpected Error: FND_API.G_RET_STS_UNEXP_ERROR5. x_msg_count: Indicates number of error messages API has encountered.6. x_msg_data: Returns error message text. If the x_msg_count is equal to 1, then this contains the actual message.Setting the application context:Its necessary that the application context need to be set before making a call to the shippingAPI’s from sql*plus.This is done by calling FND_GLOBAL.APPS_INITIALIZE() procedure in the beginning of thewrapper file.The procedure APPS_INITIALIZE takes the following parametersFND_GLOBAL.APPS_INITIALIZE(user_id IN number, resp_id IN number, resp_appl_id IN number, security_group_id IN number);
You can obtain the valid values for each of these parameters from the application forms session.1. Arguments (input)2. USER_ID - User ID number.3. RESP_ID - ID number of the responsibility.4. RESP_APPL_ID - ID number of the application to which the responsibility belongs.5. SECURITY_GROUP_ID - ID number of the security group. This argument is automatically defaulted by the API. The caller need not pass a value for it.
Detailed Flow Sequence:Each of the steps created in the flow are discussed in detail under the following headings.Book order:Create an Order from order management Super User, Vision Operations (USA) responsibilitywith the following detailsCustomer Number :1006Warehouse : M1Ship Method : DHLLine Item : AS54888Ordered Quantity : 2
Create Delivery:As a next step to booking, a new delivery needs to be created. In order to create a new deliverywe need to call the shipping API “WSH_DELIVERIES_PUB.Create_update_delivery” by passingthe required and optional parameter values.Specific parameters: P_api_version_number => 1.0 p_action_code => CREATE -- for creating new delivery p_delivery_info => Attributes of the delivery entity of type Delivery_Pub_Rec_TypeThe sample script attached here can be used to create a new delivery.(Please note it is necessary to make the changes suggested in these scripts for them to workcorrectly in your application environment)
Assign delivery detail to delivery:The delivery detail can be assigned to the newly created delivery by using the public API“WSH_DELIVERY_DETAILS_PUB. Detail_to_Delivery”.Specific Parameters: p_TabOfDelDets => Table of Delivery Detail id’s p_action => ASSIGN p_delivery_id => Delivery id delivery_name => Delivery name to which the detail lines will be assignedThe sample script attached here can be used to assign the delivery detail to the newly createddelivery.Delivery Detail is assigned to the DeliveryPick Release:The shipping public API "WSH_DELIVERIES_PUB. Delivery_Action”, enablespick release of the sales order line. The relevant pick release parameters are retrieved from theShipping and Organization Parameter setup.
Specific Parameters: p_action_code = > PICK_RELEASE p_delivery_id/p_delivery_name => Id/name of deliveryRefer to the attached PICK_RELEASE.sql sample script which will pick releases lines for a givendelivery.Line in Staged StatusBack order line: Select move_order_line_id,organization_id,delivery_detail_id From wsh_delivery_details Where delivery_detail_id=p_delivery_detail_idAPI USED : INV_MO_BACKORDER_PVT.BACKORDERPICK CONFIRM TO CREATE MOVE ORDER HEADER(Transact move order)API USED : INV_PICK_WAVE_PICK_CONFIRM_PUB.PICK_CONFIRMManual Pack:Before advancing to this step, Please refer to metalink Note 124593.1(Containerization inShipping Execution) for all the necessary needed for packing/containerization
Manual Packing involves two steps1. Creation of LPN’s: LPN creation is done using the public API “WSH_CONTAINER_PUB. Create_Container” Specific Parameters: p_container_item_id => Key flexfield Id for the container p_organization_id => Organization ID for the container. p_quantity => Number of containers created p_container_name => Container name if creating just one container x_container_ids => Table of the newly created container IDs of type WSH_UTIL_CORE.ID_TAB_TYPE, which is a table of type number indexed by binary integersRefer to the attached CREATE_CONTAINER.sql sample script, which will enable the creation ofcontainers Generate LPN - WMS_CONTAINER_PUB.CREATE_LPN Pack Nested LPN - wms_container_pvt.packunpack_container Pack/Unpack Item into LPN – Inventory Transaction API (Interface Tables & Concurrent Manager – Inventory Transaction Worker)LPN Created
2. Perform Manual Pack operation using the LPN created previously In order to pack the delivery detail line item using the LPN created previously, we can use the public API “WSH_CONTAINER_PUB.Container_Actions”. Specific Parameters: p_container_name => Name of the container p_action_code => Action code ‘PACK’ p_detail_tab => Delivery detail to be packed. Input table of delivery detail ids of type WSH_UTIL_CORE.ID_TAB_TYPE, which is a table of type Number indexed by binary integers.Refer to the attached MANUAL_PACK.sql sample script, which will enable the packing action onthe created LPN’s. Packing completed. LPN (CT-13) is displayed in the Parent LPN field of the delivery detail
Unpack:We can unpack the packed delivery line by making call to the container public API“WSH_CONTAINER_PUB.Container_Actions”Specific Parameters:p_container_name=> Name of the containerp_action_code => Action code ‘UNPACK’p_detail_tab => Delivery detail to be unpacked. Input table of delivery detail ids of type WSH_UTIL_CORE.ID_TAB_TYPE which is a table of type Number indexed by binary integers.Unpack Completed. Parent LPN field is blank.Unassign the unpacked LPN line from delivery:The delivery detail for the LPN line, which was unpacked, previously needs to be unassignedfrom the delivery.Using “WSH_DELIVERY_DETAILS_PUB.Detail_to_Delivery” shipping API, the delivery detail isunassigned from the delivery.
Specific parameters: p_TabOfDelDets => Table of Delivery Detail id’s p_action => Action UNASSIGN p_delivery_id or delivery_name => Delivery id or delivery name to which the detail lines will be assignedAuto Pack Master:The Auto-Pack Master behaves very much similar to Auto-Pack except that it goes one stepfurther and packs the created “detail” containers into one or more “parent (master)”container(s).The parameter “p_pack_cont_flag” set to ‘Y’ or ‘N’ will decide whether to autopack the detailcontainers that are created into parent containers.For Autopack master option, set this parameter to ‘Y’Specific Parameters: P_entity_tab => Table of ids of either lines or containers or deliveries that need to be autopacked of type WSH_UTIL_CORE.ID_TAB_TYPE which is a table of type Number indexed by binary integers. P_entity_type => Type of entity id contained in the entity_tab that needs to be autopacked (L - lines, C -containers or D - deliveries).
P_group_id_tab => Table of ids (numbers that determine the grouping of lines for packing into containers) of type WSH_UTIL_CORE.ID_TAB_TYPE which is a table of type Number indexed by binary integers. P_pack_cont_flag=> A Y or N value to determine whether to autopack the detail containers that are created into parent containers. X_cont_inst_tab => Table of container IDs created during the autopacking process of typeAutopack completed. The item being shipped is packed in LPN – 251 and the LPN – 251 is furtherpacked on to Master LPN – 252 (shown under Parent LPN field)Update Delivery Details:The “WSH_DELIVERY_DETAILS_PUB.Update_Shipping_Attributes” API enables you to modifydata in wsh_delivery_details.In this specific example we have used this API to update the shipped_quantity field in thewsh_delivery_details table to ship all quantities.Specific Parameters: p_changed_attributes=>Attributes of ChangedAttributesTabType that are to be updated. p_source_code =>Code for source system which updates wsh_delivery_details table(always set to OE)
In order to specify in your logic about backorder or staged quantities you can use thefollowing logic-- Ship all quantitieschanged_attributes(1).delivery_detail_id := <<Enter the detail id>>;changed_attributes(1).shipped_quantity := <<Enter the full quantity to be shipped>>;-- Back order all quantitieschanged_attributes(2).delivery_detail_id := <<Enter the detail id>>;changed_attributes(2).shipped_quantity := 0;changed_attributes(2).cycle_count_quantity := <<Enter the full quantity to be shipped>>;-- Stage all the quantitieschanged_attributes(3).delivery_detail_id := <<Enter the full quantity to be shipped>>;changed_attributes(3).shipped_quantity := 0;changed_attributes(3).cycle_count_quantity := 0;Shipped Quantity (2) is updated in the delivery detail
Ship Confirm:Ship Confirm Process================What happened during Ship Confirm:******************************************The results of the picking process are recorded against a Delivery.• Ship Confirm can only be performed on Deliveries with Delivery Lines that have been PickConfirmed.• Ship confirming a delivery records the results of the picking process. These results could beshipped, backordered, staged or cycle count or a combination of all 4.• The workflow activity will be completed when the quantity picked is recorded as “Shipped”.• If the ordered item is set up with the item attribute “Shippable” checked, Ship Confirming is aprerequisite for Invoicing.Shipped Quantities:************************• Once the delivery is closed the Order Line is updated with the shipped quantities and thestatus of the line is changed to “Shipped”. This enables the order line to proceed to its nextworkflow activity.• The Ship Confirm transaction initiates the Inventory Interface to generate the “Issue of Stores”transactions which will decrement inventory and remove the material reservation. Then the OMinterfaces is initiated to update the Sales Order Line with Shipped quantities, freight charges,etc.• The Cost of goods sold account number that is passed to inventory is workflow generated. InInventory it creates a Material Distribution record that is ultimately passed to the GeneralLedger.• If Ship confirm is partial the remaining quantity can be either staged or backordered.Backordered Quantities:****************************• Backordered quantities are left in the Staging Subinventory. They are not automaticallyreturned to their source location.• A new pick release will be required before they can be ship confirmed.• The backordered quantity is removed from the delivery being Ship Confirmed.and thereservation is removed making the quantity available to ATP.• The Sales Order line splits into shipment schedules. One schedule will have the quantity thatwas shipped and a status of “Shipped”. The other schedule will have the quantity that wasbackordered and a status of “Awaiting Shipment”.Staged Quantities:**********************• Staged quantities are left in the Staging subinventory and can be Ship Confirmed at a latertime. The staged quantity is removed from the delivery being confirmed and optionally linked toa new delivery number.• The Sales Order line splits into shipment schedules. One schedule will have the quantity thatwas shipped and a status of “Shipped”. The other schedule will have the quantity that remainedStaged with a status of “Picked”.
Different Delivery Line Statuses:*************************************select * from wsh_lookupswhere lookup_type = PICK_STATUS- Not Applicable (Code X)The delivery line is invoiceable but non-shippable, for example, a service line or a warranty line.- Not Ready for Release (Code N)The delivery line is not eligible for pick release. Occurs when the order line is manually importedinto Oracle Shipping Execution using the Import Delivery Line concurrent process. It has notreached the Awaiting Shipping workflow activity.- Ready for Release (Code R)The delivery line is eligible for pick release. Occurs when the order line has reached the AwaitingShipping workflow activity (it is booked, scheduled, and in Oracle Shipping Execution).- Submitted to Warehouse (Code S)Pick release has processed the delivery line and has: Created move order headers and lines.Found available quantity and created inventory allocations. Not pick confirmed. If you are usingauto-pick confirm, it changes release status to Staged. If you are not using auto-pick confirm andwant to progress the delivery lines, navigate to Oracle Inventory Move Order Transactionwindow and perform manual pick confirm.- Staged (Code Y)The delivery line is pick confirmed; inventory is transferred from storage subinventory to stagingsubinventory. It remains staged until ship confirm.- Backordered (Code B)Any of the following circumstances occurs: Pick release has processed the delivery line andcannot find the entire quantity. This typically occurs when the Oracle Inventory inventorybalance indicates that there is not enough material (either because there is not enough materialor because the inventory balance is incorrect).At ship confirm, you: Enter Shipped Quantity that is less than Original Requested QuantityBackorder the entire delivery quantity Transfer a reservation to cycle count. This typically occurswhen the material that you want to ship: Has become unavailable, for example, damaged,between picking and shipping. Is available and you backorder material for specific businessreasons. For example, all available material has been allocated to a specific customer when youfind out additional supply for other orders will be delayed. For information on the backorderprocessing in pick release and ship confirm,- Shipped (Code C)The delivery line’s delivery is ship confirmed and posted as intransit, OM Interface and InventoryInterface have processed, and the trip is closed.- Cancelled (Code D)The order line that the delivery line supports is cancelled.=================================:WSH_DELIVERIES_PUB.Delivery_Action:
=================================We can call “WSH_DELIVERIES_PUB.Delivery_Action” API in order to ship confirm the deliveryProgramatically.As a final step, call “WSH_DELIVERIES_PUB.Delivery_Action” API in order to ship confirm thedelivery.Specific Parameters:p_action_code(Required) => action to be performed on Deliveryp_delivery_id (Required) => delivery id on which the action is performedp_trip_name => Trip identifier for assignment of trip to deliveryp_asg_pickup_loc_code => Stop location code for pickup assignmentp_asg_pickup_dep_date => Stop location departure date for pickup assignmentp_asg_dropoff_loc_code=> Stop location code for dropoff assignmentp_asg_dropoff_dep_date=> Stop location departure date for dropoff assignmentp_sc_action_flag => Ship Confirm option - S, B, T, A, C. Used p_sc_intransit_flag =>Ship Confirm set in-transit flag.p_sc_close_trip_flag => Ship Confirm close trip flag.p_sc_create_bol_flag => Ship Confirm create Bill of Lading flagp_sc_stage_del_flag => Ship Confirm create delivery for stage quantity flagp_sc_trip_ship_method => Ship Confirm trip ship method.p_wv_override_flag => Override flag for weight volume calculations.x_trip_name => Name of autocreated trip.Delivery Confirmed and in Closed status
Debugging Shipping API:In some cases , calls to these API’s may not be successful. In such cases calling the shippingdebugger package(WHS_DEBUG_SV) in the wrapper file will result in the creation of a detaileddebug log file based on the various debug profiles setup for shipping module .The steps given below will show the step by step approach to generate debug log file during thecall to Shipping Public API’s.01. Add the following lines into the Wrapper file before making a call to the shipping02. Set the Profiles OM: Debug Level - set to 5 INV: Debug Level - set to 10 WSH: Debug Enabled - set to Yes WSH: Debug Level - set to Statement WSH: Debug Log Directory - set to a valid writeable directory path03. Execute the shipping action via API04. Navigate to the respective directories specified using the profile “WSH: Debug Log Directory”05. Obtain the Debug
Debugging ScenarioWe are trying to create a delivery and have ensured that the organization passed is not valid.The wrapper file has been embedded with lines calling the Shipping Debugger. The Debug filegenerated in this case has the relevant debug messages.Refer to the sample wrapper file with enabled debugging and the debug log filegenerated as a result of passing invalid organization id.Metalink References: Note 124593.1 Containerization in Shipping Execution. Note 290432.1 How to Create a Debug File in Shipping ExecutionOrder Management Tables.Enteredoe_order_headers_all 1 record created in header tableoe_order_lines_all Lines for particular recordsoe_price_adjustments When discount gets appliedoe_order_price_attribs If line has price attributes then populatedoe_order_holds_all If any hold applied for order like credit check etc.Bookedoe_order_headers_all Booked_flag=Y Order booked.wsh_delivery_details Released_status Ready to releasePick Releasedwsh_delivery_details Released_status=Y Released to Warehouse (Line has been released toInventory for processing)wsh_picking_batches After batch is created for pick release.mtl_reservations This is only soft reservations. No physical movement of stockFull Transactionmtl_material_transactions No records in mtl_material_transactionsmtl_txn_request_headersmtl_txn_request_lines
wsh_delivery_details Released to warehouse.wsh_new_deliveries if Auto-Create is Yes then data populated.wsh_delivery_assignments deliveries get assignedPick Confirmedwsh_delivery_details Released_status=Y Hard Reservations. Picked the stock. Physicalmovement of stockShip Confirmedwsh_delivery_details Released_status=C Y To C:Shipped ;Delivery Note get printed Deliveryassigned to trip stopquantity will be decreased from stagedmtl_material_transactions On the ship confirm form, check Ship all boxwsh_new_deliveries If Defer Interface is checked I.e its deferred then OM & inventory notupdated. If Defer Interface is not checked.: Shippedoe_order_lines_all Shipped_quantity get populated.wsh_delivery_legs 1 leg is called as 1 trip.1 Pickup & drop up stop for each trip.oe_order_headers_all If all the lines get shipped then only flag NAutoinvoicewsh_delivery_details Released_status=I Need to run workflow background process.ra_interface_lines_all Data will be populated after wkfw process.ra_customer_trx_all After running Autoinvoice Master Program forra_customer_trx_lines_all specific batch transaction tables get populated