Naar de inhoud
SyncMyShop

Kennisbank

Orderstatussen mappen tussen webshop, ERP en vervoerder

Webshop, ERP en vervoerder gebruiken elk een eigen set statussen, en die passen niet een op een. Shopify heeft 8 betaalstatussen en 11 verzendstatussen, WooCommerce één statusveld, Exact Online 4 orderstatussen; de koppeling legt per status vast wat er aan de andere kant gebeurt.

Bijgewerkt op

Drie sets statussen die niet op elkaar passen

Een order heeft in de webshop een status voor de klant, in het ERP een status voor de administratie en bij de vervoerder een status per pakket. De drie zijn door verschillende mensen ontworpen voor verschillende vragen, en daarom passen ze niet een op een. De webshop wil weten of er betaald is. Het ERP wil weten wat er geleverd en gefactureerd is. De vervoerder weet alleen waar het pakket is.

Zo ziet dat er per systeem uit, nagelezen in de documentatie van de leverancier op 3 oktober 2026:

Systeem Velden Waarden
Shopify displayFinancialStatus, displayFulfillmentStatus, closed, cancelledAt 8 betaalstatussen, 11 verzendstatussen
WooCommerce status pending, processing, on-hold, completed, cancelled, refunded, failed, trash, plus een concept uit de blok-checkout en eigen statussen uit plugins
Exact Online, verkooporder Status, DeliveryStatus, InvoiceStatus 12 Open, 20 Partial, 21 Complete, 45 Cancelled
Exact Online, factuur Status 10 concept, 20 open, 50 verwerkt
Business Central status, fullyShipped Draft, In Review, Open; ja of nee
Shopify, zending FulfillmentEvent.status 11 waarden, van LABEL_PRINTED tot DELIVERED

Het grootste verschil zit tussen Shopify en WooCommerce. Shopify houdt betaling en levering in twee aparte velden bij: een order kan PAID en PARTIALLY_FULFILLED tegelijk zijn. WooCommerce heeft één veld voor alles. processing betekent volgens de documentatie van WooCommerce dat er betaald is, de voorraad is afgeboekt en de order klaarstaat om te verzenden. on-hold betekent dat de voorraad is afgeboekt maar de betaling nog bevestigd moet worden, bijvoorbeeld bij een bankoverschrijving of SEPA-incasso.

Wat de koppeling met elke status doet

Voor elke status in de bron legt de koppeling één van drie acties vast: een order aanmaken in het ERP, een bestaande order bijwerken, of niets doen. Voor WooCommerce naar Exact Online ziet een gangbare indeling er zo uit:

WooCommerce-statussen naar Exact Online Zes WooCommerce-statussen en wat de koppeling ermee doet in Exact Online. Pending en on-hold worden nog geen order. Processing wordt een verkooporder met status 12. Een eigen status uit een plugin wordt alleen opgehaald als hij in de lijst staat. Cancelled wordt status 45 en refunded een creditnota van type 8021. WooCommerce, status Exact Online pending wacht op betaling on-hold bankoverschrijving, nog niet binnen processing betaald, voorraad afgeboekt backorder eigen status uit een plugin cancelled geannuleerd refunded volledig terugbetaald geen order nog niets boeken Status 12 Open verkooporder Status 45 Cancelled Type 8021 creditnota wachten alleen als in de lijst als niets geleverd na factuur Wie alleen orders met status processing ophaalt, mist elke order die een medewerker naar backorder zet voordat de volgende ronde draait.
Elke status krijgt een vaste regel, ook de statussen die een plugin toevoegt.
WooCommerce Actie Exact Online Toelichting
pending niets geen order de klant heeft nog niet betaald
on-hold niets, of aanmaken bij B2B op rekening geen order of status 12 per webshop een keuze
processing aanmaken verkooporder, status 12 de gewone route
completed bijwerken in de webshop status 21 meestal zet het ERP of magazijn de order op completed, niet andersom
cancelled bijwerken status 45 alleen als er nog niets geleverd is
refunded creditnota factuur type 8021 alleen als er al gefactureerd is
failed niets geen order betaling mislukt

De tabel moet volledig zijn. Een status die er niet in staat, wordt niet geraden: de order gaat naar de controlelijst. Zo valt het op wanneer iemand een plugin installeert die een nieuwe status toevoegt.

De andere richting heeft dezelfde vraag. Exact Online kent status 20, gedeeltelijk geleverd. WooCommerce heeft standaard geen status voor een deellevering, Shopify wel: PARTIALLY_FULFILLED. Hoe een order met twee zendingen en twee trackingcodes terug naar de webshop gaat, staat in deelleveringen en track-and-trace.

Welke orders de koppeling ophaalt

Een koppeling die orders ophaalt in rondes, vraagt de webshop om orders met een bepaalde status. De voor de hand liggende vraag is "geef alle orders met status processing". In de REST API van WooCommerce ziet dat er zo uit:

GET /wp-json/wc/v3/orders?status=processing&per_page=100

Dat werkt tot een medewerker of een plugin de status verandert voordat de ronde langskomt. Een rekenvoorbeeld met een ronde elke 15 minuten:

  • 09:02 order 10517 wordt betaald, status processing.
  • 09:09 een medewerker zet hem op backorder, een eigen status uit een plugin, omdat één artikel ontbreekt.
  • 09:15 de ronde vraagt om processing. Order 10517 staat er niet bij, en bij geen enkele latere ronde meer.

Het ERP heeft de order nooit gezien, terwijl hij betaald is. Gebeurt dit drie keer per werkdag, dan zijn dat over 22 werkdagen 66 orders die alleen in de webshop staan. Niemand merkt het tot de klant belt of de maandafsluiting niet klopt.

De robuuste vraag is anders: geef alle orders die sinds de vorige ronde zijn gewijzigd, ongeacht de status (modified_after), en beslis daarna per order wat ermee moet. Een order die al in het ERP staat wordt bijgewerkt, een nieuwe wordt aangemaakt als zijn status dat toelaat, en een onbekende status gaat naar de controlelijst. Bij webhooks geldt hetzelfde: luister naar order.updated, niet alleen naar order.created. Waarom een webhook alleen niet genoeg is, staat in wat is een webhook.

Een order die verandert nadat hij geboekt is

Een klant belt om 10 stuks terug te brengen naar 8. In Shopify past een medewerker de order aan; Shopify zet edited op waar en verstuurt de webhook orders/edited. Wat de koppeling daarna doet, hangt af van hoe ver de order in het ERP is.

Stand in Exact Online Wat vaststaat Wat de koppeling doet
Verkooporder status 12, niets geleverd niets aantal op de orderregel bijwerken
Verkooporder status 20, gedeeltelijk geleverd de geleverde aantallen alleen het openstaande aantal bijwerken
Factuur status 20, open niets, een open factuur is te wijzigen factuurregel bijwerken
Factuur status 50, verwerkt alles: niet te wijzigen, niet te heropenen creditnota (type 8021) voor het verschil

De laatste regel komt uit de veldbeschrijving van SalesInvoices van Exact Online: een verwerkte factuur kan niet meer worden gewijzigd en niet worden heropend. In getallen: de order was 10 maal € 17,08 is € 170,80 exclusief btw. Na de wijziging is hij 8 maal € 17,08 is € 136,64. De koppeling maakt een creditnota van 2 maal € 17,08 is € 34,16, en de klant ziet in de administratie twee documenten die samen kloppen.

Ook bij een open order is niet alles te wijzigen. Exact Online vermeldt bij OrderedBy en InvoiceTo op de verkooporder dat die voor een bestaande order niet kunnen worden aangepast. Een klant die achteraf op een ander bedrijf besteld wil hebben, krijgt een geannuleerde order en een nieuwe. Waar dubbele klanten vandaan komen, staat in dubbele klanten en debiteuren.

Terug naar de klant: zendingen en de vervoerder

De derde set statussen komt van de vervoerder. Shopify kent per zending 11 statussen, waaronder LABEL_PRINTED, IN_TRANSIT, OUT_FOR_DELIVERY, ATTEMPTED_DELIVERY, DELIVERED en FAILURE. Vervoerders en verzendplatformen hebben elk hun eigen lijst. De koppeling vertaalt die naar de paar statussen die de klant te zien krijgt, en zet bij een mislukte bezorging een melding klaar in plaats van stil te wachten.

Twee regels voorkomen de meeste klachten. De order gaat pas naar completed of FULFILLED als de laatste zending weg is, niet bij de eerste. En een geannuleerde order in het ERP wordt pas in de webshop geannuleerd als vaststaat dat er niets is verstuurd; anders krijgt de klant een annuleringsmail voor een pakket dat al onderweg is.

Wat betekent dit voor je koppeling?

We leggen per status in elk systeem vast wat de koppeling doet: aanmaken, bijwerken of niets, en de lijst is volledig. Orders worden opgehaald op wijzigingsdatum, zodat een statuswissel tussen twee rondes geen order kost. Een order die na het boeken verandert, wordt bijgewerkt zolang dat mag en anders gecorrigeerd met een creditnota. Een onbekende status gaat naar de controlelijst. In de dry run zie je voor de orders van de afgelopen weken welke actie elke order zou krijgen.

Statussen zijn een van de velden in de orderstroom, naast debiteuren, adressen, bedragen en datums. Het overzicht staat op orders, klanten en verzending; retouren en creditnota's staan uitgewerkt op retouren en creditnota's. Stuur de lijst met statussen uit je webshop mee, dan zie je per status wat de koppeling ermee doet.

Veelgestelde vragen

Moet elke status in de webshop een status in het ERP krijgen?

Nee. Veel statussen zijn alleen voor de webshop: wachten op betaling, een mislukte betaling, een concept uit de checkout. De koppeling legt per status vast of hij een order aanmaakt, een bestaande order bijwerkt of niets doet. Die lijst is volledig, zodat een nieuwe status niet stil wordt overgeslagen.

Waarom komen sommige orders niet in mijn ERP aan?

Meestal omdat de koppeling alleen orders ophaalt met een bepaalde status, bijvoorbeeld processing. Een order die een medewerker of een plugin naar een andere status zet voordat de volgende ronde draait, valt buiten dat filter. De oplossing is ophalen op wijzigingsdatum en per status beslissen wat er gebeurt.

Wat gebeurt er als een klant zijn order aanpast na het factureren?

In Exact Online is een verwerkte factuur (status 50) niet meer te wijzigen en niet te heropenen. De koppeling maakt daarom een creditnota voor het verschil en, als er iets bijkomt, een nieuwe factuur. Een order die nog open staat (status 12) kan wel worden bijgewerkt.

Hoe krijgt de klant de track-and-trace te zien?

De koppeling zet bij elke zending de trackingcode en de vervoerder in de webshop. In Shopify is dat een fulfillment per zending; daarna kan de status van de zending meelopen, van LABEL_PRINTED tot DELIVERED. WooCommerce heeft standaard geen veld voor een trackingcode; die komt in een ordernotitie of in een veld van een verzendplugin.

Kan ik eigen statussen in WooCommerce blijven gebruiken?

Ja. Een eigen status zoals backorder of wacht op levering krijgt in de koppeling een eigen regel: wordt de order aangemaakt, bijgewerkt of overgeslagen. Wat niet mag, is een status die de koppeling niet kent. Die gaat naar de controlelijst.

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