# Bill of materials

Source: https://docs.tightly.io/help/product/bills-of-materials
Reviewed: 2026-09-07

## The question this page answers

Which variants are made rather than bought, from what, in what run, how long until ready to sell, and where? A bill of materials is the components a product is made from, at an amount per finished unit, made in runs of a batch at one warehouse. Tightly keeps a planning bill, not a factory: it works out what material to buy and when, and no order moves stock. The page is Components, on every plan's rail under Products.

## What you see

Components opens on a catalogue of every structure: Product, SKU, Type (Kit or Assembly), Components (a count), Stock held on (Finished product for an assembly, Components for a kit) and Source (Tightly, NetSuite, or Source unverified). Pressing an assembly opens the assemblies view; a kit opens bundles. The catalogue says so where its read failed:

> Components could not be loaded.

The assemblies view is headed Components, with a door back to the catalogue. There is no verdict sentence. The basis line reads Per finished unit · USD · days.

The table is one row per made variant: Made variant (the product's title a door to the product page, the variant a door to its room), SKU (with a copy button; No SKU), Levels, Component cost (Not costed), Builds (what the stock on hand at the making warehouse builds, less what is reserved; No stock reading where a component has none, No materials where the bill is empty), Constraint (the part that binds first, a door to its room; Not on file), Components (a count, each amount on hover), Batch (finished units per run), Ready to sell, days (the longest component lead time plus the preparation days) and Warehouse (No warehouse). Product ID, Variant ID and Preparation, days are under Columns. Only while a bill is locked a State column appears: Open, Locked by production, or Imported or Source unverified, read-only.

Pressing a row opens its bill level by level. A component may carry its own bill, three levels at most. A Grouping holds no stock and adds no time; its parts tie to the parent. From and Until date a component that replaces another. Same part as names an alternate that pools its stock with the part.

## What to do

Add components asks where stock is held: Finished product opens Add components, a page in three steps. Variant picks a Buy-only variant. Components picks the materials, then Usage takes the amount per finished unit, its unit, From and Until, Same part as, and the Batch size. Making shows the lead times read from each material's default supplier, takes Additional preparation in days, Manufactured at (the warehouse), an Assembly cost, and whether the bill is a Grouping. The sentence above the button says the variant becomes a Made variant, made at the warehouse you picked, and names any component that is made too. Lead times come from your material suppliers and are changed there, not here. Save components writes it, and the page then says the variant is a Made variant now; a refusal renders above the button.

From a row's menu, Edit opens a drawer, Edit components (never the variant); Duplicate opens Duplicate components with a new variant to pick; Delete component list asks first, saying the variant stops being a made variant and this cannot be undone, and the line under the table says the components are deleted, or Not deleted with the reason. Edit and Delete are offered only on a bill written in Tightly. A bill with an active manufacturing order cannot be changed or deleted, and the menu says so. A bill that would contain itself, or run past three levels, is refused with the served sentence:

> A bill of materials cannot contain itself.

> Three levels is the most a bill of materials holds.

What a bill implies elsewhere: the made variant's replenishment recommendations are exploded through the bill into dated, netted component needs at the making warehouse; a made component's need is sized up to whole batches; a component also sold on its own as a spare carries its own demand and its exploded demand, and the two add.

## When it is empty or failed

A first run reads one sentence with the Add components door:

> No variant is made yet.

A search that matches nothing reads:

> Nothing matches that search.

A failed read reads:

> Could not load components.

On a variant's Structure, a variant made from nothing says so, a component no made variant uses says so, and a failed read of where it is used is stated.
