„Zapisało się, ale nie widać"
Rekord w bazie jest poprawny, front pokazuje stare dane. Winne są indeksatory w trybie „on save", zapchana kolejka cron albo cache pełnostronicowy.
BaseLinker wysyła jedną liczbę. Magento przechowuje source items per magazyn, wylicza salable quantity, odejmuje rezerwacje z niezrealizowanych zamówień i pokazuje wynik dopiero po indeksacji. Integracja, która o tym nie wie, sprzedaje towar już zarezerwowany.
Klient widzi produkt configurable. Stan, SKU i cena siedzą na produktach simple. Integracja musi pisać w jedno miejsce, a raportować w drugie — inaczej sprzedaż per model nigdy się nie zgodzi.
| Operacja | Obiekt w Magento | Mechanizm | Co pójdzie źle bez tego |
|---|---|---|---|
| Aktualizacja stanu | simple product | source item per magazyn | zapis do configurable jest ignorowany |
| Odczyt dostępności | configurable + simple | salable quantity | sprzedaż towaru już zarezerwowanego |
| Aktualizacja ceny | simple product | scope: default / store view | cena zmienia się tylko w jednym widoku sklepu |
| Import zamówienia | order + order items | mapowanie po SKU simple | pozycje bez dopasowania i błędne raporty |
| Publikacja na froncie | indeksy katalogu i stanu | cron + indexer w trybie schedule | zmiana zapisana, ale niewidoczna dla klienta |
Zanim cokolwiek podłączymy, spisujemy każdy magazyn BaseLinkera i jego odpowiednik w Magento — razem z decyzją, czy w ogóle bierze udział w sprzedaży online.
Rekord w bazie jest poprawny, front pokazuje stare dane. Winne są indeksatory w trybie „on save", zapchana kolejka cron albo cache pełnostronicowy.
Integracja nadpisała stan liczbą z ERP albo BaseLinkera, ignorując rezerwacje Magento. Dostępność rośnie sztucznie, a zamówienia trafiają na brak towaru.
Masowy zapis atrybutów w modelu EAV plus reindeks całego katalogu potrafią zająć bazę na kilkadziesiąt minut. Rozwiązaniem są paczki, kolejki i okno poza szczytem.
Dwukierunkowa synchronizacja wszystkich statusów sprawia, że dwa systemy nadpisują się nawzajem. Ograniczamy ją do kilku stanów granicznych z jednym kierunkiem.
Ponowienie po timeoucie tworzy drugie zamówienie, bo brakuje klucza idempotencji i znacznika „już przekazane".
Zapis bez świadomości zakresu (scope) zmienia cenę w widoku domyślnym, a klient w innym widoku dalej widzi starą.
To dwie informacje, które w Magento decydują o połowie problemów ze stanami. Na ich podstawie powiemy, czy obecna konfiguracja jest bezpieczna.