Magento 2 – Nummernkreis anpassen

Wie schon in Magento 1 (siehe hier) wollen wir auch in Magento 2 die Nummernkreise anpassen. Die standardmäßig vergebenen Nummern [Nummer des Storeviews]000000000 sind nicht wirklich schön und in wahrscheinlich den meisten Fällen auch komplett überproportioniert – wer rechnet schon damit fast 1 Mrd. Bestellnummern vergeben zu müssen? Wir wollen also die Bestellnummern, Rechnungsnummern, Lieferscheinnummern und Gutschriftsnummern anpassen. Es soll für die einfache Zuordnung zum jeweiligen Onlineshop ein Prefix vergeben werden, so dass man direkt an einer Überweisung mit Nennung der Bestellnummer oder Support weiß um welchen Shop es geht. Bei der Anzahl der Stellen werden wir hingegen nicht nach Shop differenzieren und immer 6 Stellen (hinter dem Prefix) haben.

Somit hatten wir zwei Anforderungen:
1. Anzahl der Stellen der Nummern reduzieren auf 6 Stellen
2. Prefix für eindeutige Zuordnung zu einem Shopprojekt

Was in Magento 1 noch schnell und komfortabel über eine einzige Tabelle in der Datenbank zu erledigen war, muss in Magento 2 (wen überrascht es?) mit deutlich mehr Aufwand erledigt werden.

Für das Prefix wird in der Datenbank die Tabelle “sales_sequence_profile” geöffnet. In der Spalte “prefix” kann dann das gewünschte Prefix eingetragen werden – also die Zeichen, die jeder Nummer vorangestellt werden. Diese kommen ZUSÄTZLICH zu den 9 (bzw. nach Änderung 6) Stellen der eigentlichen Nummer.

Wie man erkennen kann, werden immer Viererblöcke (1-4/5-8/…) für einen Storeview zuständig. Die erste Zeile ist die Bestellnummer, die zweite die Rechnungsnummer, die dritte die Gutschriftsnummer und die vierte die Lieferscheinnummer. Dies wiederholt sich pro Storeview. Man kann dies aber auch in der Tabelle “sales_sequence_meta” nachlesen:

Dies war der schnelle und vergleichsweise einfache Teil der Sache. Nachdem man also das Prefix eingetragen (natürlich geht das übrigens auch für das Suffix in der Spalte “suffix”), werden ab diesem Zeitpunkt alle angepassten Nummernkreise mit diesem Prefix versehen.

Teil 2 “Anpassung der Nummernkreis-Länge” ist da etwas umständlicher. Es gibt eine Quick-and-Dirty-Lösung, die ich nicht empfehlen würde und eine anständige.

Bei beiden Lösungen muss die von Magento standardmäßig vorgesehene Nummernlänge von 9 Stellen aus Datei “/vendor/magento/module-sales-sequence/Model/Sequence.php” (ca. Zeile 22) überschrieben werden.

Direkt in der Datei würde ich dies nicht einmal in einer QnD-Lösung machen. Daher wäre der QnD-Ansatz folgender:

Öffnen der Datei /app/etc/di.xml
Dort wird dann folgender Code vor dem schließenden </config> eingefügt

<type name="Magento\SalesSequence\Model\Sequence">
    <arguments>
        <argument name="pattern" xsi:type="string"><![CDATA[%s%'.06d%s]]></argument>
    </arguments>
</type>

Je nach Shop muss dann noch upgegraded / deployed / compiled oder auch nur der Cache gelöscht werden. Anschließend sind alle NEU vergebenen Nummern nur noch 6-stellig.

Der Nachteil dieser QnD-Lösung ist jedoch, dass die Änderung mglw. zukünftig mit einem Update oder einer angepassten di.xml verloren gehen könnte. Daher macht es mehr Sinn ein kleines Modul zu schreiben, welches diese Änderung auch über ein Update hinaus sicherstellt.

Dies machen wir folgendermaßen:

  • Erstellen eines Verzeichnispfades für das Modul wie z.B. “app/code/Commercers/Idlength”
  • Erstellen einer Datei “registration.php” in diesem Verzeichnis. Diese hat folgenden Inhalt
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Commercers_Idlength',
    __DIR__
);
  • Anlegen eines Verzeichnisses “app/code/Commercers/Idlength/etc”
  • Erstellen einer Datei di.xml mit folgendem Inhalt
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\SalesSequence\Model\Sequence">
    <arguments>
        <argument name="pattern" xsi:type="string"><![CDATA[%s%'.06d%s]]></argument>
    </arguments>
</type>
</config>
  • Erstellen einer weiteren Datei in diesem Ordner mit dem Namen “module.xml” mit folgendem Inhalt
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Commercers_Idlength" setup_version="1.0.0">
    </module>
</config>

Anschließend muss noch wie oben je nach Shop upgegraded / deployed / compiled oder auch nur der Cache gelöscht werden. Anschließend haben die Nummern nur noch 6 Stellen. Wenn man mehr oder weniger Stellen haben will, muss man nur in der eben erstellten di.xml die Stelle “06%d” anpassen.

Published by Covos

Seit 2009 arbeite ich nun intensiv mit Magento. Begonnen habe ich mit der Erstellung und dem Betrieb von B2C-Shops. Ausgeweitet wurde dies durch meine Tätigkeit im Logistik-Sektor. Hieraus entstanden erste spezialisierte B2E-Systeme. Heute arbeite ich tag-täglich mit spannenden B2C-, B2B- und B2E-Projekten und berichte in diesem Blog über Herausforderungen und gebe Insider-Tipps.

Leave a Reply

Your email address will not be published. Required fields are marked *