Dzisiaj chcę opowiedzieć, jak działa Odoo Inventory i jak firma może wykorzystać funkcje tego modułu. To również dobry sposób, żeby odpowiedzieć na pytanie: WMS — co to jest i jak działa w codziennej pracy magazynu?
WMS, czyli system zarządzania magazynem, pomaga kontrolować, jaki towar mamy, gdzie go przechowujemy oraz jak go przyjąć, odłożyć, skompletować, wysłać i policzyć. W Odoo te procesy nie są odizolowane: Inventory współpracuje między innymi z zakupami, sprzedażą i produkcją.
Uważam Inventory za jeden z najbardziej konserwatywnych modułów Odoo. Jego konfiguracja wymaga dobrej znajomości procesów wewnątrz systemu. Pozornie poprawne ustawienia mogą później utrudnić codzienną pracę, jeśli nie odpowiadają rzeczywistemu przepływowi towaru.
W największym skrócie Inventory odpowiada na cztery pytania:
- jaki zapas mamy w firmie;
- w jakich miejscach go przechowujemy;
- jaka jest jego wartość i koszt;
- dlaczego mamy właśnie tyle, a nie więcej albo mniej.
Zacznę od pojęć. Trzeba je dobrze zrozumieć, bo ta terminologia wprowadza nas w filozofię Odoo.
Kiedy firma potrzebuje WMS?
Jeżeli pracownicy szukają towaru z pamięci, sprzedaż obiecuje klientowi zapas już zarezerwowany dla kogoś innego, ruchy są zapisywane z opóźnieniem, a każda inwentaryzacja przynosi kolejne rozbieżności — warto uporządkować sposób pracy magazynu. WMS jest potrzebny wtedy, gdy firma chce oprzeć decyzje na sprawdzalnych danych, zamiast na telefonach i domysłach. Samo uruchomienie aplikacji nie wystarczy: potrzebujemy poprawnych kartotek produktów, jednostek miary, lokalizacji oraz zasad rejestrowania operacji.
Magazyn i lokalizacja to dwie różne rzeczy
Magazyn, czyli warehouse, w Odoo reprezentuje fizyczny obiekt, w którym firma wykonuje operacje magazynowe. Ma adres i własną organizację przyjęć, przechowywania oraz wydań. Dlatego zaczynam od rzeczywistości: jakie mamy obiekty i gdzie faktycznie leży towar?
Klienci czasami mówią: „Mamy jeszcze magazyn wirtualny”. Zawsze pytam wtedy, co dokładnie mają na myśli. Towar w drodze? Uszkodzenia? Braki ujawnione podczas inwentaryzacji? Towar u klienta? W wielu takich sytuacjach nie potrzebujemy kolejnego warehouse. Potrzebujemy odpowiednich lokalizacji i przepływów.
Lokalizacja, czyli location, określa konkretne miejsce w strukturze magazynowej. Może to być strefa, pomieszczenie, regał, półka albo komórka. Paletę również możemy identyfikować, zwykle jako opakowanie znajdujące się w określonej lokalizacji.
W podstawowej konfiguracji zaczynamy od jednego magazynu i jego głównej lokalizacji przechowywania. System ma też lokalizacje techniczne potrzebne do ewidencji przepływów. W miarę potrzeb dzielimy magazyn na miejsca odpowiadające temu, jak naprawdę pracujemy:
- strefę przyjęcia;
- miejsce pakowania;
- chłodnię i strefę produktów mrożonych;
- miejsce przechowywania towarów wartościowych;
- konkretne regały i komórki.
Każda lokalizacja ma nazwę i może mieć własny kod kreskowy. To daje pracownikowi możliwość zeskanowania nie tylko produktu, lecz także miejsca, do którego produkt trafia. Informacja „towar jest w magazynie” staje się znacznie bardziej przydatna, kiedy wiemy, że chodzi o komórkę A-03-02.

Gdzie odłożyć towar? Reguły putaway
Odoo pozwala ustawić reguły odkładania, czyli putaway rules. Mogą wskazywać miejsce przechowywania na podstawie produktu lub kategorii produktu. Chodzi o to, żeby ryby trafiały do odpowiedniej strefy, mrożonki do zamrażarki, a biżuteria do miejsca przeznaczonego dla towarów wartościowych.
Reguła pomaga systemowi wskazać lokalizację docelową. Fizyczne przemieszczenie nadal wykonuje pracownik. Dobra konfiguracja wymaga więc wiedzy o warunkach przechowywania, układzie magazynu i sposobie pracy zespołu.
Magazyn wykonuje polecenia
W filozofii Odoo magazyn zazwyczaj nie wymyśla sobie sam zadań. Wykonuje polecenia wynikające z pracy innych obszarów firmy. Zakupy przygotowują przyjęcie od dostawcy, sprzedaż tworzy potrzebę wydania klientowi, a produkcja potrzebuje materiałów i przekazuje gotowe wyroby.
Wyjątkiem mogą być wewnętrzne przesunięcia: reorganizacja regałów, zmiana układu palet albo zagęszczenie przechowywania. Do tego jeszcze wrócę.
Ważne pojęcie to typ operacji, czyli Operation Type. Określa sposób obsługi określonego rodzaju przepływu, jego ustawienia oraz domyślne lokalizacje. Może też mieć kod kreskowy. Typ operacji to wzorzec; konkretne przyjęcie lub wydanie jest dokumentem realizującym ten wzorzec.
Typowa dostawa do klienta mówi w praktyce: weź towar ze strefy przechowywania i przekaż go do lokalizacji klientów. Przyjęcie od dostawcy opisuje przepływ w przeciwnym kierunku. Dzięki temu praca magazynu wygląda jak zestaw czytelnych, sprawdzalnych zadań.

Towar nie pojawia się znikąd
W Odoo mamy lokalizacje fizyczne oraz lokalizacje reprezentujące przepływy poza naszym własnym zapasem. Przykładem są dostawcy i klienci. Istnieją też lokalizacje używane do odpadów czy różnic inwentaryzacyjnych.
Lokalizacja klientów nie oznacza, że towar nadal jest naszym zapasem magazynowym. Pozwala natomiast zapisać, dokąd go wydaliśmy. Podobnie przyjęcie pokazuje, skąd towar do nas dotarł.
W ewidencji Odoo towar nie pojawia się znikąd i nie znika bez śladu. Każda zmiana ilości ma swoje źródło i miejsce docelowe.
Podczas wykonania operacji powstają ruchy towaru — stock moves. Zapisujemy, jaki produkt przemieściliśmy, w jakiej ilości, skąd i dokąd. Przy odpowiednim sposobie śledzenia dochodzą szczegóły partii, numerów seryjnych czy opakowań.
Można to porównać do podwójnego zapisu ilościowego: w jednym miejscu ilość maleje, w drugim rośnie. Nie oznacza to jednak, że każdy ruch magazynowy zawsze tworzy identyczną parę zapisów księgowych. Księgowość ma własne zasady i konfigurację.
Ta logika pozwala obsłużyć przyjęcia, wydania, zwroty, odpisy i inwentaryzację. Ruchy odpowiadają na pytanie: skąd wzięliśmy towar i gdzie go przekazaliśmy?
Typy operacji są prostą, ale wrażliwą częścią konfiguracji. Jako konsultanci ustawiamy je tak, żeby praca magazynu była sprawdzalna, obserwowalna i poprawna.
Mamy 20 sztuk. Ale ile możemy jeszcze obiecać?
Załóżmy, że w lokalizacji A mamy 20 sztuk produktu. To przykład, a nie opis konkretnego wdrożenia. Dlaczego właśnie 20? Ponieważ przyjęcia i wydania związane z tym miejscem dały taki wynik.
Żeby przy każdym odczycie nie trzeba było od nowa analizować całej historii ruchów, Odoo przechowuje bieżący stan w rekordach nazywanych quantami. Quant opisuje ilość produktu w określonej lokalizacji, z uwzględnieniem takich szczegółów jak partia, opakowanie czy właściciel, jeżeli mają zastosowanie.
To techniczny zapis aktualnego stanu, a nie pole do dowolnego ręcznego poprawiania. Zmiany powinny przechodzić przez właściwe operacje lub kontrolowaną korektę inwentaryzacyjną.
Ilość na stanie — Quantity on Hand
Raport zapasów pozwala szybko zobaczyć produkty, ich kategorie, lokalizacje i ilości. Quantity on Hand oznacza ilość na stanie w wybranym zakresie raportu.
To informacja o tym, co system ma zapisane teraz. Jeżeli pracownik fizycznie przyjął dostawę, ale nie potwierdził jej w Odoo, system nie dowie się o tym sam. Wiarygodność raportu zależy od terminowego rejestrowania rzeczywistych operacji.

Wolny zapas — Free to Use
Teraz wyobraźmy sobie, że z tych 20 sztuk 17 zostało już zarezerwowanych do innych wydań. Na stanie nadal mamy 20, ale wolne pozostają tylko 3 sztuki.
Wolny zapas odpowiada na pytanie, ile możemy wykorzystać bez naruszania istniejących rezerwacji. Samo utworzenie dokumentu nie zawsze oznacza natychmiastową rezerwację: moment rezerwowania zależy od ustawień i dostępności towaru.
Dlatego „mamy na stanie” i „możemy jeszcze obiecać klientowi” to dwa różne komunikaty.
Prognozowany zapas — Forecasted Quantity
Odoo może również pokazać prognozę zapasu w czasie. Uwzględnia planowane przyjęcia i wydania, wraz z ich terminami. Widzimy więc, kiedy oczekujemy dostawy i jak po jej przyjęciu powinien zmienić się stan.
To przydatne przy uzupełnianiu zapasów. Trzeba jednak pamiętać, że prognoza opiera się na dokumentach i planowanych datach. Niepotwierdzone przyjęcie nie jest jeszcze fizycznym towarem na półce, a nieaktualna data dostawy obniża użyteczność prognozy.
Partie i numery seryjne: co dokładnie przechowujemy?
Partia, czyli lot, pozwala połączyć wiele jednostek tego samego produktu w jedną identyfikowaną grupę. Na przykład dzisiaj otrzymujemy 20 sztuk i przypisujemy je do określonego numeru partii.
Partie ułatwiają kontrolę jakości i identyfikację pochodzenia. Przy odpowiedniej konfiguracji pozwalają również zarządzać terminami ważności. Możemy sprawdzić, od kogo otrzymaliśmy partię, gdzie ją przechowywaliśmy i komu wydaliśmy jej część.
Numer seryjny identyfikuje pojedynczą sztukę produktu. Dla wyjaśnienia można myśleć o nim jak o partii złożonej z jednej sztuki, choć w Odoo jest to osobny sposób śledzenia.
Typowy przykład to jednostkowe, wartościowe urządzenie. Chcemy wiedzieć, skąd je otrzymaliśmy, gdzie je przechowywaliśmy i komu przekazaliśmy. Historia ruchów pozwala śledzić tę konkretną sztukę. Obsługa eksploatacji, napraw czy gwarancji może wymagać również innych aplikacji i odpowiednio ustawionych procesów.
Produkty, partie i numery seryjne tworzą razem znacznie dokładniejszy obraz magazynu niż sama suma ilości.
Inventory i Barcode — gdzie przebiega granica?
Inventory prowadzi ewidencję magazynową i obsługuje operacje. Barcode jest osobną aplikacją, która pomaga wykonywać te operacje ze skanerem kodów kreskowych. Korzysta z tych samych produktów, lokalizacji i dokumentów.
Inventory może działać bez Barcode. Pracownik może otwierać dokumenty i wpisywać ilości w standardowym interfejsie. Barcode zmienia sposób pracy: zamiast wyszukiwania i ręcznego wpisywania skanujemy produkt, lokalizację lub operację. Dostępność aplikacji i konkretnych funkcji zależy od edycji oraz konfiguracji Odoo.

Jak wygląda codzienna praca ze skanerem?
Pracownik otwiera Barcode i widzi zadania: jakie towary mają przyjechać od dostawców, jakie wydania są zaplanowane i dla których klientów trzeba je wykonać. Warunki znane już w Odoo — produkty, ilości, opakowania czy dodatkowe wymagania — stają się instrukcją wykonania pracy.
Przyjęcie od dostawcy
Kiedy dostawa przyjeżdża, pracownik odnajduje odpowiednią operację, otwiera ją i skanuje produkty. Rejestruje faktyczną ilość, a jeżeli proces tego wymaga — także partię lub numer seryjny.
Zamówiliśmy 20 sztuk, ale przyjechało 18? Zapisujemy 18. Część pozycji nie dotarła albo dostawca przysłał inne produkty? Trzeba odnotować rzeczywistą sytuację i wyjaśnić rozbieżność, zamiast potwierdzać plan jako wykonanie.
Skanowanie identyfikuje produkt i pomaga ograniczyć pomyłki. Sposób wprowadzania ilości zależy od konfiguracji kodów i jednostek: pojedynczy skan nie zawsze oznacza dowolną ilość całego opakowania.

Co oznacza backorder?
Przy częściowej realizacji Odoo może utworzyć backorder, czyli dokument na pozostałą ilość. To sposób rozdzielenia tego, co wykonaliśmy teraz, od tego, co pozostaje do realizacji.
Możemy też zdecydować, że nie oczekujemy reszty i anulujemy pozostałą część. To, czy system pyta o tę decyzję, tworzy backorder automatycznie czy go nie tworzy, zależy od ustawień typu operacji. Sam dokument nie jest gwarancją, że dostawca rzeczywiście dowiezie brakujący towar.
Kiedy aktualizują się stany?
Po zatwierdzeniu wykonanej operacji aktualizuje się ewidencja zapasu. Jeżeli pracownik rejestruje ruch w momencie wykonania, firma otrzymuje bieżącą informację z magazynu. Data wykonania pozwala później odtworzyć kolejność zdarzeń.
Wycena i księgowość są z tym procesem powiązane, ale ich zachowanie zależy od wersji Odoo, metody wyceny i ustawień księgowych. Nie należy zakładać, że każdy skan albo każdy ruch w każdej konfiguracji natychmiast tworzy taki sam zapis na kontach. Dzisiaj nie będę rozwijać części księgowej. Można ją obejrzeć i omówić osobno na naszym serwerze demonstracyjnym Odoo.
Od kompletacji do kuriera
Podobnie wygląda wydanie. Otwieramy zaplanowane zadanie, kompletujemy właściwe produkty, sprawdzamy rzeczywiste ilości i przygotowujemy paczkę. W zależności od organizacji magazynu kompletacja, pakowanie i wydanie mogą być jednym krokiem albo osobnymi etapami.
Magazyn nie działa w próżni. Odoo współpracuje ze sprzedażą oraz z integracjami usług dostawy, na przykład InPost czy DHL. Zakres automatyzacji zależy od używanego konektora i usług przewoźnika.
W typowym konfigurowanym przez nas procesie magazyn przygotowuje paczkę, system przekazuje dane do usługi dostawy, powstaje etykieta i numer śledzenia, a kurier odbiera przesyłkę. Dzięki numerowi śledzenia firma i klient mogą sprawdzać jej dalszy status.
Warto rozróżnić przygotowanie paczki, zatwierdzenie wydania i faktyczne odebranie jej przez kuriera. To różne zdarzenia, które trzeba poprawnie odwzorować w procesie. O integracjach w bardziej rozbudowanym środowisku opowiadam w historii wdrożenia Odoo dla międzynarodowego e-commerce i operatorów 3PL.
Uszkodzenia, przesunięcia i inwentaryzacja
Czasami część towaru trzeba wycofać z użycia. Służy do tego proces scrap, czyli odpisanie towaru do odpowiedniej lokalizacji odpadów. Dzięki temu nie pozostaje on dostępny do zwykłego wydania.
W naszych wdrożeniach często organizujemy ten proces w dwóch krokach: najpierw identyfikacja i odłożenie towaru do sprawdzenia, później zatwierdzone odpisanie. Chcemy móc zweryfikować, co pracownik zamierza wycofać. To zaprojektowana przez nas organizacja procesu, a nie obowiązkowy schemat każdej instalacji Odoo.
Przy reorganizacji magazynu potrzebne są przesunięcia wewnętrzne. Jeżeli przenosimy produkt z jednego regału na drugi, nie zmieniamy jego łącznej ilości w firmie, ale aktualizujemy informację o miejscu przechowywania.
Inwentaryzacja pozwala porównać stan zapisany w systemie z tym, co rzeczywiście policzyliśmy. Możemy sprawdzać konkretne lokalizacje i produkty, a potem analizować raport różnic: gdzie wystąpiło odchylenie i jak było duże.
Po zatwierdzeniu korekty Odoo zapisuje ruchy korygujące stan. Nie wymazujemy wcześniejszej historii. Skutki wyceny i księgowania zależą od konfiguracji. Sama korekta usuwa rozbieżność ilościową, ale nie wyjaśnia jeszcze jej przyczyny — tę trzeba znaleźć w procesie.
W większości przypadków zadania magazynu wynikają z zakupów, sprzedaży lub produkcji. Magazyn wykonuje je i potwierdza rzeczywisty przebieg. Właśnie to połączenie sprawia, że Odoo jest dla mnie systemem numer jeden do ewidencji zapasów i odpowiedzi na pytanie, jak te zapasy powstały.
Pytania, które użytkownicy zadają podczas pracy z Inventory
Jak sprawdzić, dlaczego brakuje towaru na stanie?
Zaczynamy od karty produktu i historii powiązanych ruchów. Sprawdzamy daty, lokalizacje źródłowe i docelowe, dokumenty oraz użytkowników, którzy wykonali operacje. Dzięki temu możemy odtworzyć, dlaczego system pokazuje właśnie taką ilość.
Często okazuje się, że dostawa fizycznie przyjechała, ale przyjęcie nie zostało zatwierdzone. Innym razem w dokumencie wskazano niewłaściwy produkt albo towar znajduje się w innej lokalizacji niż ta, którą sprawdzamy.
Warto też rozróżnić brak fizyczny od braku wolnego zapasu. Produkt może być na półce, lecz już zarezerwowany do innego wydania. Najpierw analizujemy historię i zakres raportu, dopiero później decydujemy o korekcie.
Zatwierdziliśmy dokument z niewłaściwym produktem. Jak go poprawić?
Nie poprawiamy wykonanej historii tak, jakby zdarzenie nigdy nie miało miejsca. Potrzebujemy operacji korygującej. W zależności od sytuacji będzie to zwrot lub odwrócenie błędnego przepływu, a następnie prawidłowa operacja; w uzasadnionych przypadkach stosujemy korektę inwentaryzacyjną.
Dobór rozwiązania zależy od tego, co fizycznie się wydarzyło, jakie dokumenty są powiązane i czy wystąpiły skutki księgowe. Korekta powinna mieć wyjaśnienie i zachować możliwość kontroli.
Wracamy do zasady: nic nie pojawia się znikąd i nie znika bez śladu. Skaner kodów kreskowych zmniejsza ryzyko wyboru niewłaściwej pozycji, szczególnie w porównaniu z ręcznym wyszukiwaniem. Nie zastępuje jednak poprawnych kodów, danych i zasad pracy.
Utworzyliśmy produkt będący duplikatem. Co teraz?
Jeżeli duplikat ma już historię, zapas albo powiązane dokumenty, nie jest to proste usunięcie dodatkowego wiersza. Najpierw wybieramy właściwą kartotekę i sprawdzamy stany, rezerwacje, partie, numery seryjne, integracje oraz wycenę.
W niektórych sytuacjach trzeba kontrolowanie wyzerować stan niewłaściwej kartoteki i wykazać rzeczywisty zapas na właściwej. To nie jest uniwersalna instrukcja: przy historii wyceny i dokumentach księgowych sposób korekty wymaga szczególnej uwagi. Niewłaściwą kartotekę zwykle archiwizujemy po uporządkowaniu powiązań.
Żeby ograniczyć takie błędy, w naszych konfiguracjach ograniczamy uprawnienia do tworzenia produktów. Zakładanie kartotek jest osobnym, odpowiedzialnym zadaniem. Nie jest to automatyczny zakaz obowiązujący wszystkich użytkowników w każdej standardowej instalacji Odoo.
Czy możemy połączyć e-commerce z Odoo przez kody kreskowe?
Tak, mamy takie doświadczenie. Integrujemy Odoo ze sklepami i platformami, między innymi Shopify, WordPress/WooCommerce czy Amazon, a kod kreskowy może służyć do mapowania produktów.
Trzeba sprawdzić, czy kody są unikalne i zgodne po obu stronach, również na poziomie wariantów. Duplikaty, brakujące kody lub pomylenie kodu jednostki z kodem opakowania prowadzą do błędów. Konkretny konektor musi obsługiwać wybraną metodę identyfikacji; czasami wymaga to konfiguracji albo rozszerzenia integracji.
To normalne zadanie integracyjne, ale dobry wynik zaczyna się od uporządkowanych danych produktów.
Jak obsługiwać materiały, których ilości nie chcemy liczyć?
Rękawiczki, czyściwo, naklejki, folia stretch, śruby czy nakrętki nie zawsze wymagają szczegółowej ewidencji ilościowej. Liczenie każdej sztuki może kosztować więcej wysiłku, niż daje pożytku.
W starszych wersjach Odoo używano do tego kategorii produktów określanych jako consumables, czyli materiały zużywalne. W Odoo 19 towary można skonfigurować bez śledzenia zapasu — bez włączonego Track Inventory. Możemy nadal wykorzystywać je w dokumentach zakupowych i odpowiednich procesach zużycia, ale nie otrzymujemy takiej samej wiarygodnej ewidencji ilości na stanie i prognozy jak dla produktów śledzonych.
Nie chodzi o to, że takich materiałów fizycznie nie da się policzyć. Świadomie rezygnujemy z utrzymywania ich szczegółowego stanu w systemie. Jeżeli brak danego materiału zatrzymuje pracę, warto ponownie rozważyć śledzenie ilości i zasady uzupełniania.
Koszt materiału może być uwzględniony na przykład w strukturze produkcji lub odpowiednio skonfigurowanym rozliczeniu kosztów. Samo oznaczenie produktu jako nieśledzonego nie sprawia jednak, że Odoo automatycznie doliczy go do kosztu dowolnej operacji magazynowej.
Gdy analiza zapasów ma obejmować kilka systemów, dane WMS można połączyć w raportach i dashboardach Tableau. Rotacja i analiza ABC wymagają wtedy spójnych definicji produktów, okresów i wartości.
To nasza codzienna praca
W ERPixel wdrażamy WMS w Odoo od ponad dziesięciu lat. Znamy ten moduł od podszewki: potrafimy budować bardzo złożone układy procesów, prawidłowo rozliczać wartość przemieszczanego towaru i przygotowywać raporty rotacji magazynu, rotacji zapasów oraz analizy ABC.
Potrafimy również odtwarzać i korygować operacje dotyczące wcześniejszych okresów. Takie zadanie wymaga uwzględnienia wersji Odoo, dat ruchów, wyceny i zasad księgowych. Nie sprowadza się do zmiany daty w dokumencie.
Nie rozwijam tutaj mechanizmu dodatkowych kosztów nabycia, czyli landed costs: usług i kosztów towarzyszących pozyskaniu zapasu, które mogą zwiększać jego wartość. Dla operatora magazynu to zwykle drugi plan. Ten obszar łączy przede wszystkim zakupy i księgowość, choć ma znaczenie dla poprawnego kosztu towaru.
Nasza praca polega na tym, żeby operacje były poprawne, historia zapasu wiarygodna, a wycena i raporty użyteczne dla biznesu. To właśnie robimy — i w tym jesteśmy naprawdę dobrzy.
Jeżeli chcesz sprawdzić system samodzielnie, otwórz demo Odoo ERPixel. Login: demo@erpixel.pl. Hasło: demo@erpixel.pl. Interfejs i dostępne funkcje zależą od konfiguracji środowiska demonstracyjnego.
Jeżeli spodobał Ci się ten sposób patrzenia na magazyn, zapraszam do rozmowy. Poznaj naszą usługę wdrożenia systemu zarządzania zapasami w Odoo lub szkolenie z podstaw Odoo Inventory. Skontaktuj się z ERPixel albo opisz swój proces w formularzu poniżej. Chętnie pokażemy, jak tę logikę zastosować w Twojej firmie.
Zacznijmy rozmowę
Opowiedz, jak działa Twoja firma i który proces chcesz uporządkować w Odoo.