Emissione del numero di ordine Magento


9

Ho uno strano problema con il numero d'ordine in Magento.

Di recente, quando è stato effettuato un ordine sul mio sito Web 100000350, è arrivato il numero dell'ordine , idealmente avrebbe dovuto essere 100000370come i miei precedenti numeri dell'ordine 100000369e 100000367. Ho allegato lo screenshot qui sotto per questo

Schermata del numero di ordine

Inoltre, ho controllato i log degli errori ma non ho trovato alcuna voce. Stiamo utilizzando SagePay e PayPal come gateway di pagamento per questo.

Qualcuno può guidarmi su questo?


Riesco a vedere chiaramente che hai installato un modulo relativo all'ordine, per cui questo sorgerà un problema,
Keyul Shah,

Non esiste un modulo correlato all'ordine .. l'unico modulo di terze parti che stiamo utilizzando sono Ebizmarts_SagePay, Mass_Product_Relater, TBT_Enhancegrid e Sphinix Search
Dexter

1
Non è un grosso problema, qualcuno con un account cliente ha quasi completato un ordine al punto in cui è stato inviato il pagamento, gli è stato assegnato un numero di ordine di vendita e quindi ha abbandonato il carrello per un periodo di tempo. Succede sempre ... Hai ricevuto l'ordine, congratulazioni, ordine completato invece di abbandono.
Fiasco Labs,

Penso che non hai ricevuto la mia domanda
Dexter,

1
@huzefam - Per favore, prendi questo con il team di progettazione di Magento o crea la tua colonna di numero autonome seriale da cui digiti per il tuo ERP su Magento SO completato. Sì, capisco dal punto di vista dell'auditing se mancano i numeri delle fatture, c'è un pazzo. Magento sembra aver preso la posizione secondo cui non tutti gli ordini sono validi, quindi i numeri SO mancanti non sono un grosso problema. Comprendo anche che alcuni sistemi contabili, giurisdizioni governative si sentono allo stesso modo per gli ordini di vendita e mi aspetto di avere una pista di controllo che mostri gli ordini annullati in una sequenza seriale completa.
Fiasco Labs

Risposte:


28

La prima volta che ho ottenuto un numero fuori sequenza, abbiamo avuto sorpresa e un po 'di sgomento fino a quando non ho capito cosa stava succedendo. Ha a che fare con il modo in cui Magento assegna i numeri degli ordini cliente.

È del tutto normale avere uno fuori sequenza del genere, essere precedenti agli attuali numeri assegnati e un mese o più vecchi. Il segreto è che era un cliente registrato che non ha completato l'ordine dopo una certa fase critica, è tornato, ha effettuato l'accesso e ha deciso di acquistare finalmente.

Il preventivo con il numero dell'ordine cliente assegnato utilizza quel numero per il numero ordine cliente.

Ora per la spiegazione.

Il processo di ordine Magento crea un preventivo la prima volta che qualcosa viene aggiunto al carrello.

  • Per i clienti ospiti, questo preventivo dura fino a quando la loro sessione non è scaduta, a quel punto esiste nel database, ma non è recuperabile dal cliente ospite.
  • Quando un cliente registrato effettua l'accesso, al preventivo del carrello viene assegnato l'ID cliente in modo che il carrello duri finché il cliente non lo svuota e può essere recuperato dal cliente registrato accedendo al proprio account.

A questo punto, l'offerta è solo un potenziale ordine cliente. Non ha un numero assegnato perché il cliente non si è impegnato a pagarlo.

Quando il cliente fa clic sul pulsante Procedi per effettuare il checkout, dovrà:

  • effettuare l'accesso prima di avviare il carrello
  • o se non ha effettuato l'accesso, gli è stato chiesto se desiderano registrarsi o effettuare il check out come ospite.

Ciò che segue è un aspetto importante: i clienti che scelgono di registrarsi nel carrello vengono trattati come clienti ospiti fino a quando l'ordine non viene completato e arrivano alla pagina di successo, momento in cui il loro account viene creato e sono connessi. rimane un preventivo cliente ospite con la perdita di carrello del timeout della sessione se l'ordine non viene completato e viene visualizzata una pagina di successo.

Con un ordine con carta di credito, quando si fa clic sul pulsante Effettua ordine si verifica quanto segue .

  • Vengono raccolte le informazioni sulla carta di credito, le informazioni sull'indirizzo di fatturazione, i totali del carrello e le informazioni sull'ordine
  • Un numero di ordine cliente è assegnato per questo preventivo ( sales_flat_quotetabella nella reserved_order_idcolonna)
  • Il pacchetto di dati viene inviato al gateway della carta di credito per autorizzare / acquisire i fondi per il pagamento dell'ordine.
  • Il processore del carrello di credito passa indietro:
    • sia un 'autorizzazione / acquisizione di fondi con le informazioni di transazione appropriata da registrare
    • o rifiuto del pagamento con le informazioni appropriate sul motivo per cui l'autorizzazione / acquisizione è stata negata.
  • Se l'autorizzazione / acquisizione ha esito positivo, il preventivo viene convertito in un ordine cliente e, se si tratta di un registro del carrello, viene creato l'account cliente.

Se la transazione con carta di credito viene rifiutata per qualsiasi cliente dal gateway di pagamento con carta di credito e il cliente successivo effettua un ordine andato a buon fine , nella sequenza numerica dell'Ordine di vendita verrà saltato a causa dell'assegnazione a un Ordine di vendita riservato del pagamento rifiutato e al seguente ordine cliente riuscito viene assegnato il successivo numero disponibile.

Per i carrelli degli ospiti (ordini degli ospiti e registrazione non riuscita nei clienti del carrello) che superano il timeout della sessione, questo numero di Ordine di vendita riservato andrà perso alla scadenza della sessione, lasciando vuoti nella sequenza Ordine di vendita.

Per i clienti che hanno effettuato l'accesso prima di fare clic sul pulsante Procedi , al preventivo viene assegnato un ID cliente, quindi se tentano di effettuare un ordine e scoprono che è stato rifiutato, possono tornare, accedere, trovare il carrello ha ancora dei contenuti e posizionare il ordine, a volte molto più tardi (il più lungo finora è stato di quattro mesi). Il preventivo utilizzerà il numero dell'ordine di vendita riservato assegnato, portando a un numero di ordine di vendita fuori sequenza visualizzato nel display di gestione dell'ordine di vendita.


A scopo di controllo, ho fatto finta di rimanere bloccato nel checkout non selezionando il metodo di pagamento e infine chiudendo il browser (sul computer che ha aperto prima il sito + checkout). e nel frattempo ha terminato il secondo ordine dei computer (che dovrebbe ottenere l'incremento di ID successivo). Il risultato è che non salta sopra il numero. Se avesse funzionato in quel modo avrebbe aggiunto un ID inutilizzato tra l'ordine 10 e l'ordine 11 che non ha funzionato. Secondo le tue informazioni, ho provato a verificare e fare esattamente ciò che stai specificando, ma non sta dando l'output.
Siva,

Invece, se un cliente fallisce in Payement Gateway, verrà visualizzato come pagamento in sospeso o annullato e se l'ordine non è riuscito nell'ultima parte del checkout che non verrà visualizzato affatto (e continuerà semplicemente con l'ID corretto nella sequenza). Quindi ora sono confuso con questo. Aiutami a capire perché il numero dell'ordine salta in modo casuale. Grazie
Siva,

Grande spiegazione.
Wolfack,

2

Stavo affrontando lo stesso problema, ma è stato solo quando il server è stato colpito con un'enorme quantità di carico. Questo problema si verifica perché il db passa allo stato di blocco durante la conversione delle quotazioni in ordine. A ulteriore esame, ho scoperto che il problema era che cercava di scrivere nella tabella sales_flat_order_grid all'interno della transazione subito dopo l'inserimento nella tabella sales_flat_order. Con query simultanee ha causato il blocco delle collisioni. La vera soluzione è spostare roba di sales_flat_order_grid fuori dalla transazione.

Il link mi ha aiutato a capire il problema

La patch ha risolto il problema per me.

Devi rimuovere la funzione _afterSave da Mage_Sales_Model_Abstract e aggiungere

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

Fammi sapere se risolve il problema per te.


Qualcuno ha provato questo metodo come ha detto Shaily ?
Siva,

0

Non sono sicuro, ma questo potrebbe risolvere il tuo problema:

Per quanto penso, qualcosa potrebbe aver disturbato il tuo eav_entity_storetavolo. Contiene informazioni sul prossimo increment_id, cioè order_id da usare. Potrebbe essere un modulo o un codice nel tuo sistema Magento potrebbe averlo modificato.

Apri questa tabella e aggiorna la colonna increment_last_id con il tuo ultimo ID ordine. Attenzione, contiene incremento di id degli altri, così come la fattura, la spedizione ecc A dire il vero, basta andare al eav_entity_typestavolo e vedere che cosa è il entity_type_idper sales/order(colonna entity_model). Nel mio magento, è 5. Quindi ora vai alla eav_entity_storetabella e aggiorna solo increment_id per la riga che entity_type_idè 5. Puoi aggiornarlo direttamente tramite phpmyadmin oppure puoi eseguire query come,

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

Nota 5 è entity_type_id nel mio magento per ordine

Ci possono essere molte ragioni per il tuo problema, ma penso che questo potrebbe risolvere il tuo problema.


Grazie .. ma ho già controllato la tabella e ha l'ID di incremento corretto
Dexter

qual è il tuo massimo (non ultimo) ID ordine nelle vendite dell'amministratore -> ordini? Metti quel valore nella tabella che ho detto ... effettua un ordine di prova e controlla ..
Pradeep
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.