---
title: Configurator de produse
description: Vinde produse configurabile — clientul construiește articolul din opțiuni (mărime, culoare, material, dotări), iar TSync calculează prețul și pune linia configurată pe ofertă sau factură.
product: TSync Intelligence 11.3.6
language: ro
canonical: https://docs.tsync.pro/ro/modules/tsync-product-configurator/
source: https://docs.tsync.pro/llms.txt
---

# Configurator de produse

**Configuratorul de produse** (`/admin/tsync_product_configurator`) îți permite să vinzi **produse
configurabile** — articole pe care clientul le construiește din opțiuni (mărime, culoare, material, dotări) în
loc de un singur SKU fix. Definești o dată opțiunile, pui reguli pentru ce combinații sunt permise și cum se
schimbă prețul, iar TSync transformă o alegere într-o variantă concretă de produs.

## Vinde un produs configurat — pas cu pas

Asta e ce faci zilnic. Restul paginii e pregătirea din spate; aici e folosirea propriu-zisă.

Merge la fel indiferent ce configurezi — o fereastră, o ușă, un mobilier, un utilaj, un pachet de servicii sau
orice altceva ai definit ca model configurabil. Pașii sunt aceiași; diferă doar opțiunile pe care le vezi.

**a) Deschide configuratorul de pe document**

Intră în **Vânzări → Devize → Creează un deviz nou** (merge la fel pe facturi, propuneri și note de credit,
dacă le-ai bifat în Setări). Alege clientul, apoi apasă butonul **„Configurează produs”** de deasupra listei de
articole. Se deschide fereastra **„Configurator produs”**.

> Butonul apare doar pe tipurile de document activate în **Configurator → Setări**, și doar dacă ai permisiunea
> de a configura. Dacă nu-l vezi pe factură, dar îl vezi pe deviz, asta e valoarea implicită: configurarea ține
> de etapa de ofertă, iar linia ajunge pe factură prin conversia devizului.

**b) Alege modelul și opțiunile**

Alegi întâi **modelul** dintr-o listă căutabilă — scrie câteva litere, nu derula printre sute. După ce l-ai
ales, apar opțiunile lui, exact cele definite pentru acel model. Ce anume sunt ține de ce vinzi:

| Dacă vinzi… | opțiunile pot fi… |
|---|---|
| tâmplărie | dimensiune, tip de sticlă, feronerie, culoare profil |
| mobilier | mărime, stil, material principal, material secundar |
| echipamente | putere, tensiune, accesorii, garanție extinsă |
| servicii | pachet, număr de utilizatori, durată, SLA |

Pe măsură ce alegi, **prețul se calculează singur** din model + opțiuni + regulile de preț. **Nu se scrie
manual.** Regulile pot și să ascundă sau să interzică opțiuni care n-au sens împreună, deci o combinație
imposibilă nu se poate alege din greșeală.

Dacă butonul de adăugare rămâne gri, treci cu mouse-ul peste el: îți **spune ce mai lipsește**, nu te lasă să
ghicești.

**c) Adaugă linia în document**

Apeși **„Adaugă în document”** și linia intră în deviz cu descrierea configurației, **prețul calculat** și un
**cod unic (SKU)**. Fereastra se închide singură; poți configura încă un produs pentru același document.

Fiecare linie configurată e un produs de sine stătător: două bucăți cu materiale diferite sunt două linii, cu
două SKU-uri și două prețuri.

## Deschide consola

**Configurator** în meniul lateral, sau `/admin/tsync_product_configurator` (deschide tabloul de bord).

## Componentele

- **Șabloane** — un produs configurabil (de ex. *Fereastră*, *Tricou*, *Birou*). Tot ce e mai jos atârnă de
  un șablon.
- **Atribute** — alegerile pe care le face clientul (de ex. *Mărime*, *Culoare*, *Tip sticlă*).
- **Valori** — opțiunile dintr-un atribut (de ex. *Mic / Mediu / Mare*). Poți importa valori în masă.
- **Variante** — combinațiile concrete rezultate, fiecare cu codul și prețul ei.
- **Reguli** — logica: *dacă* se face o alegere, *atunci* permite/interzice alta, adaugă un supliment,
  setează o valoare implicită, arată/ascunde o opțiune… Motorul de reguli e sigur și previzibil (fără cod
  liber), deci aceeași alegere dă mereu același rezultat.

## Construiește un produs configurabil, pe scurt

1. **Șabloane** → creează un șablon pentru produs.
2. **Atribute** → adaugă alegerile (Mărime, Culoare…).
3. **Valori** → adaugă opțiunile fiecărui atribut (și importă o listă lungă dacă e nevoie).
4. **Reguli** → stabilește ce e permis și cum se ajustează prețul.
5. **Variante** → verifică combinațiile produse de alegeri + reguli.

## Încarcă multe modele deodată (import CSV)

Când ai de introdus zeci de modele — sau când lista ta se va mai corecta de câteva ori — nu le face una câte una.
Pe pagina **Modele** ai butonul **Import CSV**.

Fișierul are nevoie de **o singură coloană obligatorie: `code`**. Restul iau valori implicite rezonabile, deci un
fișier cu două coloane (`code`, `name`) produce deja modele funcționale și configurabile. Pagina de import îți
arată tabelul complet al coloanelor și implicitele lor.

**Apasă întâi „Simulează".** Nu scrie nimic: îți arată rând cu rând ce s-ar crea, ce s-ar actualiza și ce ar fi
ignorat, cu observații. Abia după ce raportul arată cum te aștepți, apeși **Importă**.

**Poți reîncărca același fișier oricând.** Modelele se potrivesc după `code`, deci un fișier corectat
**actualizează** modelele existente — nu creează un al doilea set lângă ele. Asta e și motivul pentru care merită
să pornești cu date aproximative și să le rafinezi.

Câteva lucruri de știut:

- **Listele se scriu cu `;`** — de exemplu `invoice;estimate` sau `2250;2050;1900`.
- **Un cod folosit de două rânduri e refuzat**, nu ghicit. Dacă în fișier ai două modele diferite cu același cod,
  importul îți spune care sunt și nu scrie niciunul: dacă ar scrie, al doilea l-ar înlocui tăcut pe primul.
- **`valid_sizes`** restrânge mărimile valide ale modelului. Lăsat gol, toate mărimile rămân valide. La fiecare
  import lista se **înlocuiește**, deci o mărime pe care o scoți din fișier chiar dispare.

## Testează o regulă înainte s-o crezi

Regulile se complică repede — *„tipul ăsta de sticlă e disponibil doar peste 1200 mm și adaugă 12 %"*. În loc să
salvezi o regulă și să speri, folosește **Simulează**: alegi o combinație de valori și TSync îți arată ce decide
motorul pentru ea — ce opțiuni rămân disponibile, care sunt forțate sau interzise și cât devine prețul.

Fiindcă motorul e determinist (o regulă nu conține cod liber), ce arată simularea e exact ce va primi clientul.

## Ce se întâmplă după ce o linie configurată ajunge pe un document

O linie configurată nu e o linie de produs obișnuită. Poartă alegerile clientului, deci cineva trebuie să
decidă **cum va fi livrată efectiv** — iar până atunci linia stă în **coada de revizie** a configuratorului.

Deschizi **Configurator → Revizie** din document, sau
`/admin/tsync_product_configurator/review/invoice/123` (merge pentru facturi, devize, propuneri și note de
credit). Revizia cere permisiunea *decide* — a putea construi șabloane nu e același lucru cu a putea angaja
compania să producă ceva.

Pentru fiecare linie alegi una din patru:

| Decizia | Ce face TSync |
|---|---|
| **Lansează în producție** | Rezolvă lista de materiale a șablonului pentru opțiunile alese, o scalează după cantitatea liniei și creează o **comandă de producție**. Dacă modulul Producție nu e instalat, linia e marcată *în producție* cu o notă că livrarea e manuală — nu se pierde niciodată în tăcere. |
| **Comandă materiale** | Verifică întâi **disponibilitatea** fiecărui material rezolvat față de depozitul implicit al șablonului, apoi ridică ce lipsește. Vezi deficitul înainte să te angajezi. |
| **Vinde din stoc** | Marchează linia **onorată** din stocul existent — fără producție, fără achiziție. |
| **Respinge** | Trimite linia înapoi. **Motivul e obligatoriu** — o respingere fără motiv e refuzată, fiindcă cine a configurat-o trebuie să știe ce să schimbe. |

Fiecare decizie se înregistrează pe linie, deci un document răspunde mereu la *„cine a decis și ce a decis"*.

### Drumul complet, de la comandă la factură

Ca să vezi unde se leagă configuratorul de restul sistemului, iată ciclul cap-coadă al unui produs fabricat la
comandă — aceleași etape, fie că fabrici tâmplărie, mobilier sau utilaje:

**Deviz cu linie configurată** → **Lansează în producție** (din coada de revizie) → **comandă de producție
(OP)** cu rețeta rezolvată pentru opțiunile alese → **fabricare**, materialele scăzându-se din stoc pe măsură
ce se consumă → **finalizare**, cu produsul finit intrat pe stoc cu lotul lui → **livrare** → **factură**.

Fiecare pas lasă urmă în sistem, deci se știe oricând unde e fiecare comandă. Pentru partea de fabricație —
rețete, comenzi de producție, centre de lucru, controlul calității și loturile — vezi ghidul
[Producție](tsync-production.md).


### Dacă produci LA COMANDĂ

Implicit, **„Lansează în producție" e blocat cât timp lipsește un material**. E regula corectă dacă ții
materialele pe stoc: o producție care nu poate fi terminată nu are voie să înceapă.

Dacă însă **produci la comandă** — configurezi și fabrici pentru fiecare comandă în parte — n-ai niciodată
toate materialele *înainte* ca cineva să comande, iar blocajul îți oprește exact fluxul normal. Pornește
atunci **Configurator → Setări → Producție → „Producție la comandă"**.

Cu setarea pornită, la lipsă vezi un avertisment cu materialele care lipsesc, butonul rămâne activ, iar
lansarea creează comanda de producție și **notează pe ea ce lipsea**. Comanzi materialele în paralel, cu
butonul de alături; producția le consumă provizoriu până sosesc.

Cu setarea oprită, o încercare de lansare la lipsă e **refuzată și îți spune ce material lipsește** — nu doar
un buton gri.

## Liste de materiale

Un șablon poate purta o **listă de materiale** ale cărei cantități depind de opțiunile alese — asta face
posibile *Lansează în producție* și *Comandă materiale*. Lista se rezolvă per configurație, nu per șablon, deci
o fereastră de 2400 mm și una de 900 mm consumă cantități diferite din aceeași definiție.
### Un material pe care îl alege clientul — linia slot

Majoritatea liniilor din BOM numesc un material fix: două bucăți din asta, trei metri din aia. O linie **slot**
numește în schimb o **opțiune**. Cantitatea e fixată de model — o canapea, de exemplu, ia 11 metri liniari de stofă, iar o ușă ia o singură
foaie de furnir — dar
*care* stofă e ce alege clientul, iar costul urmează articolul din spatele acelei alegeri.

Asta face ca **costul materialelor să se schimbe** când cineva trece de la o stofă la alta. Fără o linie slot,
lista de materiale nu are stofă deloc, iar toate stofele costă la fel — un mod foarte convingător de a greși.

Într-o fișă importată, un rând slot poartă **`attribute_code`** (de exemplu `material_principal`) în locul
coloanei `material_code`, cu `component_type` pus pe `slot`. Nu creează niciun articol: articolul e ce se va
alege. Un rând slot fără cod de atribut, sau care numește o opțiune inexistentă pe instalare, e **raportat pe
nume** în rezultatul importului și sărit — niciodată importat ca o linie care ar costa tăcut zero.

### Verificarea cifrelor

Lista de materiale arată acum, pe fiecare linie, **prețul unitar** folosit și **costul liniei**, lângă
cantitate — atât la verificarea disponibilității, cât și în previzualizare. O linie fără preț înregistrat
afișează o liniuță, nu un zero: „nepreţuit" și „gratuit" sunt fapte diferite, iar un zero ar trimite pe cineva
să renegocieze un preț care nu a fost niciodată introdus.

## De unde vine costul manoperei

Prețul unui model are două jumătăți: **materialele**, care vin din lista lui de materiale, și **manopera**, care
vine dintr-o **rută de producție**.

În formularul modelului, **Rută de producție (manoperă)** listează rutele definite în modulul Producție,
fiecare **cu costul ei** — ca să poți alege clasa de manoperă potrivită fără să le deschizi pe rând. Lăsat gol,
costul manoperei e 0, adică exact ce fac toate modelele azi.

Numărul respectă felul în care instalarea ta costează munca. Dacă plătești operațiile la ceas, e setup plus
timpul de ciclu la tariful orar al centrului de lucru, ajustat cu eficiența lui. Dacă ai pornit prețurile fixe
pe operație, se folosește prețul fix — cele două sunt răspunsuri alternative, niciodată adunate.

> Până la acest release costul manoperei era **întotdeauna 0,00**, pentru fiecare model, fiindcă nu-l alimenta
> nimic. Marja afișată lângă el era deci greșită cu tot costul manoperei. Dacă te-ai bazat pe acele marje, ele
> se schimbă din clipa în care atașezi rute — cele vechi nu erau prudente, erau incomplete.

**Ca să mapezi multe modele deodată:** importul CSV acceptă o coloană `routing_id` sau `routing_code`. Dacă
lași coloana goală, ruta fiecărui model **rămâne cum e** — spre deosebire de celelalte coloane, o celulă goală
aici nu șterge ce ai ales din formular.

## Cum se citește codul unei linii configurate (SKU)

Fiecare linie configurată primește un **cod unic**. Nu e un număr aleatoriu: e construit după un **tipar pe
care îl stabilești tu**, ca oricine din producție sau din depozit să știe din cod exact ce e de făcut — fără să
mai întrebe.

Tiparul se scrie în **Configurator → Setări → Tipar SKU**, iar un model poate avea tiparul lui propriu (câmpul
**Șablon SKU** din formularul modelului) când are nevoie de altă formă. Se scrie ca o înșiruire de simboluri:

| Simbol | Ce pune în cod |
|---|---|
| `{TEMPLATE}` | modelul configurabil (produsul) |
| `{MODEL}` | codul modelului ales |
| `{SIZE}` | mărimea aleasă |
| `{STYLE}` | stilul ales |
| `{MP_CODE}` / `{MP_NAME}` | materialul principal — codul sau denumirea |
| `{MS_CODE}` / `{MS_NAME}` | materialul secundar — codul sau denumirea |
| `{ATTR_CODE}` / `{ATTR_VALUE}` | orice alt atribut și valoarea lui |
| `{DATE}` · `{SEQ}` · `{HASH}` | data, un număr de ordine, o amprentă scurtă a configurației |

Un simbol pentru care configurația n-are valoare **dispare pur și simplu** — nu rămâne ca un cuvânt ciudat în
mijlocul codului. Așa, același tipar merge și pentru un model cu patru opțiuni, și pentru unul cu două.

**Două exemple, cu același tipar** `PCFG-{MODEL}-{SIZE}-{STYLE}-{MP_NAME}`:

```
PCFG-F2-1200-DUB-TERMOPAN     o fereastră: model F2, 1200 mm, deschidere DUB, geam TERMOPAN
PCFG-D1-1900-S1-CATANIA       un mobilier: model D1, 1900 mm, stil S1, material CATANIA
```

De citit așa: `PCFG` = produs din configurator, apoi fiecare bucată e o alegere făcută în fereastra
configuratorului, în ordinea din tipar. Oricine din producție știe din cod ce are de făcut.

Tot în Setări reglezi cum arată codul: **separatorul** (implicit `-`), **lungimea maximă**, dacă se scrie **cu
majuscule** și dacă diacriticele și chirilicele se **transliterează** în litere latine (recomandat — un cod care
poartă litere cu diacritice sau chirilice creează probleme la etichete, la export și la căutare). TSync verifică
și **unicitatea**: două configurații diferite nu pot primi același cod.

## Pe documente și în portalul clientului

Când adaugi un articol configurat, se deschide un **selector de configurare** ca să faci alegerile (tu sau
clientul, dacă **configuratorul din portalul clientului** e activat în **Setări**), iar varianta + prețul
rezultat ajung pe document. Activează/dezactivează configuratorul de portal din **Setări**-le modulului.

## Ce se comandă cel mai des și cât a costat atunci

**Configurator → Variante folosite** din meniul lateral deschide pagina **Cererea pe configurații**
(`/admin/tsync_product_configurator/variants`) — locul care transformă tot ce a configurat echipa într-o
decizie de stoc pe care o poți lua *înainte* de sezon, nu după.

Răspunde la două întrebări deodată:

- **ce se comandă cel mai mult** și
- **cum s-a mișcat costul** cât timp se comanda.

### Numără cantitatea, nu aparițiile

Măsura e **cantitatea comandată**. O linie de o bucată și o linie de patruzeci nu sunt aceeași cerere, chiar
dacă fiecare e o configurație pe un document. Dacă ai citit până acum undeva o cifră de „folosiri" și ai
planificat stocul după ea, aici o să vezi un clasament diferit — și mai util.

### Alege cum se grupează rândurile

Trei grupări, comutate în capul paginii:

| Grupare | Un rând e |
|---|---|
| **Configurație** | o combinație exactă de alegeri — implicit |
| **Model** | tot ce s-a construit dintr-un model, indiferent de opțiuni |
| **Variantă** | varianta concretă salvată, cu codul ei |

Filtrezi după căutare (SKU, denumire, cod model), model, tip de document și un interval de date. **Exclude
respinse** e pornit implicit: o linie refuzată de client e interes retras, nu cerere, iar numărarea ei e exact
eroarea care umple depozitul.

### Cum se citește tabelul

Fiecare rând arată **ce s-a configurat**, **cantitatea**, de câte **ori** s-a configurat, **costul mediu**,
**intervalul de cost**, **valoarea** și **ultima comandă**. Fiecare coloană cu antet apăsabil sortează tot
setul, iar totalurile de deasupra tabelului sunt pentru **tot ce corespunde filtrelor** — nu doar pentru pagina
pe care o vezi.

Deschide un rând și se desfășoară în fiecare folosire din spatele lui: documentul, data, cantitatea, starea și
**costul purtat de acea folosire atunci**.

### Două lucruri despre cost, de știut înainte să acționezi pe el

**Media e ponderată cu cantitatea.** O bucată la 900 și patruzeci la 1000 dau media **997,56**, nu 950. Media
simplă arată apărabil și e greșită exact în direcția care face o decizie de aprovizionare să pară justificată
după aceea.

**O folosire își înregistrează costul la creare.** Rândurile introduse înainte ca instalarea ta să facă asta au
fost completate din costul *curent* al variantei, care nu e cât a costat atunci — acelea sunt marcate
**aprox.**, iar în capul paginii apare o notă cât timp întreaga instalare e încă în starea asta. Un trend de
cost care le-ar amesteca tăcut ar desena o linie dreaptă și ar prezenta-o drept dovadă că prețurile au fost
stabile.

### Aceleași date, ca rapoarte

Trei rapoarte sunt înregistrate în consola de rapoarte (**Rapoarte** în meniul lateral), deci le poți filtra,
reprezenta grafic, exporta CSV/XLSX, salva ca vedere sau trimite pe e-mail după un program:

| Raport | Ce îți dă |
|---|---|
| **Top configurations by quantity** (top configurații după cantitate) | ce configurații exacte s-au comandat cel mai mult, ordonate după cantitate |
| **Demand by model, per month** (cerere pe model, lunar) | cantitatea pe model pe lună — forma din care se ia o decizie de stoc înainte de sezon |
| **Configuration cost over time** (costul configurației în timp) | costul mediu ponderat cu cantitatea, pe configurație și lună, cu o coloană **cost basis** care spune dacă cifra e un instantaneu real per folosire sau un cost curent completat |

Ca să apară, rolul tău are nevoie de dreptul de a vedea rapoartele configuratorului.

### Setări

**Setările** modulului au trei implicite pentru pagina asta: **perioada implicită** în zile (90 dacă n-o
schimbi), **gruparea implicită** și dacă **liniile respinse sunt excluse** din cerere. Ele stabilesc cu ce se
deschide pagina; oricare se poate schimba în pagină pentru o singură privire.
