System Documentation ProLasku EasyCMS

Importing products from a file

When you have many products to create or update at once, use the importer: Inventory › Tools › Import products. It reads Excel (.xlsx) and CSV files, shows you a review of everything it recognised before writing anything, and then applies your decisions in the background with a live progress bar you can stop and resume at any time.

Step by step

  1. Download the example file — the example workbook is rebuilt from your live data every time you download it. Its dropdown columns (category, supplier, purchase VAT, sales VAT, unit) contain exactly the values that exist in your system right now, so you can never type an invalid value. Every dropdown value carries its ID (for example North Drinks [ID: 17] or 24% - (3002) - Wine [ID: 3]) — always pick from the list instead of typing a name, because names alone can be ambiguous: two suppliers can share a name, and several VAT rows can all be 24% (wine, beer, non-food). The ID inside the picked value is what the import matches on. Re-download a fresh copy whenever your categories or VAT rows have changed.
  2. Fill in your products — one row per product starting from row 3. Columns are recognised by their header text, not by position, and the sheet includes one Name column per enabled language. Fill at least one Name column — the value is copied to every other enabled language, so no language is left empty (you can refine translations later in the product editor). Leave any other cell empty to keep the product's existing value when updating.
  3. Upload — the file is parsed and every row is classified against your catalogue:
    • New products — no match found; they will be created. A new product must carry all critical fields: name, category, barcode, purchase VAT, sales VAT, supplier and discount percentage. A row missing any of them is not imported — it is listed in the Errors table of the review (and again in the apply log and the failed-rows CSV) with the reason, so nothing is silently created half-empty.
    • Updates — the row was matched to an existing product (by barcode, box barcode, reference number, or a name in any language). Only the cells you filled are updated and only when they differ; empty cells keep the existing values. Changed prices are highlighted with old → new badges.
    • Pending resolution (bottom of the review) — rows the importer will not guess: typically the barcode matches a product but the name is different, or several products match. For each one you choose: update the existing product, add the barcode/box barcode as a new multi-code row on that product, or create a new product. When several candidates match you first pick which product (a radio list shows id, name and barcode).
    • Errors — rows with unknown dropdown values, missing critical fields, or no name/barcode/reference at all. These are not imported and can be downloaded as a CSV afterwards for fixing and re-importing.
  4. Review settings — optionally tick Create categories that do not exist (creates simple top-level categories from plain category names; "Parent / Child" paths are never auto-created).
  5. Apply — rows are processed ten at a time in the background, so the import can never time out. The live log shows every row as it completes — including failed rows and exactly why they failed — and Stop halts between batches: processed rows stay and the button turns into Resume.

How matching works

Each row is matched in this order:

  1. Barcode, box barcode, reference number and multi-code rows — an exact hit plus a name that agrees with the product (in any language) is a confident match.
  2. Name only — if the name equals exactly one product's name in any language, that product matches.
  3. A barcode match with a different name goes to the pending list — only you can decide whether it is the same product (renamed), a new barcode for an existing product (multi-code row) or a brand-new product.

Updates never destroy data: empty cells keep existing values, per-language names merge language by language, and the product's main barcode is never silently replaced. When a row's barcode or box barcode differs from the matched product, the importer automatically applies the multi-code decision, so the new code is added as a new multi-code row on that product. Likewise, a changed selling price is recorded as a new multi-code row carrying the new price (in addition to updating the product's price field). Every product the import creates, updates or extends is written to the Activity Log — who ran the import, what changed (field by field, before and after) and that it came from the product import page. See Multi-code & pricing rows.

What the import does NOT do

  • Stock is not imported — the sheet has no location, shelf or quantity columns by design. Stock lands through purchase orders and stock transfers (see the Import lines from Excel panels in those editors), where the location comes from the order itself, never from a sheet.
  • Images are not imported.
  • Import CN codes (same Tools page) imports combined-nomenclature codes in a two-column layout: column A = code, column B = title.
  • For bulk changes to existing products (category, VAT, webshop visibility) use the assignment tools described in Inventory tools.
  • To fill a whole purchase order or stock transfer from a sheet, see Importing purchase order lines and Importing stock transfer lines.