Bestellnummer mit Variable z.B. Datum erstellen?

Hej zusammen! Hat jemand eine Idee, wo ich ansetzen muss, um die Bestellnummernvergabe zu ändern? Bei den Numemrnkreisen kann kann ich ja nur fortlaufende Ziffern vergeben. Ich hätte sie gern nach Datum vergeben: “[Jahr][Monat][Tag]-000001” …? :wink: Beste Grüße Shopster

In sOrder::sGetOrderNumber() wird die Bestellnummer generiert. Viele Grüße

1 „Gefällt mir“

Hallo zusammen genau das Teilstück suche ich auch hab aber „sOrder::sGetOrderNumber()“ nirgens gefunden. oder meint ihr die unter engine/core/class/sOrder.php??? public function sGetOrderNumber() { $sql = „/*NO LIMIT*/ SELECT number FROM s_order_number WHERE name=‚invoice‘ FOR UPDATE“; $ordernumber = $this->sSYSTEM->sDB_CONNECTION->GetOne($sql); $sql = „UPDATE s_order_number SET [color=red]number=number+1[/color] WHERE name=‚invoice‘“; $this->sSYSTEM->sDB_CONNECTION->Execute($sql); $ordernumber += 1; $ordernumber = Enlight()->Events()->filter(‚Shopware_Modules_Order_GetOrdernumber_FilterOrdernumber‘, $ordernumber, array(‚subject‘=>$this)); return $ordernumber; } Wichtig dabei ist das natürlich bei der amerikanischen datumsreinfolge das es jeden Tag bei 20131018-001 wieder beginnt. [color=green]Wie genau ändre ich das richtig ab und vor allem wo?[/color] vielen Dank und Gruß

Hej! Danke! Genau soweit bin ich auch gekommen. In sOrder sind die Bestellnummern eingetragen und sGetOrderNumber() nimmt selbige und addiert “1”. Wie aber bekomme ich in “meine” Nummer in die Ausgangstabelle? Ich stehe da etwas auf dem Schlauch, wie´s scheint. Hat jemand noch eine Idee für uns? Grüße Christian

Ich komme der Sache näher aber sie ist noch nicht 100% funktionsreif. das durch eine freundliche unterstüzung struckturiert wurde, hier eine weiterentwicklung zum script: public function sGetOrderNumber() { $sql = "/\*NO LIMIT\*/ SELECT number FROM s\_order\_number WHERE name='invoice' FOR UPDATE"; $ordernumber = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetOne($sql); if ( substr( $ordernumber, 0, 10 ) != date( "Ymd" ) ) $ordernumber = date( "Ymd" ) . "00001"; else $ordernumber = date( "Ymd" ) . str\_pad( ( (int) substr( $ordernumber, -5 ) + 1 ), 5, "0", STR\_PAD\_LEFT ); $sql = "UPDATE s\_order\_number SET number='" . $ordernumber . "' WHERE name='invoice'"; $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Execute($sql); $ordernumber = Enlight()-\>Events()-\>filter('Shopware\_Modules\_Order\_GetOrdernumber\_FilterOrdernumber', $ordernumber, array('subject'=\>$this)); return $ordernumber; } Die IF ELSE Schleife funktioniert noch nicht korrekt! Es wird immer wieder die gleiche Bestellnummer generiert 2013102200001 siehe Bild.

Das führt dazu das ich diese unter Bestellungen gar nicht mehr finden kann. Nur durch Zufall auf einem anderen Kundenkonto. Unter Bestellungen kann ich nun auch nicht mehr die Testbestellung löschen ??? ähhh

Hallo Shopbetreiber, konntest Du das Problem inzwischen lösen? Ich bin einen SChritt weitergekommen und kann die Nummer generieren: public function sGetOrderNumber() { $sql = "/\*NO LIMIT\*/ SELECT SUBSTRING(number, 7) FROM s\_order\_number WHERE name='invoice' FOR UPDATE"; $ordernumber = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetOne($sql); $sql = "UPDATE s\_order\_number SET number=CONCAT(DATE\_FORMAT(NOW(), '%y%m%d'), LPAD(SUBSTRING(number, 7)+1, 6, '0')) WHERE name='invoice'"; $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Execute($sql); $ordernumber = date('ymd') . str\_pad($ordernumber+1, 6, "0", STR\_PAD\_LEFT); } Wegen der Länge der Nummer war´s notwendig, den Feldtyp in s_Order_number von INT auf BIGINT zu ändern. Leider wird die Nummer nun auf den Bestellbestätigungen nicht mehr ausgegeben. Beste Grüße Christian

[quote=„Shopster“]Hallo Shopbetreiber, konntest Du das Problem inzwischen lösen? Ich bin einen SChritt weitergekommen und kann die Nummer generieren: public function sGetOrderNumber() { $sql = "/\*NO LIMIT\*/ SELECT SUBSTRING(number, 7) FROM s\_order\_number WHERE name='invoice' FOR UPDATE"; $ordernumber = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetOne($sql); $sql = "UPDATE s\_order\_number SET number=CONCAT(DATE\_FORMAT(NOW(), '%y%m%d'), LPAD(SUBSTRING(number, 7)+1, 6, '0')) WHERE name='invoice'"; $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Execute($sql); $ordernumber = date('ymd') . str\_pad($ordernumber+1, 6, "0", STR\_PAD\_LEFT); } Wegen der Länge der Nummer war´s notwendig, den Feldtyp in s_Order_number von INT auf BIGINT zu ändern. Leider wird die Nummer nun auf den Bestellbestätigungen nicht mehr ausgegeben. Beste Grüße Christian[/quote] hallo, das die Nummer nicht mehr in der bestellbestätigung übernommen wird ist natürlich nicht so schön. momentan hab ich das auf zwei stellen beschränkt da ich nicht über 99 bestellungen am tag komme. die doppelten nummern musste ich direkt in der datenbank löschen und ab da an ging der zugriff auch wieder normal. fängst du jeden tag neu mit 00001 an (now)? 2013102800001 2013102800002 … 2013102900001 2013102900002 und wie machst du das mit der rechnungsnummern übergabe? Viele Grüße

Hej! [Update] Es läuft. Die letzten 6 Stellen sind fortlaufend. Das Script schneidet praktisch die ersten 6 Stellen (Datum) ab, erhöht den Rest um +1 und setzt davor das aktuelle Datum. Hier die komplette Funktion in /engine/core/class/sOrder.php (Z. 153) public function sGetOrderNumber() { $sql = "/\*NO LIMIT\*/ SELECT SUBSTRING(number, 7) FROM s\_order\_number WHERE name='invoice' FOR UPDATE"; $ordernumber = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetOne($sql); $sql = "UPDATE s\_order\_number SET number=CONCAT(DATE\_FORMAT(NOW(), '%y%m%d'), LPAD(SUBSTRING(number, 7)+1, 6, '0')) WHERE name='invoice'"; $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Execute($sql); $ordernumber = date('ymd') . str\_pad($ordernumber+1, 6, "0", STR\_PAD\_LEFT); $ordernumber = Enlight()-\>Events()-\>filter('Shopware\_Modules\_Order\_GetOrdernumber\_FilterOrdernumber', $ordernumber, array('subject'=\>$this)); return $ordernumber; } Um die Rechnungsnummer kümmere ich mich jezt :wink: Grüße Christian

Ahh ok … allerdings finde ich es besser wenn jeden tag die nummerirung von 1 startet. macht mehr sinn.

[quote=„Shopster“]Hej! [Update] Es läuft. Die letzten 6 Stellen sind fortlaufend. Das Script schneidet praktisch die ersten 6 Stellen (Datum) ab, erhöht den Rest um +1 und setzt davor das aktuelle Datum. Hier die komplette Funktion in /engine/core/class/sOrder.php (Z. 153) public function sGetOrderNumber() { $sql = "/\*NO LIMIT\*/ SELECT SUBSTRING(number, 7) FROM s\_order\_number WHERE name='invoice' FOR UPDATE"; $ordernumber = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetOne($sql); $sql = "UPDATE s\_order\_number SET number=CONCAT(DATE\_FORMAT(NOW(), '%y%m%d'), LPAD(SUBSTRING(number, 7)+1, 6, '0')) WHERE name='invoice'"; $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Execute($sql); $ordernumber = date('ymd') . str\_pad($ordernumber+1, 6, "0", STR\_PAD\_LEFT); $ordernumber = Enlight()-\>Events()-\>filter('Shopware\_Modules\_Order\_GetOrdernumber\_FilterOrdernumber', $ordernumber, array('subject'=\>$this)); return $ordernumber; } Um die Rechnungsnummer kümmere ich mich jezt :wink: Grüße Christian[/quote] Hallo Shopster, wie kommst du vorran. Hast du das Ziel in erreichbarer Nähe? viele Grüße

Hej! Das Verwenden der Rechnungsnummer bleibt ein Problem. Ich habe aus Zeitdruck das Plugin “automatische belegerstellung” installiert. Dort kann man einstellen, dass die Rechnungsnummer gleich der Bestellnummer ist. Es ist also möglich, nur fehlt mir die Zeit das weiter zu verfolgen :wink: Viele Grüße Christian