Magento Bestellungen löschen und Nummernkreise definieren

Momentan gibt es leider keine einfache Möglichkeit, vorhandene Bestellungen komplett aus der Datenbank zu löschen. Im Forum finden sich dafür verschiedene Vorgehensweisen, und die die für mich am Besten funktioniert hat habe ich hier kurz zusammengefasst. Zusätzlich erkläre ich auch, wie man die Startnummern von Bestellungen und Rechnungen an die eigenen Bedürfnisse anpasst. Getestet habe ich das Ganze unter Magento 1.1.1 und 1.1.3.

Zunächst sollten Sie Zugriff auf Ihre Datenbank haben, am geläufigsten ist dafür PHPMyAdmin. Wählen Sie Ihre Magento Datenbank aus und machen Sie als erstes ein komplettes Backup dieser Datenbank über den Link zum Exportieren. Stellen Sie sicher, daß bei Struktur und Daten der Haken gesetzt ist und laden Sie sich das ganze Paket herunter. Alles gesichert? Dann öffnen Sie jetzt die SQL-Eingabemaske mit einem Klick auf “SQL”:

PHPMyAdmin SQL Link

In die folgende Texteingabebox können Sie jetzt unten stehende SQL-Blöcke einfügen und anschließend ausführen. Bitte beachten Sie, daß Sie dabei auf eigenes Risiko handeln! Falls Ihr Shop anschließend nicht mehr richtig oder gar nicht funktioniert, spielen Sie oben angelegtes Backup zurück. Für eine korrekte Funktionsweise der hier beschriebenen Skripte kann ich weder garantieren noch für eventuell entstandene Schäden haften. Natürlich wurde alles nach bestem Wissen und Gewissen getestet und für tauglich befunden, Nebeneffekte und Spätfolgen am Shop kann ich aber nicht ausschließen.

Löschen aller vorhandenen Bestellungen

Das Löschen der Bestellungen erfordert Änderungen in vielen Tabellen, und um Probleme mit den einzelnen Schlüssel-Beziehungen zu vermeiden wird zunächst diese Prüfung deaktiviert. Es folgt eine lange Liste von Tabellen, die Einträge zu den Bestellungen enthalten und die mit diesem SQL-Code geleert werden. Da sich die Daten nicht wiederherstellen lassen, ist ein Backup wie oben beschrieben unerlässlich! Der Code stammt aus diesem Forumsbeitrag

SET FOREIGN_KEY_CHECKS=0;

TRUNCATE `sales_order`;
TRUNCATE `sales_order_datetime`;
TRUNCATE `sales_order_decimal`;
TRUNCATE `sales_order_entity`;
TRUNCATE `sales_order_entity_datetime`;
TRUNCATE `sales_order_entity_decimal`;
TRUNCATE `sales_order_entity_int`;
TRUNCATE `sales_order_entity_text`;
TRUNCATE `sales_order_entity_varchar`;
TRUNCATE `sales_order_int`;
TRUNCATE `sales_order_text`;
TRUNCATE `sales_order_varchar`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;

ALTER TABLE `sales_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_datetime` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;

-- Reset all ID counters
TRUNCATE `eav_entity_store`;
ALTER TABLE  `eav_entity_store` AUTO_INCREMENT=1;

SET FOREIGN_KEY_CHECKS=1;

Löschen aller vorhandenen Kunden

Wenn Sie zusätzlich auch alle Kunden mit allen Daten löschen möchten, können Sie folgende SQL-Befehle zusätzlich ausführen. Der Admin-Benutzer ist davon nicht betroffen, da die Administratorenkonten keine regulären Kunden im System sind, sondern anders verwaltet werden.

SET FOREIGN_KEY_CHECKS=0;

-- reset customers
TRUNCATE `customer_address_entity`;
TRUNCATE `customer_address_entity_datetime`;
TRUNCATE `customer_address_entity_decimal`;
TRUNCATE `customer_address_entity_int`;
TRUNCATE `customer_address_entity_text`;
TRUNCATE `customer_address_entity_varchar`;
TRUNCATE `customer_entity`;
TRUNCATE `customer_entity_datetime`;
TRUNCATE `customer_entity_decimal`;
TRUNCATE `customer_entity_int`;
TRUNCATE `customer_entity_text`;
TRUNCATE `customer_entity_varchar`;
TRUNCATE `log_customer`;
TRUNCATE `log_visitor`;
TRUNCATE `log_visitor_info`;

ALTER TABLE `customer_address_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `log_customer` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1;

SET FOREIGN_KEY_CHECKS=1;

ACHTUNG: Diese SQL-Zeilen löschen unwiederbringlich alle Bestellungen und/oder Kunden aus der Datenbank! Sie haben danach einen “frischen” Magento Shop, der wieder mit der Bestellnummer 100000001 startet.

Ändern der automatischen Bestell- und Rechnungsnummern

Wenn Sie lieber mit anderer Bestellnummer als 100000001 starten wollen, dann wechseln Sie zur Tabelle eav_entity_store:

Die entity_type_id gibt an, um welche Art von generierter Nummer es sich dabei handelt. Die Zuordnungen für diese IDs finden Sie übrigens in der Tabelle eav_entity_type. Wenn Sie dort nachsehen, werden Sie feststellen, daß die von uns gesuchte ID für die Bestellnummern die 11 ist. Die Anzahl der Stellen wird dabei in der eav_entity_type festgelegt (Standard sind acht Stellen), der Präfix (increment_prefix) ist standardmäßig die ID des Magento Stores in dem die Bestellung ausgelöst wird.

Wenn Sie also die Nummern ändern möchten, können Sie hier einfach eine Bestellnummer setzen die von Magento dann als nächstes benutzt wird. Exemplarisch hier das Setzen der Bestellnummern für den Store mit der ID 1 auf 42 unter Beibehaltung des vorhandenen Präfixes:

UPDATE eav_entity_store SET increment_last_id = '100000042' WHERE entity_store_id = 3;

Sie können nach diesem Verfahren beliebige Nummernkreise für Ihre Bestellungen, Rechnungen, Memos usw. setzen. Magento verfügt über die nötigen Mittel um sehr viele Szenarien abzubilden, nur gibt es dafür leider noch kein GUI… daher ist momentan Handarbeit nötig. Ich hoffe die Ausführungen waren verständlich. Weiterhin viel Spaß mit Magento.

Veröffentlicht unter Magento Commerce, Schnipsel Getagged mit: , , , , , , ,
7 comments on “Magento Bestellungen löschen und Nummernkreise definieren
  1. Nils sagt:

    Hallo!

    Wie genau müßte ich vorgehen, wenn ich alle Bestellnummern mit einem “HOL” und einer 7-stelligen Nummer formatieren möchte, also z.B. HOL1000001, HOL1000002, usw.

    Vielen Dank, da ich noch recht frisch in Magento bin… Nils

  2. Ingo sagt:

    Hi Nils,

    einfach bei “increment_prefix” dein “HOL” eintragen, und die Nummern entsprechend anpassen bei “increment_last_id”. Magento zählt das dann automatisch hoch.

  3. Kay sagt:

    Hallo, hat jemand von euch eine Lösung parat wie ich kürzere Bestellnummern hin bekomme? So wie ich eine Änderung in der entity_type_id von 11 z.B. auf 8 vornehme legt er mir bei einer Bestellung eine komplett neue Tabelle an.

    Auch möchte ich gerne meine Kundennummern ändern. Gibt es da schon was drüber?

    Gruß Kay

  4. Terrafield sagt:

    Danke, der Artikel hat mir sehr geholfen.Hat mir sehr geholfen. Es war wichtig in der eav_entity_type nachzuschauen, da bei mir die IDs anders vergeben waren. Magento 1.5.1.0

    Meine increment_last_id hatte neun Stellen, im eav_entity_type wurde diese mit 8 Stellen vermerkt, das hatte mich überrascht, aber ich habs hingenommen. Ich nehme an, dass da die erste Stelle die store_id war die nicht mitgezählt wird?

  5. Rene sagt:

    Hi …

    Danke für den Hinweis mit eav_entry_store Tabelle … hast mir gerade den Tag gerettet.

    Gruß René

  6. Alexander sagt:

    Ist es auch möglich pro Website einen Nummernkreis in Magento zu definieren? Ich brauche nämlich einen Nummernkreis speziell für eine Website/Store/StoreView.

    Gruß, Alexander

    • Ingo sagt:

      Soweit ich weiß ist das mit Bordmitteln nicht so einfach lösbar. Es geht zwar, aber nicht ohne entsprechende Kenntnisse. Ich würde daher zu einer entsprechenden Extension raten, die sowas kann. Beste Grüße!

2 Pings/Trackbacks für "Magento Bestellungen löschen und Nummernkreise definieren"
  1. […] standardmäßig die ID des Magento Stores ist, in dem die Bestellung ausgelöst wird." (Quelle: hier) Im Shop meiner Kundin werden nun leider Bestellungen bzw. Rechnungen mit verschiedenen […]

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht.

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>