Published at: 2025-10-30

Shipping Order


1. Example Business Scenarios

As a standard sales process, after a product is sold, the company needs to deliver the product to the specified Account. The salesperson locates the corresponding Sales Order, creates a Shipping Order under that Sales Order, selects the Products to ship from the Sales Order line items, and sets the shipment quantity and amount per Product to generate the Shipping Order. Like Sales Orders, Shipping Orders can be configured to require a strict approval process before shipment.

A Shipping Order can perform partial shipments for a single Sales Order or consolidate shipments across multiple Sales Orders.

Managing Shipping Orders helps managers track shipment, logistics, and delivery confirmation for Sales Order Products.

2. Create a Shipping Order and Partial Shipments

2.1 Create a Shipping Order

picture coming soon:

  • Go to CRM and click Shipping Orders to open the Shipping Order list view.
  • Click the New button in the top-right corner to create a Shipping Order using a preset Record Type or a custom Record Type.

picture coming soon:

picture coming soon:

  • When creating a Shipping Order you must first select the Account, then select the Sales Order(s) that belong to that Account.
  • If EMS (inventory management) is enabled, you must also specify the Warehouse for the shipment.
  • Products on the Shipping Order can only be added from the selected Sales Order’s order Products.
  • When you click Add from Order Products, the Order Products object list opens. Select the Order Products to ship and enter the shipment quantity. For Products with batch or serial number management enabled, you must also specify the outbound batch or serial numbers.
  • On submission, the Shipping Order validates that the shipment quantity is less than or equal to the remaining shippable quantity on the Order Product.
  • On submission, the Shipping Order validates Warehouse Inventory; if stock is insufficient, the Shipping Order cannot pass validation.
  • When the Shipping Order is confirmed, the system deducts the actual Inventory from the specified Warehouse.
  • When the Shipping Order is confirmed, the system automatically updates the Order Product’s shipped quantity and shipped amount.

2.2 Partial Shipments

When customer Orders are large, factories often produce and ship in batches. Creating multiple Shipping Orders makes it easy to manage Sales Orders and order line items and to display delivery status (total order amount, total quantity, shipped quantity, pending quantity, etc.). This supports better Sales Order management, production planning, and shipment control.

  • Each time you create a Shipping Order, the system automatically calculates the maximum shippable quantity based on Warehouse Inventory, reducing manual calculation and improving shipment efficiency.
  • For partial shipments, the system validates both Inventory availability and the Sales Order’s remaining shippable quantity to prevent over-shipment.
  • Once partial shipments complete, the system automatically updates the Sales Order status to Shipped.

3. Track Shipping Order Logistics

picture coming soon:

  • Logistics tracking for Shipping Orders is an advanced feature that requires purchasing the logistics query resource package before you can query logistics information on Shipping Orders.
  • Logistics information must include both the carrier and the tracking number to retrieve correct results.
  • The system supports major carriers (for example: SF Express, EMS, YTO, STO, ZTO, Yunda).
  • Note: If the customer has its own kuaidi100 account, contact your product manager for an implementation plan. The integration can be done via the APL+PWC component to enable intelligent tracking number recognition and real-time logistics queries.

4. Confirm Receipt

There are three methods to confirm receipt on a Shipping Order: manual confirmation, timeout-based automatic confirmation, and logistics-signature-based automatic confirmation.

4.1 Manual Confirmation

picture coming soon:

  • After the recipient receives the goods, they can confirm receipt on the Shipping Order. During confirmation they can upload Images and enter the actual received quantities.

4.2 Automatic Confirmation

picture coming soon:

  • Go to EMS management → Plugin Management to configure automatic confirmation of receipt.
  • Automatic confirmation supports both timeout-based automatic confirmation and logistics-signature-based automatic confirmation.
  • If timeout automatic confirmation is enabled, the system will auto-confirm receipt after a configured number of days from Shipping Order confirmation.
  • If logistics-signature automatic confirmation is enabled, you must subscribe for logistics signature notifications when creating the Shipping Order. After the carrier records delivery, the system automatically confirms receipt.

5. Shipping Orders in Loose-Coupling Mode

The Shipping Order logic described above applies to tightly-coupled mode. If you need to integrate Shipping Orders with ERP or other third-party systems, we recommend using Shipping Orders in loose-coupling mode.

When the integration edition (B type) of EMS is enabled, or when EMS is not enabled, you can switch to loose-coupling mode via the order coupling parameter.

picture coming soon:

  • Shipping Orders in loose-coupling mode offer the same flexibility as custom objects: they have no built-in validation logic, and you can define subsequent logic (for example via functions) as needed.
  • In addition to high flexibility, loose-coupling Shipping Orders retain core features such as partial shipment, multi-order shipment, logistics tracking, and automatic confirmation of receipt.

6. Shipping Order Function Configuration Guide

Configure a custom function as a pre-approval validation to prevent Shipping Orders from being approved when real Inventory is insufficient.

1) Navigate to the Custom Function Management page.

picture coming soon:

2) Click New Function in the top-right corner and enter the configuration details in the dialog:

picture coming soon:

  • Function Name and Api Name are customizable.
  • Set Namespace to “Validation Function”.
  • Set Return Type to “ValidateResult”.
  • Bind the function to the Shipping Order object.

Proceed to the next step and paste the following code into the function input box, then save to create the function.

Map requestParam = [ //”deliveryNoteDataId”:”600a934cf08093000131f31c” // “deliveryNoteDataId”:”600a962ff080930001321b74” “deliveryNoteDataId”:context.data._id ];

Fx.log.info(“requsetParam=” + requestParam)

def ret = Fx.proxy.callAPI(“stock.checkDeliveryRealStock”, null, requestParam)

Fx.log.info(“ret=” + ret);

HttpResult data = ret.data as HttpResult

if(null == data) { return ValidateResult.build{ success = false errorMessage = “Network timeout” } }

String json = data.content Fx.log.info(“data.content:” + json) Map resultData = Fx.json.parse(json) String realRetStr = resultData.result Fx.log.info(“realRetStr:” + realRetStr) Map realRetMap = Fx.json.parse(realRetStr) boolean passCheck = realRetMap.passCheck String retMessage = “Inventory validation passed”; if (passCheck == false) { retMessage = “Inventory validation failed:” String shortageProductStr = realRetMap.shortageProducts Fx.log.info(“shortageProducts:” + shortageProductStr) Map shortageProductMap = Fx.json.parse(shortageProductStr) shortageProductMap.each { key, value -> String name = (String)key BigDecimal substact = (BigDecimal)value retMessage = retMessage + name + “ shortage “ + substact + “;” } } def result = ValidateResult.build{ success = passCheck errorMessage = retMessage } return result

3) Configure the custom function as a precondition on the approval node in the workflow.

picture coming soon:

picture coming soon:

Select the precondition type “Based on custom function” and then choose the function you just created.

Submit Feedback