Rozbieżność stanu między sklepem a systemem zarządzania magazynem WMS

Sklep internetowy, w którym pokazywana dostępność nie odpowiada stanowi faktycznemu, prędzej czy później sprzeda produkt, którego nie ma już na regale. Klient składa zamówienie, dostaje potwierdzenie, a po kilku dniach czyta, że towar jest niedostępny. Taka sytuacja obniża zaufanie do sklepu szybciej niż większość innych błędów obsługi. Źródłem problemu rzadko bywa platforma sprzedażowa. Najczęściej brakuje połączenia z systemem WMS, który zarządza rzeczywistymi zapasami.

Platforma e-commerce nie wie, ile sztuk leży na regale. Operuje liczbą, którą ktoś wpisał ręcznie w panelu albo która pochodzi z ostatniego importu arkusza. Jeśli import wykonuje się raz dziennie, w międzyczasie towar mógł się sprzedać w innym kanale, ulec uszkodzeniu przy kompletacji albo trafić na inną lokalizację. Im większy asortyment i im więcej zamówień na dobę, tym trudniej utrzymać zgodność bez narzędzia, które robi to automatycznie.

Dwa kartony ustawione na palecie, jeden z naklejoną etykietą z kodem kreskowym, na tle regałów w półmroku hali
Karton z etykietą kodu kreskowego na palecie - punkt, w którym stan fizyczny łączy się ze stanem w systemie

Rozwiązaniem jest integracja systemów magazynowych z platformą sprzedażową, w której WMS zostaje jedynym źródłem informacji o dostępności. Sklep nie przechowuje wtedy własnej liczby sztuk. Przed potwierdzeniem zamówienia pyta system magazynowy o aktualny stan. Rola WMS wykracza w tym ujęciu poza sam magazyn i wpływa na wynik sprzedaży, co szerzej opisuje strona o roli WMS w rozwoju firmy.

Skutki rozbieżności widać w całej obsłudze klienta. Dział wsparcia tłumaczy opóźnienie, którego nie spowodował, zwrot pieniędzy rozlicza się ręcznie, a klient zostawia negatywną opinię, zanim dostanie wyjaśnienie. Przy kilkudziesięciu zamówieniach na dobę koszt takich zdarzeń, liczony czasem zespołu i utraconą sprzedażą, potrafi przekroczyć koszt integracji, która usuwa problem u źródła. Podstawy pracy ze stanami magazynowymi opisuje osobny artykuł.

Przepływ zamówienia od sklepu do wysyłki

Zamówienie przechodzi kilka etapów, zanim dotrze do klienta w postaci przesyłki, a każdy z nich realizuje system magazynowy, nie sama platforma. Po złożeniu zamówienia WMS rezerwuje towar i blokuje go przed sprzedażą w innym kanale. Po potwierdzeniu płatności zlecenie trafia do kolejki kompletacji. Magazynier dostaje listę pozycji z lokalizacjami, co skraca czas szukania. Proces kompletacji zleceń kończy się zapakowaniem przesyłki, a system generuje dokumenty magazynowe.

Na końcu towar trafia do przewoźnika, a ten krok wiąże się z planowaniem wysyłek z magazynu: godzinami odbioru i priorytetami zamówień. Numer przesyłki wraca do sklepu bez ręcznego wpisywania, więc klient dostaje powiadomienie o nadaniu bez udziału obsługi. Praktyki współpracy z przewoźnikami omawia strona o wysyłce z magazynu przez firmy kurierskie.

Pracownica w kamizelce odblaskowej stoi przed monitorem z widokiem układu hali, przed nią kartony z pomarańczowymi etykietami na taśmie
Stanowisko z monitorem przy taśmie z kartonami - etap kompletacji i pakowania zamówień ze sklepu

Etapy zamówienia online w systemie WMS

Tabela pokazuje, co dzieje się na każdym etapie z perspektywy systemu magazynowego i jaki skutek widzi klient sklepu.

Etap zamówienia onlineDziałanie WMSSkutek dla klienta
Złożenie zamówieniaRezerwuje towar i blokuje go przed sprzedażą w innym kanaleWidzi status przyjęcia do realizacji zamiast informacji o braku towaru
Potwierdzenie płatnościZwalnia zlecenie do kolejki kompletacjiZamówienie trafia do pakowania bez zwłoki
Kompletacja i pakowanieGeneruje listę kompletacyjną i dokument WZDostaje towar zgodny z zamówieniem
Nadanie przesyłkiPrzekazuje numer śledzenia do platformy sprzedażowejWidzi status wysyłki i przewidywany termin dostawy
DostawaAktualizuje status zamówienia jako zrealizowaneZamówienie zamyka się bez działania obsługi

Dla sklepów, które łączą sprzedaż z własnym transportem, ważne bywa też planowanie tras. Ten temat omawia artykuł o programie TMS w e-commerce.

W handlu internetowym przeważają zamówienia o małej liczbie pozycji, więc magazyn nie kompletuje ich pojedynczo. Zlecenia grupuje się w fale według godziny odbioru przewoźnika. Lista kompletacyjna fali porządkuje pozycje według kolejności lokalizacji na hali, a przy stanowisku pakowania towar zostaje rozdzielony na konkretne zamówienia. Skrócenie drogi magazyniera zależy wtedy od tego, jak system układa listę, a nie od tempa samego człowieka.

Rezerwacja towaru i ostatnia sztuka

Dostępność, którą widzi klient, jest różnicą między stanem fizycznym a rezerwacjami. Sklep pokazuje więc liczbę, która maleje już w chwili złożenia zamówienia, a nie dopiero po kompletacji. Trudność pojawia się, gdy dwóch klientów kupuje ostatnią sztukę w tej samej sekundzie. Obie transakcje odczytają stan równy jeden i obie spróbują go zarezerwować.

Bezpieczne rozwiązanie sprawdza warunek i zmienia dane w jednej instrukcji. Poniższy szkic używa pojedynczego UPDATE z warunkiem dostępności. Nazwy tabel są przykładowe i nie oddają struktury konkretnego produktu.

-- przykładowy schemat, nie struktura konkretnego produktu
UPDATE StockLevel
SET    Reserved = Reserved + @Qty
WHERE  ItemId = @ItemId
  AND  OnHand - Reserved >= @Qty;

IF @@ROWCOUNT = 0
    SELECT 'BRAK' AS Result;   -- za mało wolnego towaru
ELSE
    SELECT 'OK' AS Result;

Instrukcja UPDATE zakłada blokadę na wierszu, więc druga rezerwacja czeka na zakończenie pierwszej i dopiero potem sprawdza warunek na zmienionych danych. Zasady blokowania i wersjonowania wierszy opisuje przewodnik Transaction locking and row versioning guide w Microsoft Learn.

Reguła: rezerwacja ma termin ważności. Zamówienie bez zaksięgowanej płatności zwalnia towar po ustalonym czasie, a robi to zadanie SQL Agent uruchamiane co kilka minut. Bez tego niezapłacone koszyki blokują zapas i sklep pokazuje towar jako niedostępny, choć leży na regale.

Czas rezerwacji zależy od metody płatności. Płatność natychmiastowa wymaga krótkiego okna, a przelew tradycyjny dłuższego. Warto zapisywać w rezerwacji jej powód i termin, żeby raport wolnych zapasów pokazywał, które sztuki zablokowano w oczekiwaniu na wpłatę.

Synchronizacja stanów przez API i webhooki

Zgodność stanów nie jest zadaniem jednorazowym, tylko procesem ciągłym. Każda zmiana ilości, na przykład przyjęcie dostawy albo korekta inwentaryzacyjna, powinna być widoczna w sklepie po kilku sekundach, a nie po zbiorczej synchronizacji co godzinę. Systemy komunikują się przez API albo przez powiadomienia typu webhook. W drugim wariancie informacja o zmianie trafia do platformy zaraz po zapisie w magazynie, bez cyklicznego odpytywania obu stron.

MechanizmOpóźnienieRyzyko do opanowania
Import zbiorczy raz na godzinęDo godzinySprzedaż towaru, który już się skończył
Odpytywanie API co kilka minutMinutyDuża liczba zapytań o niezmienione dane
Webhook po każdej zmianieSekundyPowiadomienia docierające w złej kolejności lub wcale

Powiadomienia mogą dotrzeć w innej kolejności, niż powstały. Odbiorca musi więc rozpoznać nowsze dane po numerze wersji, a nie po czasie odbioru. Przykładowy komunikat pokazuje minimalny zestaw pól.

{
  "eventId": "EV-0001874",
  "sku": "KRZ-100",
  "available": 14,
  "version": 5231,
  "sentAt": "2026-09-30T08:15:42Z"
}

Odbiorca zapisuje stan tylko wtedy, gdy version jest większa od zapisanej dla danego SKU. Ponowione powiadomienie z tym samym eventId zostaje pominięte. Dzięki temu opóźniony komunikat nie cofa stanu do wartości sprzed kilku sekund.

Zasada awaryjna: przy braku kontaktu z WMS sklep pokazuje ostatni znany stan tylko dla towarów o dużym zapasie. Dla ostatnich sztuk wstrzymuje sprzedaż do odzyskania łączności.

Dobrą praktyką jest niewielki bufor bezpieczeństwa między stanem rzeczywistym a pokazywanym w sklepie, zwłaszcza dla towaru o dużej rotacji, sprzedawanego równolegle w kilku kanałach. Margines chroni przed sytuacją, w której dwóch klientów kupuje ostatnią sztukę, zanim synchronizacja zdąży zablokować ofertę. Bufor ustawia się osobno dla kategorii, zależnie od tego, jak często zmienia się jej stan.

Integracja musi znosić awarie łącza. Komunikaty, których nie udało się dostarczyć, trafiają do kolejki i są ponawiane z rosnącym odstępem czasu, a nie w pętli bez przerwy. Gdy opóźnienie przekroczy ustalony próg, system zgłasza alert opiekunowi.

Mapowanie towarów i jednostek między systemami

Sklep i magazyn opisują ten sam towar innymi pojęciami. Dla platformy produkt ma warianty i ceny. Dla WMS liczy się kod SKU oraz jednostka miary. Integracja wymaga tabeli odwzorowań, która wiąże identyfikator produktu w sklepie z kartoteką magazynową. Błąd w tej tabeli jest trudniejszy do wykrycia niż awaria łącza, bo wszystko działa, tylko na niewłaściwym towarze.

Pojęcie w sklepieOdpowiednik w WMSPułapka
Wariant produktu, na przykład rozmiarOsobny kod SKU w kartoteceBrak wspólnego kodu wariantu po obu stronach
Zestaw promocyjnyLista składników pobieranych do kompletacjiRezerwacja liczona dla zestawu, a nie dla składników
Opakowanie zbiorczePrzelicznik jednostek miaryZaokrąglenie ilości przy przeliczaniu
Status zamówienia "opłacone"Zwolnienie zlecenia do kompletacjiDwukrotne zwolnienie po ponowionym powiadomieniu o płatności

Identyfikator zamówienia ze sklepu zapisuje się w dokumencie magazynowym jako numer zewnętrzny z indeksem unikalnym. Ponowiony import tego samego zamówienia zostaje wtedy odrzucony i nie tworzy drugiego zlecenia. Ten sam numer pozwala później powiązać zwrot z pierwotną sprzedażą, o czym mowa w ostatniej części artykułu.

Sprzedaż wielokanałowa z jedną pulą zapasów

Niewiele firm sprzedaje przez jeden kanał. Obok własnego sklepu pojawiają się profile na marketplace'ach, takich jak Allegro czy Amazon, a czasem także punkt stacjonarny. Każdy kanał ma własny panel i własny sposób pokazywania dostępności. Bez wspólnego systemu magazynowego ten sam produkt sprzedaje się z dwóch niezsynchronizowanych pul zapasu.

Dwaj magazynierzy z terminalami przy wózku paletowym w hali regałowej, na palecie kartony owinięte folią
Wózek paletowy z terminalem - zapas fizyczny, z którego pobierają dostępność wszystkie kanały sprzedaży

WMS połączony ze wszystkimi kanałami prowadzi jedną pulę zapasów. Każdy kanał pobiera z niej dostępność w chwili wyświetlania oferty. Sprzedaż w sklepie stacjonarnym natychmiast zmniejsza stan widoczny w sklepie internetowym i na marketplace'ach, więc żaden kanał nie oferuje towaru, który opuścił magazyn. Model ten nazywa się sprzedażą omnichannel. Wymaga od systemu obsługi wielu formatów zamówień i wielu integracji jednocześnie. W zamian pracownik wykonuje jedną operację w WMS, a jej skutek pojawia się we wszystkich podłączonych kanałach. Szerszy przegląd łączenia WMS z systemami ERP oraz platformami sprzedaży zawiera strona o integracjach programu WMS.

Firma może też ustalać priorytety. Część zapasu warto zarezerwować dla zamówień hurtowych, jeśli dają wyższą marżę niż detal. Osobne reguły minimalnego stanu dla kanałów pozwalają odłożyć niewielką pulę wyłącznie dla sklepu stacjonarnego, w którym klient stoi już przy kasie, podczas gdy kanały internetowe pokazują wyprzedany produkt kilka minut wcześniej.

Marketplace'y ograniczają liczbę zapytań API w jednostce czasu. Integracja kolejkuje więc zmiany stanu i łączy kilka zmian tego samego SKU w jedną, zamiast wysyłać każdą osobno. Taki mechanizm zmniejsza ryzyko przekroczenia limitu i zablokowania wymiany danych w środku sezonu sprzedaży.

Zasada: reguły przydziału zapasu do kanałów przechowuje WMS, a nie panele platform. Gdy każdy kanał operuje na własnej kopii danych, reguł nie da się egzekwować.

Zwroty z e-commerce w systemie magazynowym

Zwroty są w handlu internetowym stałym elementem pracy magazynu, bo klient kupuje bez obejrzenia produktu i częściej korzysta z prawa do odstąpienia od umowy niż w sprzedaży stacjonarnej. Bez systemu magazynowego obsługa polega na ręcznym przyjęciu paczki i sprawdzeniu zawartości. Potem trzeba osobno poinformować sklep o zmianie stanu, co wydłuża czas, zanim towar wróci do sprzedaży.

WMS rejestruje zwrot jako osobny dokument magazynowy, zwykle korektę wydania. Następnie kieruje towar do jednej z kilku ścieżek. Automatyczne powiązanie zwrotu z pierwotnym zamówieniem przyspiesza też zwrot płatności, bo dział obsługi widzi moment przyjęcia towaru z powrotem. Rodzaje dokumentów towarzyszących takim operacjom opisuje artykuł o dokumentach magazynowych, a przypadki uszkodzeń i reklamacji - strona o programie do reklamacji w sklepie.

Stan zwróconego towaruDecyzjaSkutek w stanie magazynowym
Nienaruszone opakowaniePowrót do sprzedażyIlość dostępna rośnie po zatwierdzeniu przyjęcia
Wątpliwy stan produktuStrefa kontroli jakościTowar zablokowany do decyzji, niewidoczny w sklepie
Uszkodzenie uniemożliwiające sprzedażUtylizacja lub reklamacja u dostawcyZdjęcie ze stanu z zapisem przyczyny

Zwrot częściowy wymaga osobnego wiersza dokumentu dla każdej pozycji, a nie dla całego zamówienia. Sklep dostaje informację o ilościach faktycznie przyjętych, więc kwota zwrotu płatności odpowiada zawartości paczki, a nie deklaracji klienta. Gdy paczka zawiera towar spoza zamówienia, dokument oznacza go jako nadwyżkę i kieruje do wyjaśnienia z klientem.

Ważne, by decyzja o losie towaru zapadała przed przywróceniem go do stanu dostępnego. Zwrot przyjęty od razu jako dostępny bywa sprzedany kolejnemu klientowi, zanim ktoś sprawdzi jego stan. System, w którym przyjęcie zwrotu domyślnie trafia do strefy kontroli, ogranicza takie zdarzenia. Opis programu, który obsługuje takie procesy, znajduje się na stronie programu magazynowego WMS.