Oracle RMS Item Supplier Setup
An item without a supplier cannot be ordered. Item-supplier setup is where the commercial relationship between a product and its source of supply is formalised in RMS — cost, lead time, pack structure, and country of origin are all locked in here before a single purchase order can be raised.
How Item-Supplier Works in RMS
In Oracle RMS, the connection between an item and its supplier is not implicit — it is an explicit record in the ITEM_SUPPLIER table. This table is the commercial agreement between a specific item and a specific supplier. It answers the questions that drive all purchasing logic: how much does this item cost from this supplier, how long does it take to arrive, and in what pack structure does it come?
An item can have multiple suppliers. This models real-world scenarios — a retailer may dual-source a product for resilience, or may source the same item from different trading arms of the same manufacturer. Each item-supplier pair gets its own row in ITEM_SUPPLIER, and one of those rows must be designated as the primary — the default source used by automated replenishment and purchase order defaults.
The item-supplier relationship also extends to a second table, ITEM_SUPP_COUNTRY, which adds the dimension of country of origin. The same supplier may manufacture the same item in multiple countries at different FOB costs. This three-level structure — item, supplier, country — forms the base of the entire Oracle Retail landed cost calculation chain.
Before any purchase order line can be created in Oracle RMS, the system
validates that an ITEM_SUPPLIER row exists for the item-supplier
combination being ordered. This check happens at the PO line entry level — no
row in ITEM_SUPPLIER means no ability to raise a PO for that item
from that supplier, regardless of whether the supplier exists in SUPS.
The ITEM_SUPPLIER Table — Deep Dive
The ITEM_SUPPLIER table has a composite primary key of ITEM + SUPPLIER. It is one of the most operationally active tables in Oracle RMS — read by replenishment batches, purchase order creation, cost calculation, and receiving validation.
Every commercially significant attribute of the item-supplier relationship lives here. Unit cost, lead time, pack sizes, the primary flag, rounding rules, packing method, and the discontinue date are all columns on this single row.
| Column | Type | Description |
|---|---|---|
ITEMPKFK | VARCHAR2(25) | FK → ITEM_MASTER.ITEM. Always VARCHAR2 — never cast to NUMBER. |
SUPPLIERPKFK | NUMBER(10) | FK → SUPS.SUPPLIER. The supplier this record applies to. |
UNIT_COST | NUMBER(20,4) | Agreed unit cost from this supplier in the supplier's default currency. |
LEAD_TIME | NUMBER(4) | Lead time in days for this item from this supplier. Overrides SUPS.LEAD_TIME for this item. |
SUPP_PACK_SIZE | NUMBER(12,4) | Outer case pack size — number of units per carton as shipped by this supplier. |
INNER_PACK_SIZE | NUMBER(12,4) | Inner pack size — units per inner pack within each outer case. |
PRIMARY_SUPP_IND | VARCHAR2(1) | Y = default supplier for replenishment and PO defaulting. Exactly one 'Y' allowed per item. |
PRIMARY_COUNTRY_ID | VARCHAR2(3) | ISO 3166-1 country code for the default country of origin for this item-supplier pair. |
ROUND_TO_INNER_PKG | VARCHAR2(1) | Y = PO quantities must be whole multiples of INNER_PACK_SIZE. |
ROUND_TO_CASE | VARCHAR2(1) | Y = PO quantities must be whole multiples of SUPP_PACK_SIZE. Stricter than ROUND_TO_INNER_PKG. |
PACKING_METHOD | VARCHAR2(6) | FLAT or HANGING. How items are packed by this supplier for shipment. |
SUPP_DISCONTINUE_DATE | DATE | Date after which this supplier no longer supplies this item. NULL = no end date. |
PURCHASE_TYPE | NUMBER(1) | 0 = Full-price purchase. 1 = Consignment. 2 = Concession. |
DEFAULT_UOM | VARCHAR2(4) | Unit of measure used on POs for this supplier. May differ from ITEM_MASTER.UNIT_OF_MEASURE. |
CONVERT_UOM_IND | VARCHAR2(1) | Y = the DEFAULT_UOM must be converted to the item's base UOM on receipt. |
The Primary Supplier Pattern
The primary supplier is the most important concept in item-supplier setup. It is the designated default source for an item — the supplier used by automated replenishment when raising stock orders, the supplier that defaults onto new manual purchase orders, and the supplier whose cost is used in item cost lookups when no specific supplier is specified.
The primary supplier is flagged by setting PRIMARY_SUPP_IND = 'Y' on the relevant ITEM_SUPPLIER row. The business rule is absolute: exactly one row must carry PRIMARY_SUPP_IND = 'Y' per item at all times. Zero primaries means replenishment cannot determine where to order from. Two primaries means any query selecting WHERE PRIMARY_SUPP_IND = 'Y' returns multiple rows, causing TOO_MANY_ROWS exceptions in batch processing.
Oracle RMS enforces this constraint at the application layer through the Forms UI. It does not always enforce it as a database-level unique constraint. This means direct SQL inserts and updates that bypass the application layer can create invalid states that appear fine until a batch job runs.
Never simply UPDATE the new row to 'Y' without first clearing the existing primary. The correct sequence is always: (1) UPDATE ITEM_SUPPLIER SET PRIMARY_SUPP_IND = 'N' WHERE ITEM = :item AND PRIMARY_SUPP_IND = 'Y', then (2) UPDATE ITEM_SUPPLIER SET PRIMARY_SUPP_IND = 'Y' WHERE ITEM = :item AND SUPPLIER = :new_primary. Both updates in the same transaction, or use the PL/SQL procedure in the Practical SQL section below.
The primary supplier pattern also appears in two related contexts. At the country-of-origin level, ITEM_SUPP_COUNTRY has its own PRIMARY_SUPP_IND = 'Y' to indicate the default sourcing country for a given item-supplier pair. At the location level, ITEM_LOC.PRIMARY_SUPP holds the primary supplier for replenishment at that specific store or warehouse — which can differ from the global primary supplier on ITEM_SUPPLIER.
Unit Cost — What It Represents and Where It Flows
ITEM_SUPPLIER.UNIT_COST is the agreed trading cost between the retailer and that supplier for one unit of the item. It is expressed in the supplier's currency (from SUPS.CURRENCY_CODE) and represents the price at which the item would appear on a purchase order raised to that supplier.
This is distinct from the FOB cost in ITEM_SUPP_COUNTRY.UNIT_COST, which is the cost at the point of origin before freight and duty are added. For domestic suppliers, these two costs are often the same. For international sourcing, they are different — the ITEM_SUPP_COUNTRY cost is the departure price; ITEM_SUPPLIER cost reflects the delivered-to-port or agreed trading price.
The unit cost flows into RMS operations in the following ways:
When a purchase order line is created for an item-supplier combination, the unit cost from ITEM_SUPPLIER defaults onto the order line in ORDSKU.UNIT_COST. The buyer can override this at the PO line level, but the ITEM_SUPPLIER cost is always the starting point. Currency conversion to the primary currency uses the Buying rate type from CURRENCY_RATES.
When stock is received against a purchase order, the receipt cost feeds into the Weighted Average Cost (WAC) calculation for that item at that location. The result is stored in ITEM_LOC_SOH.AV_COST. This is the cost the stock ledger uses for inventory valuation and cost-of-goods calculations. A wrong unit cost on ITEM_SUPPLIER cascades into wrong WAC, wrong margin reporting, and wrong stock ledger entries.
In some RMS pricing configurations, the initial retail price for an item at a location is calculated from the cost using the department's target markup percentage. If this automatic pricing is enabled, the ITEM_SUPPLIER.UNIT_COST is the input to that calculation. An incorrect cost at item-supplier setup can therefore result in an incorrect initial retail price being set during item ranging.
Lead Times — The Hierarchy of Defaults
Lead time in Oracle RMS is the number of days between placing a purchase order and the stock arriving at the receiving location. It drives the replenishment engine's calculation of when to order — ordering too late relative to the lead time results in stockouts; ordering too early results in excess inventory.
Lead time is not a single value. RMS uses a three-level default hierarchy, reading the most specific value available:
If a lead time is set at the item-supplier level, this value is used for all POs and replenishment calculations for that specific item from that specific supplier. This is the most specific and highest-priority lead time in the hierarchy. Use this when an item has unusual delivery characteristics — bulky items, made-to-order products, import items with long transit times.
If ITEM_SUPPLIER.LEAD_TIME is NULL, the replenishment engine falls back to SUPS.LEAD_TIME — the default lead time configured on the supplier master. This covers all items from that supplier that do not have an item-specific override. Setting a realistic default on the supplier saves setup time when onboarding a new supplier with many items.
If neither the item-supplier nor the supplier master has a lead time, the system uses a configurable default from SYSTEM_OPTIONS. This is the last resort and should be treated as a data quality alarm — any item that reaches the system default is missing lead time setup that should have been configured.
Oracle RMS lead time is measured in calendar days, not business days or working days. If a supplier's lead time is 14 working days, configure it as approximately 20 calendar days. Replenishment calculations that use lead time to project delivery dates will be consistently wrong if working days are entered instead of calendar days.
Pack Sizes — Inner Pack, Outer Case, and Rounding Flags
Pack sizes are among the most practically important fields on ITEM_SUPPLIER. They define how a supplier ships an item — in what unit quantities — and they directly control how Oracle RMS rounds purchase order quantities. Wrong pack sizes mean POs are raised in quantities the supplier cannot fulfil, leading to short deliveries, receiving discrepancies, and replenishment inaccuracies.
SUPP_PACK_SIZE is the outer case quantity — the number of individual units in one carton or shipping case as the supplier packs it. A retailer ordering 120 units of an item with SUPP_PACK_SIZE = 12 will receive 10 cartons. If ROUND_TO_CASE = 'Y', the RMS replenishment engine will always round up order quantities to the nearest multiple of this value.
INNER_PACK_SIZE is the inner pack quantity — the number of units in each inner pack within the outer case. A carton containing three inner packs of four units each would have SUPP_PACK_SIZE = 12 and INNER_PACK_SIZE = 4. If ROUND_TO_INNER_PKG = 'Y', order quantities must be multiples of 4. If ROUND_TO_CASE = 'Y', they must be multiples of 12.
The two rounding flags control how the replenishment engine snaps calculated order quantities to pack boundaries:
| Column | Type | Description |
|---|---|---|
ROUND_TO_INNER_PKG | 'Y' | Order quantities are rounded up to the nearest multiple of INNER_PACK_SIZE. If the calculated quantity is 10 and INNER_PACK_SIZE = 4, the order becomes 12. |
ROUND_TO_INNER_PKG | 'N' | No rounding to inner pack boundaries. Order can be any quantity down to one unit. |
ROUND_TO_CASE | 'Y' | Order quantities are rounded up to the nearest multiple of SUPP_PACK_SIZE. Takes precedence over ROUND_TO_INNER_PKG. If SUPP_PACK_SIZE = 12, all orders are in multiples of 12. |
ROUND_TO_CASE | 'N' | No rounding to outer case boundaries. Used when suppliers accept broken case orders. |
The STORE_ORD_MULT column on ITEM_LOC defines the minimum
order quantity for store-level replenishment. It must be set to a value that
is consistent with the pack sizes on ITEM_SUPPLIER — typically equal
to INNER_PACK_SIZE or SUPP_PACK_SIZE. A
STORE_ORD_MULT that is not a multiple of INNER_PACK_SIZE
will cause the supplier to receive orders they cannot fulfil in their
configured pack structure.
ITEM_SUPP_COUNTRY — FOB Costing by Country of Origin
ITEM_SUPP_COUNTRY extends the item-supplier relationship with a third dimension — the country from which the item originates. The composite primary key is ITEM + SUPPLIER + ORIGIN_COUNTRY_ID.
This table matters most for retailers who import goods internationally, because cost and duty rates vary by origin country. The same item from the same supplier might cost less when manufactured in Bangladesh than in India, but attract a higher import duty from the former. The UNIT_COST on this table is the FOB cost — the price at the port of origin, before freight and insurance. This is the starting point for Oracle Retail Trade Management's landed cost calculation chain.
| Column | Type | Description |
|---|---|---|
ITEMPKFK | VARCHAR2(25) | FK → ITEM_MASTER.ITEM |
SUPPLIERPKFK | NUMBER(10) | FK → SUPS.SUPPLIER |
ORIGIN_COUNTRY_IDPK | VARCHAR2(3) | ISO 3166-1 alpha-3 country code (e.g. 'IND', 'CHN', 'BGD') |
UNIT_COST | NUMBER(20,4) | FOB unit cost at origin in the supplier's currency. Base for landed cost calculations. |
SUPP_PACK_SIZE | NUMBER(12,4) | Pack size as shipped from this country's factory. May differ from ITEM_SUPPLIER.SUPP_PACK_SIZE. |
INNER_PACK_SIZE | NUMBER(12,4) | Inner pack from this country's factory. May differ from ITEM_SUPPLIER.INNER_PACK_SIZE. |
PRIMARY_SUPP_IND | VARCHAR2(1) | Y = this is the default sourcing country for this item-supplier pair. One 'Y' per item-supplier. |
DUTY_PCT | NUMBER(12,4) | Import duty rate expressed as a percentage. Applied on top of FOB cost in landed cost calculations. |
EARLIEST_SHIP_DATE | DATE | Earliest date the supplier can ship from this origin. Used in lead time and delivery planning. |
LATEST_SHIP_DATE | DATE | Latest date the supplier can ship from this origin. NULL = no end date. |
For purely domestic sourcing where the retailer does not use Oracle Retail Trade
Management, a minimal ITEM_SUPP_COUNTRY row with just the item,
supplier, and origin country is sufficient. For any import purchasing, trade
management, or landed cost calculation workflow, UNIT_COST and
DUTY_PCT must be set correctly — they are the first two inputs in the
landed cost chain. Missing them causes the landed cost to equal the FOB cost,
which silently understates the true cost of imported inventory.
SUPP_DISCONTINUE_DATE — End-Dating a Supplier Relationship
The SUPP_DISCONTINUE_DATE column on ITEM_SUPPLIER marks the date after which a supplier no longer supplies a specific item. It is a soft end-date — it does not delete the record, but it signals to RMS batch processes that new purchase orders should not be raised for this item-supplier combination beyond this date.
Setting this date correctly is critical for two scenarios:
Range-end management — When an item is being discontinued from a supplier (perhaps due to a supplier change or end of season), setting SUPP_DISCONTINUE_DATE to the appropriate date ensures that automated replenishment stops raising new POs to that supplier after that date, even if stock on hand drops below the reorder point.
Supplier replacement — When switching from Supplier A to Supplier B for an item, the workflow is: (1) set SUPP_DISCONTINUE_DATE on the old supplier's row, (2) create the new ITEM_SUPPLIER row for Supplier B, (3) transfer primary supplier flag to Supplier B. Outstanding POs to Supplier A are honoured until received; new replenishment orders go to Supplier B.
The RMS application UI enforces SUPP_DISCONTINUE_DATE checks when
users try to raise manual POs. However, custom replenishment batch scripts and
third-party integration tools that generate purchase orders programmatically
often skip this check. Always include
AND (is2.supp_discontinue_date IS NULL OR is2.supp_discontinue_date SYSDATE)
in any query that selects active item-supplier records for ordering logic.
RC:OMS applies the same supplier-priority thinking as Oracle RMS to modern D2C and marketplace selling. Every channel, every supplier, every stock movement tracked with double-entry ledger accuracy. Built for Indian multi-channel sellers — no overselling, no reconciliation errors.
Launch RC:OMS Demo →Key Tables — Quick Reference
Practical SQL Examples
1. All suppliers for an item — cost, lead time and pack structure
-- Full item-supplier setup audit for a single item
SELECT im.item,
im.item_desc,
s.supplier,
s.supp_name,
s.currency_code,
is2.unit_cost,
is2.lead_time,
NVL(is2.lead_time, s.lead_time) effective_lead_time,
is2.supp_pack_size,
is2.inner_pack_size,
is2.primary_supp_ind,
is2.primary_country_id,
is2.round_to_case,
is2.round_to_inner_pkg,
is2.supp_discontinue_date
FROM item_master im
JOIN item_supplier is2 ON is2.item = im.item
JOIN sups s ON s.supplier = is2.supplier
WHERE im.item = :v_item
ORDER BY is2.primary_supp_ind DESC, s.supp_name;2. Items with missing or zero unit cost on the primary supplier
-- Data quality check — Active items where primary supplier cost is 0 or NULL
-- A zero cost will result in zero-cost POs and incorrect stock valuation
SELECT im.item,
im.item_desc,
im.dept,
dp.dept_name,
s.supplier,
s.supp_name,
is2.unit_cost,
s.currency_code
FROM item_master im
JOIN item_supplier is2 ON is2.item = im.item
AND is2.primary_supp_ind = 'Y'
JOIN sups s ON s.supplier = is2.supplier
JOIN deps dp ON dp.dept = im.dept
WHERE im.status = 'A'
AND (is2.unit_cost IS NULL OR is2.unit_cost = 0)
ORDER BY dp.dept_name, im.item;3. FOB cost vs trading cost comparison — spot sourcing savings
-- Compare FOB origin cost vs agreed trading cost across all sourcing countries
-- Useful for landed cost analysis and supplier negotiation reviews
SELECT is2.item,
im.item_desc,
s.supp_name,
is2.unit_cost trading_cost,
s.currency_code,
isc.origin_country_id,
isc.unit_cost fob_cost,
isc.duty_pct,
ROUND(
isc.unit_cost * (1 + NVL(isc.duty_pct, 0) / 100),
4
) fob_plus_duty,
isc.primary_supp_ind primary_origin
FROM item_supplier is2
JOIN item_master im ON im.item = is2.item
JOIN sups s ON s.supplier = is2.supplier
JOIN item_supp_country isc ON isc.item = is2.item
AND isc.supplier = is2.supplier
WHERE is2.item = :v_item
ORDER BY isc.primary_supp_ind DESC, isc.origin_country_id;4. Items where pack size creates ordering inefficiencies
-- Items where STORE_ORD_MULT on ITEM_LOC is not aligned to INNER_PACK_SIZE
-- Misaligned store order multiples cause broken-case orders suppliers cannot fill
SELECT il.item,
im.item_desc,
il.loc,
il.loc_type,
il.store_ord_mult,
is2.inner_pack_size,
is2.supp_pack_size,
CASE
WHEN MOD(il.store_ord_mult, is2.inner_pack_size) != 0
THEN 'MISALIGNED — not a multiple of inner pack'
WHEN il.store_ord_mult = 0 OR il.store_ord_mult IS NULL
THEN 'ZERO / NULL — replenishment will skip'
ELSE 'OK'
END alignment_status
FROM item_loc il
JOIN item_master im ON im.item = il.item
JOIN item_supplier is2 ON is2.item = il.item
AND is2.primary_supp_ind = 'Y'
WHERE il.loc_type = 'S'
AND il.status = 'A'
AND (
MOD(il.store_ord_mult, NULLIF(is2.inner_pack_size, 0)) != 0
OR il.store_ord_mult = 0
OR il.store_ord_mult IS NULL
)
ORDER BY il.item, il.loc;5. PL/SQL — Safe primary supplier change procedure
-- Safely transfers primary supplier flag from one supplier to another
-- Wraps both updates in a single transaction to prevent intermediate states
-- where an item has either zero or two primary suppliers
PROCEDURE change_primary_supplier (
p_item IN item_supplier.item%TYPE,
p_new_supplier IN item_supplier.supplier%TYPE
) IS
l_count PLS_INTEGER;
BEGIN
-- Validate: new supplier must have a row in ITEM_SUPPLIER
SELECT COUNT(1) INTO l_count
FROM item_supplier
WHERE item = p_item
AND supplier = p_new_supplier;
IF l_count = 0 THEN
RAISE_APPLICATION_ERROR(-20001,
'Supplier ' || p_new_supplier ||
' has no ITEM_SUPPLIER row for item ' || p_item);
END IF;
-- Step 1: Clear existing primary flag(s)
UPDATE item_supplier
SET primary_supp_ind = 'N'
WHERE item = p_item
AND primary_supp_ind = 'Y';
-- Step 2: Set new primary
UPDATE item_supplier
SET primary_supp_ind = 'Y'
WHERE item = p_item
AND supplier = p_new_supplier;
-- Step 3: Update ITEM_LOC rows that still reference the old primary
-- Optional — remove if location-level supplier overrides are intentional
UPDATE item_loc
SET primary_supp = p_new_supplier
WHERE item = p_item
AND primary_supp != p_new_supplier;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE;
END change_primary_supplier;
6. Discontinued supplier-item pairs still active on ITEM_LOC
-- Find locations still replenishing from a discontinued item-supplier pair
-- These will generate errors when the next replenishment batch runs
SELECT il.item,
im.item_desc,
il.loc,
il.loc_type,
il.primary_supp,
is2.supp_discontinue_date,
s.supp_name
FROM item_loc il
JOIN item_master im ON im.item = il.item
JOIN item_supplier is2 ON is2.item = il.item
AND is2.supplier = il.primary_supp
JOIN sups s ON s.supplier = il.primary_supp
WHERE il.status = 'A'
AND im.status = 'A'
AND is2.supp_discontinue_date IS NOT NULL
AND is2.supp_discontinue_date < SYSDATE
ORDER BY is2.supp_discontinue_date, il.item;Common Gotchas for Developers
- !
Two rows with PRIMARY_SUPP_IND = 'Y' for the same item. This is the single most destructive data quality issue in item-supplier setup. Any PL/SQL that does
SELECT supplier INTO l_sup FROM item_supplier WHERE item = :x AND primary_supp_ind = 'Y'will throwTOO_MANY_ROWSand abort. This condition is invisible to normal browsing — items look fine in the UI until a batch job hits them. - !
Confusing ITEM_SUPPLIER.UNIT_COST with ITEM_SUPP_COUNTRY.UNIT_COST.
Both tables have a
UNIT_COSTcolumn.ITEM_SUPPLIER.UNIT_COSTis the agreed trading cost used on purchase orders.ITEM_SUPP_COUNTRY.UNIT_COSTis the FOB price at origin used in landed cost calculations. For domestic sourcing they are often the same value. For international sourcing they are always different. Using the wrong one in a costing query produces incorrect margin calculations. - !
Not filtering on SUPP_DISCONTINUE_DATE in ordering queries. Any custom batch or integration that selects from
ITEM_SUPPLIERto generate purchase orders must includeAND (supp_discontinue_date IS NULL OR supp_discontinue_date SYSDATE). Omitting this check raises POs to suppliers who have been end-dated on the item, which the RMS receiving validation will then reject. - !
ITEM_SUPPLIER.LEAD_TIME being NULL and falling through to the wrong default.
If
ITEM_SUPPLIER.LEAD_TIMEis NULL, RMS falls back toSUPS.LEAD_TIME. If that is also NULL, it falls back to the system default — which may be a generic placeholder value from implementation that does not reflect any real supplier. Always set a realistic lead time at either the item-supplier or supplier level. Use the effective lead time query (SQL example 1 above) to find which value the system is actually using. - !
Setting ROUND_TO_CASE = 'Y' without also setting a non-zero SUPP_PACK_SIZE.
If
ROUND_TO_CASE = 'Y'andSUPP_PACK_SIZEis zero or NULL, the rounding calculation divides by zero. Some RMS batch versions handle this gracefully by skipping the item; others raise an arithmetic error. Always setSUPP_PACK_SIZEto at least 1 when enabling case rounding. - !
Pack sizes on ITEM_SUPP_COUNTRY overriding ITEM_SUPPLIER silently.
ITEM_SUPP_COUNTRYhas its ownSUPP_PACK_SIZEandINNER_PACK_SIZEcolumns. In some RMS versions and configurations, these country-level pack sizes take precedence over the supplier-level pack sizes when the item is being imported from that specific country. If pack rounding behaviour appears to be ignoring the values onITEM_SUPPLIER, check whether the country-level pack sizes onITEM_SUPP_COUNTRYare set to different values. - !
Treating DEFAULT_UOM on ITEM_SUPPLIER as informational only.
If
DEFAULT_UOMdiffers fromITEM_MASTER.UNIT_OF_MEASUREandCONVERT_UOM_IND = 'Y', RMS will apply a UOM conversion factor on receipt. If the conversion factor is not configured in the UOM conversion table, receiving will fail with a conversion error. Always validate UOM consistency when setting up items purchased in a different unit than they are sold.
Key Takeaways
- ✓ITEM_SUPPLIER (PK: ITEM + SUPPLIER) is the trading agreement between an item and a supplier. It holds cost, lead time, pack sizes, and the primary supplier flag.
- ✓Exactly one PRIMARY_SUPP_IND = 'Y' must exist per item at all times. Zero primaries breaks replenishment. Two primaries causes TOO_MANY_ROWS in batch processing. Always use a safe swap procedure to change the primary.
- ✓ITEM_SUPPLIER.UNIT_COST is the agreed trading cost used on POs. ITEM_SUPP_COUNTRY.UNIT_COST is the FOB cost at origin used for landed cost calculations. They are different values for imported goods.
- ✓Lead time reads from ITEM_SUPPLIER first, falls back to SUPS.LEAD_TIME, then to the system default. Always set lead time at the item-supplier level for items with non-standard delivery characteristics.
- ✓SUPP_PACK_SIZE is units per outer case. INNER_PACK_SIZE is units per inner pack within the case. ROUND_TO_CASE and ROUND_TO_INNER_PKG control how replenishment snaps order quantities to these boundaries.
- ✓STORE_ORD_MULT on ITEM_LOC must be a non-zero multiple of INNER_PACK_SIZE. A zero or misaligned value causes replenishment batches to skip the item or generate orders the supplier cannot fulfil.
- ✓Always filter SUPP_DISCONTINUE_DATE in ordering queries: AND (supp_discontinue_date IS NULL OR supp_discontinue_date > SYSDATE). Omitting this check raises POs to end-dated supplier relationships.
