Phase 3 · Item Management · Oracle RMS Series

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.

14 min read📅April 22, 2026✍️Priyanshu Pandey📚Oracle RMS Series

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.

🔗
Where item-supplier fits in the ordering 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.

ITEM_SUPPLIER Table

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.

01ITEM_SUPPLIER
ITEM + SUPPLIER composite PK

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.

ColumnTypeDescription
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
DATEDate 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.
Primary Supplier

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.

⚠️
The safe way to change primary supplier in custom code

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

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:

C1Purchase Order Cost
ORDSKU.UNIT_COST

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.

C2Average Cost
ITEM_LOC_SOH.AV_COST

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.

C3Initial Markup Calculation
ITEM_LOC.UNIT_RETAIL

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

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:

L1ITEM_SUPPLIER.LEAD_TIME
Most specific — item level

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.

L2SUPS.LEAD_TIME
Supplier default — item inherits if not set

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.

L3SYSTEM_OPTIONS Default
System fallback — last resort

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.

💡
Lead time is in calendar days, not working days

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

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.

P1SUPP_PACK_SIZE
Outer case — units per carton

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.

P2INNER_PACK_SIZE
Inner pack — units per inner within a case

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:

ColumnTypeDescription
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.

⚠️
STORE_ORD_MULT on ITEM_LOC must align with pack sizes

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

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.

02ITEM_SUPP_COUNTRY
ITEM + SUPPLIER + ORIGIN_COUNTRY_ID composite PK
ColumnTypeDescription
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
DATEEarliest date the supplier can ship from this origin. Used in lead time and delivery planning.
LATEST_SHIP_DATE
DATELatest date the supplier can ship from this origin. NULL = no end date.
🌍
When ITEM_SUPP_COUNTRY is required vs optional

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.

Discontinue Date

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.

⚠️
Batch jobs do not always check SUPP_DISCONTINUE_DATE automatically

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 · Multi-Channel Order Management
Sourcing from multiple suppliers across Amazon, Flipkart and your own store?

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
Quick Reference

Key Tables — Quick Reference

Item Supplier Tables — Oracle RMS
ITEM_SUPPLIER
Item–Supplier trading agreement
ITEM_SUPP_COUNTRY
FOB cost by country of origin
SUPS
Supplier master — default lead time
ITEM_LOC
Ranging — inherits primary supplier
ORDSKU
PO line — cost defaulted from here
ITEM_LOC_SOH
Average cost — flows from PO receipt
Practical SQL

Practical SQL Examples

1. All suppliers for an item — cost, lead time and pack structure

SQL
-- 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

SQL
-- 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

SQL
-- 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

SQL
-- 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

PL/SQL

-- 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

SQL
-- 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;
Gotchas

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 throw TOO_MANY_ROWS and 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_COST column. ITEM_SUPPLIER.UNIT_COST is the agreed trading cost used on purchase orders. ITEM_SUPP_COUNTRY.UNIT_COST is 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_SUPPLIER to generate purchase orders must include AND (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_TIME is NULL, RMS falls back to SUPS.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' and SUPP_PACK_SIZE is 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 set SUPP_PACK_SIZE to at least 1 when enabling case rounding.

  • !

    Pack sizes on ITEM_SUPP_COUNTRY overriding ITEM_SUPPLIER silently. ITEM_SUPP_COUNTRY has its own SUPP_PACK_SIZE and INNER_PACK_SIZE columns. 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 on ITEM_SUPPLIER, check whether the country-level pack sizes on ITEM_SUPP_COUNTRY are set to different values.

  • !

    Treating DEFAULT_UOM on ITEM_SUPPLIER as informational only.

    If DEFAULT_UOM differs from ITEM_MASTER.UNIT_OF_MEASURE and CONVERT_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

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.
RetailCoder
All systems operational
v1.0 Live

RC:OMS

Multi-channel order management with double-entry inventory ledger. Amazon, Flipkart, Shopify, WooCommerce — one source of truth.

Launch demo →
v1.0 Live

RC:Storefront

Self-hosted headless e-commerce. Your server, your data, zero transaction fees. Native RC:OMS inventory sync.

Visit Storefront →
Pipeline

RC:Pulse

AI-powered retail analytics and demand forecasting — built natively on top of your RC:OMS and Storefront data.

Request early access →
Built in India 🇮🇳  ·  Architected by Priyanshu PandeyTalk to an engineer →