Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

...

  1. Check your spreadsheet is in the layout attached (note column headings are important)
  2. Ensure all the following has been done already
    1. All the Article Categories in the spreadsheet have already been created in the system
    2. All suppliers have been created in the system - the supplier column contains the supplier code
    3. 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
titleOrder Optimisation Cache

Orders use an optimisation cache that updates automatically as data ages

Administrators can update the cache manually anytime from the sales order screen

Image Added

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:

  1. Look for a material in the suppliers name (use named ranges) =INDEX(Materialresultlist,MATCH(TRUE,ISNUMBER(SEARCH(Materiallist,B2)),0))
    1. Note ensure the list of materials is sorted longest at the top - then "Shiny Red" will be found before "Red"
    2. Export from the item Profile for Material to find a list of possible values for that material
  2. If the supplier provides the name all in caps = Proper(a2)
    1. may need to adjust Ml to ml etc after

...

General Information

Measures

supplier relatedPricing RelatedFood RelatedclothingWarehouse related

SKU

  • Limit 20 Characters

packing factor

  • Number <=1
  • 2 decimal places

supplier name item OR supplier name part

  • Text

costprice

  • Default buy price per SKU

serving per pack OR ServingPerPack

size

Name

  • Text
  • Mandatory Field

pack size

  1. Whole Number

Supplier OR manufacturer

  1. Search code for supplier

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

  • Text

DimUnit

  1. mm, inch, m

their part number OR supplier part number

sellprice

  • Default Sell price per SKU

certification OR lifestyle

gender

short description

  • Text
widthBrand

RRP

  • per SKU

Serving Size

fabric

category

  • Bottom level product category - eg Fish / Fishbowls = Fishbowls
  • Mandatory Field
height

Range

  • Text - limit 50 characters

inner buy price

  • Price break special type of "Inner" - buy price

Claims

manuid

pack size

  • Whole number
  • Number of units in the SKU
depth

Warranty Period

  • Number of months

inner qty OR inner quantitiy

  • Price break special type of "Inner" - price break quantity.
  • Whole Number

NipServe

  1. yearSeasonId

UOM

  • Text describing the unit of measure - eg Carton of 50
  • Limit 20 characters

unit width


carton qty

  • Price break special type of "Carton" - price break quantity
  • Whole Number



unit qty OR unit quantity

  • Each, Each/Bulk, Pack, Other
unit depth

carton buy price

  • Price break special type of "Carton" - buy price



Colour

  • Text - max length 30
unit height

carton sell price

  • Price break special type of "Carton" - sell price



storage

  • donotstock
  • chilled
  • frozen
  • controlled
massunit

pallet qty OR pallet quantity

  • Price break special type of "Pallet" - price break quantity
  • Whole Number



name pkg OR name package

netmass

pallet buy price

  • Price break special type of "Pallet" - buy price



Xref OR extref OR ext ref

  • example code in previous system
grossmass

pallet sell price

  • Price break special type of "Pallet" - buy price



eanmeasure

alt buy price

  • Buy price in special circumstances = eg drop ship if different.



Barcodemeasure unit

gst

  • Ex - set Price-GST to ex-GST.

.




custom name

is Repairable

y


Buy/Sell?

  • Buy - Article is only bought but not sold



style group OR productgroup

  • Limit 30 characters


Packing Notes

column name has pack and notes




"Size" and "group" in column name

  • colour size group (same item in sizes and colour ranges)

assembly

  • JIT, Stock, Kit, Recipe


color

Cart Status

column name has Cart Status

new = new

top = top

featured = featured

none = hidden 




assembly

  • JIT, Stock, Kit, Recipe


Buy and Sell

Buy = Buy

Sell = Sell

Buy Sell = Buy and Sell

rest = None (none)




color





webdescription

  • html content
  • Example
No Format
nopaneltrue
<ul style="line-height: 20.8px;">_x000D_
	<li>&nbsp; Poly/cotton/Spandex</li>_x000D_
	<li>&nbsp; Roll-up long-sleeve with 1-button tab</li>_x000D_
	<li>&nbsp; Double back yoke</li>_x000D_
	<li>&nbsp; Triple-needle stitching</li>_x000D_
	<li>&nbsp; 2 front pockets with flaps</li>_x000D_
	<li>&nbsp; Available in gray, white or black</li>_x000D_
	<li>&nbsp; Sizes S-2XL</li>_x000D_
</ul>_x000D_
WebFeatures

ANY SIMPLE PROFILE TYPE = *Profilename

  • eg - item profile type = Material
    • Column is headed = *Material
    • Values can only be those defined
  • eg - item profile type = Glove Size
    • Column is headed = *Glove Size
    • Values can only be those defined

eg item profile

Image Removed

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.

  1. A carton/sleeve cannot be included in an 'updates only' import as this is only updating existing items
  2. Assembly must be "Pack"
  3. The line must have a carton qty.
  4. The SKU and the SKU suffixed with -S must not already be in the system.
  5. The name must be prefixed with INNER, SLEEVE, SINGLE or SINGLE UNIT.
  6. There will be no price breaks set up.
  7. 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:

  1. Assembly will be No.
  2. SKU will be suffixed with -S, unless it already has a -S suffix.
  3. 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:

  1. Assembly will be Pack.
  2. SKU suffix of -S will be removed if present.
  3. Name prefix of INNER, SLEEVE, SINGLE or SINGLE UNIT will be removed.
  4. Default sell price will be carton sell price.
  5. Default buy price will be carton buy price.
  6. Average cost will av cost multiplied by carton quantity.
  7. Pack size will pack size multiplied by carton quantity.
  8. There will be no RRP or alternate buy price.
  9. Assembly component quantity will be carton qty.
  10. 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

  1. SKU
  2. Qty
  3. sellprice

Importing Symptom Prices

Provide a spreadsheet with five columns

  1. SKU code of the Repair Item
  2. Symptom (must match the Symptom Description in the Symptom Master List)
  3. Likely Price - lower price
  4. Alternate Price - higher price
  5. Wholesale Price - price to charge the Stores

Drag the Excel File onto the Symptoms Page

Image Removed

Importing Stock Images

Provide a spreadsheet with two columns

  1. SKU code in the system
  2. URL for the related image

Image Removed

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 

  1. SKU
  2. Min
  3. Max

Adnmin - Stock - Warehouses - List - choose the warehouse > Drag XLS over the warehouse

Image Removed

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.

...








  1. Import/update article from spreadsheet: Case and order of words in column headings is not important.

    1. Cartons Per Layer, Article form, Selling / Shipping / Warranty (new):

      1. Column heading must contain all words ‘sell cartons per layer'.

    2. Layers Per Pallet, Article form, Selling / Shipping / Warranty (new):

      1. Column heading must contain all words 'sell layers per pallet'.

    3. Qty 20 foot, Article form, Supplier Shipping / Purchase Receipting (changed):

      1. Column heading must contain all words 'purchase units per layer'.

    4. Qty 40 foot, Article form, Supplier Shipping / Purchase Receipting (changed):

      1. Column heading must contain all words 'purchase layers per pallet'.







ANY SIMPLE PROFILE TYPE = *Profilename

  • eg - item profile type = Material
    • Column is headed = *Material
    • Values can only be those defined
  • eg - item profile type = Glove Size
    • Column is headed = *Glove Size
    • Values can only be those defined






Carton dimensions and barcode

Code Block
                        else if (col.Contains("depth") && col.Contains("carton")) iCartonDepth = i;
                        else if (col.Contains("width") && col.Contains("carton")) iCartonWidth = i;
                        else if (col.Contains("height") && col.Contains("carton")) iCartonHeight = i;
                        else if (col.Contains("barcode") && col.Contains("carton")) iCartonBarcode = i;








eg item profile

Image Added

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 

  1. SKU
  2. 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 

  1. SKU
  2. Min
  3. 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.

  1. A carton/sleeve cannot be included in an 'updates only' import as this is only updating existing items
  2. Assembly must be "Pack"
  3. The line must have a carton qty.
  4. The SKU and the SKU suffixed with -S must not already be in the system.
  5. The name must be prefixed with INNER, SLEEVE, SINGLE or SINGLE UNIT.
  6. There will be no price breaks set up.
  7. 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:

  1. Assembly will be No.
  2. SKU will be suffixed with -S, unless it already has a -S suffix.
  3. 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:

  1. Assembly will be Pack.
  2. SKU suffix of -S will be removed if present.
  3. Name prefix of INNER, SLEEVE, SINGLE or SINGLE UNIT will be removed.
  4. Default sell price will be carton sell price.
  5. Default buy price will be carton buy price.
  6. Average cost will av cost multiplied by carton quantity.
  7. Pack size will pack size multiplied by carton quantity.
  8. There will be no RRP or alternate buy price.
  9. Assembly component quantity will be carton qty.
  10. 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

  1. SKU
  2. Qty
  3. sellprice

Importing Symptom Prices

Provide a spreadsheet with five columns

  1. SKU code of the Repair Item
  2. Symptom (must match the Symptom Description in the Symptom Master List)
  3. Likely Price - lower price
  4. Alternate Price - higher price
  5. Wholesale Price - price to charge the Stores


Drag the Excel File onto the Symptoms Page

Image Added


Importing Stock Images

Provide a spreadsheet with two columns

  1. SKU code in the system
  2. URL for the related image

Image Added

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 

  1. SKU
  2. Min
  3. Max

Adnmin - Stock - Warehouses - List - choose the warehouse > Drag XLS over the warehouse

Image Added

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++;
 }

...