Naar de inhoud
SyncMyShop

Koppelingen

Prijzen en klantafspraken: elke klant ziet in je webshop wat jullie hebben afgesproken

De basisprijs overzetten kan elke koppeling. Wij bouwen de koppeling die ook de prijslijst, de staffel en de afspraak per klant uit je ERP haalt, zodat de prijs in de webshop dezelfde is als op de factuur. Daarna draaien en bewaken we hem.

Algemene prijzen zijn het makkelijke deel

Een basisprijs is één veld per artikel. 6.000 artikelen zijn 6.000 waarden, en die zet elke koppeling over. B2B begint bij wat daarna komt: een prijslijst per klantgroep, staffels, een nettoprijs die je met één klant hebt afgesproken en een assortiment dat per klant verschilt.

De omvang bepaalt de aanpak. 800 debiteuren maal 6.000 artikelen zijn 4.800.000 mogelijke combinaties van klant en artikel. Geen ERP slaat die op. Het ERP bewaart regels: in het voorbeeld op deze pagina 14 prijslijsten, staffels en 1.150 losse klantafspraken. De koppeling zet die regels over, of rekent ze per klant uit als het webshopplatform de regel zelf niet kan bewaren.

Per gegeven is één systeem leidend:

Gegeven Leidend Richting
Basisprijs, prijslijst, staffel, klantafspraak ERP naar de webshop
Welk webshopaccount bij welke debiteur hoort ERP, via een vertaaltabel beide kanten
Tijdelijke actieprijs webshop, via de uitsluitingslijst blijft in de webshop
De prijs op een geplaatste order de orderregel naar het ERP

Eén voorwaarde geldt voor alles op deze pagina: de afspraak staat in een veld. Een korting die de binnendienst uit het hoofd toepast voor drie grote klanten, staat nergens en gaat dus met geen enkele koppeling mee. Die afspraak wordt eerst een regel in het ERP.

De vier prijslagen, in volgorde

Een B2B-prijs komt uit vier lagen, van algemeen naar specifiek. Hier met de plek waar Exact Online ze bewaart:

Laag Artikel 10482 In Exact Online
1. Basisprijs € 12,50 per stuk SalesItemPrices zonder Account
2. Prijslijst per klantgroep Installateurs: 15% korting SalesPriceLists, klanten via SalesPriceListLinkedAccounts
3. Staffel vanaf 100 stuks 5% extra SalesPriceListVolumeDiscounts met Quantity
4. Klantafspraak debiteur 10432: € 9,60 netto SalesItemPrices met Account, StartDate en EndDate
De vier prijslagen voor artikel 10482 Vier lagen van algemeen naar specifiek. Basisprijs 12,50 euro. Prijslijst Installateurs met 15% korting: 10,625. Staffel vanaf 100 stuks met 5% extra: 10,09. Klantafspraak voor debiteur 10432: een vaste nettoprijs van 9,60 euro, die de lagen erboven vervangt. specifiekste regel wint € 12,50 Basisprijs Verkoopprijs van artikel 10482 12,50 x 0,85 = 10,625 Prijslijst Installateurs: 15% korting 10,625 x 0,95 = 10,09 Staffel Vanaf 100 stuks: 5% extra € 9,60 Klantafspraak Debiteur 10432: vaste nettoprijs
Vier lagen voor één artikel. De klantafspraak van € 9,60 vervangt de drie lagen erboven.

De som. Een installateur zonder eigen afspraak bestelt 100 stuks: 12,50 maal 0,85 is 10,625, maal 0,95 is 10,09375. Hij betaalt € 10,09 per stuk. Bakker Installatie B.V., debiteur 10432, heeft een vaste nettoprijs van € 9,60. Die vervangt de lagen erboven, en de staffel gaat er niet nog eens overheen.

Twee dingen staan per ERP vast voordat de webshop dezelfde prijs kan uitrekenen.

In welke vorm de korting staat. Een percentage, een bedrag of een vervangende nettoprijs. Exact Online legt per staffelregel vast welke van de twee leidend is: EntryMethod 1 is de korting, 2 is de nieuwe prijs. Zodra lagen stapelen zijn de vormen niet uitwisselbaar. 5% over de prijslijstprijs van 10,625 geeft € 10,09. 5% over de basisprijs van 12,50 is 0,625 en geeft € 10,00. Exact Online rekent elke staffelregel vanaf de basisprijs (korting maal BasePriceAmount) en slaat de korting op als fractie, dus treden stapelen daar niet. Wie in Exact 15% plus 5% extra wil, legt in de staffelregel 0,1925 vast: 1 min 0,85 maal 0,95.

Welke regel wint. In het ERP wint de specifiekste regel: de klantafspraak gaat boven de prijslijst. Niet elk platform rekent zo. Shopify toont de laagste prijs als een product in meerdere catalogi van dezelfde klant staat. Heeft een klant voor een artikel € 10,80 afgesproken, inclusief levering op de bouwplaats, terwijl zijn prijslijst € 10,63 geeft, dan factureert het ERP € 10,80 en toont de webshop € 10,63. De koppeling schrijft daarom per klant één uitgerekende prijs per artikel weg, en geen twee catalogi naast elkaar.

Wat er precies over de lijn gaat

Geen zwarte doos. Dit gaat er in deze stroom naar de webshop:

Gegeven Voorbeeld Waar het op vastloopt
Basisprijs € 12,50 excl. btw exclusief in het ERP, inclusief in een webshop voor consumenten
Prijslijst en klantgroep Installateurs, 212 klanten in Exact Online hangt een klant aan één prijslijst tegelijk
Staffel vanaf 1, 25 en 100 stuks per artikel of over de hele order
Klantafspraak debiteur 10432, € 9,60, tot 31-12-2026 de einddatum gaat mee, anders blijft de prijs staan
Eenheid en verpakking doos van 12, minimaal 1 doos prijs per doos of per stuk
Adviesprijs € 15,90 als doorgestreepte prijs of als bovengrens
Assortiment per klant 1.400 van de 6.000 artikelen zichtbaarheid is een eigen regel naast de prijs

Een prijsafspraak zoals Exact Online hem teruggeeft, ingekort tot de velden die het werk bepalen:

{
  "ItemCode": "10482",
  "AccountName": "Bakker Installatie B.V.",
  "Price": 115.2,
  "Currency": "EUR",
  "Quantity": 1,
  "Unit": "doos",
  "NumberOfItemsPerUnit": 12
}

Price is een kommagetal zonder vaste decimalen: 115.2, geen 115,20. De prijs geldt per doos van 12. De webshop verkoopt per stuk, dus de koppeling rekent 115,20 gedeeld door 12 is 9,60 en schrijft 9.60 met de valuta erbij. Wie NumberOfItemsPerUnit overslaat, zet € 115,20 per stuk in de webshop. Shopify wil een bedrag met valutacode, WooCommerce bewaart regular_price als tekst.

Een prijsafspraak uit Exact Online naar een prijslijst in Shopify Zes velden van een prijsafspraak in Exact Online en vier velden van een vaste prijs in een Shopify-prijslijst. ItemCode wordt via de SKU een variantId. Account wordt via een vertaaltabel een priceListId. Price 115,2 per doos gedeeld door NumberOfItemsPerUnit 12 wordt price.amount 9.60 per stuk. EndDate heeft geen veld aan de kant van Shopify. Exact Online, SalesItemPrices Shopify, vaste prijs in prijslijst ItemCode 10482 Account Bakker Installatie B.V. debiteur 10432 Price 115.2 per doos, als kommagetal NumberOfItemsPerUnit 12 Currency EUR EndDate 31-12-2026 geen veld in de prijslijst variantId variant met SKU 10482 priceListId prijslijst van dit bedrijf price.amount 9.60 per stuk, twee decimalen price.currencyCode EUR match op SKU vertaaltabel 115,20 : 12 De einddatum komt niet mee als veld. De koppeling haalt de vaste prijs op 1 januari 2027 zelf uit de prijslijst.
Eén prijsafspraak, zes velden. De prijs per doos wordt een prijs per stuk, en de einddatum heeft aan de kant van de webshop geen veld.

De klant moet eerst herkend worden. De webshop kent een klant op zijn e-mailadres, het ERP op zijn debiteurnummer. Daartussen staat een vertaaltabel, en een debiteur die twee keer bestaat krijgt twee prijzen. Hoe dat wordt voorkomen staat in dubbele klanten en debiteuren. De eenheden zijn uitgewerkt in eenheden en verpakkingen.

Waar standaardkoppelingen ophouden

Standaardkoppelingen en koppelplatformen zetten prijzen over op het niveau van de klantgroep. Een prijslijst in het ERP wordt een klantgroep in de webshop en de klant komt in die groep. Voor de 14 prijslijsten uit het voorbeeld werkt dat. Voor de 1.150 klantafspraken werkt het niet: elke afspraak hoort bij één debiteur, en een klantgroep per klant is geen groep meer.

Wat het platform zelf kan bewaren bepaalt de rest:

Systeem Wat het bewaart Grens
Shopify catalogi met prijslijsten, staffels en bestelregels, op elk abonnement 3 actieve catalogi op Basic, Grow en Advanced; een catalogus direct aan één bedrijf hangen kan alleen op Plus
Magento staffelprijzen via /V1/products/tier-prices met customer_group, quantity en price_type (fixed of discount) de klantgroep is het laagste niveau in dat model
WooCommerce regular_price, sale_price en een actieperiode per product geen prijs per klant of per aantal in de kern; een uitbreiding bewaart die, en de koppeling schrijft naar de velden daarvan
Exact Online prijslijsten, staffels en prijsafspraken per klant de endpoints voor prijslijsten zitten in de pakketten voor handel en productie

Op een Shopify-abonnement onder Plus passen 14 prijslijsten dus niet in 3 catalogi, en een eigen catalogus voor debiteur 10432 vraagt Plus. De grenzen staan in de documentatie van Shopify en Adobe Commerce, nagelezen op 3 oktober 2026.

De tweede grens is het veld dat de API niet vrijgeeft. AFAS geeft gegevens vrij via GetConnectoren die de beheerder zelf samenstelt: staat het kortingspercentage niet in de GetConnector, dan bestaat het voor de koppeling niet. De oplossing is een export die het ERP wel kan maken, per nacht:

debiteur;artikelgroep;korting_pct;geldig_tot
10432;Fittingen;2,5;31-12-2026
10518;Fittingen;4;
10518;Pompen;1,5;30-06-2027

De koppeling voegt die regels samen met de prijzen uit de API. De lege einddatum op regel 2 betekent "tot wederopzegging", en dat ligt vast als regel en wordt niet geraden. De uitwerking per klant staat bij klantspecifieke prijzen; het verschil in aanpak in koppeling of koppelplatform.

Wat er stil misgaat

Een verkeerde prijs geeft geen foutmelding. De run slaagt, en de fout komt boven water op een factuur.

Wat er gebeurt Voorbeeld Gevolg
Komma tegenover centen 12,50 komt aan als 1250 factor 100 op de orderregel
Btw in of uit € 12,50 exclusief is € 15,13 inclusief bij 21% de klant ziet een prijs die 21% afwijkt
Eenheid € 115,20 per doos van 12 als prijs per stuk factor 12
Afronden tussen de lagen 10,63 maal 0,95 is 10,10; 10,625 maal 0,95 is 10,09 € 1,00 verschil op 100 stuks
Verlopen afspraak EndDate 31-12-2026 gaat niet mee de klant bestelt in januari tegen de oude prijs
Handmatige actieprijs € 7,95 in de webshop gezet de nachtelijke ronde zet de lijstprijs terug

Afronden per regel of per order

Een order heeft drie regels van elk 3 stuks à € 4,13: drie keer € 12,39, samen € 37,17 exclusief btw. De webshop rekent de btw per regel: 12,39 maal 0,21 is 2,6019, afgerond € 2,60, drie keer is € 7,80. Totaal € 44,97. Het ERP rekent de btw over het ordertotaal: 37,17 maal 0,21 is 7,8057, afgerond € 7,81. Totaal € 44,98.

De klant betaalt € 44,97 en de factuur staat op € 44,98. Die ene cent is genoeg: de betaling wordt niet automatisch afgeletterd. De koppeling neemt daarom de afrondregel van het ERP over, of stuurt de bedragen per regel mee zodat het ERP niet opnieuw rekent. Meer hierover in bedragen en btw mappen.

Een prijswijziging tijdens het bestellen

Om 10:02 legt een klant 100 stuks in zijn winkelmand tegen € 10,63. Om 10:05 gaat de nieuwe prijslijst in: € 10,90. Om 10:07 plaatst hij de order. De webshop zegt € 1.063,00, het ERP rekent € 1.090,00 uit. Vooraf ligt vast welke geldt. De orderregel draagt de stuksprijs die de klant zag, met het tijdstip. Het ERP neemt die prijs over, of de order blijft staan tot iemand het verschil van € 27,00 heeft beoordeeld. Stil herrekenen gebeurt niet.

Doorvoer en limieten

Prijzen zijn de grootste stroom in aantallen regels. 14 prijslijsten maal 6.000 artikelen zijn 84.000 prijsregels, naast 1.150 klantafspraken. Een rekenvoorbeeld met Exact Online als bron en Shopify als webshop:

Aanpak Verzoeken Wat het kost
Lezen per pagina van 60 regels 84.000 gedeeld door 60 is 1.400 23 minuten en 20 seconden bij 60 per minuut, en 28% van het dagbudget van 5.000
Lezen via bulk of sync, 1.000 regels per verzoek 84 1 minuut en 24 seconden
Alleen wijzigingen sinds de vorige Timestamp 1 voor 400 gewijzigde prijzen past in elke ronde
Schrijven naar Shopify, 250 prijzen per aanroep 84.000 gedeeld door 250 is 336 alleen bij de eerste vulling en bij een nieuwe prijslijst

De prijs live bij het ERP opvragen op het moment dat de klant kijkt, loopt direct tegen dezelfde limiet. 40 ingelogde klanten die elk een categoriepagina met 24 artikelen openen, vragen 960 prijzen op. Met één verzoek per prijs is dat 16 minuten bij 60 verzoeken per minuut. De koppeling rekent de prijzen daarom vooraf uit en zet ze in de webshop.

De frequentie verschilt per laag. Prijslijsten gaan in een nachtelijke ronde. Klantafspraken gaan mee in een ronde die alleen wijzigingen ophaalt: elk kwartier is 96 verzoeken per dag. De limieten van Exact Online en de grens van 250 regels per aanroep bij Shopify zijn op 3 oktober 2026 nagelezen. De som voor je eigen aantallen maak je met doorvoer berekenen.

Jij houdt de controle

Een prijsfout kost direct geld. De eerste run is daarom een dry run: hij rekent alles uit en schrijft niets. Daarna stel je een drempel in waarboven een wijziging op goedkeuring wacht, bijvoorbeeld een daling van meer dan 30%. Artikelen met een actieprijs staan tot de einddatum van de actie op de uitsluitingslijst. Na elke run staat er per prijs wat er is gewijzigd en uit welke laag de nieuwe prijs komt:

run 03-10-2026 02:00   bron: exact online   2.310 wijzigingen
10482   prijslijst Installateurs   10,63 -> 10,90   prijslijst per 01-10
10482   debiteur 10432             9,60 blijft      klantafspraak tot 31-12-2026
10517   basisprijs                 12,50 -> 0,13    wacht op goedkeuring, daling 99%
10510   basisprijs                 overgeslagen     actieprijs tot 31-10

De derde regel is de komma-fout uit de tabel hierboven, tegengehouden voordat hij in de webshop stond. Belt een klant over een prijs, dan zie je terug uit welke laag die prijs kwam en sinds wanneer. De onderdelen staan bij dry run en goedkeuring en audit trail.

Verdieping per onderwerp

Onderwerp Wat het regelt
Klantspecifieke prijzen de afspraak per debiteur, zichtbaar na het inloggen
Staffelprijzen de korting die meerekent als het aantal in de winkelmand verandert
Assortiment per klant welke artikelen een klant ziet en mag bestellen
Inkoopprijzen de inkoopprijs van je leverancier in ERP en margeregels

De prijsstroom raakt drie andere stromen. Een klant die op rekening bestelt, heeft naast een prijs een betaalconditie en een kredietlimiet: zie bestellen op rekening onder orders, klanten en verzending. Een inkoper die via zijn inkoopsysteem binnenkomt, ziet dezelfde klantprijzen binnen de sessie: zie OCI en PunchOut. En een prijs voor een artikel dat niet leverbaar is, levert geen order op: zie voorraad en beschikbaarheid. Voor de groothandel staan de drie bij elkaar op groothandel en distributie.

Systemen en platformen

De prijs komt uit het ERP en gaat naar het platform waarop de klant inlogt.

Drie verschillen die de opzet bepalen. Exact Online bewaart de klantafspraak als prijs met een Account, een begin- en een einddatum, en geeft Price als kommagetal. AFAS geeft alleen vrij wat in een GetConnector staat, en zonder take komen de eerste 100 regels terug: een prijslijst van 6.000 regels wordt in pagina's gelezen. Shopify bewaart een vaste prijs per variant in een prijslijst, en die prijs heeft geen veld voor een einddatum.

Het overzicht van alle vijf de stromen staat op koppelingen. Vertel in welk systeem je prijsafspraken staan, dan hoor je welke lagen de API vrijgeeft en welke uit een export komen.

Veelgestelde vragen

Zien klanten de standaardprijs naast hun eigen prijs?

Dat stel je in. De webshop toont alleen de klantprijs, of de klantprijs met de standaardprijs doorgestreept ernaast, zodat de waarde van de afspraak zichtbaar is. De koppeling levert in het tweede geval beide prijzen aan: € 9,60 als prijs en € 12,50 als vergelijkingsprijs.

Wat als een klant voor sommige producten een contractprijs heeft en voor andere niet?

De prijs wordt per artikel bepaald. Is er voor dat artikel een klantafspraak, dan geldt die. Is die er niet, dan geldt de prijslijst van de klantgroep met de staffel, en zonder prijslijst de basisprijs. Een klant met 40 contractprijzen ziet dus voor de overige 5.960 artikelen de prijs van zijn groep.

Kunnen tijdelijke actieprijzen bovenop staffels?

Ja. Een actie is een regel met een begindatum en een einddatum. Vooraf ligt vast of hij bovenop de staffel komt of de staffel vervangt, want 10% actiekorting over een staffelprijs van € 10,09 geeft € 9,08 en over de basisprijs van € 12,50 geeft € 11,25. Na de einddatum zet de koppeling de gewone prijs terug.

Hoe snel staat een nieuwe prijsafspraak in de webshop?

Dat bepaal je per laag. Prijslijsten wijzigen een paar keer per jaar en gaan in een nachtelijke ronde. Een afspraak die een verkoper vandaag met een klant maakt, gaat mee in een ronde die alleen de wijzigingen ophaalt, bijvoorbeeld elk kwartier. De grens is de limiet van het ERP: bij Exact Online 60 verzoeken per minuut en 5.000 per dag.

Wat ziet een klant die niet is ingelogd?

De basisprijs, of geen prijs met een verwijzing naar het inloggen. Klantprijzen en het assortiment per klant horen bij een debiteur, en de webshop weet pas na het inloggen welke debiteur dat is. Daarom gaat de koppeling van debiteuren naar webshopaccounts aan de prijzen vooraf.

Hoe komen orders met staffel- en actieprijzen in de boekhouding?

De orderregel draagt de stuksprijs en de korting zoals de klant ze zag, en het ERP boekt die regel. Daarvoor ronden beide systemen op dezelfde manier af, per regel of per order. Doen ze dat niet, dan wijkt de factuur een cent af van de betaling en wordt hij niet automatisch afgeletterd. De orderkant staat bij orders, klanten en verzending.

Mijn ERP geeft de klantkorting niet vrij via de API. Kan het dan toch?

Ja. Een korting die niet in de API zit, komt uit een export die het ERP wel kan maken: een CSV-bestand per nacht met debiteur, artikelgroep, percentage en einddatum. De koppeling voegt die regels samen met de prijzen uit de API voordat er iets naar de webshop gaat.

Gelden klantprijzen ook binnen een OCI-sessie?

Ja. De inkoper komt vanuit zijn inkoopsysteem binnen op het account van zijn bedrijf en ziet de prijzen en het assortiment van die debiteur. De winkelmand gaat met die prijzen terug naar het inkoopsysteem. Hoe de sessie verloopt staat bij OCI en PunchOut.

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

Leveranciers, producten, orders per dag, een ruwe schatting is prima.

Of mail direct: carsten@syncmyshop.com