Zarządzanie stanem magazynowym - stan fizyczny i dostępny
Zarządzanie stanem magazynowym zaczyna się od rozróżnienia, o którą liczbę pyta użytkownik. Magazynier chce wiedzieć, ile sztuk leży w lokalizacji, handlowiec - ile może obiecać klientowi, a planista zakupów - ile będzie po nadejściu dostaw. Każda z tych liczb ma inną definicję, a system, który podaje jedną wartość dla wszystkich, przekazuje którejś z grup błędną informację.
| Rodzaj stanu | Definicja | Kto z niego korzysta |
|---|---|---|
| Stan fizyczny | suma ilości zaksięgowanych w lokalizacjach | magazynier, inwentaryzacja |
| Stan zarezerwowany | ilość przypisana do zatwierdzonych zleceń | kompletacja, planista wydań |
| Stan dostępny | stan fizyczny pomniejszony o rezerwacje | sprzedaż, sklep internetowy |
| Stan przyszły | stan dostępny powiększony o zamówienia w drodze | planista zakupów |
Liczba fizyczna wynika wyłącznie z dokumentów, a jej model danych opisuje tekst o magazynowym systemie informatycznym. Pozostałe trzy wielkości są pochodne i liczy się je dopiero na podstawie rezerwacji oraz zamówień. Podstawowe zestawienia stanów, na przykład stan na dzień, opisuje strona o stanach magazynowych.
Reguła: stan dostępny nie jest zapisywany jako osobna liczba, tylko wyliczany z fizycznego i rezerwacji w chwili odczytu.
Jednostki miary i przeliczniki
Ten sam towar bywa liczony w sztukach oraz w opakowaniach zbiorczych, więc stan przechowuje się w jednej jednostce podstawowej, a pozostałe wynikają z przeliczników w kartotece. Dzięki temu przyjęcie w paletach i wydanie w sztukach zmieniają tę samą liczbę. Ilość magazynuje się w typie DECIMAL z trzema miejscami po przecinku, bo towary sprzedawane na wagę czy metry nie mieszczą się w liczbach całkowitych.
| Jednostka | Przelicznik do podstawowej | Przykład użycia |
|---|---|---|
| Sztuka | 1 | wydanie detaliczne |
| Karton zbiorczy | na przykład 12 szt. | kompletacja pełnych kartonów |
| Paleta | na przykład 48 kartonów | przyjęcie od dostawcy |
Identyfikacja towaru i dokładność stanu
Dokładność stanu zależy od tego, jak towar jest identyfikowany przy każdej operacji. Kody kreskowe oraz tagi RFID zastępują ręczne przepisywanie numerów, a każde skanowanie tworzy zapis w chwili wykonania czynności. Przyjęcie i wydanie zapisane od razu utrzymują stan zgodny z rzeczywistością przez całą zmianę, a nie dopiero po jej zamknięciu.

Rezerwacje towaru pod zlecenia
Rezerwacja odkłada ilość towaru pod konkretne zlecenie, zanim kompletacja fizycznie zdejmie go z regału. Bez niej dwa zlecenia mogą obiecać tę samą ostatnią paletę, a pomyłka wychodzi dopiero przy wydaniu. Moment założenia rezerwacji zależy od procesu: często jest to zatwierdzenie zlecenia, a czasem dopiero uruchomienie fali kompletacji.
Poniższy szkic zapisuje rezerwacje w osobnej tabeli, a widok liczy z nich stan dostępny. Nazwy tabel i kolumn są umowne i nie odzwierciedlają schematu żadnego produktu.
CREATE TABLE dbo.Rezerwacja (
RezerwacjaId INT IDENTITY(1,1) PRIMARY KEY,
ZlecenieId INT NOT NULL,
TowarId INT NOT NULL,
Ilosc DECIMAL(18,3) NOT NULL CHECK (Ilosc > 0),
Status TINYINT NOT NULL DEFAULT 1, -- 1 aktywna, 2 zrealizowana, 3 anulowana
WazneDo DATETIME2(0) NULL
);
CREATE VIEW dbo.vStanDostepny AS
SELECT s.TowarId,
s.Fizyczny,
ISNULL(r.Zarezerwowane, 0) AS Zarezerwowane,
s.Fizyczny - ISNULL(r.Zarezerwowane, 0) AS Dostepny
FROM (SELECT TowarId, SUM(Ilosc) AS Fizyczny
FROM dbo.Stan GROUP BY TowarId) AS s
LEFT JOIN (SELECT TowarId, SUM(Ilosc) AS Zarezerwowane
FROM dbo.Rezerwacja WHERE Status = 1 GROUP BY TowarId) AS r
ON r.TowarId = s.TowarId;
Widok jest spójny tylko wtedy, gdy założenie rezerwacji sprawdza dostępność w tej samej transakcji, w której ją zapisuje. W przeciwnym razie dwa równoległe zlecenia odczytają ten sam stan dostępny i oba zarezerwują ostatnią sztukę. Wzorzec blokady aktualizacyjnej z transakcją opisujemy w tekście o księgowaniu ruchu w tabelach SQL Server.
- Rezerwacja z terminem - kolumna WazneDo zwalnia ilość po upływie czasu, jeśli zlecenie nie zostało zrealizowane, co chroni przed zamrożonym zapasem.
- Rezerwacja na partię - zlecenie klienta wymagającego konkretnej partii lub minimalnego terminu ważności rezerwuje tylko pasujące partie.
Anulowanie zlecenia zwalnia rezerwacje w tej samej transakcji, w której zmienia status zlecenia. Zwolnienie polega na zmianie statusu rezerwacji, a nie na usunięciu wiersza, bo historia rezerwacji jest potrzebna do wyjaśnienia, dlaczego towar był chwilowo niedostępny dla innych odbiorców.
Rezerwacje uruchamiają też kompletację: lista pobrań powstaje z aktywnych rezerwacji, a zdjęcie towaru z lokalizacji zmienia ich status na zrealizowany. Sposób prowadzenia zbiórki opisuje tekst o kompletacji zamówień, a zamówienia i rezerwacje w ERP omawia strona o zamówieniach i rezerwacjach w systemie ERP.
Przydział niedoboru między zlecenia
Gdy zapotrzebowanie przekracza stan dostępny, system musi rozstrzygnąć, które zlecenia dostaną towar. Wybór strategii jest decyzją biznesową i zależy od umów z odbiorcami, a nie od techniki.
| Strategia przydziału | Zasada | Skutek |
|---|---|---|
| Kolejność zleceń | towar dostają zlecenia zatwierdzone najwcześniej | przewidywalność, ryzyko pominięcia ważnego klienta |
| Priorytet klienta | rezerwacja według rangi odbiorcy lub terminu wysyłki | ochrona najważniejszych umów, wymaga utrzymania rang |
| Podział proporcjonalny | każde zlecenie dostaje ten sam odsetek zamówionej ilości | sprawiedliwość, więcej dostaw częściowych |
Stan dostępny dla sklepu i marketplace
W sprzedaży wielokanałowej stan dostępny trafia do sklepu internetowego i na platformy sprzedażowe. Brak synchronizacji prowadzi do sprzedaży towaru, którego już nie ma na regale, dlatego wysyła się stan dostępny, a nie fizyczny. Przy towarach szybko schodzących część firm publikuje pomniejszony stan, zostawiając bufor bezpieczeństwa na opóźnienia synchronizacji. Wymianę tych danych z warstwy integracji omawia tekst o informatycznym systemie magazynowym i jego integracjach.
Stany minimalne i punkt ponownego zamówienia
Stan minimalny jest progiem, po którego przekroczeniu system zgłasza potrzebę uzupełnienia. Punkt ponownego zamówienia liczy się z zapotrzebowania w czasie dostawy i zapasu bezpieczeństwa, więc jest bardziej precyzyjny niż stała liczba sztuk wpisana w kartotece.
- Zapotrzebowanie w czasie dostawy - średnie dzienne zużycie pomnożone przez liczbę dni od zamówienia do przyjęcia towaru.
- Zapas bezpieczeństwa - z · σ · √L, gdzie z zależy od poziomu obsługi, σ jest odchyleniem dziennego zużycia, a L czasem dostawy w dniach.
| Parametr | Wartość przykładowa | Uwagi |
|---|---|---|
| Średnie zużycie dzienne | 40 szt. | z historii wydań z ostatnich miesięcy |
| Czas dostawy | 5 dni | od zamówienia do przyjęcia PZ |
| Odchylenie dziennego zużycia | 12 szt. | im większe, tym większy zapas bezpieczeństwa |
| Współczynnik z dla poziomu obsługi 95% | 1,65 | dla 99% wynosi około 2,33 |
| Punkt ponownego zamówienia | 245 szt. | 40 · 5 + 45 (zapas bezpieczeństwa 1,65 · 12 · √5 ≈ 44, zaokrąglone w górę) |
Wartości w tabeli są ilustracją obliczenia, a nie danymi z konkretnego magazynu. Zapytanie poniżej wskazuje towary, których stan dostępny wraz z zamówieniami w drodze spadł poniżej punktu zamówienia. Można je uruchamiać co godzinę jako zadanie SQL Agent i przekazywać wynik do modułu zakupów.
SELECT k.TowarId, k.Indeks, v.Dostepny, k.PunktZamowienia
FROM dbo.KartotekaTowaru AS k
JOIN dbo.vStanDostepny AS v ON v.TowarId = k.TowarId
OUTER APPLY (SELECT SUM(z.Ilosc) AS Oczekiwane
FROM dbo.ZamowienieDostawcy AS z
WHERE z.TowarId = k.TowarId AND z.Status = 1) AS o
WHERE v.Dostepny + ISNULL(o.Oczekiwane, 0) <= k.PunktZamowienia;
Progi nie mają jednakowego znaczenia dla całego asortymentu. Towary klasy A według analizy ABC, które generują największą część obrotu, wymagają wyższego poziomu obsługi i częstszej rewizji parametrów niż towary klasy C. Klasyfikację omawia strona o analizie ABC magazynu oraz artykuł SoftwareStudio o klasyfikacji asortymentu metodami ABC i XYZ.
Rewizja parametrów i sezonowość
Parametry zamówień starzeją się razem z popytem. Średnie zużycie z ostatnich miesięcy nie opisuje towaru sezonowego, który w grudniu sprzedaje się kilka razy szybciej niż w lipcu. Z tego powodu przelicza się je cyklicznie z okna czasowego dobranego do rotacji: krótszego dla towarów szybkich, dłuższego dla wolnych. Wynik system proponuje planiście, a zatwierdza go człowiek, bo automatyczna zmiana progu bez kontroli potrafi zawyżyć zapas po jednorazowym zamówieniu dużego klienta.
Partie i terminy ważności w stanie
Dla towaru z terminem ważności stan przestaje być jedną liczbą. Ten sam indeks ma kilka wierszy stanu, po jednym na partię w każdej lokalizacji, a system wybiera do wydania partię o najwcześniejszej dacie. Zasada nosi nazwę FEFO (First Expired, First Out) i różni się od FIFO tym, że kolejność wyznacza data ważności, a nie data przyjęcia.

Zapytanie z funkcją okna wyznacza partie potrzebne do pokrycia zamówionej ilości w kolejności dat. Suma narastająca wskazuje, w której partii kończy się potrzebna ilość, a ostatnia partia jest pobierana częściowo. Działanie funkcji okna opisuje dokumentacja klauzuli OVER.
DECLARE @TowarId INT = 1001, @Potrzeba DECIMAL(18,3) = 120;
WITH kolejka AS (
SELECT PartiaId, LokalizacjaId, TerminWaznosci, Ilosc,
SUM(Ilosc) OVER (ORDER BY TerminWaznosci, PartiaId
ROWS UNBOUNDED PRECEDING) AS Narastajaco
FROM dbo.StanPartii
WHERE TowarId = @TowarId AND Status = 1 AND Ilosc > 0
)
SELECT PartiaId, LokalizacjaId, TerminWaznosci,
CASE WHEN Narastajaco <= @Potrzeba THEN Ilosc
ELSE @Potrzeba - (Narastajaco - Ilosc) END AS DoPobrania
FROM kolejka
WHERE Narastajaco - Ilosc < @Potrzeba
ORDER BY TerminWaznosci, PartiaId;
Partie w stanie mają także status jakościowy. Towar po dostawie zwykle trafia do kwarantanny i nie jest liczony do stanu dostępnego, dopóki kontrola jakości go nie zwolni. Szczegóły ewidencji partii i dat opisuje strona o partiach produkcyjnych i datach ważności.
Alerty terminów ważności
Terminy ważności wymagają monitorowania z wyprzedzeniem, bo towar bliski daty nie nadaje się do wysyłki do odbiorców z wymaganym minimalnym okresem ważności. Zapytanie poniżej wskazuje partie, którym zostało nie więcej niż 30 dni. Liczbę dni ustawia się osobno dla grup towarowych.
SELECT p.TowarId, p.PartiaId, p.TerminWaznosci, p.Ilosc,
DATEDIFF(DAY, CAST(SYSDATETIME() AS DATE), p.TerminWaznosci) AS DniDoKonca
FROM dbo.StanPartii AS p
WHERE p.Ilosc > 0
AND p.TerminWaznosci <= DATEADD(DAY, 30, CAST(SYSDATETIME() AS DATE))
ORDER BY p.TerminWaznosci;
| Status stanu | Wliczany do dostępnego | Typowa przyczyna |
|---|---|---|
| Dostępny | tak | towar zwolniony po przyjęciu |
| Kwarantanna | nie | oczekiwanie na kontrolę jakości |
| Zablokowany | nie | reklamacja dostawcy albo wycofanie partii |
| Przeterminowany | nie | upływ terminu ważności |
Reguła: towar przeterminowany jest wykluczany ze stanu dostępnego automatycznie w dniu upływu terminu, a nie ręcznie przez magazyniera.
Uzgadnianie stanu z inwentaryzacją
Nawet przy pełnym skanowaniu stan systemowy rozjeżdża się z fizycznym, bo towar ginie, jest uszkodzony albo trafia na złą półkę. Inwentaryzacja jest sposobem uzgodnienia obu wartości, a jej wynik stanowi miarę jakości zarządzania stanem. Wskaźnik zgodności lokalizacji, czyli odsetek lokalizacji, w których spis pokrywa się z systemem, mówi więcej niż sama wartość różnic.
Inwentaryzacja ciągła rozkłada liczenie na cały rok. Lokalizacje wybiera się według klasy ABC i historii rozbieżności, a magazyn nie zatrzymuje pracy na spis. Zasady takiej inwentaryzacji opisuje strona o inwentaryzacji ciągłej w magazynie. Różnice zapisuje się dokumentami korygującymi, więc historia obrotów pokazuje moment oraz przyczynę zmiany stanu.
Analiza przyczyn rozbieżności
Sama korekta różnicy nie poprawia dokładności, dopóki nie zostanie ustalona jej przyczyna. Historia obrotów towaru pozwala odtworzyć ostatnie operacje na rozbieżnej pozycji i wskazać, gdzie zapis mógł się rozjechać.
- Błąd przyjęcia - towar przyjęty w złej ilości albo na zły indeks, co widać w dokumencie PZ i w kontroli przy rampie.
- Zły adres lokalizacji - towar odłożony w innym miejscu niż zapisano, więc brak w jednej lokalizacji i nadwyżka w sąsiedniej.
- Rozchód bez skanu - wydanie z pominięciem terminala, na przykład po awarii łączności, uzupełniane później ręcznym dokumentem.
- Uszkodzenie lub kradzież - ubytek bez dokumentu, który wychodzi dopiero podczas liczenia i wymaga dokumentu RW.
Wskaźniki jakości stanu
Kilka wskaźników pozwala ocenić, czy zarządzanie stanami działa. Poniższe zestawienie podaje ich definicje; wartości docelowe ustala każdy magazyn samodzielnie.
| Wskaźnik | Sposób liczenia | Co pokazuje |
|---|---|---|
| Zgodność lokalizacji | lokalizacje zgodne ze spisem podzielone przez wszystkie spisane | jakość zapisu operacji |
| Rotacja | wartość sprzedaży podzielona przez średni stan | szybkość obrotu zapasem |
| Pokrycie w dniach | stan podzielony przez średnie dzienne zużycie | na jak długo wystarczy towaru |
| Zaleganie | wartość towaru bez ruchu przez ustalony okres | kapitał zamrożony w zapasie |
Rotację i zaleganie opisuje osobny tekst o rotacji i zaleganiu towarów. Wybór programu, który te wskaźniki liczy bez dodatkowych arkuszy, omawia strona o zarządzaniu magazynem i doborze programu. Tabele dla wartości ilościowych warto definiować z odpowiednią precyzją, co opisuje dokumentacja typów decimal i numeric.




