This page explains how Norce Commerce calculates product availability for bundles, specifically for the product types ManagedStructure and ManagedERPPackageWithCalc (and their unmanaged legacy versions). These bundles have their availability values calculated based on their child products.
For availability calculations on ordinary (non-bundle) products, see Availability structures.
Bundles in Norce Commerce are products composed of multiple child products. The system calculates the bundle's availability fields by aggregating and processing the availability data from its children.
The following fields are calculated for each bundle, per warehouse/location pair:
- OnHandValue: The lowest available quantity among the children, after dividing each child's on-hand value by the required quantity for the bundle.
- IncomingValue: The lowest incoming quantity among the children, after dividing by the required quantity (ignoring null values).
- NextDeliveryDate: The latest next delivery date among the children. If any child lacks a delivery date, the bundle's value is null.
- LeadTime: The largest lead time value among the children.
Note: Calculations are performed per warehouse/location pair. Bundles do not receive a total calculation across all warehouses.
- Only child products enabled for the same warehouse/location are included.
- If any required child is not enabled for a warehouse/location, the bundle is not available there.
- Calculations account for the required quantity of each child in the bundle.
- Reservation values are considered in on-hand calculations, but reservation is not stored on the bundle itself.
Below are examples illustrating how bundle availability is calculated in different scenarios. Each table is self-contained and includes all relevant context.
A bundle consists of 1 piece of Product A and 2 pieces of Product B.
Product | OnHandValue | IncomingValue | NextDeliveryDate | LeadTime |
---|---|---|---|---|
Child A | 10 | Null | Null | 1 |
Child B | 10 | Null | Null | 1 |
Bundle (1 pc A, 2 pcs B) | 5 | Null | Null | 1 |
Explanation:
Child B has 10 units on hand, but the bundle requires 2. The bundle's on-hand value is the lowest available among the children after dividing by required quantity:
- Child A: 10 / 1 = 10
- Child B: 10 / 2 = 5
The bundle's on-hand value is 5.
Child B is not active (not enabled) on the warehouse/location.
Product | OnHandValue | IncomingValue | NextDeliveryDate | LeadTime |
---|---|---|---|---|
Child A | 20 | Null | Null | 1 |
Child B | - | - | - | - |
Bundle (1 pc A, 2 pcs B) | - | - | - | - |
Explanation:
If any required child is not enabled on the warehouse/location, the bundle is not available there.
Product | OnHandValue | IncomingValue | NextDeliveryDate | LeadTime |
---|---|---|---|---|
Child A | 0 | 10 | 2022-01-01 | 1 |
Child B | 20 | Null | Null | 1 |
Bundle (1 pc A, 2 pcs B) | 0 | 10 | 2022-01-01 | 1 |
Explanation:
Child A has no on-hand value, so the bundle's incoming value and next delivery date are taken from Child A.
Product | OnHandValue | IncomingValue | NextDeliveryDate | LeadTime |
---|---|---|---|---|
Child A | 0 | 10 | 2022-01-01 | 1 |
Child B | 0 | 22 | 2022-02-01 | 1 |
Bundle (1 pc A, 2 pcs B) | 0 | 10 | 2022-02-01 | 1 |
Explanation:
The bundle's incoming value is the lowest (after dividing by required quantity), which is 10 from Child A. The next delivery date is the latest among the children, which is 2022-02-01 from Child B.
Product | OnHandValue | IncomingValue | NextDeliveryDate | LeadTime |
---|---|---|---|---|
Child A | 10 | Null | Null | 5 |
Child B | 10 | Null | Null | 1 |
Bundle (1 pc A, 2 pcs B) | 5 | Null | Null | 5 |
Explanation:
The bundle's on-hand value is 5 (see Example 1). The lead time is the largest among the children, which is 5 from Child A.
Product | OnHandValue | Reservation |
---|---|---|
Child A | 10(*) | 5 |
Child B | 25 | 0 |
Bundle (1 pc A, 2 pcs B) | 5 | 0(**) |
Explanation:
On-hand values are calculated after subtracting reservations. Reservation values are not stored on the bundle itself.
Note:
(*) OnHandValue is shown with reservation subtracted in the Admin UI and Norce Commerce Services (but not in Norce Commerce Query).
(**) Reservation field is not used on ManagedStructure or ManagedERPPackageWithCalc products; it is only considered in the on-hand calculation.