nHsCRM · Felhasználói kézikönyv
7. fejezet

Kalkulációs sablon készítése

Ahogyan néhány ügyfél-mezőből a rendszer magától összeállítja a teljes, tételes árajánlatot — a parkettázó vállalkozás példáján, lépésről lépésre.

Szint: kezdő–haladó  ·  Becsült idő: 25–35 perc  ·  Előfeltétel: 3. és 6. fejezet
Ebben a fejezetben

7.1Mire jó a kalkulációs sablon?

Képzeljük el, hogy minden érdeklődőnek kézzel kellene árajánlatot írni: kiszámolni, hány négyzetméter parketta kell, mennyi a szegély, kell-e aljzatkiegyenlítés, hozzáadni a munkadíjat, majd összeadni. Tíz érdeklődőnél ez tíz külön számolgatás — és minden számolásba becsúszhat hiba.

A kalkulációs sablon ezt automatizálja. Egyszer felállítasz egy szabályrendszert — „a parketta mennyisége a terület, az ára a típustól függ, aljzatkiegyenlítő csak akkor kell, ha az ügyfél kérte" — és onnantól a rendszer minden ügyfélnél a saját adataiból állítja elő a kész, tételes ajánlatot. Egyetlen kattintással.

A lényeg egy mondatban A kalkulációs sablon egy „recept": megmondod, miből (az ügyfél mezői) és hogyan (képletek) számoljon a rendszer — és utána bárkire alkalmazza.

Ebben a fejezetben a PadlóProfi Kft. szemszögéből építünk fel egy ilyen sablont. A végére nemcsak ezt az egy sablont fogod tudni elkészíteni, hanem érteni fogod a lehetőségeket is — beleértve azokat a kapcsolókat és beállításokat, amelyeket ebben a példában nem is használunk.

A forgatókönyv, amit felépítünk

A PadlóProfi minden érdeklődőről négy dolgot rögzít (ezek a 3. fejezetben létrehozott egyedi mezők), és ebből szeretne automatikus ajánlatot:

Egyedi mező (az ügyfél adatlapján)TípusPéldaérték (Kovács Bence)
Parkettázandó terület (m²)Szám40
Szegély hossza (m)Szám26
Aljzatkiegyenlítés kell?Igen/NemIgen
Parketta típusaVálasztás (6 opció)Világos tölgy

A cél: ebből a négy adatból a rendszer állítsa elő az alábbi, tételes ajánlatot — Kovács Bencének nettó 701 200 Ft-ot —, de ugyanez a sablon egy másik ügyfélnél, más adatokkal, automatikusan más összeget adjon.

7.2Két dolog, aminek előbb léteznie kell

A kalkulációs sablon két másik dologra épít, ezért ezeknek már készen kell lenniük:

1) Az egyedi mezők

A fenti négy mezőt a Beállítások → Egyedi mezők alatt hozod létre (Kapcsolat típusú mezőként; lásd 3. fejezet). A sablon képletei ezekre a mezőkre fognak hivatkozni — a mező „belső neve" (slug) alapján, nem a látható címke alapján. Például a „Parkettázandó terület (m²)" mező belső neve parkettazando_terulet_m.

Miért fontos a belső név? A rendszer az ékezetek és szóközök nélküli, egyszerűsített nevet használja a képletekben. A jó hír: nem kell fejből tudnod — a szerkesztő felsorolja az összes elérhető mezőt a pontos nevével (lásd 7.5). Elég onnan kimásolni.

2) A termékek

A Termékek menüben rögzíted a termékkatalógust — parketták típusonként, aljzatkiegyenlítő, szegélyléc, munkadíj —, nettó egységárral (lásd 6. fejezet). A sablon vagy közvetlenül egy termékre hivatkozik, vagy — ahogy mi tesszük — a product_ar('terméknév') függvénnyel az élő árat kéri le. Így ha később átárazol egy terméket, a sablon már a friss árral számol.

7.3Első lépés: Alap vagy Haladó?

A Kalkulációs sablonok menüben két gomb közül választhatsz. A különbség a rugalmasságban van.

nHsCRM
Kapcsolatok
Ajánlatok
Termékek
Kalkulációs sablonok
Beállítások
Kalkulációs sablonok
Automatikus ajánlatszámítási szabályok
+ Új sablon (alap) + Új sablon (haladó)
Parkettázás – ajánlat  haladó
Automatikus parkettázási ajánlat a kapcsolat 4 egyedi mezőjéből.
Cím: Parkettázási ajánlat – {{contact_name}}  ·  ÁFA: 27%  ·  5 tétel
7.1. ábra. A Kalkulációs sablonok lista. Jobbra fent a két létrehozó gomb; alul egy kész sablon „kártyája".
TípusMikor válaszd?
AlapEgyszerű, „kattintgatós" szerkesztő. Terméket választasz, mennyiséget adsz meg — képletek nélkül. Akkor jó, ha a mennyiség egyszerűen egy mezőből jön, és nincs feltétel vagy számítás.
HaladóTeljes erő: minden tétel mennyisége és egységára egy-egy JavaScript-kifejezéssel (képlettel) számolódik. Feltételes sorok, típus szerinti árazás, matematikai függvények — mind lehetséges. A parkettázós példához ezt választjuk.
Gyakorlati tanács Ha bizonytalan vagy, kezdd a Haladó szerkesztővel. Egy egyszerű sablont is meg tudsz benne csinálni (a képlet lehet simán egy mezőnév vagy egy szám), de ha később bővítenél, nem kell újrakezdened.

7.4A haladó szerkesztő térképe

A „+ Új sablon (haladó)" gomb egy űrlapot nyit. Mielőtt kitöltjük, ismerkedjünk meg a felépítésével — öt logikai blokkból áll, fentről lefelé:

  1. Alapadatok — a sablon neve és leírása.
  2. Ajánlat beállítások — a keletkező ajánlat címe, ÁFA-módja, kedvezmény, megjegyzés.
  3. Elérhető változók és függvények — egy „puska": mit használhatsz a képletekben.
  4. Változók — opcionális, újrahasznosítható rész-számítások.
  5. Ajánlat tételek — a szíve: a sorok, amelyekből az ajánlat áll.

A következő szakaszok ezt az öt blokkot járják végig — mindegyik beállítást elmagyarázva, azokat is, amelyeket a parkettázós példában nem használunk.

7.5Alapadatok: név és leírás

Parkettázás – ajánlat
Automatikus parkettázási ajánlat a kapcsolat 4 egyedi mezőjéből.
7.2. ábra. Alapadatok. A név kötelező (ezt látod majd a listában és az ajánlat-generálásnál); a leírás opcionális emlékeztető.

7.6Ajánlat beállítások — a keletkező ajánlat kerete

Ez a blokk azt szabályozza, hogy a sablonból generált ajánlat milyen keretet kapjon. Négy beállítás van, és mind a négyet érdemes érteni.

Ajánlat beállítások
Parkettázási ajánlat – {{contact_name}}
27% ÁFA
0
pl. Az ajánlat a fenti tételekre vonatkozik, az árak nettó értékek.
7.3. ábra. Ajánlat beállítások. A {{...}} jelölés helyére a rendszer az adott ügyfél adatát írja be.

Ajánlat cím sablon

A generált ajánlat címe. Használhatsz benne behelyettesíthető változókat kettős kapcsos zárójelben. A {{contact_name}} helyére minden ügyfélnél a saját neve kerül — így „Parkettázási ajánlat – Kovács Bence", „Parkettázási ajánlat – Nagy Réka" stb. lesz automatikusan.

ÁFA

Két lehetőség: 27% ÁFA (normál, ez az alapértelmezett) vagy ÁFA-mentes. Az utóbbit alanyi adómentes vállalkozás vagy adómentes ügylet esetén válaszd — ilyenkor az ajánlaton nem jelenik meg ÁFA-sor, a nettó és a bruttó megegyezik. A PadlóProfi példában 27%-ot használunk.

Kedvezmény (%)

Egy fix, sablon-szintű kedvezmény, amit a rendszer minden tételre alkalmaz. Ha itt pl. 10-et adsz meg, minden generált ajánlat automatikusan 10% kedvezményt kap. Nálunk 0 marad — a példában nem adunk kedvezményt —, de jó tudni, hogy létezik: pl. egy „Nyári akció" sablont csinálhatsz belőle egyetlen szám átírásával.

Megjegyzés sablon

Szabad szöveg, ami az ajánlat aljára kerül (pl. fizetési feltételek, érvényesség, „az árak nettó értékek"). Ebben is használhatsz {{...}} változókat. Opcionális — a példában rövid megjegyzést adhatsz, vagy üresen hagyhatod.

Kevésbé nyilvánvaló, de hasznos A Kedvezmény és az ÁFA mezővel egyetlen sablonból több „változatot" gyárthatsz: ugyanaz a számítási logika, más ÁFA-mód vagy más kedvezmény — anélkül, hogy a tételeket újra kellene építeni.

7.7Elérhető változók és függvények — a „puska"

Ez egy legördíthető referencia-panel. Nem beállítás, hanem segédlet: felsorolja, mire hivatkozhatsz a képletekben, és milyen függvények állnak rendelkezésre. Amikor képletet írsz, ide pillantasz vissza.

Elérhető változók és függvények
Kontakt mezők
contact_name Kapcsolat neve
contact_email E-mail cím
contact_phone Telefonszám
contact_address Cím
Egyedi contact mezők
parkettazando_terulet_m Parkettázandó terület (m²)
szegely_hossza_m Szegély hossza (m)
aljzatkiegyenlites_kell Aljzatkiegyenlítés kell?
parketta_tipusa Parketta típusa
Matematikai függvények
ceil(x)floor(x)round(x)abs(x)min(a,b)max(a,b)sqrt(x)pow(x,n)product_ar('név')
Sablon változók ( {{...}} ) — a névhez, leíráshoz
Pl. {{contact_name}}, {{parketta_tipusa}}
Feltételes kifejezés (JS ternary)
meret_m > 10 ? ceil(meret_m / 2.5) : 3
7.4. ábra. A referencia-panel. A Kontakt mezők és az Egyedi contact mezők a te fiókod szerint jelennek meg — itt épp a PadlóProfi négy parketta-mezőjével.

Nézzük végig, mit kínál:

Miben írjuk a képleteket? A képletek JavaScript-szerű kifejezések. Néhány gyakorlati szabály: egyenlőség-vizsgálat == jellel; feltétel a ? : (ternary) operátorral; a szövegértéket idézőjelben add meg (pl. parketta_tipusa == 'Világos tölgy'). Ne aggódj, ha nem programozol — a példák másolhatók és átírhatók.

7.8Változók — opcionális, de elegáns

Ez a blokk lehetővé teszi, hogy saját, újrahasznosítható rész-számításokat nevezz el, mielőtt a tételekhez érnél. Ha ugyanazt a részletet több tételben is használnád, itt egyszer kiszámolod, és a tételekben már csak a nevére hivatkozol.

Változók + Változó
JS kifejezések — az előző változók is elérhetők. Nincs még változó. A tételek formulái közvetlenül is hivatkozhatnak a contact mezőkre.
7.5. ábra. A Változók blokk üresen. A parkettázós példában nem használjuk — de egy alapterulet nevű változóba pl. kiemelhetnéd a parkettazando_terulet_m-et, ha sok helyen hivatkoznál rá.

Mikor éri meg? Ha van egy összetett rész-képlet (pl. egy kedvezményszorzó vagy egy régió-alapú felár), amit három-négy tétel is használna. Akkor egyszer megírod változóként, és a tételek már csak a rövid nevét írják. A parkettázós példa elég egyszerű ahhoz, hogy elhagyjuk — a tételek közvetlenül a contact mezőkre hivatkoznak.

Sorrend számít A változók fentről lefelé számolódnak, és egy változó hivatkozhat a felette lévőkre. Így „láncba" fűzhető számítást is építhetsz.

7.9Az ajánlat tételei — egy sor anatómiája

Itt a lényeg. Az „+ Tétel" gombbal annyi sort adsz hozzá, ahányra szükség van. Minden sornak öt része van:

Ajánlat tételek + Tétel
Mennyiség és ár JS formulával számolva
1. tétel
— Szabad tétel (nincs termék) —
Parketta – {{parketta_tipusa}}
parkettazando_terulet_m
parketta_tipusa == 'Világos tölgy' ? 8900 : …
pl. {{parkettazando_terulet_m}} m² lerakva
7.6. ábra. Egy tétel öt mezője. A csillagos mezők kötelezők; a Termék és a Leírás opcionális.
MezőMit csinál?
Termék (opcionális)Rákereshetsz egy termékre a katalógusból — ekkor a neve és ára onnan jön. Vagy választhatod a „Szabad tétel (nincs termék)" opciót, és mindent képlettel adsz meg. Ha terméket választasz, az árát a képlet felülírhatja.
Tétel neve (sablon) *A sor megnevezése az ajánlaton. Használhatsz benne {{...}} változót — pl. Parketta – {{parketta_tipusa}} az ügyfélnél „Parketta – Világos tölgy" lesz.
Mennyiség formula *Egy képlet, ami a darabszámot/mennyiséget adja. Lehet egyszerűen egy mezőnév (parkettazando_terulet_m), számítás (parkettazando_terulet_m / 10), vagy feltétel.
Egységár formula *Egy képlet a nettó egységárra. Lehet fix szám (1800), termék-ár (product_ar('Szegélyléc')), vagy típustól függő ár.
Leírás sablon (opcionális)A tétel alá kerülő magyarázó szöveg, szintén {{...}} változókkal.
A legfontosabb szabály Ha egy tétel mennyisége 0-ra jön ki, a rendszer kihagyja azt a sort az ajánlatból. Ez nem hiba, hanem eszköz: pontosan erre épülnek a feltételes sorok (7.10).

7.10A parkettázós ajánlat öt tétele

Most építsük fel a teljes logikát. A PadlóProfi ajánlata öt tételből áll. Nézzük végig mindet — a képlet mellett azzal, hogy miért úgy néz ki.

1. tétel — Parketta (a típus szerint)

A parketta mennyisége a terület, az ára pedig a választott típustól függ. A típustól függő árat egy feltétel-lánccal (egymásba ágyazott ternary) oldjuk meg:

Olvasd így: „ha a típus Világos tölgy, az ár 8900; különben ha Sötét tölgy, 9500; …; ha egyik sem, 0". Egyetlen sor kiszolgálja mind a hat parkettatípust — nem kell hat külön tétel.

Élő árral is megoldható A fix számok helyett írhatnál product_ar('Parketta – Világos tölgy')-et, így az ár mindig a termékkatalógus aktuális értéke lenne. Előny: átárazáskor a sablont nem kell módosítani.

2. tétel — Aljzatkiegyenlítő (feltételes)

Ez csak akkor kell, ha az ügyfél kérte. Itt jön a „0 → kihagyás" trükk: ha az aljzatkiegyenlites_kell értéke nem „true", a mennyiség 0, és a rendszer eltünteti a sort.

3. tétel — Szegélyléc

Egyszerű: a mennyiség a szegély hossza, az ár fix.

4. tétel — Munkadíj (parkettázás)

5. tétel — Munkadíj az aljzatkiegyenlítéshez (feltételes)

Szintén csak aljzatkiegyenlítés esetén, és a mennyisége a terület tizede (a felület egyszerűbb munka):

Mit ad ki mindez? — a próba

Nézzük Kovács Bencét: terület 40, szegély 26, aljzat Igen, típus Világos tölgy. A rendszer így számol:

TételEgységárMenny.Nettó
Parketta – Világos tölgy8 90040356 000
Aljzatkiegyenlítő1 8004072 000
Szegélyléc1 2002631 200
Munkadíj – parkettázás5 50040220 000
Munkadíj – aljzatkiegyenlítés5 500422 000
Nettó összesen701 200 Ft
A varázslat Egy másik ügyfélnél, akinél az aljzat Nem, a 2. és az 5. tétel mennyisége 0 lesz — és eltűnik az ajánlatból. Ugyanaz a sablon, más adat, automatikusan más (rövidebb) ajánlat. Semmit nem kell átállítani.

7.11Mentés és a kész sablon

A szerkesztő alján a Mentés gomb rögzíti a sablont. Ezután a listában megjelenik a kártyája, rajta a legfontosabb adatokkal: a cím-minta, az ÁFA-mód és a tételek száma.

Parkettázás – ajánlat  haladó
Automatikus parkettázási ajánlat a kapcsolat 4 egyedi mezőjéből.
Cím: Parkettázási ajánlat – {{contact_name}}  ·  ÁFA: 27%  ·  5 tétel
7.7. ábra. A kész sablon kártyája. A ceruza ikonnal bármikor szerkeszthető, a kuka ikonnal törölhető.

7.12Használat: ajánlat generálása egy ügyfélnek

A sablon önmagában még nem ajánlat — akkor „kel életre", amikor egy ügyfélre alkalmazod. Nyisd meg a kapcsolat adatlapját, és menj az Ajánlatok fülre. Ott egy „Ajánlat generálása sablonból" panelt találsz:

Ajánlat generálása sablonból
Parkettázás – ajánlat
Generálás
7.8. ábra. Az ügyfél Ajánlatok fülén: sablon kiválasztása és egyetlen kattintás.

Válaszd ki a „Parkettázás – ajánlat" sablont, kattints a Generálás-ra — és a rendszer az ügyfél négy mezőjéből azonnal előállítja a kész, tételes ajánlatot. Kovács Bencénél ez a fenti öt sor, nettó 701 200 Ft (bruttó 890 524 Ft), amit egy kattintással PDF-be menthetsz vagy e-mailben elküldhetsz (lásd 8. fejezet).

Tömegesen is megy Ugyanez a sablon a kapcsolat-listából tömegesen is használható: kijelölsz mondjuk 10 ügyfelet, és egyetlen művelettel mindenki a saját, kiszámolt ajánlatát kapja — névvel, összeggel, tételes PDF-fel.

7.13Haladó lehetőségek — amit most nem használtunk

A parkettázós példa szándékosan egyszerű. Íme, mi minden fér még bele — hogy lásd a rendszer határait:

7.14Összefoglaló — ellenőrzőlista

Mielőtt élesíted a sablont, fusd át:

Léteznek a szükséges egyedi mezők (terület, szegély, aljzat, típus), és tudom a belső nevüket (a referencia-panelről).
Léteznek a termékek a katalógusban (parketták, aljzat, szegély, munkadíj), nettó árral.
A sablon neve beszédes; a cím-minta tartalmazza a {{contact_name}}-et.
Az ÁFA és a Kedvezmény a kívánt értéken áll.
Minden tételnek van neve, mennyiség- és egységár-formulája.
A feltételes tételek (aljzat) 0-ra jönnek ki, ha nem kellenek — és így eltűnnek.
Kipróbáltam egy valódi ügyfélen: a végösszeg stimmel.
Összefoglalva A kalkulációs sablon a CRM egyik legnagyobb időmegtakarítója. Az első felállítás fél óra — de utána minden ajánlat másodpercek kérdése, és soha többé nem csúszik számolási hiba. Egyszer építed, ezerszer használod. A következő fejezetben ezt kamatoztatjuk: a sablonból egyetlen kattintással kész, tételes ajánlatot generálunk Kovács Bencének.