How-toOracle NetSuiteManufacturing / Assembly Items

How to create an assembly build or work order in NetSuite

Question
how to create an assembly build or work order in NetSuite

Also searched as

  • netsuite assembly build vs work order difference
  • netsuite build assembly item bom
  • netsuite work order completion
  • netsuite assembly item components not available

Short answer

For simple manufacturing with no routing or WIP tracking, use Transactions > Manufacturing > Build Assemblies (or Enter Assembly Build), select the assembly item, quantity, and location, and NetSuite consumes the BOM components and receives the finished item in one transaction. For multi-step production needing routing, WIP accounting or partial completions, create a Work Order (Transactions > Manufacturing > Work Orders) and process it through Work Order Completion, which requires the Advanced Manufacturing feature (SuiteSuccess Manufacturing or WMS add-on) or the Manufacturing bundle.

Applies to: NetSuite all current versions. Assembly Build available in standard NetSuite with the Assembly Items feature enabled. Work Orders with routing/WIP require the Manufacturing Work Orders feature (Advanced Manufacturing/CloudSuite Manufacturing edition or the Manufacturing SuiteApp).

Build an assembly item (simple, single-step)

  1. 1Enable Assembly Items: Setup > Company > Enable Features > Items & Inventory > Assembly Items.
  2. 2Create the assembly item (Lists > Accounting > Items > New > Assembly/Bill of Materials) and define its BOM in the Components subtab, or via a separate BOM record if using the BOM feature.
  3. 3Go to Transactions > Manufacturing > Build Assemblies, select the assembly item, entity/location, and the quantity to build.
  4. 4NetSuite checks component availability against on-hand quantity at that location; components below the required quantity are flagged before the build can be saved.
  5. 5Save the Assembly Build - this consumes the component inventory and receives the built quantity of the assembly item into stock in one transaction, posting the inventory and COGS/WIP accounts per the item's accounting setup.
  6. 6For work orders instead: Transactions > Manufacturing > Work Orders > New, select the assembly item and quantity, and NetSuite generates the planned component requirements from the BOM/routing.
  7. 7Issue components to the work order (Transactions > Manufacturing > Issue Component, or via Work Order Pick/Ship if using warehouse management), then complete via Work Order Completion for full or partial quantities.
  8. 8Review WIP and variance postings on the work order's related records once completed - routing operations and labor/overhead absorb into WIP before the completion transaction relieves it.

Assembly Build versus Work Order - when each applies

Assembly Build is a single-transaction consume-and-receive: it does not track work-in-process as a separate inventory state, has no routing/operations, and completes in one step. It suits simple kitting or light assembly where the shop floor time between component issue and finished-goods receipt is not meaningful to track separately.

Work Orders exist specifically to model that in-between state: components can be issued to WIP before the assembly is finished, routing operations with labor and machine time can be recorded, and partial completions post partial finished quantity while leaving the remainder open. This is the closer match to how a real production floor with multiple operations actually runs, and is what most manufacturers using NetSuite for production, not just light assembly, end up needing.

Component availability and backordering an assembly build

An Assembly Build checks each component's available quantity at the transaction's location before allowing save. If a component is short, NetSuite will not silently negative-stock it under standard settings - the build either fails validation or (if negative inventory is allowed on that item/location) posts with a negative on-hand balance that needs correcting.

For components sourced from a different location than the build, a transfer order or bin/location adjustment has to happen first; Assembly Build does not automatically pull inventory across locations. Work Orders handle multi-location sourcing more gracefully through supply planning/MRP if that module is in use.

BOM structure and item costing implications

The assembly item's cost is derived from either the standard cost of components rolled up at build time, or a manually maintained standard cost, depending on the costing method configured (Average, FIFO, Standard). Standard costing on assemblies requires periodic cost rollups to keep the standard current as component costs change - see the related cost rollup how-to for that process on non-NetSuite ERPs; in NetSuite this is the Item Cost record and the standard cost version fields on the assembly item.

Phantom components (sub-assemblies that exist only for BOM structuring, never separately stocked) are modeled by marking a sub-assembly item as Phantom on its record so the build explodes straight through to its own components rather than requiring a separate build step.

Work order completion and variance

Work Order Completion posts the finished assembly quantity to inventory and relieves WIP for the components and operations consumed. Any difference between the standard cost absorbed and actual costs incurred (component substitutions, extra labor time) posts to a manufacturing variance account, which should be reviewed periodically rather than left to accumulate silently in WIP.

Common pitfalls

  • !Using Assembly Build for multi-step production that actually needs WIP tracking, losing visibility into work in progress between operations.
  • !Component shortages at the build location when the required inventory exists at a different location or bin - Assembly Build does not auto-transfer.
  • !Standard-cost assemblies drifting out of date because the cost rollup was never re-run after component cost changes.
  • !Forgetting to mark true structural-only sub-assemblies as Phantom, forcing unnecessary intermediate build transactions.
  • !Partial work order completions left open indefinitely, distorting WIP balances on the balance sheet.
  • !Negative inventory allowed on a component item masking a real supply shortfall during assembly builds.

How an ERP-grounded AI assistant handles this

ERPray can check real-time component availability and flag which line on a planned assembly build or work order will fail before the build is even opened, by querying current on-hand and open supply for each BOM component. For recurring standard-cost drift questions, it can compare the item's standard cost record against the latest component costs and point out which assemblies are due for a rollup.

Frequently asked questions

Does NetSuite Assembly Build support multi-level BOMs?

Yes, but a standard Assembly Build only explodes one level unless sub-assemblies are marked Phantom (which explodes through automatically) or are pre-built as their own assembly items first.

Can I do a partial work order completion in NetSuite?

Yes. Work Order Completion allows entering less than the full planned quantity, posting that portion to finished goods and leaving the remaining quantity open on the work order for a later completion.

Why does my Assembly Build fail with a component availability error?

The build's location does not have enough on-hand quantity of one or more BOM components. Check Inventory > Item Availability for that item/location, or transfer stock in before retrying the build.

What feature do I need for NetSuite Work Orders with routing?

Routing, operations and WIP-stage work orders require the Manufacturing Work Orders / Advanced Manufacturing feature, typically part of NetSuite's manufacturing edition or the Manufacturing SuiteApp, beyond the base Assembly Items feature.

Related

How-to

How to run intercompany transactions in NetSuite (OneWorld)

Enable the Intercompany Framework and Automated Intercompany Management features (Setup > Company > Enable Features > Company), then create an Intercompany Sales Order or Purchase Order between two subsidiaries in the same NetSuite account; NetSuite auto-generates the matching intercompany transaction on the counterparty subsidiary and posts the elimination journal entries during period close if Advanced Intercompany Journal Entries is also enabled.

How-to

How to write and run SuiteQL queries in NetSuite

SuiteQL is NetSuite's read-only SQL dialect over the underlying record tables, run either interactively from Analytics > SuiteQL Query Tool (or the older /app/suiteanalytics query page), through REST at /services/rest/query/v1/suiteql, or programmatically via the N/query module in SuiteScript 2.x. It supports standard SELECT, JOIN, WHERE, GROUP BY and window functions against table names that mostly match record type IDs (transaction, transactionline, item, customer).

How-to

How to build a workflow in NetSuite with SuiteFlow

Go to Customization > Workflow > Workflows > New, pick the record type and select Server, Client, or both as the trigger context, then build states and transitions on the workflow diagram, attaching actions (Set Field Value, Send Email, Create Record, Custom Action Script) to each state or transition. Release the workflow (top right dropdown, Testing to Released) once validated, since a workflow left in Testing only fires for the workflow owner.

How-to

How to use formula fields in a NetSuite saved search

In the saved search Results tab, add a column, set Field to "Formula (Text)", "Formula (Numeric)", "Formula (Date)" or "Formula (Currency)", then type an Oracle SQL expression into the Formula box using curly braces around field IDs, e.g. {trandate} or {item.custitem_weight}. Formula fields can also go on the Criteria tab so you can filter on the calculated value itself.

Error fix

Fix NetSuite SSS_USAGE_LIMIT_EXCEEDED Error

SSS_USAGE_LIMIT_EXCEEDED fires when a SuiteScript execution consumes all the governance units (usage points) allotted to its script type before it finishes. Fix it by checking runtime.getCurrentScript().getRemainingUsage() before expensive calls, yielding or rescheduling in Scheduled scripts, and moving heavy record-count work into Map/Reduce, which yields automatically across stages.

Error fix

Fix NetSuite INVALID_FLD_VALUE Error

INVALID_FLD_VALUE means NetSuite rejected a value you tried to set on a field because it does not match the field's expected type, list option, or reference record. Fix it by confirming the internal ID or text value actually exists on that field's source list and matches the field's value type (text versus list versus record reference) before setting it.

AI for ERP

AI for NetSuite, Beyond the Built-In Text Tools

NetSuite's built-in AI covers text generation, not grounded answers on your own data. See how a private LLM over SuiteQL adds real Q&A and controls.

AI for ERP

AI agents for NetSuite manufacturing operations

AI agents for NetSuite manufacturing: WIP tracking, routing exceptions, and work order status grounded in SuiteQL, with human approval on anything that writes back.

Stuck on Oracle NetSuite?

Talk to engineers who work inside Oracle NetSuite every week, and who build private AI that answers these questions from your own ERP data.