Stany magazynowe to cichy zabójca sklepów internetowych. Wszystko wygląda dobrze, zamówienia spływają, a potem dzwoni klient: "Zamówiłem czarną bluzę rozmiar L, a Państwo piszecie, że jej nie ma". I bum – reklamacja, negatywna opinia na Ceneo, zwrot pieniędzy, czasem spór na Allegro, który kosztuje Cię rating sprzedawcy. Przez ostatnie lata widzieliśmy każdy możliwy scenariusz rozjazdu stanów: od zwykłego niezaznaczonego checkboxa "Manage stock" w WooCommerce, przez race conditions przy Black Friday, po ERP-y, które synchronizowały się raz dziennie o 3:00 w nocy – za wolno, żeby nadążyć za ruchem. Ten poradnik to destylat tych doświadczeń. Pokażę Ci, skąd biorą się niezgodności, jak je diagnozować i jak ustawić sklep tak, żeby 95% tych problemów zniknęło samo. Jeśli masz ostry pożar – sprzedajesz coś, czego nie masz, lub stan wisi mimo braku towaru – zacznij od sekcji 2 i 9. Jeśli dopiero projektujesz integracje, od razu lecisz do 10.
Krótka odpowiedź
Usługi KC Mobile
Sprawdź naszą ofertę
Potrzebujesz pomocy specjalisty? Skorzystaj z naszych usług i rozwiń swój biznes online.
Stan produktu niezgodny z rzeczywistością – 5 głównych typów błędów
Kiedy klient piszę "Macie źle stany", w 95% przypadków to jeden z pięciu scenariuszy. Rozpoznasz je po objawach i każdy ma inną przyczynę. Poniżej tabela, do której wracaj za każdym razem, gdy ktoś zgłasza rozbieżność.
| Typ błędu | Objaw | Prawdopodobna przyczyna | Pierwszy krok naprawy |
|---|---|---|---|
| Negative stock | W bazie widzisz -3, -15, -42 sztuki | Brak Hold Stock, race condition przy Black Friday | Włącz Hold Stock 60 min i Inventory → Stock holds |
| Hidden out-of-stock | Produkt pokazuje "w magazynie" ale stan = 0 | Opcja "Hide out of stock" wyłączona albo cache strony | Sprawdź Inventory settings + wyczyść cache |
| Stuck decrement | Stan nie spada po zamówieniu | Odznaczony "Manage stock" albo status zamówienia nie triggeruje dekrementacji | Zaznacz "Manage stock", sprawdź hook `woocommerce_reduce_order_stock` |
| Wrong initial value | Stan startowy błędny (np. 1000 zamiast 10) | Ręczny import CSV z błędem lub feed dostawcy bez walidacji | Porównaj z fizycznym magazynem, popraw import |
| Phantom stock | System pokazuje 5 sztuk, a w magazynie zero | Zwroty nieprzyjmowane lub kradzieże / błędy przy pakowaniu | Inwentaryzacja fizyczna + adjustment log |
Jak diagnozować krok po kroku:
1. Wejdź w WooCommerce → Produkty i posortuj po polu "Stan magazynowy" rosnąco. Wszystko poniżej zera to alert czerwony.
2. Uruchom raport WooCommerce → Analityka → Stany – pokaże rozbieżności na poziomie wariantów.
3. Porównaj z fizyczną inwentaryzacją (nawet punktową – wybierz 20 najchodliwszych SKU).
4. Zrób zrzut bazy (`wp_postmeta` dla `_stock`) i porównaj z ERP-em – jeśli masz.
Więcej o kontekście magazynowym znajdziesz w artykule problemy z magazynem w e-commerce, który pokazuje też aspekty operacyjne (pakowanie, etykiety, lokalizacje).
Oversell – sprzedałem produkt, którego nie mam w magazynie
To najbardziej stresująca sytuacja w e-commerce. Klient zapłacił, paragon wystawiony, a w magazynie pustka. Oversell zwykle dzieje się z trzech powodów:
- Race condition – dwóch klientów dodaje ostatnią sztukę do koszyka w tej samej sekundzie, WooCommerce bez Hold Stock sprzedaje oboma.
- Pending orders – klient zamówił za pobraniem, WooCommerce zmniejszył stan, ale druga integracja (np. Allegro) nie wiedziała i sprzedała to samo.
- Opóźniony webhook – zamówienie na Allegro pojawiło się o 14:00, BaseLinker zaciągnął je o 14:07, a w tym czasie ktoś kupił ten sam produkt na WooCommerce.
Co zrobić natychmiast, gdy zdarzy się oversell:
1. Zadzwoń do klienta w ciągu godziny. Nie pisz maila, zadzwoń. Szczerze powiedz, co się stało.
2. Zaoferuj trzy opcje: pełny zwrot z rabatem na następne zamówienie (np. 15%), wysyłka gdy produkt wróci (z informacją "do 5 dni roboczych"), zamiana na podobny produkt w tej samej cenie.
3. Nie obwiniaj systemu. Klient chce rozwiązania, nie wymówki.
4. Zapisz sytuację w CRM-ie lub prostym Excelu – po miesiącu zobaczysz wzorzec (Allegro? WooCommerce? konkretny SKU?).
Jak zapobiegać w 2026:
- Włącz w WooCommerce → Ustawienia → Produkty → Inwentarz opcję "Hold Stock" na 60 minut. System zarezerwuje stan w momencie dodania do koszyka.
- Rozważ blokadę sprzedaży przy stanie 1 sztuki dla produktów dostępnych na wielu kanałach. Lepiej stracić jedno zamówienie niż zrobić oversell.
- Uruchom BaseLinker w WooCommerce – synchronizacja stanów jest tam event-driven, z webhookami w obie strony.
Jeśli Twój sklep rośnie i dzieje się to coraz częściej, czas na poważną rozmowę o architekturze. Napisz do nas – pomożemy ogarnąć to systemowo.
Planujesz sklep internetowy?
Budujemy sklepy na WooCommerce z integracjami płatności i kurierów. Od 8000 zł.
Stan się nie odlicza po zakupie (WooCommerce)
Klasyczny problem: zamówienie przychodzi, paragon leci, a stan magazynowy stoi jak wbił. Są cztery miejsca, które musisz sprawdzić po kolei.
1. Globalny checkbox "Zarządzaj stanami"
Wejdź w WooCommerce → Ustawienia → Produkty → Inwentarz. Upewnij się, że "Zarządzaj stanami?" jest zaznaczone. Bez tego WooCommerce w ogóle nie śledzi zapasów.
2. Checkbox "Manage stock" na konkretnym produkcie
Edytuj produkt → zakładka "Inwentarz". Musi być zaznaczone "Zarządzaj stanem magazynowym?". Jeśli nie jest – produkt ma tylko flagę "dostępny/niedostępny" bez licznika.
3. Typ produktu – Simple vs Variable
Jeśli to produkt wariantowy (rozmiary, kolory), stan ustawiasz na poziomie wariantu, nie produktu-rodzica. Szczegóły w artykule warianty w WooCommerce. Najczęstszy błąd: ktoś wpisuje stan 50 w produkcie-rodzicu, a warianty mają "Manage stock" odznaczony. Efekt: WooCommerce nie wie, co odliczać.
4. Status zamówienia nie triggeruje dekrementacji
WooCommerce odlicza stan przy przejściu zamówienia do statusu "Przetwarzanie" lub "Zakończone" (zależy od ustawień pluginu płatności). Jeśli używasz statusu własnego (np. "W magazynie"), musisz dodać mu flagę `reduce_stock` w kodzie:
add_filter( 'woocommerce_order_item_quantity', function( $quantity, $order, $item ) {
if ( $order->get_status() === 'w-magazynie' ) {
return $quantity;
}
return $quantity;
}, 10, 3 );Jeśli sprawdziłeś wszystkie cztery punkty i dalej nie działa, problem zwykle leży w konflikcie wtyczek. Najczęstsi podejrzani: cache (WP Rocket, LiteSpeed), deal plugins, custom order status plugins. Wyłącz je po kolei i testuj.
Stan pokazuje Niedostępny a produkt jest w magazynie
Odwrotny problem, też bolesny. Klient chce kupić, a widzi "brak w magazynie". Tracisz sprzedaż, bo ktoś pójdzie do konkurencji. Kilka najczęstszych przyczyn:
- Backorders wyłączone – produkt ma stan 0, ale fizycznie jest. Włącz "Zezwalaj na zamówienia na wyczerpany towar" w produkcie.
- Próg niskiego stanu ustawiony za wysoko – w ustawieniach WooCommerce "Próg braku w magazynie" może być np. 5, a produkt ma stan 3. System uznaje to za "Out of stock".
- Status produktu – produkt ma status "Szkic" lub "Prywatny" zamiast "Opublikowany".
- Cache – strona pokazuje stan sprzed godziny. Wyczyść cache WP Rocket / Cloudflare.
- Filtr w motywie – niektóre szablony (zwłaszcza starsze Storefront-based) renderują status stanu z własnej logiki. Sprawdź `single-product.php` w child-theme.
Checklist diagnostyczny:
1. Otwórz produkt jako admin i sprawdź pole "Status magazynowy" – powinno być "W magazynie".
2. Otwórz ten sam produkt w trybie incognito (anonim). Jeśli widzisz "Niedostępny" tylko tam – problem cache'owania.
3. Sprawdź `wp_postmeta` dla tego produktu: pola `_stock_status` i `_stock` muszą być spójne.
4. Jeśli używasz WPML lub Polylang, sprawdź tłumaczenie. Czasem tłumaczenie ma status "draft".
Sprawdź też problemy z integracje w e-commerce, jeśli Twój stan pochodzi z zewnętrznego systemu – tam często leży pies pogrzebany.
Warianty z niezależnymi stanami – konfiguracja
Warianty to obszar, w którym łamie się najwięcej sklepów. Dlaczego? Bo WooCommerce pozwala zarządzać stanem w trzech miejscach i łatwo pomieszać:
Tryb 1: Stan na poziomie produktu-rodzica
Masz 100 sztuk koszulki "Classic" i nie rozróżniasz rozmiarów. Stan ustawiasz na produkcie, warianty nie mają "Manage stock". WooCommerce odejmuje ze wspólnej puli niezależnie od rozmiaru. Praktyczne tylko dla produktów, gdzie każdy wariant to fizycznie ten sam przedmiot.
Tryb 2: Stan na poziomie wariantu (zalecane)
Każdy rozmiar / kolor ma osobny licznik. Edytuj produkt → zakładka Warianty → edytuj każdy wariant z osobna → "Zarządzaj stanem magazynowym" + liczba. To jedyny sensowny tryb, jeśli sprzedajesz ubrania, buty, produkty z kolorami.
Tryb 3: Mixed approach (pułapka)
Rodzic ma "Manage stock" włączone, niektóre warianty też. WooCommerce gubi się, które stany zliczać. Nigdy tego nie rób.
Najczęstsze błędy:
- Zaznaczony "Manage stock" tylko na 3 z 8 wariantów – pozostałe sprzedają się w nieskończoność.
- Kopiowanie wariantów przez "Duplicate variation" – kopiuje też stan startowy, więc nowy wariant ma te same 50 sztuk co stary.
- Import CSV bez kolumn `stock_quantity` per wariant – wariant dziedziczy stan rodzica, co rzadko jest intencją.
Pro tip: użyj darmowej wtyczki "WPC Variation Bulk Editor" albo płatnego BaseLinker do masowej edycji stanów wariantów. Ręczna edycja 80 wariantów w jednym produkcie to droga do obłędu.
Multi-channel – stany rozjechane między WooCommerce a Allegro
Moment, w którym większość sklepów traci kontrolę nad stanami: pierwsza integracja z Allegro. Nagle masz dwa źródła prawdy i WooCommerce mówi co innego niż Allegro. Klienci zamawiają ten sam produkt dwa razy, a Ty nocami gasisz pożary.
Standard rynku w 2026: BaseLinker
BaseLinker jest środkowym systemem, który synchronizuje stany przez webhooki w czasie rzeczywistym. Sprzedaż na Allegro trafia do BaseLinkera w kilka sekund, a BaseLinker aktualizuje stan na WooCommerce. I odwrotnie. Pełna konfiguracja opisana w BaseLinker w WooCommerce oraz Allegro w WooCommerce.
Kluczowe ustawienia:
- Częstotliwość synchronizacji stanów: event-driven, nie cron. Stare integracje co 15 min to ryzyko oversell.
- Mapowanie SKU: wszystkie kanały muszą używać tego samego kodu produktu. Allegro ma "Sygnatura", WooCommerce ma "SKU", BaseLinker mapuje. Jedna literówka = rozjazd na zawsze.
- Bufor bezpieczeństwa: dla topowych produktów trzymaj 1–2 sztuki buforu (sprzedawaj tylko gdy stan ≥ 2). Kupuje Ci to czas na synchronizację.
- Webhook retry: ustaw minimum 3 próby z backoff-em 5, 15, 60 sekund. Allegro API czasami timeoutuje.
Typowe problemy i ich źródła:
| Objaw | Najczęstsza przyczyna |
|---|---|
| Allegro sprzedaje więcej niż WooCommerce | Wtyczka Allegro ma własny licznik, obok BaseLinkera |
| Stan na WooCommerce aktualizuje się po 15 min | Cron synchronizacji zamiast webhooków |
| Niektóre produkty się synchronizują, inne nie | Brak mapowania SKU dla kategorii |
| Po synchronizacji stan jest -50 | Dwa kanały dekrementują tę samą sprzedaż |
Jeśli masz trzy kanały (WooCommerce + Allegro + Empik / Erli), ręczne zarządzanie nie wchodzi w grę. Umów konsultację albo dzwoń na +48 604 939 140 – policzymy, co się opłaca.
Dropshipping – stany z XML feed dostawcy
Dropshipping wprowadza nową klasę problemów: Twój stan zależy od kogoś, kogo nie kontrolujesz. Dostawca aktualizuje XML raz na godzinę, Ty zaciągasz, a klient kupuje między aktualizacjami – i po Twojej stronie nie ma towaru.
Trzy wzorce synchronizacji feedów:
1. Cache feed (tanie, ryzykowne) – zaciągasz XML co 1–4 godziny, zapisujesz do bazy, sprzedajesz z cache. Zaleta: szybkie ładowanie strony. Wada: okno 1–4 h oversell.
2. Real-time lookup (drogie, bezpieczne) – przy każdym dodaniu do koszyka pytasz API dostawcy o aktualny stan. Zaleta: zero oversell. Wada: 300–800 ms opóźnienia na produkcie, API dostawcy może paść.
3. Hybryda (rekomendowane) – cache dla katalogu, real-time w checkout. Klient przegląda szybko, a tuż przed zapłatą robisz ostatni fetch.
Best practices feed handling:
- Sprawdzaj freshness: jeśli feed nie zaktualizował się od 4+ godzin, wyłącz sprzedaż produktów z tego feedu (lepiej stracić zamówienie niż oddać pieniądze).
- Ustaw timeout na 5 sekund max – jeśli dostawca nie odpowiada w 5 s, traktuj to jako "stan nieznany" i zatrzymuj koszyk.
- Mapuj tylko produkty, które masz w ofercie – nie importuj całego XML dostawcy jako własne produkty. To śmieci w bazie i koszmar SEO.
- Backup plan: miej procedurę na "dostawca padł" – ogłoszenie na stronie, pauzowanie kampanii Google Ads, info na Allegro.
Więcej o architekturze hurtowej: ERP integracja z WooCommerce pokazuje podobne wzorce dla własnego magazynu.
ERP integration – Subiekt, Comarch Optima, enova365
Gdy sklep rośnie powyżej ~500 zamówień miesięcznie, ERP przestaje być opcją i staje się koniecznością. Księgowość, VAT OSS, JPK, inwentaryzacja, reklamacje – wszystko przepływa przez system ERP, a sklep jest tylko jednym z kanałów sprzedaży.
Popularne ERP-y w Polsce (2026):
| ERP | Cena (start) | Plus | Minus |
|---|---|---|---|
| Subiekt GT / nexo | od 1299 zł jednorazowo | Tanio, popularne u księgowych | Desktop, trudna integracja online |
| Comarch Optima | od 300 zł/mies. | Chmura, dobre API | Koszt rośnie z dodatkami |
| enova365 | od 500 zł/mies. | Elastyczne, dobre dla średnich firm | Droższe wdrożenie |
| InsERT Navireo | od 2500 zł | Dla większych | Bardziej złożone |
Kluczowe decyzje architektoniczne:
- Kto jest źródłem prawdy? Dla 95% sklepów to ERP. Sklep tylko konsumuje stan.
- Batch vs real-time? Dla sklepów <500 zamówień / mies. wystarczy batch co 15 min. Powyżej 2000 zamówień – real-time event-driven z kolejką (RabbitMQ, SQS).
- Middleware czy bezpośrednio? W 2026 standard to middleware (BaseLinker, Sky-Shop, własny Node.js worker) – łatwiej debugować, łatwiej retry.
- Retry on fail? Zawsze. Minimum 3 próby, exponential backoff, dead-letter queue na nieudane eventy.
Typowe problemy wdrożeniowe:
- Subiekt GT desktop – działa tylko gdy komputer włączony, trzeba VPS + zdalny pulpit.
- Optima – limity API (requests/minute), łatwo przekroczyć przy Black Friday.
- enova365 – konfiguracja uprawnień do API bywa pułapką.
To jest teren, gdzie amatorska integracja kończy się katastrofą. Jeśli planujesz wdrożenie ERP-u, porozmawiaj z nami – zrobiliśmy już ponad 40 takich projektów dla polskich sklepów.
Audyt i rekonciliacja – jak sprawdzić co się rozjechało
Raz w miesiącu musisz usiąść i porównać liczby. Nie "jak będzie czas", tylko każdego 5. dnia miesiąca. To 2 godziny, które oszczędzają 20 godzin firefightingu.
Krok 1: Wyciągnij trzy źródła danych
- Stan fizyczny z magazynu (choćby top 50 SKU, jeśli nie dasz rady całości).
- Stan z WooCommerce – eksport CSV wszystkich produktów z polem `stock`.
- Stan z ERP / BaseLinkera – eksport równoległy.
Krok 2: Wrzuć do Excela / Google Sheets
Prosta formuła `=B2-C2` pokaże rozjazd między WooCommerce a fizycznym stanem. Posortuj malejąco po wartości bezwzględnej. Top 20 SKU to Twoja lista do akcji.
Krok 3: Zdiagnozuj przyczyny
Dla każdej rozbieżności zadaj cztery pytania:
1. Czy był oversell w tym miesiącu? (sprawdź reklamacje)
2. Czy był zwrot, który nie wrócił do stanu?
3. Czy była inwentaryzacja, która wprowadziła korektę?
4. Czy produkt jest na wielu kanałach i jeden z nich desynchronizował?
Krok 4: Adjustment log
Każdą poprawkę ręczną wpisuj do prostego loga: data, SKU, stan przed, stan po, przyczyna, osoba. To Twoja dokumentacja audytowa i zarazem materiał do nauki – po trzech miesiącach zobaczysz wzorce.
Krok 5: Fizyczna inwentaryzacja raz na kwartał
Full count całego magazynu, nie tylko top 50. Tak, to boli. Tak, zatrzymuje sklep na pół dnia. Ale bez tego po roku masz 15–30% rozbieżność i nie wiesz o niczym.
Narzędzia ułatwiające:
- BaseLinker → Raporty → Rozbieżności stanów (automatyczny alert).
- WooCommerce → Analytics → Stock (darmowy, prosty).
- Stock Manager for WooCommerce (wtyczka, bulk editing + audit trail).
Jeśli inwentaryzacja ujawnia regularne braki fizyczne (a nie systemowe), może to być sygnał operacyjny – sprawdź problemy z magazynem po stronie pakowni.
Best practices – jak uniknąć 95% problemów ze stanami
Gdybyśmy mogli cofnąć się do pierwszego dnia każdego sklepu, który naprawialiśmy, wdrożylibyśmy poniższe dziesięć punktów. Większość z nich to kwestia jednego kliknięcia lub godzinnej konfiguracji, ale razem eliminują drobne 95% problemów.
Checklist "healthy inventory" dla sklepu w 2026:
1. Hold Stock 60 minut – rezerwacja stanu w koszyku. WooCommerce → Ustawienia → Produkty → Inwentarz.
2. "Manage stock" na każdym produkcie i wariancie – nie zostawiaj domyślnej flagi "dostępny".
3. Alerty email dla low stock – próg niskiego stanu 5 lub 10 (zależy od rotacji), mail admina zawsze włączony.
4. Próg "Out of stock" = 0 – tylko zero to zero, nie 3 i nie 5.
5. Zakaz backorders domyślnie – włączaj tylko świadomie, produkt po produkcie.
6. BaseLinker jako środkowy system przy >1 kanale sprzedaży.
7. Mapowanie SKU wspólne dla wszystkich kanałów – zero duplikatów, zero literówek.
8. Monitoring webhooków – BaseLinker ma dashboard "Ostatnie błędy synchronizacji". Sprawdzaj co tydzień.
9. Miesięczna rekonciliacja – fiz. stan vs WooCommerce vs ERP, log korekt.
10. Kwartalna fizyczna inwentaryzacja – full count, niezależnie od rozmiaru sklepu.
Zasady ogólne:
- Jedno źródło prawdy: ERP lub BaseLinker. Nigdy dwa.
- Event-driven, nie cron: w 2026 to standard. Cron co 15 min = ryzyko oversell w Black Friday.
- Monitoring proaktywny: alerty mailowe + SMS dla krytycznych SKU, nie tylko dashboard do klikania.
- Dokumentuj każdą zmianę: adjustment log, changelog integracji, changelog polityk stanów.
Potrzebujesz audytu swojego setupu? Zadzwoń: +48 604 939 140 albo napisz przez formularz. Pokażemy, gdzie Twój sklep przecieka i co trzeba zrobić, żeby spać spokojnie. Większość naszych wdrożeń sklepów internetowych zaczyna się od dwutygodniowej diagnostyki stanów – bo bez tego żadna optymalizacja sprzedaży nie ma sensu.
Wspomniane narzędzia
Potrzebujesz pomocy z e-commerce?
Budujemy sklepy internetowe na WooCommerce i integrujemy je z Baselinker, Allegro i systemami płatności. Bezpłatna wycena w 24h.
Najczęściej zadawane pytania
Dlaczego stan w moim sklepie nie jest zgodny z magazynem?
Jak naprawić sprzedaż produktu, którego nie było w magazynie?
Dlaczego WooCommerce nie odlicza stanu po zamówieniu?
Jak synchronizować stany między WooCommerce a Allegro?
BaseLinker vs integracja własna – co wybrać?
Czy warto mieć ERP przy małym sklepie?
Jak często robić inwentaryzację w e-commerce?
Ile kosztuje automatyzacja zarządzania stanami?
Potrzebujesz pomocy?
Planujesz sklep internetowy?
Budujemy sklepy na WooCommerce z integracjami płatności i kurierów. Od 8000 zł.