Hallo gec, Enrico_C, abernauer,
wir sind seit März 23 live mit der JTL
Wawi,
JTL-POS, dem JTL
Shop und auf Amazon (nur FBM) und mehr als zufrieden mit unserem Setup.
Setup:
Wawi 1.7.xx, JTL-POS für zwei Filialen, JTL- Shop 5.x
ABER: Amazon und der Shop darf nur aus den Bestand aus Laden Kiel (bei uns Lager Kiel) verkaufen, da wir dort mit JTL-
Shipping angebunden sind.
JTL-Pos - Ausgangswarenlager kann bei der Kasse direkt festgelegt werden -> passt
JTL-Shop Lager kann im JTL-Shop direkt festgelegt werden -> passt
Amazon FBM -> Problem, es wird der gesamte verfügbare Lagerbestand gemeldet, für einen Artikel, der bei Amazon gelistet ist, obwohl wir aus Hamburg nicht verschicken können.
EBAY: keine Ahnung, da wir auf Ebay nicht verkaufen
Manuell:
Unter F10 Plattformen - Amazon - Angebote - kann ein manueller MAXBestandNeu eingeben werden, der für die Amazonangebote dann automatisch hochgeladen wird und den aus JTL Verfügbaren Bestand über alle Lager überschreibt.
Manuell = zusätzliche Arbeit -> also automatisieren ...
Lösungsweg bei uns:
Frage alle verknüpften Amazon Artikel mit Lagerbestand in Lager Kiel ab und erzeuge einen Export, der dann per Import Amazon - MaxBestandNeu wieder eingelesen wird.
Gesteuert über eine BAT Datei, die stündlich aufgerufen wird.
Ameise -
folgendes Export SQL als eigener Export und dort als Vorlage gespeichert um eine EXPID zu erhalten
Hinweise: bei
- 'Atelier Zippel' AS Account tragen Sie bitte Ihre Amazon Konto Bezeichnung JTL (unter F10 Plattformen-> Amazon-Konto) ein
- Der Verfügbare Bestand wird durch 2 geteilt und als Ganzzahl zurückgegeben: Sum(Cast([fBestand]/2 as int)) AS [Max Bestand neu]
So haben wir immer eine flexible Reserve zwischen Ladenverkauf und dem Amazon gemeldetem Bestand.
Beispiel Bestand Laden Kiel: 23 / 2 = 11,5 -> 11 als Ganzzahl. Eine Restmenge von 1 ist dem Laden bzw. einem Austausch vorbehalten und wird als 0 gemeldet.
Wer den vollen Bestand melden möchte: Sum(Cast([fBestand] as int)) AS [Max Bestand neu]
- WHERE (((tlagerbestandProLagerLagerartikel.kWarenlager)=1))
1 ist bei und das Lager Kiel
Falls die ID unbekannt ist:
Bei F2 Artikel folgende eigene Übersicht anlegen:
Name: irgendwas
SQL:
SELECT TOP (1000) [kWarenLager]
,[cName]
,[cKuerzel]
,[cLagerTyp]
,[cBeschreibung]
FROM [dbo].[tWarenLager]
Speichern -> einen Artikel einmal anklicken und im Ergebnis kann die jeweilige ID kWarenLager für die Lager abgelesen werden
- HAVING (((pf_amazon_angebot.cFulfillmentChannel)='DEFAULT') AND ((pf_amazon_angebot.nPlattform)=51))
'DEFAULT' ist bei uns FBM, also eigener Versand, vom eigenen Lager
nPlattform=51 -> gem Tabelle tPlattform in SQLServer Wawi, die PlattformID für Amazon.de
Falls eine andere Amazon Plattform gewünscht wird:
Bei F2 Artikel folgende eigene Übersicht anlegen:
Name: irgendwas
SQL:
SELECT TOP (1000) [nPlattform]
,[cName]
,[cID]
,[nInet]
,[cWaehrung]
,[nTyp]
,[bRowversion]
FROM [dbo].[tPlattform]
Speichern -> einen Artikel einmal anklicken und im Ergebnis kann die jeweilige ID nPlattform abgelesen werden
Da wir auch Stücklisten anbieten wird noch der Part mit Union Select benötigt.
Dort die entsprechenden Hinweise ebenfalls beachten.
<<<<<<<<<<<Export SQL Anfang:
SELECT pf_amazon_angebot.cFulfillmentChannel, pf_amazon_angebot.nPlattform, pf_amazon_angebot.kUser, pf_amazon_angebot_mapping.cSellerSKU AS [Amazon-SKU], tlagerbestandProLagerLagerartikel.kArtikel, pf_amazon_angebot.nQuantity, pf_amazon_angebot_ext.nMaxBestand, Sum(tlagerbestandProLagerLagerartikel.fBestand) AS SummevonfBestand, 'Amazon.de' AS Marktplatz,
'Atelier Zippel' AS Account,
Sum(Cast([fBestand]/2 as int)) AS [Max Bestand neu]
FROM ((pf_amazon_angebot INNER JOIN pf_amazon_angebot_mapping ON (pf_amazon_angebot.cSellerSKU = pf_amazon_angebot_mapping.cSellerSKU) AND (pf_amazon_angebot.kUser = pf_amazon_angebot_mapping.kUser)) INNER JOIN pf_amazon_angebot_ext ON (pf_amazon_angebot.cSellerSKU = pf_amazon_angebot_ext.cSellerSKU) AND (pf_amazon_angebot.kUser = pf_amazon_angebot_ext.kUser) AND (pf_amazon_angebot.nPlattform = pf_amazon_angebot_ext.nPlattform)) INNER JOIN tlagerbestandProLagerLagerartikel ON pf_amazon_angebot_mapping.kArtikel = tlagerbestandProLagerLagerartikel.kArtikel
WHERE (((tlagerbestandProLagerLagerartikel.kWarenlager)=1))
GROUP BY pf_amazon_angebot.cFulfillmentChannel, pf_amazon_angebot.nPlattform, pf_amazon_angebot.kUser, pf_amazon_angebot_mapping.cSellerSKU, tlagerbestandProLagerLagerartikel.kArtikel, pf_amazon_angebot.nQuantity, pf_amazon_angebot_ext.nMaxBestand
HAVING (((pf_amazon_angebot.cFulfillmentChannel)='DEFAULT') AND ((pf_amazon_angebot.nPlattform)=51))
UNION SELECT pf_amazon_angebot.cFulfillmentChannel, pf_amazon_angebot.nPlattform, pf_amazon_angebot.kUser, pf_amazon_angebot_mapping.cSellerSKU AS [Amazon-SKU], vLagerbestandStuecklisteProLager.kArtikel, pf_amazon_angebot.nQuantity, pf_amazon_angebot_ext.nMaxBestand, Sum(vLagerbestandStuecklisteProLager.fLagerbestand) AS SummevonfLagerbestand, 'Amazon.de' AS Marktplatz,
'Atelier Zippel' AS Account,
Sum(Cast([fLagerbestand]/2 as int)) AS [Max Bestand neu]
FROM vLagerbestandStuecklisteProLager INNER JOIN ((pf_amazon_angebot INNER JOIN pf_amazon_angebot_mapping ON (pf_amazon_angebot.cSellerSKU = pf_amazon_angebot_mapping.cSellerSKU) AND (pf_amazon_angebot.kUser = pf_amazon_angebot_mapping.kUser)) INNER JOIN pf_amazon_angebot_ext ON (pf_amazon_angebot.cSellerSKU = pf_amazon_angebot_ext.cSellerSKU) AND (pf_amazon_angebot.kUser = pf_amazon_angebot_ext.kUser) AND (pf_amazon_angebot.nPlattform = pf_amazon_angebot_ext.nPlattform)) ON vLagerbestandStuecklisteProLager.kArtikel = pf_amazon_angebot_mapping.kArtikel
WHERE (((vLagerbestandStuecklisteProLager.kWarenlager)=1))
GROUP BY pf_amazon_angebot.cFulfillmentChannel, pf_amazon_angebot.nPlattform, pf_amazon_angebot.kUser, pf_amazon_angebot_mapping.cSellerSKU, vLagerbestandStuecklisteProLager.kArtikel, pf_amazon_angebot.nQuantity, pf_amazon_angebot_ext.nMaxBestand
HAVING (((pf_amazon_angebot.cFulfillmentChannel)='DEFAULT') AND ((pf_amazon_angebot.nPlattform)=51))
<<<<<<<<<<<<<<<Export SQL Ende
Export einmal Starten und Datei speichern
Jetzt Ameise Import - Marktplätze - Amazon Angebot ändern
Die gespeicherte Datei auswählen und laden
Einstellungen:
Import von , 19.03.2023 17:42:22, Version: 984
Dateiformat: CSV (Trennzeichen: Semikolon ( ; ), Quote-Zeichen: ", Escape-Zeichen: " Ab Zeile 0), Kopfzeile vorhanden
Zugeordnete Felder
---------------------------------------------------------------------------------------------------------
Marktplatz [9] Marktplatz
Account [10] Account
Amazon-SKU [4] Amazon-SKU
Max. Bestand neu [11] Max Bestand neu
Standardwerte (gelten NUR bei Neuanlage)
---------------------------------------------------------------------------------------------------------
Importeinstellungen
---------------------------------------------------------------------------------------------------------
Datei Encoding auswählen : windows-1252
Zu aktualisierende Artikel identifizieren anhand : Amazon SKU
'Eigene ID' zusätzlich zur Identifizierung heranziehen: Nein, nur Identifizierungsspalte berücksichtigen
Dezimal: : ( , ) Komma
Tausender: : ( . ) Punkt
Benutzer: kein Standardkonto
Plattform: kein Standard-Marktplatz
Lieferant: Kein Standardlieferant
Vorlage speichern, um die ImpID zu erhalten.
Erläuterungen zur BAT Datei:
if not defined MINI set mini=1 & start "" /min "%~dpnx0" %* & exit ruft diese BatchDatei noch mal selber minimiert auf, nur ein wirklich sehr kurzer Popup und schließt sich dann.
Ausgeführt wird dann die minimierte Version der Bat Datei.
- Set Variablen für tag, monat etc.
- "C:\Program Files (x86)\JTL-Software\JTL-wawi-ameise.exe" -w Standard -d AZippel -t EXP14 -o "C:\Kunden\AZippel\ImportMaxBestand\AmazonDEMaxMenge-%jahr%%monat%%tag%-%stunde%%minute%%sekunde%.csv"
Pfad zur Ameise - "Standard" das Profil, welches beim Login verwendet wird - "AZippel" bei uns die Datenbank - EXP 14 bei uns die ID der Exportvorlage
Und Pfad, wo die Export CSV gespeichert werden soll und deren Name.
Auf C den Ordner "Kunden" angelegt, dort Unterordner "AZippel", dort "ImportMaxBestand", dort "importiert"
Die Pfade müssen natürlich geändert werden ...
- Set Datei1 = setzt eine Variable mit dem Dateinamen für den Import
- Jetzt folgt der Import mit der entsprechenden gespeicherten ImportvorlagenID, bei uns "IMP21" mit der Datei1
"C:\Program Files (x86)\JTL-Software\JTL-wawi-ameise.exe" -w Standard -d AZippel -t IMP21 -i "C:\Kunden\AZippel\ImportMaxBestand\%Datei1%"
- Jetzt noch die CSV nach importiert verschieben
for /f %%i in ("C:\Kunden\AZippel\ImportMaxBestand\*.csv") do (move %%i "C:\Kunden\AZippel\ImportMaxBestand\importiert")
- und zum Abschluss die csv im Ordner ImportMaxBestand löschen
for /f %%i in ("C:\Kunden\AZippel\ImportMaxBestand\*.csv") do (del %%i)
Fertig!
<<<<<<<<<<<<<<Die BAT-Datei:
if not defined MINI set mini=1 & start "" /min "%~dpnx0" %* & exit
set tag=%date:~0,2%
set monat=%date:~3,2%
set jahr=%date:~6%
set /a stunde=%time:~0,2%
set minute=%time:~3,2%
set sekunde=%time:~6,2%
"C:\Program Files (x86)\JTL-Software\JTL-wawi-ameise.exe" -w
Standard -d
AZippel -t
EXP14 -o "
C:\Kunden\AZippel\ImportMaxBestand\AmazonDEMaxMenge-%jahr%%monat%%tag%-%stunde%%minute%%sekunde%.csv"
set Datei1=AmazonDEMaxMenge-%jahr%%monat%%tag%-%stunde%%minute%%sekunde%.csv
"C:\Program Files (x86)\JTL-Software\JTL-wawi-ameise.exe" -w
Standard -d
AZippel -t
IMP21 -i "
C:\Kunden\AZippel\ImportMaxBestand\%Datei1%"
for /f %%i in ("
C:\Kunden\AZippel\ImportMaxBestand\*.csv") do (move %%i "
C:\Kunden\AZippel\ImportMaxBestand\importiert")
for /f %%i in ("
C:\Kunden\AZippel\ImportMaxBestand\*.csv") do (del %%i)
exit
<<<<<<<<<<<<<<<Bat Datei Ende
LG
Bernd