blog·5 min lezen

Groothandel en winkel in één administratie: werken met meerdere magazijnen in Exact Online

Hoe wij voorraad per magazijn uit Exact Online bijhouden en de verkoop van de winkel als magazijnverplaatsing terugboeken, met de valkuilen bij eenheden, statiegeld en dubbel boeken.

Houd de voorraad van ons groothandelsmagazijn en van de winkel apart bij,
en boek wat de winkel verkoopt automatisch over.

Eén administratie, twee plekken waar de voorraad staat: een groothandelsmagazijn waar pallets in en uit gaan, en een winkel die per fles verkoopt. In Exact Online kan dat prima met twee magazijnen. Het lastige begint zodra je die voorraad buiten Exact wil zien, en zodra de winkelverkoop van het juiste magazijn af moet.

Wij bouwden dat voor een drankengroothandel met slijterij. Het staat live. De klant blijft anoniem en er staan hier geen bedragen, prijzen of marges.

Voorraad per magazijn ophalen, elk kwartier

Voor de voorraad gebruiken we de sync-API van Exact, niet de gewone lijst met artikelen. Het pad voor voorraadposities geeft per artikel per magazijn een regel, met een tijdstempel erbij.

Dat tijdstempel is het hele punt. Je vraagt alleen wat sinds de hoogste tijdstempel die je al hebt is gewijzigd. Op een rustige dag is dat één aanroep per kwartier, met een antwoord van bijna niets. Bij een volledige run haalt de koppeling alles op, duizend regels per pagina, en wat er niet meer in zit verdwijnt ook uit de kopie.

Eén ding waar we even naar zochten: bij de voorraadposities geeft Exact het magazijn als interne verwijzing, niet als magazijncode. Wil je weten of iets in de groothandel of in de winkel staat, dan moet je de lijst met magazijnen er los bij halen en koppelen. De som over alle magazijnen is de totale voorraad van het artikel.

De verkoop van de winkel terugboeken

De winkel rekent af op een kassa. Die verkoop moet in Exact van het winkelmagazijn af. Dat deed iemand met de hand: elke week de weekexport van de kassa doorlopen en in Exact een magazijnverplaatsing van de groothandel naar de winkel maken.

Nu maakt de app dat voorstel. Uit de export komt per artikel een aantal, en dat wordt één verplaatsing met een regel per artikel. Het aanmaken van die verplaatsing is in onze app de enige actie die naar Exact schrijft. Alles wat we erbij doen is lezen.

Het voorstel laat eerst zien wat er gaat gebeuren: welke regels gekoppeld zijn, aan welk artikel, via welke weg, en wat er niet gekoppeld kon worden. Pas als dat klopt, gaat het weg. Elke boeking is een regel in het logboek van de app, met het aantal regels en het aantal stuks.

Koppelen op code, en anders op omschrijving

De kassa kent de artikelcode van Exact, in een eigen kolom. Staat die erin en bestaat hij, dan is het klaar. Dat is de prettige helft.

Voor de rest koppelen we op omschrijving, en daar zit het werk:

Schrijfwijzen verschillen. Hoofdletters, dubbele spaties en of er "70 cl" of "70cl" staat moeten niet uitmaken. Alle omschrijvingen gaan daarom door dezelfde normalisatie voordat ze vergeleken worden.

Een code die niet meer bestaat. Een kassa kan een oude Exact-code onthouden. Dan valt de regel terug op de omschrijving, en de app meldt dat de code niet gevonden is.

Twee artikelen met dezelfde omschrijving. Dan kiest de app het enige dat niet vervallen is. Zijn er meer actief, dan koppelt hij niet en komt de regel op de lijst met niet-gekoppelde regels, met de codes van de kandidaten erbij. Een gok op het verkeerde artikel vervuilt je voorraad voor maanden.

Wat nooit mee mag

Drie soorten regels gaan er altijd uit, en dat is belangrijker dan het lijkt:

Statiegeld. Dat is geen voorraad die van het ene magazijn naar het andere gaat. Het zit in een eigen artikelgroep en we filteren die groep eruit.

Kosten en diensten. Ook een eigen artikelgroep, ook eruit.

Kassaknoppen en verzamelregels. Een knop als "Diversen" is geen artikel. Die staan op een lijst in de instellingen, zodat de klant zelf kan aanvullen zonder dat er code aan te pas komt.

En één rekenregel: regels van hetzelfde artikel worden eerst opgeteld. Is het saldo nul of negatief, bijvoorbeeld doordat er meer retour kwam dan verkocht, dan verplaatst de app niets. Een negatief aantal in een verplaatsing is geen retour maar een boeking de verkeerde kant op.

Dubbel boeken voorkomen

Hier gaat het bij handwerk mis, en bij automatisering nog makkelijker. Een week twee keer overboeken valt niet op in de voorraad van vandaag, maar wel in de inventarisatie van volgende maand.

De omschrijving van elke verplaatsing bevat de periode van de export. Voordat de app iets aanbiedt, zoekt hij in Exact of er al een verplaatsing met die periode in de omschrijving staat. Zo ja, dan weigert hij. Dat is één leesaanroep, en hij heeft zich al terugbetaald.

Tellen met een lijst per magazijn

Voor de inventarisatie maakt de app een tellijst per magazijn: artikelcode, omschrijving, artikelgroep, eenheid, barcode en de voorraad volgens Exact, met twee lege kolommen voor geteld en verschil. Gesorteerd op artikelgroep, want zo loop je door het magazijn.

Die lijst is een bestand voor de teller, niet een boeking. Er gaat niets naar Exact. Wat geteld is, voert iemand bewust in.

Wat ons opviel toen de voorraad per magazijn eindelijk zichtbaar was: negatieve voorraad in het winkelmagazijn. Dat is geen boekhoudfout maar een signaal. Het betekent dat er in de winkel verkocht is zonder dat het ergens is afgeboekt. Precies het gat dat de wekelijkse verplaatsing nu dicht.

Veelgemaakte fouten

De gewone artikellijst gebruiken voor voorraad per magazijn. Daar staat één voorraadgetal per artikel. Voor voorraad per magazijn heb je de voorraadposities nodig.

De magazijncode verwachten bij een voorraadpositie. Je krijgt een interne verwijzing. Haal de magazijnen er los bij.

Statiegeld meeverplaatsen. Het hoort niet bij de voorraad van het product. Filter op artikelgroep, niet op de omschrijving.

Koppelen op omschrijving zonder normalisatie. Een dubbele spatie of "70cl" tegenover "70 cl" is genoeg om een artikel te missen.

Geen controle op dubbel boeken. Zet de periode in de omschrijving en zoek daarop voordat je boekt.

Wat een Exact-koppeling nog meer kan, staat in meer dan facturen en op Exact Online koppelen. Wil je zoiets voor je eigen administratie, kijk dan op maatwerk.

MK
Maarten Keizer

Oprichter van Invoker. Ruim twintig jaar hosting, systeembeheer en webdevelopment; bouwt de Claude-hosting zelf en test alles eerst op de eigen servers.

over maarten