Table of Contents
...
- Check your spreadsheet is in the layout attached (note column headings are important)
- Ensure all the following has been done already
- All the Article Categories in the spreadsheet have already been created in the system
- All suppliers have been created in the system - the supplier column contains the supplier code
- You have adhered to the field limit for all the fields being uploaded
Import to Test - before importing to live
To avoid a difficult process of removing the articles imported - first test the upload and the results you get in test.
...
Warning | ||
---|---|---|
| ||
Orders use an optimisation cache that updates automatically as data ages Administrators can update the cache manually anytime from the sales order screen Soulfresh Global Pty Ltd |
Import to Test - before importing to live
To avoid a difficult process of removing the articles imported - first test the upload and the results you get in test.
Check some of the transactions you expect to make - sales orders, etc.
...
Note |
---|
Columns that do not match up with one of the import names will be ignored and the first line on the import result will be a list of the ignored columns Useful Google Sheet calculations:
|
...
General Information | Measures | supplier related | Pricing Related | Food Related | clothing | Warehouse related | ||
---|---|---|---|---|---|---|---|---|
SKU
| packing factor
| supplier name item OR supplier name part
| costprice
| serving per pack OR ServingPerPack | size | |||
Name
| pack size
| Supplier OR manufacturer
| av cost Note - user must have Secure Features#CanSeeItemBuyPrice with qualifier > 0 in order to update Note - a journal will be created for the value of the change unless "allow unjournalled stock adjustments" is ticked in Stock Control Settings | ingredients | sizeseq | |||
description
| DimUnit
| their part number OR supplier part number | sellprice
| certification OR lifestyle | gender | |||
short description
| width | Brand | RRP
| Serving Size | fabric | |||
category
| height | Range
| inner buy price
| Claims | manuid | |||
pack size
| depth | Warranty Period
| inner qty OR inner quantitiy
| NipServe |
| |||
UOM
| unit width | carton qty
| ||||||
unit qty OR unit quantity
| unit depth | carton buy price
| ||||||
Colour
| unit height | carton sell price
| ||||||
storage
| massunit | pallet qty OR pallet quantity
| ||||||
name pkg OR name package | netmass | pallet buy price
| ||||||
Xref OR extref OR ext ref
| grossmass | pallet sell price
| ||||||
ean | measure | alt buy price
| ||||||
Barcode | measure unit | gst
. | ||||||
custom name | is Repairable y | Buy/Sell?
| ||||||
style group OR productgroup
| Packing Notes column name has pack and notes | |||||||
"Size" and "group" in column name
| assembly
| color | Cart Status column name has Cart Status new = new top = top featured = featured none = hidden | |||||
assembly
| Buy and Sell Buy = Buy Sell = Sell Buy Sell = Buy and Sell rest = None (none) | |||||||
color | ||||||||
webdescription
| WebFeatures | ANY SIMPLE PROFILE TYPE = *Profilename
|
eg item profile
Importing Packs as a single row - both carton and each at the same time
Packs are a special type of Assembly - a SKU that breaks into a related smaller quantity.
- A carton/sleeve cannot be included in an 'updates only' import as this is only updating existing items
- Assembly must be "Pack"
- The line must have a carton qty.
- The SKU and the SKU suffixed with -S must not already be in the system.
- The name must be prefixed with INNER, SLEEVE, SINGLE or SINGLE UNIT.
- There will be no price breaks set up.
- If any of the above rules are not met then the line will be processed but not as a carton/sleeve.
All of the columns entered will be saved in the sleeve item except:
- Assembly will be No.
- SKU will be suffixed with -S, unless it already has a -S suffix.
- There will be no price breaks, i.e. inner, carton and pallet qty and buy and sell prices will be ignored.
The same information will be saved in the carton item except:
- Assembly will be Pack.
- SKU suffix of -S will be removed if present.
- Name prefix of INNER, SLEEVE, SINGLE or SINGLE UNIT will be removed.
- Default sell price will be carton sell price.
- Default buy price will be carton buy price.
- Average cost will av cost multiplied by carton quantity.
- Pack size will pack size multiplied by carton quantity.
- There will be no RRP or alternate buy price.
- Assembly component quantity will be carton qty.
- There will be no price breaks, i.e. inner and pallet qty and buy and sell prices will be ignored.
Price Breaks that are not a special type
Importing price breaks that are not a special type requires a separate sheet - import into prices tab
- SKU
- Qty
- sellprice
Importing Symptom Prices
Provide a spreadsheet with five columns
- SKU code of the Repair Item
- Symptom (must match the Symptom Description in the Symptom Master List)
- Likely Price - lower price
- Alternate Price - higher price
- Wholesale Price - price to charge the Stores
Drag the Excel File onto the Symptoms Page
Importing Stock Images
Provide a spreadsheet with two columns
- SKU code in the system
- URL for the related image
Importing Stock Min / Max levels by warehouse
The stock Articles must exist in the system (will get error messages for all articles that do not exist) + Users Must have Secure Features#IsStockManager
Columns
- SKU
- Min
- Max
Adnmin - Stock - Warehouses - List - choose the warehouse > Drag XLS over the warehouse
Action > Import items min/max to the warehouse
All items should be imported correctly
If not copy the log and make corrections to the import file and import again
For those interested - this is what the code looks like.
...
| ||||||||
ANY SIMPLE PROFILE TYPE = *Profilename
| ||||||||
Carton dimensions and barcode
|
eg item profile
Importing Packing Notes
The stock Articles must exist in the system (will get error messages for all articles that do not exist) + Users Must have Secure Features#IsStockManager
Columns
- SKU
- PackingNotes
Stock > Stock Articles > Drag XLS over the screen > Action > Import PackingNotes.xlsx - SKUs updates only to the article
All items should be imported correctly
- If not copy the log and make corrections to the import file and import again
Importing Stock Min / Max levels by warehouse
The stock Articles must exist in the system (will get error messages for all articles that do not exist) + Users Must have Secure Features#IsStockManager
Columns
- SKU
- Min
- Max
Admin > Stock Warehouses > List (choose the warehouse> > Drag XLS over the warehouse > Action > Import items min/max to the warehouse
All items should be imported correctly
- If not copy the log and make corrections to the import file and import again
Importing Packs as a single row - both carton and each at the same time
Packs are a special type of Assembly - a SKU that breaks into a related smaller quantity.
- A carton/sleeve cannot be included in an 'updates only' import as this is only updating existing items
- Assembly must be "Pack"
- The line must have a carton qty.
- The SKU and the SKU suffixed with -S must not already be in the system.
- The name must be prefixed with INNER, SLEEVE, SINGLE or SINGLE UNIT.
- There will be no price breaks set up.
- If any of the above rules are not met then the line will be processed but not as a carton/sleeve.
All of the columns entered will be saved in the sleeve item except:
- Assembly will be No.
- SKU will be suffixed with -S, unless it already has a -S suffix.
- There will be no price breaks, i.e. inner, carton and pallet qty and buy and sell prices will be ignored.
The same information will be saved in the carton item except:
- Assembly will be Pack.
- SKU suffix of -S will be removed if present.
- Name prefix of INNER, SLEEVE, SINGLE or SINGLE UNIT will be removed.
- Default sell price will be carton sell price.
- Default buy price will be carton buy price.
- Average cost will av cost multiplied by carton quantity.
- Pack size will pack size multiplied by carton quantity.
- There will be no RRP or alternate buy price.
- Assembly component quantity will be carton qty.
- There will be no price breaks, i.e. inner and pallet qty and buy and sell prices will be ignored.
Price Breaks that are not a special type
Importing price breaks that are not a special type requires a separate sheet - import into prices tab
- SKU
- Qty
- sellprice
Importing Symptom Prices
Provide a spreadsheet with five columns
- SKU code of the Repair Item
- Symptom (must match the Symptom Description in the Symptom Master List)
- Likely Price - lower price
- Alternate Price - higher price
- Wholesale Price - price to charge the Stores
Drag the Excel File onto the Symptoms Page
Importing Stock Images
Provide a spreadsheet with two columns
- SKU code in the system
- URL for the related image
Importing Stock Min / Max levels by warehouse
The stock Articles must exist in the system (will get error messages for all articles that do not exist) + Users Must have Secure Features#IsStockManager
Columns
- SKU
- Min
- Max
Adnmin - Stock - Warehouses - List - choose the warehouse > Drag XLS over the warehouse
Action > Import items min/max to the warehouse
All items should be imported correctly
If not copy the log and make corrections to the import file and import again
For those interested - this is what the code looks like.
Code Block |
---|
foreach (var c in excel.Columns) { if (c != null) { string col = c.ToLower(); if (col.StartsWith("*")) { string profile = col.Substring(1); int? profileId = ItemProfile.GetByName(Session, profile, ItemProfile.Usages.ItemForSale); if (profileId.HasValue) { iProfiles.Add(i, profileId.Value); } else { Session.TextLog.add("Unknown custom profile " + col); } } else if (col == "category") iCat = i; else if (col.StartsWith("manufactur") || col == "supplier") iSupplier = i; else if (col == "brand") iBrand = i; else if (col == "range") iRange = i; else if (col == "name") iName = i; else if (col == "status") iStatus = i; else if (col == "uom") iUOM = i; else if (col.Contains("image") && col.Contains("url")) iImage = i; else if (col.Contains("warranty") && col.Contains("month")) iWarrantyMonths = i; else if (col.Contains("purchase") && col.Contains("multiple")) iPurchaseMultiple = i; else if (col.Contains("unit") && (col.Contains("qty") || col.Contains("quantity"))) iQtyUnit = i; else if (col.Contains("buy") && col.Contains("sell")) iBuySell = i; else if (col == "categorysku") iCatiSKU = i; else if (col.StartsWith("manufactur == "colour") || iColour = i; else if (col == "suppliersize") iSupplieriSize = i; else if (col == "brand") iBrand.Contains("group") && (col.Contains("size") || col.Contains("colour"))) iGroup = i; else if (col == "range.Contains("storage")) iRangeiStorage = i; else if ((col == "name.Contains("style") iName = i; else if (col == "status&& (col.Contains("group") iStatus = i; else if (|| col.Length < 10)) || col == "uomproductgroup") iUOMiStyleGroup = i; else if (col.Contains("image") && col.Contains("url")) iImage == "description") iDesc = i; else if (col.Contains("warrantyshort") && col.Contains("monthdescription")) iWarrantyMonthsiShortDesc = i; else if (col.Contains("purchaseweb") && col.Contains("multipledescription")) iPurchaseMultipleiWebDescription = i; else if (col.Contains("unit") && (col.Contains("qtyweb") || col.Contains("quantity"))) iQtyUnit = i; else if (col.Contains("buyhtml")) && col.Contains("sellfeatures")) iBuySelliWebFeatures = i; else if (col == "sku.Contains("purchasing") iSKU = i; else if (col == "colour") iColour&& col.Contains("notes")) iPurchasingNotes = i; else if (col == "size.Contains("sellprice")) iSizeiSellPrice = i; else if (col.Contains("group") && (col.Contains("size") == "costprice" || col.Contains("colour == "defaultbuyprice"))) iGroupiCostPrice = i; else if (col.Contains("cost") && col.StartsWith("storageav")) iStorageiavgCost = i; else if ((col.Contains("styleprice") && col.StartsWith("alt") && col.Contains("groupbuy")) || col.Length < 10)) || col == "productgroup") iStyleGroupiAltBuyPrice = i; else if (col.Contains("rrp")) iRRP = i; else if (col == "description".Contains("gst")) iDesciGSTMode = i; else if ((col.Contains("shorttheir") &&|| col.Contains("descriptionsupplier")) iShortDesc = i; else if (&& col.Contains("webpart") && col.Contains("descriptionnumber")) iWebDescriptioniSupplierRef = i; else if (col.Contains("supplier") && col.Contains("webname") ||&& (col.Contains("htmlitem")) &&|| col.Contains("featurespart"))) iWebFeaturesiSupplierPartName = i; else if (col.Contains("purchasing") && col.Contains("notes")) iPurchasingNotes = i; else if (col.Contains("sellprice")) iSellPrice == "extref" || col == "ext ref" || col == "xref" || col.StartsWith("import")) iExtRef = i; else if (col == "costprice" || if (col == "defaultbuypricedimunit") iCostPriceiDimUnit = i; else if (col.Contains("cost") && col.StartsWith("av")) iavgCost == "width") iWidth = i; else if (col.Contains("price") && col.StartsWith("alt == "height") && col.Contains("buy")) iAltBuyPrice iHeight = i; else if (col.Contains("rrp")) iRRP = i; else if (depth") && col.Contains("gstunit")) iGSTModeiUnitDepth = i; else if ((col.Contains("theirwidth") ||&& col.Contains("supplierunit")) && iUnitWidth = i; else if (col.Contains("partheight") && col.Contains("numberunit")) iSupplierRefiUnitHeight = i; else if (col.Contains("supplier == "depth") && col.Contains("name") && (col.Contains("item") || col.Contains("part"))) iSupplierPartName iDepth = i; else if (col == "massunit") iMassUnit = i; else if (col == "netmass") iNetMass = i; else if (col == "extrefgrossmass") ||iGrossMass col= ==i; "ext ref"else ||if (col == "xref" || col.StartsWith("import.Contains("measure")) { if (col.Contains("unit")) iExtRefiMeasureUnit = i; else if (coliMeasure == "dimunit") iDimUnit = i; i; } else if (col == "width") iWidth.Contains("sell") && col.Contains("rate")) iSellrate = i; else if (col == "heightbarcode") iHeightiBarcode = i; else if (col.Contains("depth") && col.Contains("unit")) iUnitDepth == "assembly") iAssembly = i; else if (col.Contains("width") && col.Contains("unitrepair")) iUnitWidthiRepairable = i; else if (col.Contains("heightserving") && col.Contains("unitsize")) iUnitHeightiServingSize = i; else if (col == "depth.Contains("name") iDepth = i; else if (col == "massunit") iMassUnit = i; else if (col == "netmass") iNetMass&& (col.Contains("pkg") || col.Contains("package"))) iPackageName = i; else if (col == "grossmass") iGrossMass.Contains("size") && col.Contains("pack")) iPacksize = i; else if (col.Contains("measurepacking")) { if (&& col.Contains("unitfactor")) iMeasureUnitiPackingFactor = i; else iMeasure = i; } else if (if (col.Contains("serving") && col.Contains("sellper") && col.Contains("ratepack")) iSellrateiServPerPack = i; else if (col == "barcode".StartsWith("ingredients")) iBarcodeiIngredients = i; else if (col == "assembly") iAssembly = i; else if (col.Contains("repair")) iRepairable = i;.StartsWith("certification") || col.StartsWith("lifestyle")) { certifications.Add(i, col.Replace("certification", string.Empty)); } else if (col.ContainsStartsWith("servingclaims") &&) { dietaryClaims.Add(i, col.ContainsReplace("sizeclaims", string.Empty)); iServingSize =} i; else if (col.ContainsStartsWith("namenip") && (!col.Contains("pkgserve") ||) { int p = col.ContainsIndexOf("package("))) iPackageName = i; else if (col.Contains("size") && col.Contains("pack")) iPacksize = i; else if (col.Contains("packing") && col.Contains("factor")) iPackingFactor = i; else if (col.Contains("serving") && col.Contains("per") && col.Contains("pack")) iServPerPack = i;; if (p > 0) { col = col.Substring(0, p - 1); } string text = col.Replace("nip", string.Empty).Replace(":", string.Empty).Trim(); int nipId = ArticleNIPItem.IdForText(Session, text); if (nipId > 0) iNIP.Add(i, nipId); else Session.TextLog.add("No NIP item found for " + text); } else if (col.StartsWith("ingredientsinner")) iIngredients ={ i; else if (col.StartsWithContains("certificationqty") || col.StartsWithContains("lifestylequantity")) { certifications.Add(i, col.Replace("certification", string.Empty))iInnerQty = i; } else if (col.StartsWithContains("claimssell")) { dietaryClaims.Add(i, col.Replace("claims", string.Empty));iInnerSellPrice = i; } else { iInnerBuyPrice = i; } } else if (col.StartsWith("nipcarton") && !) { if (col.Contains("serveqty")) { int p = || col.IndexOfContains("(quantity"); if (p > 0) { col = col.Substring(0, p - 1) iCartonQty = i; } stringelse textif = (col.ReplaceContains("nip", string.Empty).Replace(":", string.Empty).Trim(); int nipId = ArticleNIPItem.IdForText(Session, text); if (nipId > 0) iNIP.Add(i, nipId); else Session.TextLog.add("No NIP item found for " + text);sell")) { iCartonSellPrice = i; } else { iCartonBuyPrice = i; } } else if (col.StartsWith("innerpallet")) { if (col.Contains("qty") || col.Contains("quantity")) { iInnerQtyiPalletQty = i; } else { iPalletBuyPrice = i; } else if (col.Contains("selldepth")) { iInnerSellPrice && col.Contains("carton")) iCartonDepth = i; } else { iInnerBuyPrice = i; } } else if (col.StartsWith("carton")) { else if (col.Contains("qtywidth") ||&& col.Contains("quantitycarton")) { iCartonQty = i; } else if (iCartonWidth = i; else if (col.Contains("height") && col.Contains("sellcarton")) iCartonHeight {= i; iCartonSellPrice = i; } else { iCartonBuyPrice = i; } } else if (col.StartsWith("pallet")) { else if (col.Contains("qtybarcode") ||&& col.Contains("quantitycarton")) iCartonBarcode { iPalletQty = i; } else { iPalletBuyPrice = i; } } else { Session.TextLog.add("Column ignored: " + c); } } i++; } |
...