Online seit 2004 · Standort Römstedt
// ODOO 20 · JTL-WAWI · DATENMIGRATION

JTL-Wawi nach Odoo 20 migrieren: Große Artikelbestände sicher übertragen

Über 200.000 Artikel, mehr als 12.000 Kategorien und mehrere Lager: Wie wir den Wechsel von JTL-Wawi zu Odoo Online mit SQL-Exporten, Python und einer wiederaufnehmbaren API-Übertragung vorbereiten und umsetzen.

Ein Warenwirtschaftswechsel ist mehr als ein CSV-Import.


Wer einen großen Produktkatalog von JTL-Wawi nach Odoo übertragen möchte, muss neben Artikelnummern und Preisen auch Kategorien, Varianten, Beschreibungen, SEO-Daten, Bilder und Lagerstrukturen berücksichtigen. Dieser Praxisbericht zeigt unseren technischen Ansatz – einschließlich der Probleme, die bei großen Importläufen auftreten können.


201.661 JTL-Artikel
12.329 Kategorien
20 Lager

1. Ausgangssituation: JTL-Wawi als führendes System


Die bisherige Warenwirtschaft basiert auf JTL-Wawi 1.9 und einer Microsoft-SQL-Server-Datenbank. Ziel ist der schrittweise Aufbau von Odoo Online 20. Während der Migration bleibt JTL-Wawi zunächst das führende System. So lässt sich die Datenübernahme prüfen, ohne den laufenden Betrieb sofort umzustellen.

Besonders wichtig: Nicht alle Informationen liegen in einer einzigen Tabelle. Artikeldaten, mehrsprachige Beschreibungen, Kategoriezuordnungen, Preise, Lagerbestände und Bilder müssen zunächst sauber zusammengeführt werden.


2. Daten aus JTL-Wawi exportieren


Für den Export verwenden wir einen lesenden SQL-Zugriff und PowerShell. Die Daten werden in getrennte CSV-Dateien geschrieben. Das macht die Verarbeitung übersichtlicher und ermöglicht es, einzelne Datenbereiche unabhängig zu kontrollieren.

  • Artikelstammdaten mit Artikelnummern, Preisen und technischen Merkmalen
  • Artikelbeschreibungen, Namen und SEO-Felder
  • Kategorien einschließlich Eltern-Kind-Beziehungen
  • Artikel-Kategorie-Verknüpfungen
  • Bilder, Preisgruppen, Staffelpreise und Lagerdaten

Ein wichtiger Praxispunkt: Der Artikelname muss aus dem passenden Sprachdatensatz übernommen werden. Ein Stammdatenexport allein reicht dafür nicht unbedingt aus.


3. Kategorien vor den Artikeln übertragen


Bevor Produkte importiert werden, bauen wir die Website-Kategoriehierarchie in Odoo auf. Dafür nutzen wir das Modell product.public.category. Jede JTL-Kategorie erhält eine feste Zuordnung zu ihrer Odoo-ID. Die Elternkategorien werden vor den jeweiligen Unterkategorien angelegt.

In unserem Projekt wurden 12.326 von 12.329 Kategorien zugeordnet. Drei Konfliktfälle blieben zur gesonderten Prüfung offen. Eine Mapping-Datei dokumentiert die Zuordnungen, damit bei einem erneuten Lauf keine bereits erfassten Kategorien unnötig neu erstellt werden.

Bei mehreren Onlineshops kommt eine zweite Ebene hinzu: Die Kategorien können über ihre Website-Zuordnung gezielt für einzelne Odoo-Websites vorgesehen werden. Die Sichtbarkeit der Produkte muss zusätzlich geprüft werden.


4. Große Artikelmengen über die Odoo-API importieren


Für die Übertragung nutzen wir Python und die JSON-2-API von Odoo. Der Importer verarbeitet die exportierten Daten schrittweise und speichert nach Möglichkeit jede erfolgreiche Zuordnung zwischen JTL-Artikel und Odoo-Produktvorlage.

Im ersten Durchgang konzentrieren wir uns auf 183.871 Einzelartikel. Weitere 17.790 Datensätze in Variantenfamilien werden getrennt behandelt, damit Vater- und Kindartikel nicht versehentlich als unabhängige Produkte entstehen.

Warum nicht alles in einem Schritt?

Varianten, Bilder und Bestände benötigen andere Datenmodelle und Prüfungen als einfache Produktvorlagen. Eine phasenweise Migration reduziert das Risiko falscher Zuordnungen.


5. Import unterbrechen und sicher fortsetzen


Bei sehr großen Katalogen läuft ein Import häufig viele Stunden oder Tage. Deshalb muss er Unterbrechungen verkraften. In unserem Praxislauf wurde der Artikelimport nach 36.276 neu angelegten Produktvorlagen bewusst angehalten, um Arbeiten an der lokalen JTL-Datenbank durchzuführen.

Ein erneuter Aufruf des Importers kann anschließend anhand der gespeicherten Zuordnungen ansetzen. Entscheidend ist, dass die Mapping-Dateien erhalten bleiben und bereits in Odoo angelegte Datensätze vor einer Neuerstellung geprüft werden.

Beispiel: Import nach einer Unterbrechung erneut aufrufen
py -u $skript --folder $ordner --apply --all --pause 2

Die Variablen $skript und $ordner müssen auf die vorhandene Importdatei und das Exportverzeichnis zeigen. Der API-Schlüssel wird lokal als Umgebungsvariable bereitgestellt und gehört nicht in öffentlich zugängliche Skripte.

Achtung: Wird ein Produkt unmittelbar vor einem Abbruch in Odoo angelegt, ohne dass die Zuordnung gespeichert werden konnte, kann beim Neustart eine Dublette entstehen. Deshalb gehört ein Abgleich über eindeutige Artikelnummern und vorhandene Odoo-Datensätze zur Wiederaufnahmelogik.


6. API-Limits und lange Laufzeiten berücksichtigen


Cloud-APIs begrenzen unter Umständen die Zahl der Anfragen. Bei HTTP 429 sollte der Importer nicht unkontrolliert weiterlaufen, sondern mit Wartezeiten und Wiederholungsversuchen reagieren. Auch Schreibfehler bei lokalen Mapping-Dateien müssen abgefangen werden.

Eine bewusst eingestellte Pause zwischen den API-Aufrufen erhöht die Laufzeit, kann aber die Stabilität verbessern. Für einen großen Katalog sind aussagekräftige Protokolle, regelmäßige Sicherungen und ein jederzeit nachvollziehbarer Importstand wichtiger als eine möglichst hohe kurzfristige Geschwindigkeit.


7. Lagerbestände, Bilder und Multi-Website folgen separat


Nach den Produktvorlagen stehen weitere Arbeitsschritte an: Variantenbeziehungen, Produktbilder, Preisstaffeln, Lieferanteninformationen und die Lagerbestände der einzelnen Standorte. Lieferantenbestände dürfen dabei nicht mit physisch vorhandenem Eigenbestand verwechselt werden.

Auch die Aufteilung auf mehrere Shops ist ein eigenständiger Schritt. Odoo unterscheidet zwischen internen Produktkategorien und Website-Kategorien. Bei einem Multi-Website-Betrieb müssen sowohl Kategoriezuordnung als auch Produktveröffentlichung und Produktsichtbarkeit abgestimmt werden.


Fazit: Eine große Migration braucht klare Phasen


Die Übernahme eines umfangreichen JTL-Wawi-Katalogs nach Odoo 20 lässt sich technisch strukturieren: erst Daten prüfen und exportieren, dann Kategorien aufbauen, anschließend Produkte wiederaufnehmbar übertragen und zuletzt Varianten, Bilder und Bestände ergänzen.

Unser Projekt befindet sich weiterhin in der Umsetzung. Der bisherige Verlauf zeigt vor allem eines: Ein sauber dokumentierter, fortsetzbarer Import ist bei sechsstelligen Artikelzahlen unverzichtbar.


Unterstützung bei JTL-Wawi, Odoo oder der Shop-Migration?


OHD begleitet technische Schnittstellen, Datenübernahmen und E-Commerce-Projekte – von der Bestandsaufnahme bis zur praktischen Umsetzung.


Projekt anfragen Weitere Anleitungen