Spreadsheet columns: stockid (or sku / item) + qty (or quantity / transfer qty). Pick the FROM and TO locations below — all rows in this upload move between those two locations.
For each row we classify against the source's on-hand and masterpack composition:
stockmaster.stockid (exact / case-insensitive) or stockmaster.description (case-insensitive) — always skippedSKU resolution order: exact stockid → case-insensitive stockid → case-insensitive description (only when unambiguous). If none match the row is flagged error_unknown_sku and skipped from the commit. The resolved stockid (and the tier used) is shown in the preview, with "from raw value" appearing underneath when the resolution differs.
One TrfID is reserved (systypes.typeid=16 +1). Then per row:
masterpacks — UPDATE loccode = TO for each masterpack that moves whole.masterpacks / innerpacks — when a partial split is required:
innerpacks.packcount shrunk to the remaining qty, cartoncount=1.cartoncount=1) + matching innerpack (packcount = the taken qty).locstock — decrement FROM, upsert TO (ON DUPLICATE KEY UPDATE quantity = quantity + VALUES(quantity)).stockmoves — two rows per transfer line, type=16, transno=TrfID: one at FROM with qty=-X, one at TO with qty=+X.loctransfers — audit row, shipqty = recqty (immediate receive).loctransfermasterpacks — one row per masterpack involved in this line, received=1.NOT touched: gltrans (skipped — most migration locations don't have a stockact configured, and a transfer between two inventory locations is debit + credit on the same GL account = net zero), debtortrans, supptrans.
Click to choose or drag your transfer .xlsx here