JD Edwards F3002 Multi-Level BOM Explosion SQL
This generator writes an Oracle recursive SQL query that explodes a JD Edwards EnterpriseOne bill of material from F3002 level by level, honouring effectivity dates, fixed quantity components and purchased items. A second query compares a work order parts list in F3111 so you can see what is still to issue.
Fill in
Check the display decimals of QNTY in P92001: 1, 100 or 10000.
Multi-level explosion (Oracle 11gR2+ recursive WITH)
WITH parent_item AS (
SELECT IMITM FROM CRPDTA.F4101 WHERE IMLITM = '1001'
),
bom (lvl, parent_itm, comp_itm, cpnt, qty_per, ext_qty, stkt) AS (
SELECT 1,
x.IXKIT,
x.IXITM,
x.IXCPNT,
x.IXQNTY / 1,
CASE WHEN x.IXFORQ = 'F' THEN x.IXQNTY / 1
ELSE 1 * x.IXQNTY / 1 END,
b.IBSTKT
FROM CRPDTA.F3002 x
JOIN parent_item p ON p.IMITM = x.IXKIT
LEFT JOIN CRPDTA.F4102 b ON b.IBITM = x.IXITM AND b.IBMCU = x.IXMMCU
WHERE LTRIM(RTRIM(x.IXMMCU)) = '30'
AND x.IXTBM = 'M'
AND x.IXBQTY = 0
AND x.IXEFFF <= 126295 AND x.IXEFFT >= 126295
UNION ALL
SELECT c.lvl + 1,
x.IXKIT,
x.IXITM,
x.IXCPNT,
x.IXQNTY / 1,
CASE WHEN x.IXFORQ = 'F' THEN x.IXQNTY / 1
ELSE c.ext_qty * x.IXQNTY / 1 END,
b.IBSTKT
FROM bom c
JOIN CRPDTA.F3002 x ON x.IXKIT = c.comp_itm
LEFT JOIN CRPDTA.F4102 b ON b.IBITM = x.IXITM AND b.IBMCU = x.IXMMCU
WHERE LTRIM(RTRIM(x.IXMMCU)) = '30'
AND x.IXTBM = 'M'
AND x.IXBQTY = 0
AND x.IXEFFF <= 126295 AND x.IXEFFT >= 126295
AND NVL(c.stkt, ' ') <> 'P'
AND c.lvl < 10
)
SEARCH DEPTH FIRST BY cpnt SET seq
CYCLE comp_itm SET is_cycle TO 'Y' DEFAULT 'N'
SELECT c.lvl,
LPAD(' ', 2 * (c.lvl - 1)) || i.IMLITM AS component,
i.IMDSC1 AS description,
c.qty_per,
c.ext_qty AS extended_qty,
c.stkt AS stocking_type,
c.is_cycle
FROM bom c
LEFT JOIN CRPDTA.F4101 i ON i.IMITM = c.comp_itm
ORDER BY c.seq;Compare with a work order parts list (F3111)
SELECT m.WMDOCO,
m.WMCPNT,
i.IMLITM,
i.IMDSC1,
m.WMUORG AS qty_required,
m.WMTRQT AS qty_issued,
m.WMUORG - m.WMTRQT AS qty_still_to_issue
FROM CRPDTA.F3111 m
LEFT JOIN CRPDTA.F4101 i ON i.IMITM = m.WMCPIT
WHERE m.WMDOCO = 100245
ORDER BY m.WMCPNT;SQL Server variant
-- SQL Server: drop the SEARCH and CYCLE clauses (add your own cycle guard), -- replace NVL with ISNULL and || with +, cast IMLITM as needed, -- carry a sort path column (CAST(... AS VARCHAR(4000))) to order depth first, -- and add OPTION (MAXRECURSION 100) after the final ORDER BY.
Recursion stops at purchased items (stocking type P) and at the level limit. Components are exploded at the same branch/plant; if subassemblies are built in another branch, change the recursive join. IXBQTY = 0 selects the standard bill rather than batch bills. Check the decimals of IXQNTY, WMUORG and WMTRQT in your data dictionary before trusting the quantities.
Get a shortage report built
Tell us your branches and bill types and we will build a tested multi-level explosion and shortage query for your JD Edwards data.
Optional. The tool and every export work without this. No spam.
Where this lives in EnterpriseOne
Bills are maintained in P3002 (Bill of Material Revisions) and stored in F3002, one row per parent and component line. The parent is IXKIT (short item number) at branch IXMMCU, with bill type IXTBM (M for manufacturing) and batch quantity IXBQTY. Each row has the component IXITM, component line IXCPNT, quantity per IXQNTY, fixed or variable flag IXFORQ and effectivity IXEFFF to IXEFFT. Item master F4101 gives the second item number IMLITM and description, and item branch F4102 gives the stocking type IBSTKT. When a work order is attached, the parts list is copied to F3111.
How to use it
Enter the parent item's second item number, the branch/plant, bill type, an effective date in Julian, the quantity to explode and a level limit. Check how many decimals the quantity data item uses and set the divisor so 1.5 does not show as 150. The query returns one row per component in depth first order, indented by level, with quantity per parent and extended quantity for your parent quantity. Purchased items end their branch of the tree; manufactured subassemblies continue to explode.
- Fixed quantity components (IXFORQ = F) are not multiplied by the parent quantity
- Phantom and other stocking types continue to explode; only P stops
- The CYCLE clause flags a bill that contains its own parent
Worked example
Exploding item 1001 at branch 30 for a quantity of 10 on 22 October 2026: a level 1 subassembly with quantity per 2 shows an extended quantity of 20, and a level 2 bracket used 4 per subassembly shows 80. A fixed quantity setup kit with quantity 1 shows 1 regardless of the order size. Compare this with the multi-level where-used and indented bill inquiries in the system to confirm the query matches. Then run the F3111 query for an open work order to see required, issued and still to issue per component line.
Version differences and gotchas
Branch/plant is a right-justified 12 character field, hence the trim. Batch bills (IXBQTY greater than 0) are separate bills chosen by order quantity, so this query excludes them by default. Components can carry their own branch for supply, and configured items (stocking type C) build their parts list from rules in the configurator, not only from F3002, so an explosion of a configured parent shows the base bill rather than what a specific order will use. Scrap percentages and yield are not applied here; add them if your planners need gross requirements.
Frequently Asked Questions
Which table holds the bill of material in JD Edwards?
F3002, Bill of Material Master. Each row links a parent item at a branch/plant to one component with quantity, effectivity and component line number. Routings are in F3003, the item master in F4101 and item branch data, including stocking type, in F4102. Work order parts lists are copied into F3111.
How do I create a BOM in JDE 9.2?
Set up the parent and component items in the item master and item branch, then use P3002 Bill of Material Revisions: enter the parent, branch and bill type, and add component lines with quantity, unit of measure, issue type and effectivity. Validate with the bill inquiry before attaching it to work orders.
How do configured items differ in JDE?
Configured items (stocking type C) use the configurator: rules choose components and quantities from the answers on each sales order, and the result is written as a configured parts list for that order. The F3002 bill of a configured parent therefore does not show the full structure of any particular order.
Why are my extended quantities wrong?
Usually because of implied decimals in the quantity column, fixed quantity components multiplied by the parent quantity, or batch bills mixed in with the standard bill. Check the display decimals of the quantity data item, honour IXFORQ, and filter IXBQTY as the generated query does.
If you want planners to ask JD Edwards for an exploded bill or a shortage list in plain English on your own servers, we can set that up over F3002 and F3111.
Related Tools
JD Edwards F4801 Work Order SQL Generator
Build SQL for open JDE work orders by branch plant, status and date, plus the parts list for one work order.
OracleJDE Standard Cost Roll-Up Per Unit Calculator
Sanity-check a rolled-up unit cost by building it from setup, run hours, labor and machine rates, overhead percent and scrap, then see how lot size moves it.
OracleJD Edwards Table Reference (F4211, F4311, F0101, F4101, F4102)
Quick lookup of common JD Edwards tables with description, module, column prefix and the key fields you join on.
OracleJD Edwards Julian Date (CYYDDD) SQL Converter
Build SQL that converts the CYYDDD Julian dates stored in JD Edwards files into real dates, converts a date back, and filters by date range.
More Developer Tools tools
See all- JD Edwards Orchestrator and AIS REST Call Generator
- JD Edwards Orchestrator Groovy Custom Request Script Generator
- JD Edwards UDC Lookup SQL Generator (F0004, F0005)
- JD Edwards F0911Z1 Journal Entry Batch Input SQL Generator
- JD Edwards Received Not Vouchered SQL Generator (F43121, F4311)
- JD Edwards C Business Function Skeleton Generator
- SAP Sales Order ABAP SELECT Generator (VBAK, VBAP, VBFA)
- SAP Sales Order Create BAPI ABAP Generator (BAPI_SALESORDER_CREATEFROMDAT2)
- SAP ABAP Open Items SELECT Generator
Keep exploring
Free tools
- JD Edwards F4801 Work Order SQL GeneratorBuild SQL for open JDE work orders by branch plant, status and date, plus the parts list for one work order.
- JD Edwards EnterpriseOne Private AI Layer Blueprint GeneratorFill in your JD Edwards EnterpriseOne version, database, hosting and users to get a shareable architecture plan for a private, on-prem AI assistant.
- Oracle EBS BOM Explosion SQL GeneratorProduces multilevel bill of material explosion and where-used SQL for Oracle EBS using hierarchical queries, with organization, item and effectivity inputs.
ERP fixes and how-tos
- How to Add a Private AI Layer to JD Edwards EnterpriseOne On-PremAdd a private AI layer to JD Edwards EnterpriseOne: AIS data service, Orchestrator, Security Workbench mapping, a local model and human approval.
- JD Edwards table conversion: how it works and how to run oneWhat a JD Edwards table conversion does to a JDE table's structure and data, when it runs in a package build, and how to run or design one manually.
- How to set up JD Edwards Orchestrator (step by step)Set up a working JD Edwards Orchestrator end to end: enable the AIS server, build a form or service request, wire it into an orchestration, and call it over REST.
Runs with your ERP
- Vertex Tax Connectors with JD Edwards EnterpriseOneHow Vertex calculates sales, use and VAT tax for JD Edwards EnterpriseOne and World, plus Oracle EBS and Cloud ERP: integration model, flows, setup, pitfalls.
- Tacton CPQ with JD Edwards EnterpriseOneHow Tacton CPQ configures engineered products and sends sales BOMs to JD Edwards EnterpriseOne, also Oracle Fusion and NetSuite: flows, setup, pitfalls.
- Oracle CPQ and JD Edwards EnterpriseOne: quote to sales orderHow Oracle CPQ integrates with JD Edwards EnterpriseOne: customer data into quotes, sales orders created from quotes, and status back, with setup and pitfalls.
AI on your ERP
- AI for JD Edwards EnterpriseOne Manufacturing, Without Leaving the F-Tables ExposedGrounded AI over JD Edwards EnterpriseOne Manufacturing: work orders, routings, and Orchestrator data, answered on-prem without sending F-table data to a public model.
- AI for JD Edwards Inventory Management and Shop Floor ManufacturingAI on JD Edwards EnterpriseOne inventory and manufacturing: item ledger, work orders, MRP messages and cost variances, answered in plain English on your own servers.
Integrations
- How to add AI agents to JD Edwards EnterpriseOneHow to add AI agents to JD Edwards EnterpriseOne: Orchestrator and AIS as the tool layer, read-only first, human approval on writes, on-prem models.
- How to use ChatGPT with JD Edwards EnterpriseOneHow to use ChatGPT with JD Edwards EnterpriseOne: custom GPT actions over AIS, exports versus live access, enterprise data controls, and private alternatives.