Neu Artikelverwaltung -> Bilder je Plattform

ReinholdB

Mitglied
7. September 2018
16
2
Die Übersicht ist Ergebnis von langem vergeblichen Suchen, Unverständnis und großem Frust darüber, dass es in JTL nicht möglich ist, massenhaft Bilder für eine Plattform zu ersetzen.
Über die Ameise kann ich zwar Plattform-spezifisch Bilder laden. aber nur zusätzlich oder mit vorherigem Löschen sämtlicher Zuordnungen für alle Plattformen.
Ich kann auch Bilder exportieren, aber leider ohne Information über die Zuordnung zu Plattformen.
Manuell je Artikel geht es aber bei Varkombis mit über 200 Kindern auch nicht.
Wollte das lange nicht glauben, dass JTL keine Möglichkeit für eine solche doch nicht ungewöhnliche Anforderung bietet. Ich habe jedenfalls nichts gefunden.
Ich habe die Informationen jetzt direkt aus der Datenbank gezogen und konnte zusammen mit einem Bilderexport und neuem Import (mit Vorab-Löschen) das Gewünschte erreichen.
Und da mir dann aufgefallen ist, dass es als Listenübersicht auch funktioniert, wollte ich das gene teilen. Vielleicht hilft es jemandem, der ein ähnliches Anliegen hat.

SQL:
-- ArtikelBilder je Plattform z.B. für Ameise NeuImport
---- Standardartikel oder Vaterartikel bei Varkombis
SELECT a.cArtNr AS ArtNr, p.cName AS Plattform, abp.nNr AS PlattformBildNummer, ab.Bildname AS ExportBildname, b.cQuelle AS Quelle, b.dErstellt AS Erstellt, b.dAenderung AS Aenderung, b.nDateigroesse AS Dateigroesse, b.nBreite AS Breite, b.nHoehe AS Hoehe, b.nVorschauDateigroesse AS VorschauDateigroesse, b.nVorschauBreite AS VorschauBreite, b.nVorschauHoehe AS VorschauHoehe
FROM dbo.tArtikelbildPlattform AS abp
INNER JOIN dbo.tArtikel AS a
    ON abp.kArtikel = a.kArtikel
INNER JOIN dbo.tPlattform AS p
    ON abp.kPlattform = p.nPlattform
INNER JOIN dbo.tBild AS b
    ON abp.kBild = b.kBild
INNER JOIN (
  SELECT dbo.tArtikelbildPlattform.kArtikel AS ArtikelID, dbo.tArtikelbildPlattform.kBild AS BildID, CONCAT   (dbo.tArtikel.cArtNr,'-',dbo.tArtikelbildPlattform.nNr) AS Bildname
  FROM dbo.tArtikelbildPlattform
  INNER JOIN dbo.tArtikel
    ON dbo.tArtikelbildPlattform.kArtikel = dbo.tArtikel.kArtikel
  WHERE dbo.tArtikelbildPlattform.kPlattform = 1) AS ab
    ON ab.ArtikelID = abp.kArtikel AND ab.BildID = abp.kBild
WHERE abp.kPlattform <> 1
  AND a.kArtikel = @Key
UNION
---- Kinderartikel bei Varkombis
SELECT a.cArtNr AS ArtNr, p.cName AS Plattform, abp.nNr AS PlattformBildNummer, ab.Bildname AS ExportBildname, b.cQuelle AS Quelle, b.dErstellt AS Erstellt, b.dAenderung AS Aenderung, b.nDateigroesse AS Dateigroesse, b.nBreite AS Breite, b.nHoehe AS Hoehe, b.nVorschauDateigroesse AS VorschauDateigroesse, b.nVorschauBreite AS VorschauBreite, b.nVorschauHoehe AS VorschauHoehe
FROM dbo.tArtikelbildPlattform AS abp
INNER JOIN dbo.tArtikel AS a
    ON abp.kArtikel = a.kArtikel
INNER JOIN dbo.tPlattform AS p
    ON abp.kPlattform = p.nPlattform
INNER JOIN dbo.tBild AS b
    ON abp.kBild = b.kBild
INNER JOIN (
  SELECT dbo.tArtikelbildPlattform.kArtikel AS ArtikelID, dbo.tArtikelbildPlattform.kBild AS BildID, CONCAT   (dbo.tArtikel.cArtNr,'-',dbo.tArtikelbildPlattform.nNr) AS Bildname
  FROM dbo.tArtikelbildPlattform
  INNER JOIN dbo.tArtikel
    ON dbo.tArtikelbildPlattform.kArtikel = dbo.tArtikel.kArtikel
  WHERE dbo.tArtikelbildPlattform.kPlattform = 1) AS ab
    ON ab.ArtikelID = abp.kArtikel AND ab.BildID = abp.kBild
WHERE abp.kPlattform <> 1
  AND a.kVaterArtikel = @Key
ORDER BY a.cArtNr,p.cName,abp.nNr
Anmerkung:
(1) Bei mehr als einem Onlineshop muss evt noch was angepasst werden
(2) Für meine Zwecke haben die 4 ersten Spalten gereicht, aber evt sind die weiteren Bild-Daten interessant
(3) Ich verwende die exportierten Bilder zum Neuladen, evt sind aber die Bildreferenzen in Quelle eine Alternative, falls man die Bilder noch so vorliegen hat

Für meine Anforderung bin ich nun so vorgegangen:
  1. Für Vater-/Kinder-Artikel einen ArtikelBilder-Export per Ameise durchgeführt mit "Bildnamen benennen nach Artikelnummer"
  2. Für einen Varkombiartikel (Vater und Kinder) die Daten lt SQL oben ermittelt
  3. Die Listenform in eine breite Darstellung (1 Zeile je Artikelnummer) überführt (dabei noch ".jpg" angehängt an ExportBildname) und als CSV-Datei bereitgestellt
  4. Für die Plattform, die neue Bilder erhalen soll, die Bildnamen gelöscht in der CSV-Datei
  5. Eine Vorlage für Ameisen-Import "Artikelbilder je Plattform" für die CSV-Datei erstellt (den Suffix ".jpg" kann man alternativ auch hier erstellen) mit Option "Zuordnungen vorher löschen"
  6. Import durchgeführt. Sollte jetzt wie vorher sein, nur ohne die in der CSV-Datei gelöschten Plattformzuweisungen
  7. Und jetzt die neuen Bilder für die Plattform importiert wie üblich (jetzt nur neue Zuordnungen)
Zu 3 hier noch der Excel-VBA-Code, den ich verwende. Falls mehr Plattformen oder mehr Bilder je Plattform nötig sind, muss das angepasst werden.

Code:
Sub Fill_ImportFile()
    'Transform normalized output from SQL extract (Export sheet) to Ameise Bilder import file (Import sheet)
    'Export data: ArtNr, Plattform, PlattformBildNummer, ExportBildname
    'Import data: Artikelnummer, AmazonB1, ..., AmazonB20, EbayB1, ..., EbayB20,ShopB1, ..., ShopB20
    'The range with the Export data from SQL.
    Dim rnExport As Range
    'Row variables used (Export)
    Dim lnLastRow As Long
    Dim lnRowCount As Long
    'Row and Column variables used (Import)
    Dim lnCounterR As Long
    Dim lnCounterC As Long
    'Column Offset per platform in Import Sheet
    Dim lnPlattformOffset As Long
    'Artikelnummer stored to check change
    Dim strArtnr As String

    Set rnExport = Worksheets("Export").UsedRange
    lnLastRow = rnExport.Rows.Count
    lnCounterR = 1
    strArtnr = "leer"
    For lnRowCount = 2 To lnLastRow
      If rnExport.Cells(lnRowCount, 1) <> strArtnr Then
        strArtnr = rnExport.Cells(lnRowCount, 1)
        lnCounterR = lnCounterR + 1
      End If
      If rnExport.Cells(lnRowCount, 2) = "Amazon" Then
        lnPlattformOffset = 0
      ElseIf rnExport.Cells(lnRowCount, 2) = "eBay" Then
        lnPlattformOffset = 20
      ElseIf rnExport.Cells(lnRowCount, 2) = "Onlineshop" Then
        lnPlattformOffset = 40
      End If
      Worksheets("Import").Cells(lnCounterR, 1).Value = rnExport.Cells(lnRowCount, 1)
      lnCounterC = lnPlattformOffset + rnExport.Cells(lnRowCount, 3) + 1
      Worksheets("Import").Cells(lnCounterR, lnCounterC).Value = rnExport.Cells(lnRowCount, 4) & ".jpg"
    Next lnRowCount
End Sub
Für mich hat es so funktioniert und ich habe eine brauchbare Lösung für das Aktualisieren von Bildern. Wird aber nicht für jeden und alles funktionieren. Deshalb unbedingt testen, wer es einsetzen will.
 
  • Gefällt mir
Reaktionen: Thomas Lisson

Thomas Lisson

Administrator
Mitarbeiter
24. März 2006
15.532
221
Köln
Hi,

zunächst einmal: Vielen Dan fürs Teilen!

Über die Ameise kann ich zwar Plattform-spezifisch Bilder laden. aber nur zusätzlich oder mit vorherigem Löschen sämtlicher Zuordnungen für alle Plattformen.
Wäre aber nicht ein möglicher Weg, dass man einfach alle Bilder inkl. Zuordnungen neu importiert mit der Einstellung, dass bisherige Bilder des jeweiligen Artikels komplett gelöscht werden sollen vor dem Import?
 

ReinholdB

Mitglied
7. September 2018
16
2
Ja, so habe ich das ja dann auch gemacht. Aber ich brauche die Zuordnungen um Zeitpunkt vor dem Löschen und die bekomme ich nicht so einfach raus.
Wenn ich 5 Bilder habe und bei Shop,Amazon,eBay sind die gleich, dann ist das ja kein Problem. Aber eBay will ein Galeriebild beim Vater und rechteckig und rund Bilder muss ich schon bei der ersten Größenvariante einer Farbe hinterlegen , Amazon will die Swatchbilder genau als Nr 10 , beim Shop muss ich auch überlegen, was in die Artikellisten (Vater) kommt,etc,...
Falls alle Bilder und Importlisten gut aufgehoben werden, kann man auch damit arbeiten. Aber ich dachte ja mal, dass JTL das alles gut verwaltet (PIM?).