Item Import lets you create and update item master data in bulk from a CSV file, instead of keying items in one by one.
The function exists in two places — Classic and Portal — and both use the same CSV format. A file generated in Classic can be uploaded in Portal, and vice versa. Which one you use is a matter of convenience, not compatibility.
Key benefits:
Under Item you will find two rows, each with its own pair of buttons:
| Row | Buttons | Use for |
|---|---|---|
| Import items data | Import · Generate File Format |
The main item master import — codes, names, categories, prices, flags, etc. |
| Import item additional info data | Import · Generate File Format |
Supplementary item info, imported as a separate file |
Other import rows on the same page (Barcode, Bill of Material, Client, Item Image, Product Matrix, Vendor) follow the same Import / Generate File Format pattern but take their own file formats — do not mix them with the item file.
Generate File Formatis the canonical source of the template. Always regenerate a fresh template from the version of Xilnex you are importing into, rather than reusing an old file you have lying around — the column set is version-dependent and can gain columns between releases.
The page header shows the profile scope (e.g. All Outlets). Confirm you are on the intended scope before importing.
The log table below lists every import that has been run:
| Column | What it tells you |
|---|---|
| File name | The uploaded file (e.g. ItemTemplate (14).csv) |
| Date | Date the import was run |
| Status | Processing state (e.g. Processed) |
| Total record(s) | Rows in the file |
| Success record(s) | Rows that imported successfully |
| Failed record(s) | Rows that were rejected |
More (…) |
Row-level menu — contains Preview, which opens the per-row result of that import (see Section 7.2) |
This log is your verification step. After every Portal import, check that Success = Total and Failed = 0. A row showing
Total 21 / Success 0 / Failed 21means the whole file was rejected — that is almost always a format or column problem, not 21 separate data problems.
The table is paginated (10 / 25 / 50 / 100 per page) with total record counts at the bottom, so past imports remain available for audit.
Both systems consume the same CSV. Generate it from Classic via Generate File Format, fill it in, and upload it to whichever system you prefer.
Line 1: @@##Write Time:06082026 095106
Line 2: Item Code,Item Name,Alternate Lookup,Attribute,Brand,Category,...
Line 3+: <your data rows>
The full generated template contains roughly 150 columns covering the entire item master. You are not expected to fill all of them — see the next section.
You do not have to keep every column. The header row is what drives the import: whatever columns you leave in the file are the fields the import will write. Columns you delete are simply not part of that import, so their existing values in the system are left alone.
This is what makes the import useful for fixing a missed update. If a batch of items went in with the wrong selling price, you do not need to rebuild the full item file and risk overwriting other fields — you cut the file down to just the price column and re-import.
Whichever columns you delete, keep the identifying column — Item Code. Partial update works by matching your rows against existing items on that code, so it has to stay in every file.
Full template header (abridged):
Item Code,Item Name,Alternate Lookup,Attribute,Brand,Category,...,Price 1,Price 2,...
Cut down to a price-only correction file:
@@##Write Time:06082026 095106
Item Code,Price 1
ITEM001,15.90
ITEM002,22.50
ITEM003,8.00
Result: Price 1 is updated on those three items. Names, categories, tax codes, flags and everything else are untouched.
| Purpose | Columns to keep |
|---|---|
| Fix selling price | Item Code, Price 1 (add Price 2–Price 7 as needed) |
| Re-categorise items | Item Code, Category, Department, Group |
| Set reorder points | Item Code, Reorder Point |
| Activate / deactivate items | Item Code, Active (0/1) |
| Assign vendor | Item Code, Vendor Code, Product Vendor |
| Update outlet assignment | Item Code, Outlet |
| Fill in a custom field | Item Code, Custom Field 1 |
Rule of thumb: if a column is in the file, treat its value as authoritative — a blank cell in an included column is still a value being sent. If you do not intend to change a field, remove the column rather than leaving it empty.
Item Code.xlsx)\Webbytes\ImportStatus folder and check the Status column on every row (see Section 7.1)For supplementary fields, repeat the same process using the Import item additional info data row and its generated template — it is a separate file, not extra columns on the main one.
Success record(s) should equal Total record(s)Failed record(s) should be 0… button on that log row and choose Preview — this is the only way to read why individual rows failed (see Section 7.2)Re-importing a corrected file is safe for partial updates — the same rows are matched on
Item Codeand rewritten. Each attempt is logged as its own line, so the log shows the full history of a fix (see the twoItemTemplate (14).csventries in the sample log — one at 2/4 success, then a clean 4/4 run).
Every import produces a per-row result, in both systems. Do not judge an import by whether it "ran" — always read the result. Rows can fail individually while the rest of the file imports fine.
The two systems expose the same information in different places.
\Webbytes\ImportStatus folderAfter a Classic import, a result file is written to the \Webbytes\ImportStatus folder. It is a copy of the imported CSV with a Status column added as the first column, so every row carries its own outcome.
Filename pattern: Item<ddMMyyyy><HHmmss>.csv — e.g. Item21112023102033.csv for an import run on 21 Nov 2023 at 10:20:33.
Structure:
@@##Write Time:21112023 102033
Status,Item Code,Item Name,Alternate Lookup,...
Import completed.,RECIPE001,recipe 001,,,...
Failed as cannot update item type for existing item.,RECIPE001,recipe 001,,,...
Status value |
Meaning |
|---|---|
Import completed. |
Row imported successfully |
Failed as ... |
Row rejected — the rest of the message is the reason |
Fixing and re-importing: the result file is your worklist. Filter to the failed rows, correct them, delete the
Statuscolumn, and re-import that cut-down file. The successful rows are already applied and do not need to be re-sent.
In the Item Import And Log table, click the … button on an import row, then choose Preview. This opens the Preview file — <filename>.csv dialog, which shows the same per-row outcome on screen:
| Column | Contents |
|---|---|
| Status | Success (green) or Failed (red) |
| Status remark | The failure reason — blank for successful rows |
| Item code / Item name | The row being reported on |
| Stock type, Division, Department, Type, Group, Category | Key field values from the row, for context |
The dialog is paginated (10 / 25 / 50 / 100) and has two buttons at the bottom:
Example from a real run:
| Status | Status remark | Item code | Stock type |
|---|---|---|---|
| Failed | Invalid package sub item code: ET-prepack11 |
ET-postpack11 | Postpack |
| Failed | Invalid package sub item code: ET-normal |
ET-prepack11 | Prepack |
| Success | ET-normal | Normal | |
| Success | ET-normal2 | Normal |
Note the ordering problem this exposes:
ET-postpack11referencedET-prepack11as a sub-item, andET-prepack11referencedET-normal— butET-normalwas further down the same file and did not exist yet when those rows were processed. Import component items before the packages that reference them, either by ordering rows correctly or by splitting into two imports.
The template's ~150 columns fall into these groups. The authoritative list for your version is always the file produced by Generate File Format — use this table to orient yourself, not as a substitute.
| Group | Example columns | Notes |
|---|---|---|
| Identity | Item Code, Item Name, Alternate Lookup, Description, Model |
Item Code is the matching key — always keep it |
| Classification | Category, Department, Division, Group, Brand, Type, Attribute, Color, Size, Unit of Measurement |
Master data values — should already exist in the system |
| Vendor & outlet | Vendor Code, Product Vendor, Outlet |
Product Vendor and Outlet accept multiple values using \| as the delimiter |
| Tax & compliance | Supply Tax Type, Purchase Tax Type, Tax Code (Supply), Tax Code (Purchase), Classification Code, Purchase Classification Code, Country Code, Article Number, Article Description |
e-Invoice / tax-related fields |
| Custom fields | Custom Field 1–15 |
Free-form, functional |
| Non-functional fields | Non Functional Field 1–50 |
Reference/storage only — no system behaviour attached |
| 0/1 flags | Active (0/1), Allow Sales Without Stocks (0/1), Enable Batch Control (0/1), Allow to Return (0/1), Allow FOC (0/1), Open Price (0/1), Publish to E-Commerce (0/1), RFID Enable (0/1), Exclude Service Charge (0/1) |
Enter 0 or 1 only |
| Item type | Item Type (0-Normal/1-Serialized/2-Service/3-Voucher/4-Weighted/5-Warranty/6-Matrix/7-Bundle/8-Postpack/9-Prepack/10-Recipe) |
Numeric code — the legend is in the column header itself |
| Pricing & cost | Price 1–Price 7, Custom Cost, Foreign Cost, Discount Rate, Point Factor |
Numeric |
| Stock & physical | Reorder Point, Weight, Height, Length, Width, Pack Quantity, Package Weight, Item Quantity Decimal |
Numeric |
| Package / BOM / matrix | Package Sub Item Code, Package Sub Item UOM, Package Sub Item Quantity, Package Sub Item Sale Type (0–5), Package Sub Item Yield %, Package Sub Item Cost Propotion %, Package Yield %, Package Produced Output Quantity, Matrix X, Matrix Y |
Only relevant for Bundle / Package / Matrix / Recipe item types |
| Commission | Commission 1–4 (Item) + rates, Driver Commission Rate/Percent, Installer Commission Rate/Percent |
Numeric |
| Dates | Purchase Unavailable Date From (dd/MM/yyyy), Purchase Unavailable Date To (dd/MM/yyyy), Purchase Unavailable Remark |
Format must be dd/MM/yyyy — Excel will happily reformat these; verify in a text editor before importing |
Generate File Format rather than reusing an old file — column sets change between versionsdd/MM/yyyy) and any code Excel likes to mangle into scientific notation or strip leading zeros fromOutlet column (with | between multiple outlets) where item-to-outlet assignment mattersStart every investigation with the per-row result — \Webbytes\ImportStatus in Classic, … → Preview in Portal (Section 7). The reason is written on the row itself; the table below maps the common ones.
| Problem | Likely cause / fix |
|---|---|
All rows failed (Success 0 / Failed = Total) |
A file-level problem, not a data problem — usually an altered header row, a stale template from an older version, or the file saved as .xlsx instead of .csv. Regenerate the template and rebuild the file |
| Some rows failed | Row-level data issues — read the Status / Status remark on each failed row, fix those rows, and re-import just them |
Failed as cannot update item type for existing item. |
The Item Type on your row differs from the item's current type. Item type cannot be changed on an existing item by import — either drop the Item Type column from the file, or handle the type change separately |
Invalid package sub item code: <code> |
The referenced sub-item does not exist yet. If the sub-item is further down the same file, it is not created in time — import component items before the packages that reference them, or split into two imports |
| Master data not recognised | Categories, departments, vendors, UOMs and tax codes referenced in the file must already exist in the system — create them first |
| Flag or numeric column rejected | 0/1 flag columns accept only 0 or 1; numeric columns must contain no text, currency symbols or thousands separators |
| Import succeeded but a field did not change | That column was not in your file. Add the column back and re-import |
| A field was wiped that you did not intend to change | The column was present but blank. Remove the column entirely for fields you are not updating |
| Dates rejected or shifted | Excel reformatted them. Set the date columns to Text and re-enter as dd/MM/yyyy, then verify in a text editor |
| Multi-value fields not applied | Product Vendor and Outlet require \| as the delimiter between values — commas will break the CSV |
| Wrong file format error on a non-item import | Barcode, BOM, Client, Vendor, Item Image and Product Matrix each have their own template — generate the one matching the row you are importing into |
Not verified at time of writing — to be filled in from testing or product knowledge:
@@##Write Time: line on line 1 is required by the parser, or whether a file without it still imports\Webbytes\ImportStatus folder, and whether it is local to the machine that ran the import or on a shared server locationItem Code creates a new item or is rejected (i.e. is the import upsert or update-only?)