Variant Matrix (Size x Colour)
The variant matrix creates every variant combination of a product at once. You name the choices, for example Size (S, M, L, XL) and Colour (Red, Blue), and Etalasse creates all 8 variants with automatic SKUs, prices, and opening stock. Without the matrix you would type each variant by hand.
Open it from the Product page: edit a product, then open the Variants tab. This feature is for Owners and Admins. Creating or changing combinations needs the Growth plan or higher.
The variant matrix launches with this release. The page may look slightly different from the description below, but it works the same way.
Options and their values
- A product can have up to 3 options, for example Size, Colour, and Material.
- Each option has up to 50 values that you can reorder by dragging.
- Each value has a label (for example "Red"). Optionally: a short code for SKUs (1 to 8 letters or digits), a swatch colour (hex code, for the colour circle in the store), and an image.
- At most 100 combinations per product. A counter in the editor shows the number of combinations as you add values.
Each combination is one ordinary variant with its own stock, price, SKU, and history. Carts, orders, refunds, stock adjustments, stock counts, purchase orders, transfers, flash sales, and price rules work on these variants the same way as before.
Generating combinations
- Add options (a name) and their values.
- Set the SKU pattern and the defaults: price, opening stock, cost price, and weight for new variants. If left empty, the price follows the product price and the opening stock is 0.
- Check the preview. Without saving anything, Etalasse shows how many variants will be added, kept, renamed, deactivated, or deleted, with warnings.
- Tap Apply.
You can also override a single combination, for example the price of XL / Blue at Rp150,000, or its SKU or barcode.
Applying is safe to repeat. Applying the same setup twice changes nothing the second time. Defaults and overrides only apply to new variants: the generator never changes the price, stock, SKU, barcode, or cost price of a variant that already exists.
SKU patterns
SKUs are built from a pattern, by default {sku}-{codes}, for example TSHIRT-M-RED.
| Token | Content |
|---|---|
{sku} | the product SKU (if empty, "P" and the product number) |
{codes} | all option codes, joined with - |
{1} {2} {3} | the code of the first, second, or third option |
{n} | the combination's sequence number |
Besides tokens, only letters, digits, spaces, and - _ . / are allowed. The result is upper-cased (spaces become -), at most 50 characters, and made unique within the product (a clash gets -2, -3). If you do not set a value code, it comes from the first 3 letters of the label ("Merah" becomes MER, "XL" stays XL, "42" stays 42). Codes stay stable once created.
SKUs are never rewritten when you rename or reorder values, because labels may already be printed.
Opening stock
Opening stock on a new variant is recorded through a stock adjustment with the reason Correction, not written directly, so it shows in the stock history and the parent product's stock follows. For products with per-branch stock, opening stock goes to the active branch (or the branch you pick). Shops that do not track stock (for example Booking and Rental) ignore opening stock.
Bulk editing in the grid
After the combinations exist, the Variants tab shows a combination grid: one row per variant with Variant, SKU, Barcode, Price, Cost price, Stock, and an Active switch. Edit cells directly, select many rows, then save. One save can change up to 200 rows.
- Stock is the final quantity (not an increment). The difference is recorded as a Correction adjustment (you can add a note), through the same stock history as regular adjustments. Rows whose stock is already that number are skipped. If the stock ledger refuses, nothing else from that save is stored.
- SKU must be unique within a product.
- An empty cost price means the product's cost price is used. An empty barcode removes the barcode.
- Shops that do not track stock reject stock changes.
- The grid does not need the Growth plan: you can still change prices, stock, SKUs, and status of existing variants after a downgrade.
Existing variants and changing the matrix
Variants you already have. Variants created the old way (free-text names) keep working and are not touched by the generator. You can adopt an old variant onto a combination: it gets the combination but keeps its id, stock, price, SKU, and history. Old variants you do not adopt stay active next to the matrix variants, with a warning, and can be deactivated in the grid.
Renaming or reordering. Renaming a value, or reordering values or options, does not add or remove variants. A variant's name follows the rename only if it is still the system-made name. A name you edited yourself is left alone.
Removing a value or option. Variants for combinations you no longer want are retired:
- no history: deleted;
- with history: deactivated, not deleted. History means sales, stock history, stock in, purchase orders, transfers, stock counts, rentals, bookings, flash sales, price rules, cart items, or stock on hand.
The preview marks variants that will only be deactivated. An inactive variant is hidden from the online store and POS and cannot be added to a cart or bought, but stays in old orders, refunds, and reports. The grid keeps them under Inactive variants, and you can reactivate them. Adding the same label back revives the old variants with their stock and history.
A cart that already holds a variant that is later deactivated is refused at checkout with a "product variant not found" message, and the customer needs to remove that line.
Adding a new option to a product that already has a matrix changes every combination, so old variants are retired and new ones created. To carry over stock and history, adopt the old variants onto their new combinations before applying.
What customers see
On a matrix product's page in the online store, there is one selector per option:
- options with swatch colours show as colour circles (ringed when selected, with a strike-through when out of stock);
- options with images show as thumbnails, and choosing a value that has an image swaps the product photo;
- other options show as text chips.
Once every option is chosen, the price, SKU, and stock of that combination show. Values that make the combination out of stock or non-existent are shown greyed out (not hidden), and the buy button is disabled with an out-of-stock note. At the POS, tapping a matrix product opens a size x colour grid with stock under each cell, out-of-stock cells greyed, and you can scan a barcode to jump to the right cell. Cashiers do not see cost prices.
Products without a matrix keep the regular variant picker as before.
Plan and roles
| Owner and Admin | Cashier | |
|---|---|---|
| View matrix and grid | Yes | Yes, without cost price |
| Preview, bulk edit in the grid | Yes (every plan) | No |
| Generate or change combinations | Yes, Growth plan and up | No |
If the plan drops, all variants stay and the grid remains editable. Only generating combinations is locked, and the preview stays visible with an upgrade prompt.
Limits
- Product CSV import only creates products, without variants, so it cannot import a variant matrix.
- At most 3 options, 50 values per option, and 100 combinations per product. More is rejected with a "too many combinations" message.
Tips
- set value codes yourself if you want readable SKUs, for example RED for Red
- always check the preview before applying, especially rows that are only deactivated because they have history
- change prices or stock of many variants at once in the grid, not by regenerating the matrix
- for tiered pricing, see Wholesale Tiers: tiers are not set in this grid