Jedno z najczęstszych pytań, jakie dostajemy od osób obsługujących sklep: „dlaczego przy produkcie widzę dwie różne ilości?". W panelu Magento obok siebie stoją „ilość" i „ilość dostępna do sprzedaży", i bardzo często się różnią. To nie błąd — to sedno tego, jak Magento pilnuje, żeby nie sprzedać dwa razy tego samego towaru. Warto ten mechanizm rozumieć, bo od niego zależy, czy w szczycie sprzedaży nie zaczniesz anulować zamówień.
Trzy pojęcia, które warto rozdzielić
Magento opisuje zapasy w trzech warstwach i pomieszanie ich jest źródłem większości nieporozumień:
- Źródło (Source) — lokalizacja fizyczna, w której leży towar: magazyn, sklep stacjonarny, punkt dostawcy. Każde źródło ma własny adres, czas realizacji i ilość produktu.
- Zasób (Stock) — twór wirtualny. Łączy jedno lub kilka źródeł z kanałem sprzedaży, czyli z witryną sklepu. To on odpowiada na pytanie „ile możemy sprzedać w tym sklepie".
- Ilość dostępna do sprzedaży (Salable Quantity) — liczba wyliczana dla zasobu, po uwzględnieniu rezerwacji z zamówień, które jeszcze nie zostały wysłane.
Skrótowo: źródło mówi, co leży w magazynie, a zasób — co możesz jeszcze sprzedać.
Rezerwacje — dlaczego liczby się różnią
Tu jest odpowiedź na pytanie z początku. Magento przy złożeniu zamówienia nie odejmuje od razu towaru ze źródła. Zamiast tego tworzy rezerwację — zapis mówiący „tyle sztuk jest już obiecane klientowi".
Cykl wygląda tak:
- Złożenie zamówienia — powstaje rezerwacja. Ilość dostępna do sprzedaży spada, ale stan w źródle pozostaje bez zmian.
- Faktura i wysyłka — dopiero teraz ilość zostaje odjęta od konkretnego źródła, a rezerwacja znika.
- Anulowanie zamówienia — rezerwacja jest cofana, a towar wraca do puli dostępnej do sprzedaży.
Przykład: w magazynie leży 10 sztuk, wpłynęły trzy niezrealizowane zamówienia. Ilość w źródle to nadal 10 — bo fizycznie tyle tam jest. Ilość dostępna do sprzedaży to 7. Obie liczby są poprawne, tylko odpowiadają na inne pytania.
Po co ta komplikacja
Mechanizm rezerwacji rozwiązuje realny problem: równoległe zamówienia. Gdy dwie osoby w tej samej sekundzie kupują ostatnią sztukę, bezpośrednie odejmowanie stanu grozi tym, że obie transakcje przejdą, a Ty zostajesz z jednym towarem i dwoma klientami. Rezerwacje wykonywane w osobnej warstwie chronią przed takim wyścigiem.
Im większy ruch, tym bardziej to widać — dlatego stany magazynowe wymieniliśmy wśród rzeczy do sprawdzenia przy przygotowaniu sklepu na szczyt sprzedaży. Anulowane zamówienie w środku Black Friday to nie tylko utracona sprzedaż, ale i klient, który następnym razem kupi gdzie indziej.
Kiedy warto mieć wiele źródeł
Wiele źródeł ma sens, gdy naprawdę wydajesz towar z kilku miejsc:
- Magazyn i sklep stacjonarny — część zamówień realizowana z półki sklepowej.
- Kilka magazynów regionalnych — wysyłka z lokalizacji najbliższej klientowi.
- Dostawy realizowane przez dostawcę — towar, którego fizycznie u siebie nie trzymasz.
- Kilka witryn lub rynków — różne pule towaru dla różnych kanałów, co dobrze łączy się ze strukturą multistore.
Kiedy nie komplikować
Jeśli masz jeden magazyn, nie musisz niczego konfigurować. Magento działa wtedy na domyślnym źródle i domyślnym zasobie, a ochrona przed podwójną sprzedażą i tak działa. Tworzenie dodatkowych źródeł „na zapas" tylko utrudnia pracę i zwiększa liczbę miejsc, w których coś może się rozjechać. To jedna z tych decyzji, które warto podjąć dopiero wtedy, gdy pojawia się realna potrzeba.
Integracja z ERP — tu najczęściej boli
Najwięcej problemów widzimy na styku Magento z systemem magazynowym lub ERP. Typowe pułapki:
- Nadpisywanie niewłaściwej wartości — integracja powinna aktualizować stan w źródle, a nie próbować ustawiać ilość dostępną do sprzedaży, bo ta jest wyliczana.
- Zbyt rzadka synchronizacja — przy dużym ruchu stany sprzed godziny to już historia.
- Brak obsługi błędów — co się dzieje, gdy ERP nie odpowiada? Sklep nie powinien wtedy pokazywać zer ani sprzedawać w nieskończoność.
- Rozjazd rezerwacji — jeśli zamówienia są zamykane poza Magento albo stany były kiedyś ustawiane ręcznie, rezerwacje potrafią przestać odpowiadać rzeczywistości. Magento udostępnia narzędzia do ich przeliczenia, ale to zadanie dla kogoś, kto rozumie skutki.
Szerzej o budowaniu takich połączeń pisaliśmy przy integracjach Magento.
Od czego zacząć
Jeśli obsługujesz sklep: następnym razem, gdy zobaczysz dwie różne liczby przy produkcie, sprawdź listę niezrealizowanych zamówień — najpewniej różnica dokładnie się zgodzi. Jeśli odpowiadasz za sklep od strony technicznej: sprawdź, którą wartość aktualizuje Twoja integracja i jak często. A jeśli podejrzewasz, że stany się rozjechały — nie poprawiaj ich ręcznie w panelu, bo to zwykle pogłębia problem. Napisz do nas, przyjrzymy się konfiguracji i rezerwacjom.