Numer zamówienia Magento

9

Mam dziwny problem z numerem zamówienia w Magento.

Ostatnio, kiedy jedno zamówienie zostało złożone na mojej stronie internetowej, przyszedł numer zamówienia 100000350, najlepiej byłoby, gdyby były 100000370moje poprzednie numery zamówień 100000369i 100000367. Załączam zrzut ekranu poniżej

Zrzut ekranu z numerem zamówienia

Ponadto sprawdziłem dzienniki błędów, ale nie znalazłem żadnego wpisu. Jako bramę płatności używamy SagePay i PayPal.

Czy ktoś może mi w tym pomóc?

Dexter
źródło
Widzę wyraźnie, że zainstalowałeś dowolny moduł związany z zamówieniem, co spowoduje powstanie problemu,
Keyul Shah
Nie ma żadnego modułu związanego z zamówieniem. Jedyny moduł innej firmy, z którego korzystamy, to Ebizmarts_SagePay, Mass_Product_Relater, TBT_Enhancegrid i Sphinix Search
Dexter
1
Nic wielkiego, ktoś z kontem klienta prawie zrealizował zamówienie do momentu, w którym przesłał je do zapłaty, otrzymał numer zamówienia sprzedaży, a następnie na pewien czas porzucił koszyk. Zdarza się cały czas ... Masz zamówienie, gratulacje, zrealizowane zamówienie zamiast rezygnacji.
Fiasco Labs,
Myślę, że nie dostałeś mojego pytania
Dexter,
1
@huzefam - weź to z zespołem projektowym Magento lub utwórz własną szeregową numerację automatyczną, z której wyłączasz ERP na ukończonym Magento SO. Tak, rozumiem z perspektywy audytu, jeśli brakuje numerów faktur, jest cholernie chudy. Wydaje się, że Magento zajął stanowisko, że nie wszystkie zamówienia są ważne, dlatego brakujące numery SO nie są niczym wielkim. Rozumiem również, że niektóre systemy księgowe i jurysdykcje rządowe tak samo myślą o zamówieniach sprzedaży i oczekują ścieżki audytu, która pokazuje unieważnione zamówienia w pełnej sekwencji szeregowej.
Fiasco Labs,

Odpowiedzi:

28

Za pierwszym razem, gdy dostałem numer kolejny, mieliśmy niespodziankę i trochę przerażenia, dopóki nie zorientowałem się, co się dzieje. Ma to związek ze sposobem przydzielania numerów zamówień sprzedaży przez Magento.

To zupełnie normalne, że jedna taka sekwencja jest wcześniejsza niż bieżące przydzielone numery i ma miesiąc lub więcej. Sekret tkwi w tym, że był to zalogowany klient, który nie zrealizował zamówienia po pewnym krytycznym etapie, wrócił, zalogował się i postanowił w końcu kupić.

Oferta z przydzielonym numerem zamówienia sprzedaży używa tego numeru dla numeru zamówienia sprzedaży.

Teraz wyjaśnienie.

Proces zamawiania Magento tworzy wycenę przy pierwszym dodaniu czegoś do koszyka.

  • W przypadku klientów-gości oferta ta trwa tak długo, jak upłynął limit czasu sesji, w którym momencie istnieje ona w bazie danych, ale nie jest możliwa do odzyskania przez klienta-gościa.
  • Gdy zarejestrowany klient loguje się, wycena koszyka otrzymuje identyfikator klienta, dzięki czemu koszyk trwa tak długo, jak długo klient go nie opróżnia i jest dostępny dla zarejestrowanego klienta po zalogowaniu się na jego konto.

W tym momencie oferta jest tylko potencjalnym Zleceniem sprzedaży . Nie ma przypisanego numeru, ponieważ klient nie zobowiązał się do zapłaty.

Gdy klient kliknie przycisk Kontynuuj, aby przejść do kasy, będzie:

  • bądź zalogowany przed uruchomieniem koszyka
  • lub jeśli nie jest zalogowany, pyta, czy chce się zarejestrować lub sprawdzić jako gość.

Ważne jest to, co następuje: Klienci, którzy zdecydują się zarejestrować w koszyku, są traktowani jak klienci-goście do momentu zakończenia zamówienia i przechodzą do strony sukcesu, w której tworzone jest konto i są zalogowani. pozostaje zaproszonym klientem-klientem z utratą limitu czasu sesji koszyka, jeśli zamówienie nie zostanie zrealizowane i wyświetli się strona powodzenia.

W przypadku zamówienia kartą kredytową po kliknięciu przycisku Złóż zamówienie dzieje się, co następuje .

  • Informacje o karcie kredytowej, adres do faktury, sumy koszyka i informacje o zamówieniu są gromadzone
  • Numer zamówienia sprzedaży jest przypisany do tej oferty ( sales_flat_quotetabela w reserved_order_idkolumnie)
  • Pakiet danych jest przesyłany do bramki karty kredytowej w celu autoryzacji / wykorzystania środków na opłacenie zamówienia.
  • Procesor koszyka kredytowego wraca:
    • albo autoryzacja / przechwycenie środków z odpowiednimi informacjami o transakcji, które należy zarejestrować
    • lub odrzucenie płatności z odpowiednimi informacjami o tym, dlaczego odmówiono autoryzacji / przechwytywania.
  • Po pomyślnej autoryzacji / przechwyceniu oferta jest konwertowana na zamówienie sprzedaży, a jeśli jest to rejestr koszyka, tworzone jest konto klienta.

Jeśli transakcja kartą kredytową zostanie odrzucona dla dowolnego klienta przez bramę płatności kartą kredytową, a następny klient złoży udane zamówienie, w sekwencji numerów Zamówienia sprzedaży zostanie pominięty błąd z powodu przypisania do odrzuconej płatności Zamówienia sprzedaży numeru zarezerwowanego a następnemu udanemu zleceniu sprzedaży zostaje przypisany następny dostępny numer.

W przypadku koszyków gości (zamówień gości i nieudanej rejestracji klientów koszyka), które przekraczają limit czasu sesji, ten zarezerwowany numer Zamówienia sprzedaży zostanie utracony po wygaśnięciu sesji, pozostawiając luki w sekwencji Zamówienia sprzedaży.

W przypadku klientów, którzy zalogowali się przed kliknięciem przycisku Kontynuuj , wycena ma przypisany identyfikator klienta, więc jeśli spróbują złożyć zamówienie i stwierdzą, że zostało odrzucone, mogą wrócić, zalogować się, znaleźć koszyk wciąż zawierający zawartość i umieścić zamówienie, czasem znacznie później (najdłużej jak dotąd cztery miesiące). Oferta użyje przypisanego zarezerwowanego numeru zamówienia sprzedaży, co spowoduje wyświetlenie poza zamówieniem numeru zamówienia sprzedaży wyświetlanego na ekranie zarządzania zamówieniem sprzedaży.

Fiasco Labs
źródło
Dla celów kontroli udałem, że utknąłem w kasie, nie wybierając metody płatności i ostatecznie zamykając przeglądarkę (na komputerze, który otworzył stronę + kasa jako pierwsza). a tymczasem zakończyłem drugie zamówienie na komputery (które powinno otrzymać kolejny przyrost identyfikatora). Powoduje to, że nie przeskakuje on liczby. Gdyby zadziałało w ten sposób, dodałoby nieużywany identyfikator między zamówieniem 10 a zamówieniem 11, czego nie zrobił. Zgodnie z twoimi informacjami próbowałem zweryfikować i zrobić dokładnie to, co określiłeś, ale nie daje to wyniku.
Siva
Zamiast tego, jeśli klient zawiedzie w Payment Gateway, pojawi się jako oczekująca płatność lub anulowana, a jeśli zamówienie nie powiedzie się w ostatniej części kasy, w ogóle się nie pojawi (i po prostu kontynuuj z poprawnym identyfikatorem w sekwencja). Więc teraz się z tym mylę. Pomóż mi zrozumieć, dlaczego numer zamówienia przeskakuje losowo. Dzięki
Siva,
Świetne wyjaśnienie.
Wolfack
2

Miałem do czynienia z tym samym problemem, ale tylko wtedy, gdy serwer został obciążony ogromną ilością obciążenia. Ten problem występuje, ponieważ db przechodzi w stan blokady podczas przekształcania oferty w kolejność. Podczas dalszej inspekcji dowiedziałem się, że problem polegał na tym, że próbował zapisać do tabeli sales_flat_order_grid w ramach transakcji zaraz po wstawieniu do tabeli sales_flat_order. Przy równoczesnych zapytaniach powodowało blokowanie kolizji. Prawdziwym rozwiązaniem jest przeniesienie elementów Sales_flat_order_grid z transakcji.

Link pomógł mi zrozumieć problem

Łatka rozwiązała problem dla mnie.

Musisz usunąć funkcję _afterSave z Mage_Sales_Model_Abstract i dodać

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

Daj mi znać, jeśli to rozwiąże problem.

Shaily
źródło
Czy ktoś próbował tej metody, jak powiedział Shaily ?
Siva
0

Nie jestem pewien, ale może to rozwiązać problem:

O ile mi się wydaje, coś mogło zakłócić twój eav_entity_storestół. Zawiera informacje o kolejnym identyfikatorze increment_id, tj. Id_przyjęcia do użycia. Być może jakiś moduł lub kod w twoim systemie magento mógł to zmienić.

Otwórz tę tabelę i zaktualizuj kolumnę increment_last_id o swój identyfikator ostatniego zamówienia. Bądź ostrożny, że zawiera przyrost id użytkownika, jak również innych, takich jak faktury, wysyłki itp Aby mieć pewność, wystarczy udać się do eav_entity_typesstołu i zobaczyć, co jest entity_type_idza sales/order(kolumny entity_model). W moim magento jest 5. Więc teraz przejdź do eav_entity_storetabeli i po prostu zaktualizuj increment_id dla wiersza, który entity_type_idjest 5. Możesz bezpośrednio zaktualizować go przez phpmyadmin lub możesz uruchomić zapytanie takie jak:

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

Uwaga: w moim Magento 5 znajduje się identyfikator podmiotu_typu dla zamówienia

Przyczyn problemu może być wiele, ale myślę, że może to rozwiązać problem.

Pradeep
źródło
Dzięki .. ale sprawdziłem już tabelę i ma ona prawidłowy identyfikator przyrostu
Dexter
jaki jest twój maksymalny (nie najnowszy) identyfikator zamówienia w sprzedaży przez administratora -> zamówienia? Umieść tę wartość w tabeli, którą powiedziałem ... złóż zamówienie testowe i sprawdź ...
Pradeep