D365 Reference
InventTrans
transactionThe inventory transaction ledger — every physical and financial stock movement, with issue/receipt status, quantities, dates, and links back to its source document
Module: InventoryCompany-partitioned (DataAreaId)
Fields
34 fields
| Key | Field | EDT | Description | Type | Length | Flags |
|---|---|---|---|---|---|---|
| InventTransOrigin | RecId | RecId of the InventTransOrigin row this movement was created from — the link back to its source document | int64 | |||
| ItemId | ItemId | Item that moved | string | 20 | ||
| inventDimId | InventDimId | Inventory-dimension combination the movement is against; join to InventDim to resolve site / warehouse / location | string | 25 | ||
| StatusIssue | Issue side of the movement — how far an outbound transaction has progressed | enum | ||||
| StatusReceipt | Receipt side of the movement — how far an inbound transaction has progressed | enum | ||||
| Qty | Quantity moved, signed by direction | real | ||||
| DatePhysical | Date the movement became physical (received or shipped); the primary analysis date | date | ||||
| DateExpected | Expected physical date; unset rows carry the 1900-01-01 sentinel | date | ||||
| Voucher | Ledger voucher the movement posted under | string | 20 | |||
| DateStatus | Date of the movement's most recent status change (replaces the retired illustrative DateStatusChanged row — this is the real column, and it is a date, not a datetime) | date | ||||
| DateFinancial | Date the movement was financially posted (invoiced); unset rows carry the 1900-01-01 sentinel | date | ||||
| DateInvent | Inventory date used for on-hand and closing calculations | date | ||||
| DateClosed | Date inventory closing settled the transaction; open rows carry the 1900-01-01 sentinel | date | ||||
| TimeExpected | Expected time of day paired with DateExpected, stored as seconds since midnight | int | ||||
| ShippingDateRequested | Shipping date requested by the order line | date | ||||
| ShippingDateConfirmed | Confirmed shipping date; unconfirmed rows carry the 1900-01-01 sentinel | date | ||||
| CurrencyCode | Currency of the transaction amounts | string | ||||
| CostAmountPosted | Financially posted cost amount in company currency | real | ||||
| CostAmountPhysical | Physically posted cost amount (packing slip / product receipt value) | real | ||||
| CostAmountAdjustment | Adjustment applied by inventory closing or recalculation | real | ||||
| CostAmountSettled | Cost amount settled against offsetting transactions by inventory closing | real | ||||
| QtySettled | Quantity settled by inventory closing | real | ||||
| ValueOpen | Whether the transaction still has open value for inventory closing to settle | enum | ||||
| InvoiceId | Invoice the movement was financially posted under | string | ||||
| InvoiceReturned | Whether the invoiced movement has been returned | enum | ||||
| PackingSlipId | Packing slip / product receipt the movement was physically posted under | string | ||||
| PackingSlipReturned | Whether the physically posted movement has been returned | enum | ||||
| PickingRouteID | Picking route that picked the movement (note the capital ID in the column name) | string | ||||
| ProjId | Project the movement is charged to, for project-related transactions | string | ||||
| RevenueAmountPhysical | Physically posted revenue amount, where the flow carries revenue | real | ||||
| TransChildType | Sub-split discriminator that, with TransChildRefId, divides one origin into child branches (returns, credit notes…) | enum | ||||
| TransChildRefId | Reference id of the child branch typed by TransChildType | string | ||||
| MarkingRefInventTransOrigin | RecId | RecId of the InventTransOrigin this movement is marked (cost-linked) against | int64 | |||
| LoadId | Warehouse load the movement ships on, when warehouse management is used | string |
Field provenance: hand-curated.
Boilerplate SQL
Starting point for reading InventTranson 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.
Query parameters
-- ============================================================
-- Table : InventTrans The inventory transaction ledger — every physical and financial stock movement, with issue/receipt status, quantities, dates, and links back to its source document
-- Purpose: Column-selected read of InventTrans — auto-generated from field metadata
-- Grain : One row per company (dataareaid) + recid (surrogate key)
-- 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
t.inventtransorigin AS "RecId of the InventTransOrigin row this movement was created from — the link back to its source document",
t.itemid AS "Item that moved",
t.inventdimid AS "Inventory-dimension combination the movement is against; join to InventDim to resolve site / warehouse / location",
CASE t.statusissue WHEN 0 THEN 'None' WHEN 1 THEN 'Sold' WHEN 2 THEN 'Deducted' WHEN 3 THEN 'Picked' WHEN 4 THEN 'ReservPhysical' WHEN 5 THEN 'ReservOrdered' WHEN 6 THEN 'OnOrder' WHEN 7 THEN 'QuotationIssue' ELSE CAST(t.statusissue AS STRING) END AS "Issue side of the movement — how far an outbound transaction has progressed", -- enum: StatusIssue
CASE t.statusreceipt WHEN 0 THEN 'None' WHEN 1 THEN 'Purchased' WHEN 2 THEN 'Received' WHEN 3 THEN 'Registered' WHEN 4 THEN 'Arrived' WHEN 5 THEN 'Ordered' WHEN 6 THEN 'QuotationReceipt' ELSE CAST(t.statusreceipt AS STRING) END AS "Receipt side of the movement — how far an inbound transaction has progressed", -- enum: StatusReceipt
t.qty AS "Quantity moved, signed by direction",
t.datephysical AS "Date the movement became physical (received or shipped); the primary analysis date",
CASE WHEN CAST(t.dateexpected AS DATE) = DATE '1900-01-01' THEN NULL ELSE CAST(t.dateexpected AS DATE) END AS "Expected physical date; unset rows carry the 1900-01-01 sentinel", -- 1900-01-01 sentinel → NULL
t.voucher AS "Ledger voucher the movement posted under",
t.datestatus AS "Date of the movement's most recent status change (replaces the retired illustrative DateStatusChanged row — this is the real column, and it is a date, not a datetime)",
CASE WHEN CAST(t.datefinancial AS DATE) = DATE '1900-01-01' THEN NULL ELSE CAST(t.datefinancial AS DATE) END AS "Date the movement was financially posted (invoiced); unset rows carry the 1900-01-01 sentinel", -- 1900-01-01 sentinel → NULL
t.dateinvent AS "Inventory date used for on-hand and closing calculations",
CASE WHEN CAST(t.dateclosed AS DATE) = DATE '1900-01-01' THEN NULL ELSE CAST(t.dateclosed AS DATE) END AS "Date inventory closing settled the transaction; open rows carry the 1900-01-01 sentinel", -- 1900-01-01 sentinel → NULL
t.timeexpected AS "Expected time of day paired with DateExpected, stored as seconds since midnight",
t.shippingdaterequested AS "Shipping date requested by the order line",
CASE WHEN CAST(t.shippingdateconfirmed AS DATE) = DATE '1900-01-01' THEN NULL ELSE CAST(t.shippingdateconfirmed AS DATE) END AS "Confirmed shipping date; unconfirmed rows carry the 1900-01-01 sentinel", -- 1900-01-01 sentinel → NULL
t.currencycode AS "Currency of the transaction amounts",
t.costamountposted AS "Financially posted cost amount in company currency",
t.costamountphysical AS "Physically posted cost amount (packing slip / product receipt value)",
t.costamountadjustment AS "Adjustment applied by inventory closing or recalculation",
t.costamountsettled AS "Cost amount settled against offsetting transactions by inventory closing",
t.qtysettled AS "Quantity settled by inventory closing",
t.valueopen AS "Whether the transaction still has open value for inventory closing to settle", -- enum: decode t.valueopen via GlobalOptionsetMetadata join — see quirks guide #enums
t.invoiceid AS "Invoice the movement was financially posted under",
t.invoicereturned AS "Whether the invoiced movement has been returned", -- enum: decode t.invoicereturned via GlobalOptionsetMetadata join — see quirks guide #enums
t.packingslipid AS "Packing slip / product receipt the movement was physically posted under",
t.packingslipreturned AS "Whether the physically posted movement has been returned", -- enum: decode t.packingslipreturned via GlobalOptionsetMetadata join — see quirks guide #enums
t.pickingrouteid AS "Picking route that picked the movement (note the capital ID in the column name)",
t.projid AS "Project the movement is charged to, for project-related transactions",
t.revenueamountphysical AS "Physically posted revenue amount, where the flow carries revenue",
t.transchildtype AS "Sub-split discriminator that, with TransChildRefId, divides one origin into child branches (returns, credit notes…)", -- enum: decode t.transchildtype via GlobalOptionsetMetadata join — see quirks guide #enums
t.transchildrefid AS "Reference id of the child branch typed by TransChildType",
t.markingrefinventtransorigin AS "RecId of the InventTransOrigin this movement is marked (cost-linked) against",
t.loadid AS "Warehouse load the movement ships on, when warehouse management is used"
FROM <catalog>.<schema>.inventtrans t
-- Dimension expansion: uncomment to resolve site / warehouse / location / batch
-- LEFT JOIN <catalog>.<schema>.inventdim id ON id.inventdimid = t.inventdimid AND id.dataareaid = t.dataareaid
-- Resolve InventTransOrigin (via InventTransOrigin): uncomment to join on its RecId surrogate key
-- LEFT JOIN <catalog>.<schema>.inventtransorigin inv ON inv.recid = t.inventtransorigin
WHERE
t.dataareaid = '<company>'
-- AND t.datephysical >= '<DATE_FROM>' -- yyyy-MM-dd (UTC)
-- AND t.datephysical <= '<DATE_TO>' -- yyyy-MM-dd (UTC)
;5 parameters not filled: <catalog>, <schema>, <company>, <DATE_FROM>, <DATE_TO>
Relationships
1-hop neighbors — click a table to navigate there. RecId and InventDim edges are highlighted; they’re the joins newcomers most often get wrong.
Join details
ON inventtrans.inventtransorigin = inventtransorigin.recidON inventtrans.inventdimid = inventdim.inventdimid
Data Entities That Expose This Table
No standard export entity — land the raw table.