1Purpose #
A product that comes in several colours and sizes is one item with variants, not a dozen unrelated items. This page defines the vocabulary those variants are described in, once, so every product draws on the same wording — "Red" means the same thing everywhere.
It defines the vocabulary only. Which of these values a particular product actually offers is set on that product, through the Variants action in the Product master. Nothing here creates stock, prices or transactions.
2Step by step #
Attributes are the variant axes — Size, Colour — whose values voucher lines can record per sale.
- Press Add (F3) and name the attribute — Size .
- Add its values — S, M, L, XL — in the values grid.
- Press Save (F5) and confirm; assign the values to the products that come in them, and variant-tracking voucher types will ask at entry.
3How to use it #
- The page opens with a blank attribute row ready to key. Enter moves from cell to cell, and Enter off the last cell of the last row starts another row — each grid has its own run, so Enter never jumps from attributes into values.
- Click an attribute to load its values underneath. The heading shows which attribute you are editing.
- Add Attribute (F3) and Add Value (F4) append a row; Add Value stays disabled until a named attribute is selected, because a value has to belong to one.
- The bin icon at the end of a row removes it. Removing an attribute removes its values too — the database cascades the delete.
- Save (F5) writes both grids in one go, after a confirmation. Attributes are written first, because a value points at its attribute.
- Refresh (F2) re-reads both lists and discards unsaved edits. The search box narrows the attribute list only.
- The State column shows what will happen to each row on Save: New , Changed , Delete , or blank for untouched.
4Field details #
Attribute
- Attribute Name — required, and unique across the company. This is what appears as the heading when a product's variants are chosen.
- Description — optional free text; a note for whoever maintains the list.
- Cascading — optional. Marks an attribute whose values depend on the one chosen before it (Size narrowing once Colour is picked). It records the intent; the narrowing itself is applied by the variant screens.
Value
- Value — required, and unique across every attribute, not merely within its own (see Rules below).
- Description — optional free text.
- Additional Rate — optional. Marks a value that carries its own price uplift, so a variant priced on it can be charged differently.
- State — read-only, on both grids.
5Shortcut keys #
- F2 — Refresh: re-read both lists, discarding unsaved edits.
- F3 — Add Attribute.
- F4 — Add Value to the selected attribute.
- F5 — Save (opens the confirmation).
- Esc — close the confirmation.
- Enter — move to the next cell; off the last cell of the last row it starts a new row in that same grid.
- Tab — move to the next cell without the new-row behaviour.
Shortcuts belong to whichever copy of the page has focus, so a second tab of this page does not steal them.
6Why is a list empty? #
- The values grid is empty until an attribute is selected above, and stays empty for an attribute that has none yet — press Add Value (F4) .
- Nothing feeds this page from elsewhere: attributes and values are typed here and nowhere else. There is no pick-list to go stale.
- If the Variants action on a product shows nothing to choose, it is because no attribute has been given values yet — that is fixed here.
7Rules and integrity #
- Attribute names are unique. Two attributes cannot share a name.
- Attribute values are unique across ALL attributes — not just within one. "Small" can belong to Size or to Packing, never to both. That is how the database index is built; the page refuses the duplicate before saving, and the server refuses it again.
- Deleting an attribute deletes its values with it (the foreign key cascades). There is no undo after Save.
- An attribute that is still assigned to a product cannot be deleted — the assignment's foreign key has no cascade, so the database refuses it. Clear the attribute from those products first, in the Product master's Variants action.
- Rows are saved individually by state, so an untouched row is never rewritten — it keeps its identity and its created-by / created-on stamps.
- Adding, changing and deleting are each permission-checked by the database; a restricted user gets an explicit refusal rather than a silent no-op.
- The blank row waiting at the bottom of each grid is scaffolding: it is never saved and never counts as incomplete.
This is the help InvoiceNET® ERP shows beside the Product Attributes screen. Whether you have the screen depends on the modules of your licence and the rights your administrator has given you.
See this screen for yourself
The demo is the real product, with a company of your own.