Ausgabe der Magento-Bestellnummer

9

Ich habe ein seltsames Problem mit der Bestellnummer in Magento.

Als kürzlich eine Bestellung auf meiner Website 100000350aufgegeben wurde , lautete die Bestellnummer. Idealerweise sollte es so sein, 100000370wie meine vorherigen Bestellnummern waren 100000369und 100000367. Ich habe den Screenshot unten dazu angehängt

Bestellnummer Screenshot

Außerdem habe ich nach den Fehlerprotokollen gesucht, aber keinen Eintrag gefunden. Wir verwenden SagePay und PayPal als Zahlungsgateway dafür.

Kann mich jemand dazu führen?

Dexter
quelle
Ich kann deutlich sehen, dass Sie jedes Modul installiert haben, das sich auf die Bestellung bezieht. Dies wird ein Problem darstellen.
Keyul Shah
Es gibt kein Modul in Bezug auf die Bestellung. Das einzige Modul von Drittanbietern, das wir verwenden, sind Ebizmarts_SagePay, Mass_Product_Relater, TBT_Enhancegrid und Sphinix Search
Dexter
1
Kein großes Problem, jemand mit einem Kundenkonto hat eine Bestellung fast bis zu dem Punkt abgeschlossen, an dem sie zur Zahlung eingereicht wurde, eine Kundenauftragsnummer erhalten und dann den Warenkorb für einen bestimmten Zeitraum verlassen. Passiert die ganze Zeit ... Sie haben die Bestellung erhalten, Glückwünsche, abgeschlossene Bestellung statt Aufgabe.
Fiasco Labs
Ich denke, Sie haben meine Frage nicht bekommen
Dexter
1
@huzefam - Bitte wenden Sie sich an das Magento-Designteam oder erstellen Sie eine eigene serielle Autonummerierungsspalte, die Sie für Ihr ERP auf abgeschlossenem Magento SO eingeben. Ja, ich verstehe aus Sicht der Wirtschaftsprüfung, wenn Rechnungsnummern fehlen, gibt es Taschentücher. Magento scheint die Auffassung vertreten zu haben, dass nicht alle Bestellungen gültig sind, daher sind fehlende SO-Nummern keine große Sache. Ich verstehe auch, dass einige Buchhaltungssysteme und Regierungsgerichte in Bezug auf Kundenaufträge genauso denken und einen Prüfpfad erwarten, der ungültige Aufträge in einer vollständigen seriellen Reihenfolge anzeigt.
Fiasco Labs

Antworten:

28

Als ich zum ersten Mal eine Nummer außerhalb der Sequenz bekam, waren wir überrascht und bestürzt, bis ich herausfand, was los war. Dies hängt damit zusammen, wie Magento Kundenauftragsnummern zuweist.

Es ist völlig normal, dass eine solche Reihenfolge nicht eingehalten wird, vor den aktuell zugewiesenen Nummern liegt und mindestens einen Monat alt ist. Das Geheimnis dabei ist, dass es sich um einen angemeldeten Kunden handelte, der die Bestellung nach einer bestimmten kritischen Phase nicht abgeschlossen hat, zurückkam, sich anmeldete und sich entschied, endgültig zu kaufen.

Das Angebot mit der zugewiesenen Kundenauftragsnummer verwendet diese Nummer für die Kundenauftragsnummer.

Nun zur Erklärung.

Der Magento-Bestellvorgang erstellt ein Angebot, wenn zum ersten Mal etwas in den Warenkorb gelegt wird.

  • Für Gastkunden gilt dieses Angebot so lange, wie die Sitzung nicht abgelaufen ist. Zu diesem Zeitpunkt ist es in der Datenbank vorhanden, kann jedoch vom Gastkunden nicht wiederhergestellt werden.
  • Wenn sich ein registrierter Kunde anmeldet, wird dem Warenkorbangebot seine Kunden-ID zugewiesen, sodass der Warenkorb so lange gültig ist, wie der Kunde ihn nicht leert und vom registrierten Kunden durch Anmelden in seinem Konto abgerufen werden kann.

Zu diesem Zeitpunkt ist das Angebot nur ein potenzieller Kundenauftrag . Es ist keine Nummer zugewiesen, da sich der Kunde nicht verpflichtet hat, dafür zu bezahlen.

Wenn der Kunde zum Auschecken auf die Schaltfläche "Weiter" klickt , wird er:

  • entweder vor dem Starten des Warenkorbs angemeldet sein
  • oder wenn nicht angemeldet, gefragt, ob sie sich registrieren oder als Gast auschecken möchten.

Was folgt, ist ein wichtiger Punkt: Die Kunden, die sich im Warenkorb registrieren, werden bis zum Abschluss der Bestellung als Gastkunden behandelt und gelangen auf die Erfolgsseite. Zu diesem Zeitpunkt wird ihr Konto erstellt und sie sind angemeldet. Das Angebot bleibt ein Gastkundenangebot mit dem Sitzungszeitlimitverlust des Warenkorbs, wenn die Bestellung nicht abgeschlossen und eine Erfolgsseite angezeigt wird.

Bei einer Kreditkartenbestellung geschieht Folgendes, wenn Sie auf die Schaltfläche Bestellung aufgeben klicken.

  • Die Kreditkarteninformationen, Rechnungsadressinformationen, Warenkorbsummen und Bestellinformationen werden zusammengestellt
  • Eine Kundenauftragsnummer zugeordnet ist für dieses Zitat ( sales_flat_quoteTabelle in der reserved_order_idSpalte)
  • Das Datenpaket wird an das Kreditkarten-Gateway gesendet, um das Geld für die Zahlung der Bestellung zu autorisieren / zu aktivieren.
  • Der Kreditwagenprozessor gibt zurück:
    • entweder eine Autorisierung / Erfassung von Geldern mit den entsprechenden zu erfassenden Transaktionsinformationen
    • oder Ablehnung der Zahlung mit entsprechenden Informationen darüber, warum die Autorisierung / Erfassung verweigert wurde.
  • Bei erfolgreicher Autorisierung / Erfassung wird das Angebot in einen Kundenauftrag konvertiert. Wenn es sich um ein Warenkorbregister handelt, wird das Kundenkonto erstellt.

Wenn die Kreditkartentransaktion für einen Kunden vom Kreditkartenzahlungs-Gateway abgelehnt wird und der nächste Kunde eine erfolgreiche Bestellung aufgibt, wird die Reihenfolge der Kundenauftragsnummern übersprungen, da dem Kundenauftrag für die abgelehnte Zahlung eine reservierte Kundenauftragsnummer zugewiesen wurde und dem folgenden erfolgreichen Kundenauftrag wird die nächste verfügbare Nummer zugewiesen.

Bei Gastwagen (Gastbestellungen und nicht erfolgreiches Registrieren bei Warenkorbkunden), die das Sitzungszeitlimit überschreiten, geht diese reservierte Kundenauftragsnummer nach Ablauf der Sitzung verloren, wodurch Lücken in der Kundenauftragssequenz entstehen .

Kunden, die sich vor dem Klicken auf die Schaltfläche "Weiter" angemeldet haben , wird dem Angebot eine Kunden-ID zugewiesen. Wenn sie also versuchen, eine Bestellung aufzugeben und feststellen, dass sie abgelehnt wurde, können sie zurückkehren, sich anmelden, feststellen, dass der Warenkorb noch Inhalt enthält, und die Bestellung, manchmal viel später (am längsten bis heute war vier Monate). Das Zitat wird die zugewiesene reserviert Kundenauftragsnummer verwenden, was zu einem außerhalb der Reihenfolge Kundenauftragsnummer zeigt in Ihrem Kundenauftragsmanagement Anzeige.

Fiasko-Labore
quelle
Zu Überprüfungszwecken gab ich vor, an der Kasse hängen zu bleiben, indem ich die Zahlungsmethode nicht auswählte und schließlich den Browser schloss (auf dem Computer, der die Site geöffnet hat + Kasse zuerst). und beendete in der Zwischenzeit die zweite Computerbestellung (die das nächste ID-Inkrement erhalten sollte). Das Ergebnis ist, dass es nicht über die Zahl springt. Wenn es so funktioniert hätte, hätte es eine nicht verwendete ID zwischen Bestellung 10 und Bestellung 11 hinzugefügt, was nicht der Fall war. Gemäß Ihren Informationen habe ich versucht, genau das zu überprüfen und zu tun, was Sie angeben, aber es gibt keine Ausgabe.
Siva
Wenn ein Kunde in Payement Gateway ausfällt, wird er als ausstehende Zahlung angezeigt oder storniert. Wenn die Bestellung im letzten Teil der Kaufabwicklung fehlschlägt, wird sie überhaupt nicht angezeigt (und fahren Sie einfach mit der korrekten ID im fort Reihenfolge). Jetzt bin ich damit verwirrt. Bitte helfen Sie mir zu verstehen, warum die Bestellnummer zufällig überspringt. Danke
Siva
Tolle Erklärung.
Wolfack
2

Ich hatte das gleiche Problem, aber es war nur, als der Server mit einer großen Menge an Last getroffen wurde. Dieses Problem tritt auf, weil die Datenbank beim Konvertieren des Angebots in die Reihenfolge in den Sperrstatus wechselt. Bei weiterer Prüfung stellte ich fest, dass das Problem darin bestand, dass versucht wurde, innerhalb der Transaktion direkt nach dem Einfügen in die Tabelle sales_flat_order in die Tabelle sales_flat_order_grid zu schreiben. Bei gleichzeitigen Abfragen kam es zu Sperrkollisionen. Die eigentliche Lösung besteht darin, sales_flat_order_grid aus der Transaktion zu entfernen.

Der Link hat mir geholfen, das Problem zu verstehen

Der Patch hat das Problem für mich behoben.

Sie müssen die Funktion _afterSave aus dem Mage_Sales_Model_Abstract entfernen und hinzufügen

public function afterCommitCallback(){
    if (!$this->getForceUpdateGridRecords()) {
         $this->_getResource()->updateGridRecords($this->getId());
     }
    parent::afterCommitCallback();
}

Lassen Sie mich wissen, ob es das Problem für Sie löst.

Shaily
quelle
Hat jemand diese Methode ausprobiert, wie von Shaily gesagt ?
Siva
0

Ich bin nicht sicher, aber dies könnte Ihr Problem lösen:

Soweit ich denke, könnte etwas Ihren eav_entity_storeTisch gestört haben . Es enthält Informationen zur nächsten Inkrement-ID, dh zur zu verwendenden Bestell-ID. Möglicherweise hat ein Modul oder Code in Ihrem Magento-System dies geändert.

Öffnen Sie diese Tabelle und aktualisieren Sie die Spalte increment_last_id mit Ihrer letzten Bestellnummer. Seien Sie vorsichtig, es enthält Zuwachs IDs von anderen auch wie Rechnung, Versand usw. Um sicher zu sein, gehen Sie einfach auf eav_entity_typesTisch und sehen , was das ist entity_type_idfür sales/order(Spalte entity_model). In meinem Magento ist es 5. Gehen Sie nun zur eav_entity_storeTabelle und aktualisieren Sie einfach die increment_id für die Zeile mit dem entity_type_idWert 5. Sie können sie direkt über phpmyadmin aktualisieren oder Abfragen wie ausführen.

update eav_entity_store set increment_last_id = 'your_last_order_id' where entity_type_id = 5; 

Bitte beachten Sie, dass 5 in meinem Magento für die Bestellung entity_type_id ist

Es kann viele Gründe für Ihr Problem geben, aber ich denke, dies könnte Ihr Problem lösen.

Pradeep
quelle
Danke .. aber bereits die Tabelle überprüft und es hat die richtige Inkrement-ID
Dexter
Was ist Ihre maximale (nicht letzte) Bestell-ID in Admin-Verkäufen -> Bestellungen? Tragen Sie diesen Wert in die Tabelle ein, die ich sagte. Geben Sie eine Testbestellung auf und überprüfen Sie sie.
Pradeep