Aanvullende programma's
Handleiding · 1 onderwerpen
WorkBase Import

Artikelen importeren, assortimentswijzigingen verwerken of artikelen bulkmatig verwijderen
Inleiding
WorkBase Import (WbImport.exe) is een aanvullend programma bij WorkBase waarmee u artikelen in bulk kunt importeren, een assortimentswijziging vanuit een Excel-bestand kunt verwerken, of artikelen kunt verwijderen op basis van een lijst. Het programma leest CSV-bestanden uit een map “csv\” en schrijft direct naar de Firebird-database van WorkBase.
| OPMERKINGDit programma wordt naast WorkBase gedraaid en spreekt direct de database aan. Zorg dat WorkBase op dat moment niet in gebruik is voor dezelfde administratie, om conflicten te voorkomen. |
|---|
Gebruiksdoel
- Grote aantallen artikelen importeren vanuit een CSV (bijv. leverancier-catalogus)
- Bestaande artikelen in bulk bijwerken (prijs, omschrijving, barcode)
- Hoofdleverancier-koppelingen leggen
- Assortimentswijzigingen vanuit een .xlsx-bestand uitsplitsen in nieuwe artikelen en te verwijderen artikelen
- Artikelen in bulk verwijderen op basis van artikelcode of barcode, met voorraadbehoud
| OPMERKING📖 Voor CSV-imports vanuit WorkBase zelf (zonder extern programma) zie 03 - Artikelen importeren in de map 03 - Import-Export. |
|---|
Voorbereiding
Plaats CSV-bestanden
CSV-bestanden plaatst u in een submap csv\ in de map waar WbImport.exe staat. Het programma leest alle *.csv bestanden uit deze map.
Configuratiebestand WbImport.dat
Het programma gebruikt een configuratiebestand WbImport.dat in dezelfde map als het programma. Dit bestand wordt automatisch aangemaakt bij de eerste start met standaardwaarden.
| Regel | Instelling | Standaardwaarde |
|---|---|---|
| 1 | IB-Server (Firebird-server) | localhost |
| 2 | Locatie database (pad naar .FDB) | C:\Data\Database\Bedrijf01.FDB |
| 3 | Default BTW-code | 4 |
| 4 | Default eenheid | STUK |
| 5 | Default leverancier (relatienummer) | -1 |
| 6 | Default artikelgroep | -1 |
| 7 | Startcode (voor automatisch nummeren) | 1000000000 |
| 8 | Genereer artikelcode (J/N) | J |
| 9 | Artikelcode procedure (0-4) | 0 |
| LET OPWijzig het .dat-bestand alleen als u weet wat u doet. Bij twijfel verwijder het bestand; het wordt dan opnieuw met standaardwaarden aangemaakt. |
|---|
Mappingbestand kortingscodes.txt
Naast WbImport.exe kan een bestand kortingscodes.txt staan. Hierin koppelt u een kortingscode aan een inkoopkorting-percentage en een artikelgroep. Als de CSV een kolom KORTINGSCODE heeft, gebruikt het programma deze mapping in plaats van de waarden in de UI.
| Kolom | Inhoud |
|---|---|
| Kortingscode | Code zoals in het CSV voorkomt (bv. AA, AB, MT) |
| Percentage | Kortingspercentage op verkoopprijs, met %-teken toegestaan (bv. 30%) |
| Artikelgroep | Code van de artikelgroep in WorkBase (bv. MAKACC-AA) |
Regels die beginnen met # of // zijn commentaar en worden overgeslagen. Scheidingsteken tussen de velden is een tab of een of meerdere spaties.
| TIPMist een code in de mapping? Dan valt het programma terug op de UI-waarden (Inkoopprijs : korting % en Default ArtikelGroep) en komt er een waarschuwing in het importlog. |
|---|
Logbestanden per import
Bij elke import- of verwerkingsactie maakt het programma een uniek logbestand aan in de submap log\. De bestandsnaam bevat de oorspronkelijke bestandsnaam en een tijdstempel, bijvoorbeeld log\Prijslijst_2026-04-19_143200.log. Zo kunt u altijd achteraf reconstrueren wat er bij een specifieke import gebeurd is.
Programma opstarten
- Start WbImport.exe.
- Het hoofdscherm “WorkBase Import / Verwijderen” verschijnt. Rechtsboven staat het versienummer uit de VERSIONINFO van het programma.
- Onderin het scherm staat een logvenster dat de verbindingsstatus met de database en de voortgang van verwerkingen toont.
- Bovenin zijn twee tabs: Importeren en Verwijderen.
- Rechtsonder staat een Afsluiten-knop waarmee u het programma netjes afsluit (instellingen worden opgeslagen).
| [Screenshot: WorkBase Import hoofdscherm] |
|---|
| OPMERKINGAls u het programma al een keer start terwijl er nog een sessie open staat, krijgt u een waarschuwing. Een lockfile voorkomt dat twee instances tegelijk de database wijzigen. |
|---|
Tab Importeren — artikelen inlezen
Op de tab Importeren leest u artikelen uit CSV-bestanden in voor een specifieke leverancier.
Stap 1 — Leverancier en korting
| Veld | Beschrijving |
|---|---|
| Relatienummer leverancier | Het WorkBase-relatienummer van de leverancier. Na het veld verlaten wordt de naam opgehaald en getoond. |
| Naam | De naam van de leverancier, automatisch gevuld. |
| Inkoopprijs : korting % | Percentage korting op de verkoopprijs om de inkoopprijs te berekenen. Wordt overruled door de kortingscode-mapping als die aanwezig is. |
| Artikelen altijd toevoegen | Vinkje: ook nieuwe artikelen toevoegen als deze nog niet bestaan. |
| Hoofdleverancier | Vinkje: registreer deze leverancier als hoofdleverancier van de artikelen. |
Stap 2 — Default instellingen
In de groepsbox “Default instellingen” stelt u standaardwaarden in voor artikelen die nieuw worden aangemaakt:
| Veld | Beschrijving |
|---|---|
| Nieuwe artikelen toevoegen | Vinkje: bij het importeren worden nieuwe artikelen aangemaakt. Als uit, dan worden alleen bestaande artikelen bijgewerkt. |
| Default BTW-code | BTW-code voor nieuwe artikelen (keuzelijst uit WorkBase-BTW-tabel). |
| Default Eenheid | Eenheid voor nieuwe artikelen (keuzelijst uit WorkBase-eenheden). |
| ArtikelGroep | Artikelgroep-code voor nieuwe artikelen. |
| Genereer Artikelcode | Vinkje: WorkBase Import genereert automatisch een artikelcode. |
| Voorloop Code | Vast voorvoegsel voor gegenereerde codes (max. 5 letters). |
| Start Code | Startnummer voor automatische nummering (alleen cijfers, max. 10 posities). Standaard 1000000000. |
Keuze codegeneratie
Met de keuzelijst “Code” bepaalt u hoe de artikelcode tot stand komt:
| Keuze | Artikelcode wordt |
|---|---|
| Code = Barcode | De barcode uit het CSV wordt de artikelcode (na normalisatie) |
| Code = Leverancier artikelcode | De artikelcode van de leverancier wordt overgenomen |
| Code = LeverancierID - Leverancier Artikelcode | Combinatie: relatienummer + streepje + leveranciersartikelcode |
| Code = VoorloopCode - Leverancier Artikelcode | Combinatie: voorloopcode + streepje + leveranciersartikelcode |
| Code = Genereer een code dmv automatisch nummeren | Automatisch oplopend nummer vanaf Start Code |
| OPMERKINGDe artikelcode wordt altijd afgekapt op maximaal 20 posities (DB-kolom is VARCHAR(20)). Als er afgekapt wordt komt er een regel in het log. |
|---|
| TIPGebruik “Code = Barcode” als uw leverancier een goede barcode meelevert en u deze als eigen artikelcode wilt hanteren. Gebruik “Genereer” als u een eigen nummersysteem wilt aanhouden. |
|---|
Stap 3 — Importeren starten
- Plaats uw CSV-bestanden in de map csv\.
- Controleer dat alle velden op de tab Importeren juist zijn ingevuld.
- Klik op de Start-knop rechts in het scherm.
- De voortgang wordt getoond in de progressbar onderin.
- In het logvenster verschijnen meldingen per ingelezen regel. Parallel wordt een gedetailleerd logbestand in de map log\ geschreven.
- Na afloop wordt het bronbestand gekopieerd naar csv\history\ en verwijderd uit de map csv\.
- Alle CSV-bestanden in de map csv\ worden achter elkaar verwerkt.
| [Screenshot: Tab Importeren met instellingen] |
|---|
Stap 4 — Importeren stoppen
Een lopende import kunt u afbreken met de Stop-knop. Reeds verwerkte regels blijven behouden in WorkBase. Is er niets actief, dan komt er “Geen actieve taak om te stoppen” in het logvenster.
Assortimentswijziging uit .xlsx inlezen
Onderaan het tabblad Importeren staat een knop Assortimentswijziging uit .xlsx inlezen.... Hiermee kunt u een Excel-bestand met NIEUWE en VERVALLEN artikelen uit«splitsen in twee CSV’s die u daarna rustig kunt controleren en importeren.
Werking
- Klik op Assortimentswijziging uit .xlsx inlezen.... Een bestandsdialoog opent standaard in de map csv\.
- Selecteer het .xlsx-bestand. Het programma leest de eerste sheet uit en detecteert automatisch of het om een geldig ZIP-gebaseerd XLSX-bestand gaat.
- Rijen worden geclassificeerd en uitgesplitst (zie regels hieronder).
- Naast het originele xlsx worden één of twee CSV-bestanden weggeschreven:
| Bestand | Inhoud |
|---|---|
| <naam>_NIEUW.csv | Nieuwe artikelen. Header: ARTIKELCODE;OMSCHRIJVING;BARCODE;VERKOOPPRIJS;KORTINGSCODE |
| <naam>_VERVALLEN.csv | Barcodes van te verwijderen artikelen, 1 per regel, geen header |
- Na afloop verschijnt een overzicht in het log en een dialoog met het resultaat.
- Het _NIEUW.csv kunt u daarna via de normale Start-knop importeren. Het _VERVALLEN.csv wordt automatisch herkend op het tabblad Verwijderen.
Interpretatie van de xlsx-rijen
De bron-xlsx heeft per rij twee blokken: kolommen A-D voor het “oude” product en kolommen E-H voor het “nieuwe” product. Kolom I bevat optioneel een Kortingscode.
| Situatie | Actie |
|---|---|
| A/C/D leeg, E/G/H gevuld | NIEUW product -> 1 regel in _NIEUW.csv |
| A/C/D gevuld, E/G/H leeg | Product VERVALT -> 1 regel in _VERVALLEN.csv |
| A/C/D gevuld EN E/G/H gevuld | Oud vervalt EN nieuw erbij -> 1 regel in elk bestand |
| Alle data-cellen leeg of '-' | Rij wordt overgeslagen |
| Alleen kolom A gevuld | Sectie-titel -> overgeslagen maar gelogd |
| OPMERKINGKolommen B (omschrijving oud) en F (omschrijving nieuw) worden niet meegenomen in de gevuld-check. Ze mogen leeg zijn zonder dat de rij anders geclassificeerd wordt. Een cel met alleen een '-' geldt als leeg. |
|---|
| TIPDe eerste data-regel van het xlsx (met kopteksten zoals “Artikelnummer - nieuw”) wordt automatisch als header herkend en overgeslagen, zodat deze niet als data-rij in _NIEUW.csv terechtkomt. |
|---|
Automatische verwerking van barcodes en omschrijvingen
Tijdens het importeren of uitsplitsen worden een aantal normalisaties uitgevoerd om data-integriteit te borgen:
| Veld | Normalisatie |
|---|---|
| Barcode (EAN) | Als de barcode volledig uit cijfers bestaat en langer is dan 13, worden voorloop-nullen gestript tot de lengte 13 is. 14-cijferige EAN-codes worden zo netjes opgeslagen. |
| Artikelcode | Afgekapt op maximaal 20 posities (DB-kolom VARCHAR(20)); een inkortings-actie wordt gelogd. |
| Omschrijving | Afgekapt op maximaal 100 posities; dubbele quotes (") vervangen door twee apostrofen; CR/LF weggehaald (zodat SQL niet breekt). |
| Bedragen (€) | Herkent zowel “12,50”, “12.50”, “1.000,50” als “1,000.50” en levert altijd een waarde met punt als decimaalteken. |
CSV-bestand: structuur
Het programma verwerkt CSV-bestanden met een kopregel en datarijen. De volgende kolomnamen worden herkend (aliases worden automatisch gematcht, hoofdletter-ongevoelig):
| Veld | Herkende kolomnamen |
|---|---|
| Artikelcode | ARTCODE, ARTIKELCODE, ARTIKELNUMMER, PRODUCTCODE, PRODUCT CODE |
| Verkoopprijs | VERKOOPPRIJS, BRUTOPRIJS, ADVIESPRIJS, PRIJS, ADVIESVERKOOPPRIJS |
| Kostprijs | KOSTPRIJS |
| Inkoopprijs | INKOOPPRIJS, NET PRICE |
| Leverancier | RID, LEVERANCIER, LEVERANCIERNR, RELATIE, RELATIENUMMER, RELATIENR, RELATIEID |
| Omschrijving | OMSCHRIJVING, DESCRIPTION, PRODUCTOMSCHRIJVING, PRODUKTOMSCHRIJVING |
| Barcode | EAN CODE, BARCODE, EANCODE, EAN |
| Leverancier artcode | LEVERANCIERCODE, LEVERANCIERARTCODE, LEVARTCODE |
| Kortingscode | KORTINGSCODE, KORTINGCODE, KORTING CODE, DISCOUNT CODE, DISCOUNTCODE |
| OPMERKINGPuntkomma (;) is het scheidingsteken. Minimaal de kolommen Artikelcode of Barcode én Omschrijving moeten aanwezig zijn. |
|---|
Tab Verwijderen — artikelen in bulk verwijderen
Op de tab Verwijderen kunt u een lijst met codes plakken of automatisch laten inlezen. Het programma verwerkt elke regel afzonderlijk en past afhankelijk van de situatie een DELETE of een status-wijziging toe.
Automatisch inlezen _VERVALLEN.csv
Wanneer u naar het tabblad Verwijderen schakelt, zoekt het programma automatisch naar een *_VERVALLEN.csv in de map csv\. Wordt er een gevonden, dan krijgt u de vraag:
Gevonden verwijder-lijst: <naam>_VERVALLEN.csv Deze inladen in Memo1?
Bij Ja wordt het invoervak gevuld, de radiobutton op Barcode gezet, en het CSV-pad onthouden. Succesvolle regels verdwijnen daarna automatisch uit zowel het invoervak als het bestand op schijf, zodat u later verder kunt gaan waar u gebleven was.
Handmatig invoeren
- Ga naar het tabblad Verwijderen.
- Plak in het invoervak een lijst met codes (één per regel). Dit kunnen artikelcodes of barcodes zijn.
- Kies bij Maak uw keuze: Artikelcode of Barcode.
- Klik op Start om de verwerking uit te voeren.
- Het logvenster toont per regel welke actie is uitgevoerd.
| [Screenshot: Tab Verwijderen met ingeladen VERVALLEN-lijst] |
|---|
Verwerkingslogica per regel
Voor elke regel doorloopt het programma deze stappen:
| Stap | Actie |
|---|---|
| 1. Artikelcode bepalen | Bij zoeken op CODE is de regel zelf de artikelcode. Bij zoeken op BARCODE wordt eerst SELECT CODE FROM RBSARTIKEL WHERE BARCODE = ... uitgevoerd (met leading-zero-fix). |
| 2. Voorraad opvragen | Via systeem-procedure VOORRAADART(ARTCODE): de som van alle voorraadposities wordt berekend (BACK + BESTEL + FACTUUR + LEVERING + ONTVANGST + INORDER + INBEWERK + INPROD + WERK). |
| 3a. Voorraad > 0 | Artikel wordt NIET verwijderd. STATUS wordt op 'N' gezet = geblokkeerd voor inkoop. Het artikel blijft verkoopbaar tot de voorraad op is. |
| 3b. Voorraad = 0, DELETE lukt | Artikel wordt fysiek verwijderd uit RBSARTIKEL. |
| 3c. Voorraad = 0, DELETE faalt (historie-FK) | Artikel krijgt STATUS = 'V' (vervallen). Dit gebeurt bij artikelen met VOORRAADTRANSACTIES of andere historie. |
| 4. Opruimen | Succesvol verwerkte regels verdwijnen uit het invoervak. Als er een gekoppeld _VERVALLEN.csv was, wordt dat opnieuw weggeschreven zonder die regels; is alles klaar, dan wordt het bestand verwijderd. |
| LET OPVerwijderen is definitief. Maak vooraf een back-up van uw database. Voor artikelen met voorraad kiest het programma automatisch voor de veilige variant (STATUS = 'N'). |
|---|
Extra voorloop-nul in barcode
EAN-barcodes worden soms met een extra voorloop-nul aangeleverd (14 posities in plaats van 13). Als de te zoeken waarde met een '0' begint, zoekt het programma ook op de versie zonder die voorloop-nul. Zo vindt 08711234567890 alsnog 8711234567890 in de database.
Logvenster
Onderin het hoofdscherm staat een logvenster (Memo) waarin alle verbindings- en verwerkingsmeldingen verschijnen:
- Verbonden met : <server> <database> — succesvolle verbinding
- Geen verbinding — controleer IBServer/IBDataMap in WbImport.dat
- >>> Assortimentswijziging xlsx: ... — start van een xlsx-splitsing
- -> <naam>_NIEUW.csv — uitgeschreven CSV-bestanden
- Artikelcode ingekort tot 20 posities: X -> Y — automatische afkap
- DELETE geblokkeerd door FK, status V gezet — fallback bij FK-fout
- <<< Klaar (nieuw=N vervallen=M skip=X) — eindresultaat
Technische gegevens
| Aspect | Waarde |
|---|---|
| Programma | WbImport.exe |
| Configuratiebestand | WbImport.dat (in dezelfde map) |
| Kortingsmapping | kortingscodes.txt (in dezelfde map) |
| CSV-map | csv\ (submap in programma-map) |
| Logmap | log\ (submap in programma-map, per-import logbestand) |
| Lockfile | WbImport.lock (voorkomt dubbele instances) |
| Database-type | Firebird (.FDB) |
| Stockprocedure | VOORRAADART(ARTCODE) - telt alle voorraadposities |
| Verbinding via | CoreDatabaseUnit (IB/Firebird) |
| Copyright | White Frost B.V. |
| Uitgevoerd door | WorkBase B.V. |
Veelgestelde vragen
Waarom krijg ik “Geen verbinding”?
Controleer de IBServer en IBDataMap in WbImport.dat. De Firebird-service moet draaien op de opgegeven server en het databasebestand moet bereikbaar zijn met lees/schrijfrechten.
Mag WorkBase tegelijkertijd open staan?
Niet aanbevolen voor dezelfde administratie. De import schrijft direct in de database; gelijktijdige wijzigingen vanuit WorkBase kunnen conflicten opleveren.
Het xlsx-bestand wordt niet gelezen — wat nu?
Het programma detecteert of het bestand een geldig ZIP-archief is. Bij een bericht over “OLE Compound-bestand” is het een oude .xls of een versleuteld bestand. Open het in Excel en bewaar opnieuw als gewone .xlsx (niet “Strict OOXML”).
Kan ik een verwijder-actie onderbreken en later verdergaan?
Ja. Succesvol verwerkte regels verdwijnen uit het invoervak en uit het _VERVALLEN.csv bestand. De volgende keer dat u het tabblad Verwijderen opent krijgt u alleen de resterende regels aangeboden. Stopt u midden in de verwerking, dan komen ook die nog niet verwerkte regels terug bij het opnieuw openen.
Wat gebeurt er met artikelen die nog voorraad hebben?
Die worden niet verwijderd maar krijgen STATUS = 'N' (geblokkeerd voor inkoop). Het artikel blijft beschikbaar voor verkoop tot de voorraad op is.
Mijn verkoopprijs wordt 100x te groot in WorkBase
Dit kwam door een oude bug in de euro-parser die punten altijd als duizendtallen interpreteerde. Gefixt: 12.50, 12,50, 1.000,50 en 1,000.50 worden nu allemaal juist herkend. Update naar de recente versie van WbImport.exe.
Mijn omschrijving bevat apostrofen en aanhalingstekens
Geen probleem: apostrofen worden voor SQL correct geescaped en dubbele aanhalingstekens worden automatisch vervangen door twee apostrofen. De omschrijving wordt daarnaast ingekort tot 100 tekens als dat nodig is.
Kan ik bestaande artikelen bijwerken zonder nieuwe toe te voegen?
Ja. Vink Nieuwe artikelen toevoegen uit in de Default instellingen. Alleen bestaande artikelen (op basis van de gekozen codering) worden dan bijgewerkt.
Hoe weet ik welke rij welke actie kreeg?
Per import wordt een uniek logbestand in log\ weggeschreven met een tijdstempel in de naam. Daarin staat voor elke regel welke actie is uitgevoerd, welke korting/artikelgroep is toegepast, en eventueel welke fout is opgetreden.