Prijzen en klantafspraken
Staffelprijzen uit je ERP in je webshop: de korting rekent mee terwijl de klant bestelt
De staffels staan in je ERP, per prijslijst en per aantal. Wij bouwen de koppeling die ze als prijstreden in je webshop zet, zodat de klant bij 25 of 100 stuks direct de lagere prijs ziet en de factuur dezelfde stuksprijs draagt.
Een staffel is een rekenregel, geen prijs
Een basisprijs is één getal per artikel. Een staffel is een regel: vanaf zoveel stuks deze korting, op deze prijs. In het voorbeeld van prijzen en klantafspraken heeft prijslijst Installateurs voor artikel 10482 drie treden. 14 prijslijsten met staffels op 1.800 artikelen, drie treden elk, zijn 75.600 staffelregels.
Met tien klanten die per telefoon bestellen rekent de binnendienst de staffel uit. In een webshop moet de prijs veranderen op het moment dat de klant het aantal in zijn winkelmand aanpast. Een klant met 90 stuks à € 10,63 betaalt € 956,70. Zet hij er 10 bij, dan wordt het 100 maal € 10,09 is € 1.009,00, en die prijs moet hij zien voordat hij afrekent. Staat de staffel niet in de webshop, dan ziet hij € 1.063,00 en belt hij de binnendienst.
Hoe werkt het?
Waar de staffel in het ERP staat
Exact Online bewaart staffels in SalesPriceListVolumeDiscounts. Elke regel heeft een Quantity, een Discount of een NewPrice, en een EntryMethod: 1 is de korting, 2 is de nieuwe prijs. Een prijslijst geldt per artikel of per artikelgroep: Entity 1 of 2 in SalesPriceLists.
De documentatie geeft de formule: de prijs is (1 min Discount) maal BasePriceAmount. Elke trede rekent dus vanaf dezelfde basisprijs. Treden stapelen niet.
| Trede | Quantity |
Discount |
Som | Stuksprijs |
|---|---|---|---|---|
| Prijslijst | 1 | 0.15 | 12,50 maal 0,85 is 10,625 | € 10,63 |
| Middel | 25 | 0.17 | 12,50 maal 0,83 is 10,375 | € 10,38 |
| Groot | 100 | 0.1925 | 12,50 maal 0,8075 is 10,09375 | € 10,09 |
De trede op 1 stuk draagt de korting van de prijslijst zelf. De trede op 100 is de "5% extra" van de hub: 0,85 maal 0,95 is 0,8075, dus een korting van 19,25% op de basisprijs.
Van ERP-regel naar prijstrede
Shopify bewaart een staffel als quantityPriceBreaks in een prijslijst: per variant een minimumQuantity en een price. De mutatie quantityPricingByVariantUpdate zet vaste prijzen, bestelregels en treden in één keer. Gaat één wijziging in de aanroep mis, dan wordt geen enkele wijziging toegepast.
{
"priceListId": "gid://shopify/PriceList/1432",
"input": {
"pricesToAdd": [
{ "variantId": "gid://shopify/ProductVariant/4410482",
"price": { "amount": "10.63", "currencyCode": "EUR" } }
],
"quantityPriceBreaksToAdd": [
{ "variantId": "gid://shopify/ProductVariant/4410482",
"minimumQuantity": 25, "price": { "amount": "10.38", "currencyCode": "EUR" } },
{ "variantId": "gid://shopify/ProductVariant/4410482",
"minimumQuantity": 100, "price": { "amount": "10.09", "currencyCode": "EUR" } }
]
}
}
De koppeling rekent elke trede uit, rondt af op centen en schrijft een vaste prijs per trede. De webshop rekent dan niets meer zelf uit, en de stuksprijs op het scherm is de stuksprijs op de orderregel.
De order gaat terug met de prijs die de klant zag
De orderregel in Exact Online heeft een UnitPrice en een Discount, die Exact berekent als (standaardprijs min regelprijs) gedeeld door de standaardprijs. De koppeling stuurt de stuksprijs uit de webshop mee. Rekent het ERP zelf de staffel opnieuw uit met de onafgeronde 10,375, dan zijn 40 stuks € 415,00 in het ERP en 40 maal € 10,38 is € 415,20 in de webshop. Die 20 cent blokkeert het automatisch afletteren van de betaling. Hoe dat werkt staat in bedragen en btw mappen.
Doorvoer
De eerste vulling leest 75.600 staffelregels. Via sync/Sales/SalesPriceListVolumeDiscounts, 1.000 regels per verzoek, zijn dat 76 verzoeken. Via het gewone endpoint met pagina's van 60 zijn het er 1.260: 21 minuten bij 60 verzoeken per minuut en een kwart van het dagbudget van 5.000. Daarna haalt de koppeling alleen regels op met een hogere Timestamp. Aan de Shopify-kant zijn 75.600 treden bij 250 per aanroep 303 aanroepen. De rekenwijze staat in doorvoer berekenen.
Wat er stil misgaat
| Wat er gebeurt | Voorbeeld | Gevolg |
|---|---|---|
| Treden gestapeld ingevoerd | 5% op de trede van 100 bedoeld als "extra" | 12,50 maal 0,95 is € 11,88: 100 stuks duurder dan 1 stuk |
| Korting als percentage gelezen | Discount 0.15 gelezen als 15 |
(1 min 15) maal 12,50: een negatieve prijs |
| Trede past niet op de verpakking | trede van 25 bij een bestelregel per 12 | Shopify weigert de hele aanroep met 250 prijzen |
| Treden per variant | 60 in maat 48 en 40 in maat 50 | de klant haalt 100 niet, het ERP telt de groep wel |
| Afronding per trede | 10,375 tegenover 10,38 | 20 cent verschil op 40 stuks |
| Te veel treden | 12 treden in het ERP | Shopify neemt er 10 per product |
De eerste rij ontstaat bij het overzetten van een oude prijslijst waarin treden op elkaar stapelden. De koppeling controleert per artikel dat elke hogere trede een lagere stuksprijs geeft. Een trede die dat niet doet, gaat niet naar de webshop en komt op de controlelijst.
Wat je ermee regelt
- Treden per prijslijst. Elke staffel uit het ERP als vaste prijs per aantal, per klantgroep.
- Dezelfde afronding. Eén stuksprijs per trede, in de webshop en op de orderregel.
- Verpakking en bestelregel. Treden die passen op de doos en de minimale afname.
- Acties naast staffels. Een actieperiode met begin- en einddatum, bovenop of in plaats van de staffel.
- Controle vooraf. Een trede die duurder is dan de trede eronder, wordt tegengehouden: zie dry run en goedkeuring.
Een vaste prijs voor één debiteur gaat boven de staffel: zie klantspecifieke prijzen. Welke artikelen een klant überhaupt ziet staat bij assortiment per klant.
Met welke systemen
| Systeem | Waar de staffel staat | Bijzonderheid |
|---|---|---|
| Exact Online | SalesPriceListVolumeDiscounts: Quantity, Discount of NewPrice |
elke trede rekent vanaf de basisprijs; endpoints in de pakketten voor handel en productie |
| Business Central | prijslijstregels met een minimumaantal, eenheid en datums | de beste prijs geldt: de laagste prijs met de hoogste regelkorting |
| SAP Business One | speciale prijzen per relatie, met een aantalschaal per periode | gaan boven alle andere prijzen |
| NetSuite | prijsniveaus per aantal in de prijzentabel van het artikel | vraagt de functies Multiple Prices en Quantity Pricing |
| Shopify | quantityPriceBreaks in een prijslijst |
10 treden per product, telt per variant |
| Magento | /V1/products/tier-prices met customer_group en quantity |
price_type is fixed of discount |
| Shopware | product_price met ruleId, quantityStart en quantityEnd |
de regel uit de Rule Builder bepaalt wie de prijs ziet |
| WooCommerce | geen staffel in de kern | een uitbreiding bewaart hem, de koppeling schrijft naar de velden daarvan |
AFAS geeft alleen vrij wat de beheerder in een GetConnector zet, en zonder take komen de eerste 100 regels terug: een staffeltabel van 75.600 regels wordt in pagina's gelezen. Bij NetSuite mist de REST-record van een voorraadartikel de velden quantitypricingdiscount en quantitypricinglevel. Die komen uit een SuiteQL-query of een RESTlet. De grenzen van Shopify staan in het helpcentrum over volumeprijzen, de formule van Exact Online in de API-documentatie. Beide zijn nagelezen op 3 oktober 2026. Per systeem: Exact Online, AFAS, Shopify.
Wat een standaardkoppeling hier niet doet
In de vaste veldenset van standaardkoppelingen en koppelplatformen staat meestal één verkoopprijs per artikel, soms met een prijs per klantgroep. Een staffel zit daar niet in. Waar een platform staffels wel overzet, is dat gedocumenteerd voor één webshopplatform, met de Quantity Pricing-functie als voorwaarde en zonder ondersteuning voor bundelartikelen.
De tweede grens is het ERP zelf. Geeft de API de staffelkorting niet vrij, dan komt die uit een export van de prijslijst die de koppeling per nacht samenvoegt met de prijzen uit de API:
prijslijst;artikel;vanaf;korting
INSTALLATEURS;10482;1;0,15
INSTALLATEURS;10482;25;0,17
INSTALLATEURS;10482;100;0,1925
De koppeling leest de komma als decimaalteken, controleert dat de korting per trede oploopt en rekent de stuksprijs uit voordat er iets naar de webshop gaat. Stuur één prijslijst met staffels mee, dan hoor je hoe de treden in jouw webshop terechtkomen.
Veelgestelde vragen
Kunnen actieprijzen tijdelijk bovenop de staffel?
Ja. Vooraf ligt vast of de actie bovenop de staffel komt of hem vervangt. 10% actiekorting over de trede van € 10,09 geeft € 9,08, over de basisprijs van € 12,50 geeft hij € 11,25. Exact Online bewaart een actie als periode van het type "Special offer" in de prijslijst, met begin- en einddatum. Na de einddatum zet de koppeling de treden terug.
Geldt de staffel per product of over de hele order?
Dat hangt van het platform af. Shopify telt per variant: 60 stuks in maat 48 en 40 stuks in maat 50 halen de trede van 100 niet. Telt je ERP over een artikelgroep, dan rekent de webshop strenger dan de factuur. Dat verschil komt vooraf op tafel en de orderregel draagt de prijs die de klant zag.
Wat als het artikel per doos van 12 wordt verkocht?
Dan moet elke trede een veelvoud van 12 zijn. Shopify weigert een trede van 25 stuks als de bestelregel per 12 oploopt. De koppeling legt de trede op het eerste veelvoud erboven, 36, zodat de webshop nooit een lagere prijs geeft dan het ERP factureert, en meldt de aanpassing in het overzicht van de run.
Hoeveel treden kan ik in de webshop kwijt?
In Shopify 10 prijstreden per product. Heeft een artikel in het ERP meer treden dan het platform aankan, dan schrijft de koppeling niets half weg: het artikel komt op de controlelijst.
Ziet een klant die niet is ingelogd ook de staffel?
Alleen de staffel van de algemene prijslijst. De staffels per klantgroep horen bij een debiteur, en de webshop weet pas na het inloggen welke debiteur dat is. Hoe het account aan de debiteur wordt gekoppeld staat bij klantspecifieke prijzen.
Vertel wat je nodig hebt
Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.
- Je weet de prijs en de doorlooptijd voordat je iets toezegt
- Wij zoeken uit welke koppeling het werk uit handen neemt
- Wij verzorgen de bouw, hosting, bewaking en het onderhoud
- Je team krijgt minder overtypwerk en minder uitzoekwerk