Cenniki indywidualne i rabaty progowe w PrestaShop: jak to działa od środka
Grupy klientów, ceny specyficzne, reguły koszyka i kolejność, w jakiej PrestaShop je stosuje. Plus co się dzieje z wydajnością, gdy reguł są tysiące, i jak temu zaradzić.
Zrobimy to za Ciebie. Opisz problem, a odpowiemy w ciągu 24 godzin roboczych.
Opisz projektPrestaShop ma trzy niezależne mechanizmy wpływające na cenę, którą widzi klient: grupy klientów, ceny specyficzne i reguły koszyka. Każdy z nich działa inaczej, nakładają się w określonej kolejności, a przy sprzedaży B2B zwykle używa się wszystkich trzech naraz. Kto nie rozumie tej kolejności, dostaje ceny, których nikt nie planował. Kto rozumie, może zbudować cennik hurtowy bez ani jednej linii własnego kodu, do pewnej skali.
W skrócie
- Grupa klientów daje rabat procentowy na wszystko i decyduje, czy klient widzi ceny netto czy brutto. To warstwa najszersza i najmniej precyzyjna.
- Cena specyficzna to konkretna cena lub rabat dla produktu (lub kategorii, marki, całego katalogu) dla grupy albo pojedynczego klienta, od określonej ilości. To nią robi się cenniki indywidualne i progi ilościowe.
- Reguły koszyka działają na koszyk, nie na produkt: kody rabatowe, darmowa dostawa, rabat od wartości zamówienia. Do cenników B2B nadają się słabo.
- Przy tysiącach cen specyficznych PrestaShop zwalnia, bo liczy je przy każdym wyświetleniu ceny. Lekarstwem jest cache, ograniczenie liczby reguł i w razie potrzeby własny moduł liczący ceny.
Warstwa pierwsza: grupy klientów
Każdy klient należy do co najmniej jednej grupy. Domyślne to Gość, Klient i Odwiedzający, a dla B2B dodajesz własne: Hurt A, Hurt B, Dystrybutor, Partner. Grupa ma trzy ustawienia, które wpływają na cenę: rabat procentowy na cały katalog, sposób wyświetlania cen (netto albo brutto) i metodę liczenia ceny (z domyślnego cennika albo z cen specyficznych grupy). Grupa decyduje też o widoczności kategorii, metodach płatności i dostawy.
Rabat grupowy jest wygodny na start: tworzysz grupę Hurt z rabatem 20% i każdy jej członek widzi ceny o 20% niższe. Problem w tym, że 20% na wszystko rzadko odpowiada rzeczywistemu cennikowi hurtowni, gdzie marże różnią się między kategoriami. Dlatego rabat grupowy traktuj jako domyślny poziom, a różnice ustawiaj cenami specyficznymi.
Warstwa druga: ceny specyficzne
Cena specyficzna (specific price) to najważniejszy mechanizm cenników B2B. Każda ma zakres i wartość. Zakres określa, dla kogo i czego obowiązuje: produkt lub kombinacja (wariant), kategoria, producent, dostawca albo cały katalog; grupa klientów albo pojedynczy klient; sklep (przy multistore), waluta, kraj; minimalna ilość; okres od do. Wartość to albo stała cena (np. 24,50 zł netto zamiast 31 zł), albo rabat procentowy lub kwotowy od ceny bazowej.
Jak PrestaShop wybiera, która cena obowiązuje
Gdy klient ogląda produkt, system szuka wszystkich cen specyficznych, które pasują do kontekstu: ten produkt (lub jego kategoria, marka, katalog), ta grupa (lub ten klient), ta ilość, ten dzień. Z pasujących wybiera jedną według priorytetu. Domyślna kolejność priorytetów to: sklep, waluta, kraj, grupa, a cena dla konkretnego klienta ma pierwszeństwo przed ceną dla grupy. Cena dla konkretnego produktu ma pierwszeństwo przed ceną dla kategorii. Przy dwóch regułach o tym samym zakresie wygrywa ta z wyższą minimalną ilością, która nadal pasuje do koszyka.
Ważne: ceny specyficzne nie sumują się. Jeśli klient ma rabat grupowy 10% i cenę specyficzną na produkt z rabatem 15%, dostaje 15%, nie 25%. Wyjątkiem jest sytuacja, gdy cena specyficzna ustawia stałą cenę, a grupa ma rabat: wtedy rabat grupowy jest liczony od ceny specyficznej, co często zaskakuje.
| Potrzeba | Jak to ustawić | Uwagi |
|---|---|---|
| Rabat 20% dla całego hurtu | rabat w ustawieniach grupy Hurt | najprostsze, ale mało precyzyjne |
| Inny rabat per kategoria dla grupy | cena specyficzna: kategoria + grupa + rabat % | jedna reguła na kategorię i grupę |
| Cena indywidualna na produkt dla klienta | cena specyficzna: produkt + klient + stała cena | ma pierwszeństwo przed grupą |
| Progi ilościowe (od 10 szt. taniej, od 50 jeszcze taniej) | kilka cen specyficznych na ten sam produkt z różną minimalną ilością | PrestaShop pokaże tabelę progów na karcie produktu |
| Promocja czasowa dla hurtu | cena specyficzna z okresem od do i grupą | kończy się sama |
| Rabat od wartości koszyka | reguła koszyka z warunkiem minimalnej kwoty | nie wpływa na cenę produktu, tylko na sumę |
Warstwa trzecia: reguły koszyka
Reguły koszyka (cart rules) to kody rabatowe i automatyczne rabaty działające na cały koszyk: procent od sumy, kwota od sumy, darmowa dostawa, gratis. Mają warunki: grupa klienta, minimalna wartość, konkretne produkty lub kategorie w koszyku, okres, limit użyć. Działają po cenach specyficznych, na już policzonych cenach produktów.
Do cenników B2B nadają się słabo z trzech powodów. Rabat z reguły koszyka nie jest widoczny na karcie produktu, tylko w koszyku, więc klient nie widzi „swojej” ceny przy przeglądaniu. Reguły koszyka trudno zsynchronizować z ERP, bo w ERP nie ma odpowiednika „rabat od koszyka”. I przy wielu regułach PrestaShop sprawdza je wszystkie przy każdej zmianie koszyka, co spowalnia zakupy. Używaj ich do tego, do czego są: kody promocyjne, darmowa dostawa od kwoty, rabat za pierwsze zamówienie.
Uwaga
Nie łącz progów ilościowych z rabatami od wartości koszyka na tych samych produktach bez przetestowania. Klient, który dostaje rabat ilościowy 15% i do tego 10% od koszyka, płaci mniej, niż zakładałeś, a Ty dowiadujesz się o tym z marży na koniec miesiąca.
Skąd biorą się ceny: ERP jako źródło
W hurtowni cennik prowadzi dział handlowy w ERP: Subiekcie, Optimie, enovie. Tam są poziomy cen, rabaty per klient, promocje. Sklep powinien je odczytywać, a nie mieć własną kopię utrzymywaną ręcznie. Integracja tłumaczy strukturę cen z ERP na ceny specyficzne PrestaShop: poziom cen z ERP staje się grupą klientów, rabat per klient na produkt staje się ceną specyficzną klient plus produkt, progi ilościowe stają się serią cen specyficznych z minimalną ilością.
To tłumaczenie decyduje o liczbie reguł. Hurtownia z 5000 produktów, 4 poziomami cen i 300 klientami z indywidualnymi rabatami na wybrane produkty generuje łatwo 30–50 tysięcy cen specyficznych. I tu zaczyna się temat wydajności.
Wydajność przy tysiącach reguł
PrestaShop liczy cenę produktu przy każdym wyświetleniu: na liście kategorii, karcie produktu, w koszyku, w wyszukiwarce. Dla każdego produktu wykonuje zapytanie szukające pasujących cen specyficznych. Przy kilkuset regułach jest to niezauważalne. Przy 50 tysiącach reguł lista kategorii z 40 produktami dla zalogowanego klienta hurtowego potrafi liczyć się kilka sekund, a wbudowany cache pomaga tylko częściowo, bo ceny zależą od klienta.
Co pomaga, w kolejności od najprostszego
- Ogranicz liczbę reguł. Zamiast ceny indywidualnej na każdy z 5000 produktów dla klienta ustaw rabat per kategoria (kilkanaście reguł) i ceny indywidualne tylko na te produkty, gdzie klient naprawdę ma wyjątek. Zwykle redukuje to liczbę reguł o 80–90%.
- Indeksy w bazie. Tabela cen specyficznych musi mieć indeksy na kolumnach produktu, grupy, klienta i ilości. W starszych instalacjach ich brakuje po migracjach.
- Cache cen per klient. Policzone ceny trzymane w pamięci podręcznej z unieważnianiem po zmianie cennika. Zmniejsza liczbę zapytań przy przeglądaniu list.
- Czyszczenie przeterminowanych reguł. Promocje, które się skończyły, zostają w tabeli i są sprawdzane przy każdym zapytaniu. Usuwaj je automatycznie.
- Własny moduł liczący ceny. Przy bardzo złożonych cennikach (rabaty kaskadowe, ceny zależne od salda, cenniki projektowe) własny moduł podpięty pod hak liczenia cen jest szybszy i bliższy logice ERP niż dziesiątki tysięcy cen specyficznych.
Z naszej praktyki
Hurtownia instalacyjna z 12 000 produktów i 400 klientami hurtowymi miała integrację, która każdemu klientowi tworzyła cenę specyficzną na każdy produkt: prawie 5 milionów wierszy. Lista kategorii ładowała się 9 sekund. Przebudowaliśmy integrację tak, żeby poziomy cen z ERP mapowały się na grupy, a ceny indywidualne powstawały tylko tam, gdzie klient ma odstępstwo od poziomu. Liczba reguł spadła do około 60 tysięcy, a po dodaniu indeksów i cache cen lista kategorii ładuje się poniżej sekundy. Ceny na fakturach zgadzają się co do grosza z ERP, bo logika mapowania jest ta sama w obie strony.
Każda cena specyficzna to zapytanie do bazy przy każdym wyświetleniu. Dobry cennik B2B w PrestaShop to taki, który wyraża strukturę rabatów jak najmniejszą liczbą reguł, a nie taki, który kopiuje każdy wiersz z ERP.
Lista kontrolna przed wgraniem cennika
- Każdy poziom cen z ERP ma swoją grupę klientów w sklepie.
- Wiadomo, czy grupa pokazuje netto czy brutto i czy rabat grupowy ma być liczony od cen specyficznych.
- Ceny indywidualne są tylko tam, gdzie klient ma odstępstwo od poziomu.
- Progi ilościowe mają minimalne ilości zgodne z jednostkami opakowań.
- Przeterminowane reguły są usuwane automatycznie.
- Dla pięciu klientów z różnych grup porównałeś ceny w sklepie z ERP na dziesięciu produktach, w tym z progami i promocją.
Pytania, które słyszymy najczęściej
Czy mogę pokazać klientowi B2B jego cenę przed zalogowaniem?
Nie, bo przed zalogowaniem system nie wie, do jakiej grupy należy. Standard to ukrycie cen dla gości i pokazanie po zalogowaniu albo pokazanie cen detalicznych z informacją, że po zalogowaniu będą ceny hurtowe.
Czy progi ilościowe mogą liczyć się od sumy wariantów?
Standardowo próg liczy się dla jednej kombinacji. Jeśli 10 koszul w różnych rozmiarach ma dać rabat jak za 10 sztuk, potrzebny jest moduł, który sumuje ilość na poziomie produktu.
Co się dzieje z ceną w koszyku, gdy cennik się zmieni?
Koszyk jest przeliczany przy każdym wyświetleniu, więc klient zobaczy nową cenę. Zamówienie już złożone zachowuje ceny z chwili złożenia.
Czy reguły koszyka można synchronizować z ERP?
Rzadko ma to sens. W ERP zwykle nie ma odpowiednika rabatu od koszyka. Rabaty z ERP mapuj na ceny specyficzne, a reguły koszyka zostaw do promocji prowadzonych tylko w sklepie.
Projektujemy mapowanie cenników z ERP na PrestaShop tak, żeby ceny zgadzały się z fakturą i sklep nie zwalniał. Zobacz, jak wdrażamy sklepy B2B.