SAP Reference
MD04
DisplayS/4 · ActiveDisplay Stock/Requirements List
Boilerplate SQL
Databricks SQLStarting point for querying the tables behind this transaction. Adjust the WHERE clause for your scenario.
-- ============================================================
-- T-Code : MD04 Display Stock/Requirements List
-- Purpose: Netted live view of current stock vs. open supply and demand by material/plant
-- Grain : One row per MRP element per material/plant (stock, supply, demand)
-- Tables : MARD, MCHB, MSKA, VBEP, LIPS, EBAN, EKET, AFPO, PLAF, RESB
-- Notes : MD04 is a *live* SAP calculation. The authoritative way to reproduce
-- it outside the GUI is the BAPI MD_STOCK_REQUIREMENTS_LIST_API.
-- This query unions the same source tables and will drift vs. the
-- screen because ABAP netting / ATP / firming logic is not reproduced.
-- ============================================================
WITH stock AS (
SELECT
MANDT AS client,
MATNR AS material_number,
WERKS AS plant,
'Stock: Unrestricted' AS mrp_element,
LABST AS quantity,
CAST(NULL AS DATE) AS element_date
FROM mard
WHERE MANDT = '100'
UNION ALL
SELECT
MANDT AS client,
MATNR AS material_number,
WERKS AS plant,
'Stock: Batch' AS mrp_element,
CLABS AS quantity,
NULL AS element_date
FROM mchb
WHERE MANDT = '100'
UNION ALL
SELECT
MANDT AS client,
MATNR AS material_number,
WERKS AS plant,
'Stock: Sales Order' AS mrp_element,
KALAB AS quantity,
NULL AS element_date
FROM mska
WHERE MANDT = '100'
),
supply AS (
SELECT
MANDT AS client,
MATNR AS material_number,
WERKS AS plant,
'Supply: PO Schedule Line' AS mrp_element,
(MENGE - WEMNG) AS quantity,
EINDT AS element_date
FROM eket
WHERE MANDT = '100'
AND (MENGE - WEMNG) > 0
UNION ALL
SELECT
MANDT AS client,
MATNR AS material_number,
WERKS AS plant,
'Supply: Purchase Requisition' AS mrp_element,
MENGE AS quantity,
LFDAT AS element_date
FROM eban
WHERE MANDT = '100'
AND LOEKZ = ''
AND EBELN = ''
UNION ALL
SELECT
MANDT AS client,
MATNR AS material_number,
DWERK AS plant,
'Supply: Production Order' AS mrp_element,
(PSMNG - WEMNG) AS quantity,
LTRMI AS element_date
FROM afpo
WHERE MANDT = '100'
AND (PSMNG - WEMNG) > 0
UNION ALL
SELECT
MANDT AS client,
MATNR AS material_number,
PWWRK AS plant,
'Supply: Planned Order' AS mrp_element,
GSMNG AS quantity,
PEDTR AS element_date
FROM plaf
WHERE MANDT = '100'
),
demand AS (
SELECT
MANDT AS client,
MATNR AS material_number,
WERKS AS plant,
'Demand: Sales Schedule Line' AS mrp_element,
WMENG AS quantity,
EDATU AS element_date
FROM vbep
WHERE MANDT = '100'
AND WMENG > 0
UNION ALL
SELECT
MANDT AS client,
MATNR AS material_number,
WERKS AS plant,
'Demand: Delivery' AS mrp_element,
LFIMG AS quantity,
ERDAT AS element_date
FROM lips
WHERE MANDT = '100'
AND LFIMG > 0
UNION ALL
SELECT
MANDT AS client,
MATNR AS material_number,
WERKS AS plant,
'Demand: Reservation' AS mrp_element,
BDMNG AS quantity,
BDTER AS element_date
FROM resb
WHERE MANDT = '100'
AND KZEAR = ''
AND XLOEK = ''
)
SELECT
mrp.client AS "Client",
mrp.material_number AS "Material Number",
mt.MAKTX AS "Material Description",
mrp.plant AS "Plant",
pt.NAME1 AS "Plant Name",
mrp.mrp_element AS "MRP Element",
mrp.element_date AS "Date",
mrp.quantity AS "Quantity"
FROM (
SELECT * FROM stock
UNION ALL SELECT * FROM supply
UNION ALL SELECT * FROM demand
) mrp
LEFT JOIN makt mt
ON mt.MANDT = mrp.client
AND mt.MATNR = mrp.material_number
AND mt.SPRAS = 'E'
LEFT JOIN t001w pt
ON pt.MANDT = mrp.client
AND pt.WERKS = mrp.plant
WHERE mrp.material_number = '<MATNR>'
AND mrp.plant = '<WERKS>'
ORDER BY mrp.element_date NULLS FIRST, mrp.mrp_element;Tables Used by This Transaction
How these tables connect. Nodes are clickable.
Primary tables
Secondary / auxiliary
- AFPOOrder ItemRtransaction
- EBANPurchase RequisitionRtransaction
- EKETScheduling Agreement Schedule LinesRtransaction
- LIPSSD Document: Delivery Item DataRtransaction
- MCHBBatch StocksRmaster
- MSKASales Order StockRtransaction
- PLAFPlanned OrderRtransaction
- RESBReservation/Dependent RequirementsRtransaction
- VBEPSales Document: Schedule Line DataRtransaction