Logo
June 12, 2018
Door Erwin Otten

Handleiding Magento MSI Multi Source Inventory

De nieuwste versie van Magento (beschikbaar vanaf Q3 2018) bevat een zeer waardevolle uitbreiding: Magento MSI, oftewel multi source inventory.

Nu al te downloaden vanaf Github

Met Magento MSI is het mogelijk om meerdere voorraadbronnen aan een (één of meerdere) websites te koppelen. Het aantal waarin een product beschikbaar is, wordt berekend op basis van de bronnen die voor een website beschikbaar zijn gesteld. Het groeperen van bronnen én bepalen welke groep van bronnen per webshop beschikbaar is gebeurt met een nieuwe concept: 'stocks'.

Verkoopbaar aantal - een totaalsom van de gekoppelde stocks - muteert direct bij verkoop. Maar, het afboeken van bronnen gebeurt pas bij het daadwerkelijk verzenden van producten (het aanmaken van een verzending). Dit gebeurt via 'source selection algorithms', die vooralsnog moeten worden geprogrammeerd, maar mogelijk in de toekomst kunnen worden geconfigureerd vanuit de backend.

Ingewikkeld? Zeker!

Maar MSI is een zeer grote stap voor Magento.

Opmerking: Magento MSI is nog in ontwikkeling. Er wordt nog gezocht naar de juiste termen voor de concepten binnen het systeem. Om die redenen noemen we stocks in dit artikel 'stocks' - en niet 'voorraad'. De term voorraad staat in de Nederlandse taal teveel voor daadwerkelijk fysieke producten op de plank, in plaats van het 'cijfer dat voorraad representeert'.

Voor wie is Magento MSI?

Tot nu toe was multi inventory alleen mogelijk met het gebruik van modules. Omdat er geen ondersteuning was in de core waren beschikbare oplossingen zeer complex. Er onstonden bij het gebruik van zulke modules veel compatibility issues met core modules en andere third party modules.

De reden voor deze complexiteit?

Voorraad (qty) was altijd global. Het was niet mogelijk om deze waarde op een dieper niveau te overschrijven.

Configuration

Default (global)

Website

Store Group

Store View

Base URL

Product price

Product qty

Locale (language frontend)

Product visibility

Orders

Customers

Root category configuration

MSI

Decoupled

Magento MSI is in werking losgekoppeld van bovenstaand stramien. Er kunnen kruislings verbanden getrokken worden tussen websites en fysieke voorraadlocaties.

Doordat 'voorraad' nu wordt gescheiden van 'verkoopbaar aantal' (daarover later meer), is een configuratie met backorders of pre-orders ook te realiseren.

Magento multi source inventory is interessant voor de volgende (denkbeeldige) situaties:

  • Een webshop levert vanuit het magazijn en, indien magazijnvoorraad uitgeput is, vanuit winkelvoorraad. Beide voorraadlocaties zijn als bron geregistreerd in Magento. Het source selection algorithms geeft prioriteit aan magazijnvoorraad en valt terug op winkelvoorraad.
  • Een B2B webshop in accessoires heeft een groot assortiment opgebouwd uit het aanbod van meerdere internationale dropship leveranciers. Er is overlap van het assortiment van de verschillende leveranciers. De totaalsom van de verschillende bronnen wordt naar klanten getoond als voorraad beschikbaar. Bij verzending wordt automatisch de leverancier met hoogste marge geselecteerd, in combinatie met de laagste verzendkosten naar het verzendadres van de klant.
  • Een winkelketen heeft 500 winkels. Het kassasysteem wordt gekoppeld aan Magento. Binnen Magento is precies duidelijk hoeveel stuks van een product in welke winkel voorradig is. Op de webshop kunnen bezoekers opvragen of het product dat ze willen kopen beschikbaar is bij het filiaal bij hun in de buurt.
  • Een Nederlandse webshop heeft fulfilment partijen in Spanje en Oekraïne. Er zijn 4 websites in 5 talen: Nederland (NL), Belgie (NL/FR), Frankrijk (FR), Duitsland (DE). De Nederlandse, Belgische en Franse shop kan verkopen uit de voorraad van de fulfilment partij in Spanje. De Duitse webshop kan verkopen uit zowel voorraad van de fulfilment in Spanje, als die in Oekraïne.

Registreer de bronnen

Nieuw met Magento Multi Source Inventory zijn bronnen. Een bron is een 'voorraadlocatie'. Je maakt een bron aan voor iedere locatie waar producten fysiek op voorraad (kunnen) liggen. Dus bijvoorbeeld een winkel, het centrale magazijn en het magazijn van de fulfilmentpartij.

Voor iedere bron die aangemaakt wordt, kan bij een product een aantal worden ingevuld.

In ons voorbeeld registreren we 4 bronnen. Magazijn (Warehouse) LA, Magazijn DE, Store NL (voorraad in de winkel) en het Magazijn in NY.

De hoeveelheid informatie benodigd voor het aanmaken van een bron is beperkt. Eigenlijk zijn op dit punt alleen naam en code relevant.

Voorraad van verschillende bronnen samenvoegen met stocks

Nog een nieuw concept zijn 'stocks'. Een stock groepeert meerdere bronnen en wordt gekoppeld aan een channel. Een channel is een nieuwe term; maar je kiest hier een website.

Een stock dient als virtuele, geaggregeerde representatie voor de bronnen van een verkoop kanaal.

Beetje cryptisch, maar onthoudt dit even.

In ons voorbeeld maken we een stock aan, die bestaat uit de sources Store NL en Warehouse DE.

Stock: Europe Bronnen: Store NL, Warehouse DE

Een stock wordt tevens aan een website gekoppeld. Dit betekent dat alle verkopen via deze website worden afgeschreven van één (of meerdere) bronnen onderdeel zijn van de stock.

De uiteindelijke bron(nen) waarvan de voorraad bij het aanmaken van een verzending wordt afgeschreven, wordt geselecteerd via het source selection algorithm. Maar daarover later meer.

Dit overzicht maakt duidelijk hoe onze setup nu is.

Stock: Europe

Bronnen: Store NL, Warehouse DE

Stock: US

Bronnen: Warehouse NY, Warehouse LA

Het mooie van deze constructie is dat uitbreiden weinig inspanning vereist. Stel dat we in het voorbeeld een extra magazijn in Frankrijk openen (of fulfilmentpartij kiezen). We hoeven dan alleen een bron aan te maken en deze te koppelen onder de Europe stock. En mogelijk ook de US stock, als we vinden dat US orders ook vanuit dit magazijn mogen worden geleverd.

Voorraad per bron bij producten registreren

Nu bronnen en stocks zijn aangemaakt, is het interessant om te kijken naar de product bewerk pagina in het Magento adminpanel.

Het is mogelijk om hier per bron die is aangemaakt in te vullen wat het aantal is dat er fysiek op locatie ligt. In ons geval dus voorraad voor de bronnen Store NL, Warehouse DE, Warehouse LA en Warehouse NY.

Verkoopbaar aantal (Salable Quantity)

Samenvatting tot nu toe: bij een product registreer je per bron het aantal voorradig. Verschillende bronnen samengevoegd vormen een stock. Een stock is gekoppeld aan een website.

In het productgrid zien we twee nieuwe kolommen: Quantity per Source (Hoeveelheid per bron) en Salable Quantity (Verkoopbaar aantal).

Met MSI is er een belangrijke shift gemaakt rondom voorraad van producten.

Quantity per source representeert (goed zichtbaar in de kolom) de fysiek aanwezige voorraad op een locatie. We willen dit cijfer pas muteren wanneer een verzendig is aangemaakt. Niet wanneer een bestelling is geplaatst, wat in eerdere versies van Magento het geval is.

Nieuw is 'verkoopbaar aantal. Verkoopbaar aantal (Salable Quantity) is een optelsom van de beschikbare bronnen, gegroepeerd in stocks. Door de relatie tussen stocks en channels (websites), zien we in het adminpanel weliswaar alle stocks, maar is het aantal verkoopbaar per website anders.

In ons geval:

Europe = 2

(Store NL: 2 + Warehouse DE: 0)

Er zijn via websites gekoppeld aan de 'Europe' stock slechts 2 producten verkoopbaar

US = 18

(Warehouse LA: 12 + Warehouse NY: 6)

Er zijn via websites gekoppeld aan de 'United States' stock 18 producten verkoopbaar

Een bezoeker kan dus in websites gekoppeld aan de EU stock slechts 2 stuks van het product bestellen. Maar, bezoekers in de US kunnen 18 stuks van het product bestellen.

Wordt er een bestelling geplaatst, dan wordt de bestelde aantal direct van de Verkoopbaar aantal afgeboekt.

Net als voorheen 'qty' deed, triggert de waarde 'verkoopbaar aantal' per website een aantal meldingen en acties (afhankelijk van configuratie):

  • Triggert 'op voorraad / niet op voorraad' status bij voorraad 0
  • Toont als voorraadcijfer op de frontend, indien gewensd
  • Toont melding wanneer een bezoeker meer producten in winkel wagen plaatst dan beschikbaar

Source selection algorithm

Verkoopbaar aantal wordt afboekt wanneer een bestelling wordt geplaatst en betaald.

Bij het maken van een verzending wordt het past echt interessant. Pas op dit moment wordt namelijk bepaald van welke bron voorraad daadwerkelijk wordt afgeboekt.

Dit gebeurt via een nieuw geïntroduceerd concept: Source selection algorithms (bron selectie algorithme).

Met source selection algorithms wordt het mogelijk om op basis van alle interessante informatie van klanten, producten, adressen, bronnen en stocks uit te rekenen waarvandaan een bestelling het beste uitgeleverd kan worden.

Bijvoorbeeld:

  • Bestellingen worden altijd verzonden vanuit winkelvoorraad, tenzij hoeveelheid besteld groter is dan actuele voorraad. Verzend dan vanuit centraal magazijn.
  • Gebruik de bron die voldoende voorraad heeft om alle bestelde producten uit te leveren.
  • Bestellingen worden verzonden op basis van dichtstbijzijnde warenhuis ten opzichte van verzendlocatie van klant.
  • In een situatie waarbij meerdere leveranciers zijn gekoppeld: op basis van hoogste productmarge.

Performance

Dat bron selectie gebeurt bij het maken van verzendingen, in plaats van bij het plaatsen van een bestelling, is geen toeval.

Source selections algorithms kunnen erg complex zijn en dus rekenkracht vereisen. Zeker als ze worden uitgevoerd als onderdeel van een massa actie.

Performance is een belangrijk focuspunt geweest bij het uitwerken van de MSI module. Door de bron selectie pas later in het proces te doen, blijft de Magento checkout razendsnel.

Deelverzendingen

Magento multi inventory ondersteunt deelverzendingen. Bij het aanmaken van een verzending, kan dus gekozen worden voor hoeveel bestelde items de verzending wordt aangemaakt.

Dit biedt de mogelijkheid om eventueel handmatig sturing te geven over de manier waarop een bestelling wordt uitgeleverd.

Bijvoorbeeld in een situatie waarin een klant na het plaatsen van een bestelling aangeeft een specifiek product alvast geleverd te willen hebben.

Een klantenservice medewerker kan bijvoorbeeld een deelverzending maken om te leveren vanuit de winkelvoorraad, daar waar het source selection algorithm zou leveren vanuit het centrale magazijn (met een langere levertijd).

Beschikbare source selection algorithms

Bij de lancering van Magento MSI zal er één source selection algorithm beschikbaar zijn: Source priority (bron prioriteit).

Oftewel; Er wordt handmatig ingesteld wat de prioriteit is van de verschillende bronnen (warenhuizen, magazijn, externe leverancier).

Source priority instellen

Protip: Bij het instellen van de bronnen van een stock is de volgorde bepalend voor de prioriteit.

Een aantal andere randvoorwaarden kunnen opgemaakt worden uit de broncode:

https://github.com/magento-engcom/msi/blob/2.3-develop/app/code/Magento/InventorySourceSelection/Model/Algorithms/PriorityBasedAlgorithm.php
  • Tel alleen bronnen mee in de overweging die minimaal 1 aantal van het bestelde product hebben
  • Als alle bronnen bij elkaar opgeteld niet voldoende voorraad hebben om te leveren, dan kan de shipment niet worden aangemaakt

Source selection algorithms kunnen naar eigen wens kunnen worden geprogrammeerd.

Inmiddels is bekend dat Amasty bij de lancering van Magento MSI met een set source selection algorithms zal komen.

Magento MSI installeren

Multi source inventory is onderdeel van Magento 2.3, en wordt geinstalleerd wordt bij het upgraden. Er worden tijdens de upgrade één source en één stock aangemaakt (de defaults).

Mocht er geen interesse zijn in de multi source inventory features, dan hoeft hiervan geen gebruik gemaakt te worden.

Let wel: wanneer wel gebruik wordt gemaakt van de MSI features (er worden bronnen of stocks aangemaakt), is er geen compatibility met grouped en bundled products. Ondersteuning voor deze producttypen staat bovenaan de roadmap voor de vervolg release van Magento MSI.

June 12, 2018
Door Erwin Otten

Op zoek naar een Magento webshop specialist?

We komen graag met je in gesprek. Direct een Magento webshop project opstarten?