InventTableModule
mainPer-module item settings — one row per released item per module (inventory, purchase, sales), holding that module's default unit, base price and price unit, discount groups, tax item group, and over/under-delivery tolerances; a fully set-up item normally has exactly three rows per company
ModuleType (0 inventory, 1 purchase, 2 sales) is the pivot key: a raw-table export lands three rows per item, so conditional aggregation on ModuleType is the first thing every model over this table does. Unit price is Price / PriceUnit, never Price alone. Lead time is not here despite the name — purchase, sales, and inventory lead times live on the InventItemPurchSetup / InventItemSalesSetup / InventItemInventSetup order-settings tables, which are outside this reference's table scope. The over/under-delivery tolerances here are overwritten in place — scoring historical receipts against the tolerance in force on their date needs a type-2 history the ERP does not keep.
What the badges mean
- main
- Table group: how F&O categorizes the table's role — main entity, group/header, transaction, worksheet header, worksheet line, reference, parameter, or framework.
- Shared across companies
- The table carries no
DataAreaId— rows aren’t partitioned per company, so a query never needs (and can’t use) a company filter here (see the quirks guide). - Date-effective
- The table carries a
ValidFrom/ValidToeffectivity window — a join without a date filter multiplies every key by its history (see the quirks guide).
Fields
13 fields · 2 key
13 fields.
| Key | Field | EDT | Description | Type | Length | Flags |
|---|---|---|---|---|---|---|
| Key | ItemId | ItemId | The item number the module settings apply to — the join back to InventTable | string | 20 | |
| Key | ModuleType | Which module this row's settings belong to — 0 inventory, 1 purchase, 2 sales; the column every query over this table pivots on | enum | |||
| UnitId | UnitOfMeasureSymbol | Default unit of measure the module transacts the item in — the sales unit on the sales row, the purchase unit on the purchase row | string | |||
| Price | Base price for the module — the sales list price on the sales row, the standard purchase price on the purchase row; it is the price for PriceUnit units, not for one | real | ||||
| PriceUnit | Number of units Price is quoted for; unit price is Price / PriceUnit, and skipping the division is the classic costing error on this table | real | ||||
| PriceQty | Quantity the fixed charges in Markup are spread across | real | ||||
| PriceDate | Date the module's price was last changed; never-priced rows carry the 1900-01-01 sentinel | date | ||||
| Markup | Fixed charges added to the price once per invoice, on top of Price | real | ||||
| OverDeliveryPct | Percentage above the ordered quantity that may still be received or delivered — the tolerance behind over-receipt analysis | real | ||||
| UnderDeliveryPct | Percentage below the ordered quantity that still counts as complete — the tolerance behind short-ship and fill-rate analysis | real | ||||
| TaxItemGroupId | TaxItemGroup | Item sales tax group applied to the item in this module; sales and purchase rows commonly differ | string | |||
| LineDisc | InventLineDiscCode | Line discount group the item belongs to for this module's price agreements | string | |||
| MultiLineDisc | InventMultiLineDiscCode | Multiline discount group the item belongs to — the grouping that qualifies several lines together for a volume break | string |
Field provenance: hand-curated.
Boilerplate SQL
Starting point for reading InventTableModule on Databricks — enums are decoded, 1900-01-01 dates are wrapped to NULL, and the DataAreaId anchor is in place. Set your Unity Catalog location, company, and filter values below; they’re substituted into the SQL and the copy button.
4 parameters not filled: <catalog>, <schema>, <company>, <ItemId>
-- ============================================================
-- Table : InventTableModule Per-module item settings — one row per released item per module (inventory, purchase, sales), holding that module's default unit, base price and price unit, discount groups, tax item group, and over/under-delivery tolerances; a fully set-up item normally has exactly three rows per company
-- Purpose: Column-selected read of InventTableModule — auto-generated from field metadata
-- Grain : One row per company (dataareaid) + ItemId + ModuleType
-- Notes : Auto-generated skeleton for Synapse Link / Fabric Link-landed F&O data (lowercase column names). Enums decoded inline where verified; datetimes stored in UTC; 1900-01-01 dates are sentinels mapped to NULL. System/audit columns omitted — see the quirks guide.
-- ============================================================
SELECT
i.itemid AS "The item number the module settings apply to — the join back to InventTable",
CASE i.moduletype WHEN 0 THEN 'Inventory' WHEN 1 THEN 'Purchase order' WHEN 2 THEN 'Sales order' ELSE CAST(i.moduletype AS STRING) END AS "Which module this row's settings belong to — 0 inventory, 1 purchase, 2 sales; the column every query over this table pivots on", -- enum: ModuleInventPurchSales
i.unitid AS "Default unit of measure the module transacts the item in — the sales unit on the sales row, the purchase unit on the purchase row",
i.price AS "Base price for the module — the sales list price on the sales row, the standard purchase price on the purchase row; it is the price for PriceUnit units, not for one",
i.priceunit AS "Number of units Price is quoted for; unit price is Price / PriceUnit, and skipping the division is the classic costing error on this table",
i.priceqty AS "Quantity the fixed charges in Markup are spread across",
CASE WHEN CAST(i.pricedate AS DATE) = DATE '1900-01-01' THEN NULL ELSE CAST(i.pricedate AS DATE) END AS "Date the module's price was last changed; never-priced rows carry the 1900-01-01 sentinel", -- 1900-01-01 sentinel → NULL
i.markup AS "Fixed charges added to the price once per invoice, on top of Price",
i.overdeliverypct AS "Percentage above the ordered quantity that may still be received or delivered — the tolerance behind over-receipt analysis",
i.underdeliverypct AS "Percentage below the ordered quantity that still counts as complete — the tolerance behind short-ship and fill-rate analysis",
i.taxitemgroupid AS "Item sales tax group applied to the item in this module; sales and purchase rows commonly differ",
i.linedisc AS "Line discount group the item belongs to for this module's price agreements",
i.multilinedisc AS "Multiline discount group the item belongs to — the grouping that qualifies several lines together for a volume break"
FROM <catalog>.<schema>.inventtablemodule i
WHERE
i.dataareaid = '<company>'
-- AND i.itemid = '<ItemId>'
ORDER BY i.itemid;Verified August 2026
Relationships
Diagram of 1-hop neighbors — join details below. RecId and InventDim edges are highlighted; they’re the joins newcomers most often get wrong.
Join details
ON inventtablemodule.itemid = inventtable.itemid AND inventtablemodule.dataareaid = inventtable.dataareaid
Data Entities That Expose This Table
More Product Information tables
- UnitOfMeasureThe shared unit-of-measure master — one row per unit symbol (kg, ea, hr) with its unit class and system of units; every quantity column in the lake ultimately resolves to a symbol here
- UnitOfMeasureConversionUnit conversion rules — factor, numerator/denominator, and offsets for converting between two units, referenced by RecId to UnitOfMeasure on both sides; product-specific conversions carry the product's RecId, standard conversions leave it 0
- EcoResProductThe shared product master — one row per product across all companies; released products in InventTable point back to it by RecId
- EcoResProductTranslationLanguage-specific product names and descriptions — one row per shared product and language, joined back to EcoResProduct by RecId; the table product names actually live in
- EcoResStorageDimensionGroupStorage dimension group master — shared setup that decides which storage dimensions (site, warehouse, location) are active and mandatory for the products assigned to it, including whether advanced warehousing applies
- EcoResTrackingDimensionGroupTracking dimension group master — shared setup that decides whether batch and serial tracking are active for the products assigned to it, and where serials are captured