Studio WMS.net nie zapisuje stanu magazynowego jako jednej liczby przy indeksie. Stan jest zbiorem rekordów, z których każdy ma przypisaną lokalizację i partię oraz termin ważności. Z tego zbioru system składa sumę dla całej firmy albo ilość na jednym miejscu paletowym.

Z czego składa się stan magazynowy

Ewidencja jest ilościowa i prowadzona z dokładnością do miejsca składowania. Użytkownik wybiera konkretny magazyn albo sprawdza wszystkie naraz. Dla artykułów z kontrolą partii system dopisuje numer partii lub numer seryjny oraz datę ważności.

Wymiar stanuCo zapisuje systemDo czego służy
Magazynwskazanie magazynu ze skorowidzu magazynówrozdzielenie zapasów kilku obiektów
Lokalizacjaadres miejsca paletowegoznalezienie towaru bez szukania
Partia lub numer seryjnyidentyfikator dostawy albo sztukiwycofanie partii z rynku
Data ważnościtermin, po którym towaru nie wolno wydaćkolejność wydań i kontrola przeterminowań
Cechy artykułuwłasne atrybuty z kartotekisortowanie i filtrowanie zestawień

Stany można prezentować w ujęciu zagregowanym, na przykład jako łączną liczbę sztuk w magazynie. Można je też rozbić według lokalizacji i magazynów albo według cech artykułu i atrybutów partii. Ten sam zestaw danych obsługuje kierownika, który chce znać sumę, i magazyniera, który szuka jednej palety.

Stan zmienia dokument, nie edycja pola

Każda operacja magazynowa jest rejestrowana w centralnej bazie przez skan na kolektorze z Androidem. Dotyczy to przyjęcia i odłożenia oraz kompletacji i wydania. Aplikacja prowadzi pracownika po zadaniach i wymusza potwierdzenie każdej czynności skanem etykiety, więc operator potwierdza lokalizację i towar przy każdej operacji.

Reguła: ilość w kartotece nie podlega ręcznej edycji. Pole ILOŚĆ i pole INDEKS są zablokowane, a stan zmienia wyłącznie dokument magazynowy. Pomyłkę poprawia się dokumentem korygującym albo wynikiem inwentaryzacji, a nie nadpisaniem liczby.

Takie rozwiązanie daje pełny ślad zmian. Każdy ruch ma dokument oraz operatora z czasem operacji, więc różnicę między ewidencją a półką da się przypisać do konkretnej operacji. Proces opisują strony o dokumentach magazynowych i o aplikacji WMS na Androida.

Stan na wybrany dzień

System odtwarza stany magazynowe na dowolnie wskazaną datę z historii obrotów. Funkcja przydaje się przy rozliczeniach i audytach oraz w sporach z kontrahentami, bo pozwala wykazać, ile towaru leżało w magazynie w konkretnym dniu. Nie trzeba w tym celu pamiętać o zamrożeniu stanu na koniec miesiąca.

Stan na dzień jako suma obrotów

Mechanizm można zilustrować zapytaniem T-SQL. Poniższy przykład nie pokazuje kodu produktu. Każdy dokument przychodowy dodaje ilość, a każdy rozchodowy odejmuje, więc stan na dzień to suma obrotów z datą do końca wskazanego dnia.

DECLARE @Dzien date = '2026-09-30';

SELECT IndeksId, SUM(Ilosc * Znak) AS StanNaDzien
FROM dbo.Obroty
WHERE DataOperacji < DATEADD(DAY, 1, @Dzien)
GROUP BY IndeksId
HAVING SUM(Ilosc * Znak) <> 0;

Kolumna Znak ma wartość 1 dla przyjęć i minus 1 dla wydań. Zapytanie jest szybkie tylko wtedy, gdy istnieje indeks po DataOperacji z dołączonymi kolumnami zapytania, bo inaczej silnik czyta całą historię obrotów. Plan wykonania pokazuje, czy użyto Index Seek, a opis planów jest w dokumentacji planów wykonania.

Dwa stany z różnych dni dają bilans okresu. Stan końcowy powinien równać się stanowi początkowemu powiększonemu o przyjęcia i pomniejszonemu o wydania. Jeśli bilans się nie zgadza, w danych tego okresu jest błąd, który trzeba odnaleźć w dokumentach.

Spójny odczyt raportu w trakcie pracy magazynu

Raport stanów trwa kilka sekund, a w tym czasie operatorzy nadal skanują. Przy domyślnym poziomie READ COMMITTED paleta przesunięta w trakcie odczytu może zostać policzona dwa razy albo pominięta. Poziom SNAPSHOT daje raportowi widok bazy z chwili rozpoczęcia transakcji, bez blokowania zapisów skanera.

ALTER DATABASE Magazyn SET ALLOW_SNAPSHOT_ISOLATION ON;

SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
BEGIN TRAN;
    SELECT LokalizacjaId, IndeksId, SUM(Ilosc) AS Stan
    FROM dbo.StanyLokalizacji
    GROUP BY LokalizacjaId, IndeksId;
COMMIT;

Poziomy izolacji opisuje dokumentacja SET TRANSACTION ISOLATION LEVEL, a wersjonowanie wierszy przewodnik po blokadach i wersjonowaniu wierszy.

Stan fizyczny, zarezerwowany i dostępny

Zlecenie wydania rezerwuje towar na podstawie danych z kartoteki i przyjętej zasady rotacji. Zarezerwowana paleta nadal stoi w regale, więc stan fizyczny się nie zmienia, ale dla kolejnego zlecenia jest już niedostępna. Dopiero potwierdzenie pobrania skanem zdejmuje ją ze stanu.

Rozróżnienie ma znaczenie przy sprzedaży. Dział handlowy obiecuje klientowi towar na podstawie stanu dostępnego, a nie fizycznego, bo ten drugi zawiera palety czekające na wysyłkę. Gdy oba stany zlewają się w jedną liczbę, system sprzedaje ten sam towar dwa razy.

Progi zapasu i powiadomienia

Dla każdego artykułu można zdefiniować minimalny i maksymalny próg zapasu. Gdy poziom zbliża się do minimum, program wysyła powiadomienie do działu zakupów i zapobiega przerwie w sprzedaży. Progi i domyślną lokację ustawia się w zakładce danych uzupełniających kartoteki.

Studio WMS.net - formularz asortymentu zakładka dane uzupełniające z wymiarami, pakowaniem i definicjami zapasów
Zakładka Dane uzupełniające asortymentu - wymiary, parametry pakowania, reguły składowania i progi zapasów minimalnych

Ta sama zakładka zawiera wymiary i pakowanie oraz reguły składowania, więc dane o stanie łączą się tu z danymi o opakowaniu. Przeliczenie liczby sztuk na palety zależy od pola ilości na palecie, a nie od samej ilości w ewidencji.

Studio WMS.net - formularz asortymentu zakładka dane uzupełniające z wymiarami, pakowaniem i definicjami zapasów
Sekcja definicji zapasów, w której ustawia się progi i domyślną lokację indeksu.

Kolejność wydania: FIFO i FEFO

System zarządza kolejnością pobierania towaru według przyjętej zasady rotacji. FIFO wydaje najpierw towar przyjęty najwcześniej, a FEFO towar o najkrótszym terminie ważności. Operator dostaje wskazanie konkretnej lokalizacji, więc ryzyko wydania przeterminowanej partii maleje.

ZasadaKryterium kolejnościDane potrzebne w kartotece i dokumentach
FIFOdata przyjęcia do magazynudata przyjęcia zapisana w dokumencie PZ
FEFOdata ważności towaruwłączona opcja Wymagana data ważności

Opcje Wymagana seria i Wymagana data ważności włącza się w kartotece osobnymi polami. FEFO jest standardem w branży spożywczej i farmaceutycznej. Towary, które mimo zasad kolejności nie schodzą ze stanu, opisuje strona o rotacji i zaleganiu.

Gdy stan w systemie nie zgadza się z półką

Rozbieżność ma zwykle konkretną przyczynę, którą można odnaleźć w historii operacji. Nadwyżka oznacza, że na półce leży więcej towaru niż w systemie. Niedobór oznacza odwrotną sytuację. Obie różnice rozliczane są przy zamknięciu dokumentu inwentaryzacyjnego.

ObjawTypowa przyczynaGdzie szukać
Nadwyżkapomyłka przy wprowadzaniu danych albo dostawa jeszcze niezaksięgowanadokumenty przyjęć w statusie otwartym
Nadwyżkaniedokończony dokument magazynowyrejestr dokumentów z danego dnia
Niedobórpomyłka przy kompletacji zamówieniadokumenty wydań i historia lokalizacji
Niedobóruszkodzenie albo strata towaruprotokoły i dokumenty rozchodu wewnętrznego

Wyjaśnianie zaczyna się od historii konkretnej lokalizacji. Dokumenty wskazują operatora i czas, więc często da się ustalić operację, po której ilość przestała się zgadzać.

Stany a inwentaryzacja ciągła

Precyzyjna ewidencja pozwala liczyć wybrane lokalizacje bez zatrzymywania magazynu. Każda zliczona lokalizacja jest porównywana ze stanem systemowym, a różnica trafia do dokumentu inwentaryzacji. Cykl takiego liczenia opisuje strona o inwentaryzacji w Studio WMS.net.

Jakość odczytów kodów, od których zależy dokładność stanów, mierzy panel opisany na stronie o wskaźnikach skanowania Auto ID. Niska skuteczność skanowania przekłada się na rozbieżności w stanach.

Dane historyczne w planowaniu zakupów

Historia obrotów pokazuje, które produkty rotują wolno. Dla takich indeksów obniża się poziom zamówień albo planuje wyprzedaż, żeby zwolnić miejsce w strefie. Dla indeksów o stałym popycie podnosi się próg minimalny, aby powiadomienie dotarło do działu zakupów z odpowiednim wyprzedzeniem.

Wartość zapasów wymaga osobnych danych. Ceny zakupu i ewidencyjne są zapisane w trzeciej zakładce kartoteki, więc zestawienia mogą pokazywać wartość obok ilości. Pola kartoteki opisuje strona o kartotekach magazynowych.

Wiele magazynów i spójność z ERP

Z jednej aplikacji można kontrolować stany w kilku magazynach i porównywać dane między nimi. Transfery wewnętrzne między magazynami obsługuje się z poziomu tej samej aplikacji. Zarządzanie kilkoma obiektami opisuje strona o zarządzaniu magazynem.

Integracja z systemem ERP sprawia, że stan widoczny w WMS jest zgodny z danymi w module sprzedaży. Rozbieżności między działami znikają, bo oba systemy opierają się na tych samych danych o stanie. Wydanie towaru i jego wpływ na stan opisuje strona o wydaniu z magazynu.

Pytania i odpowiedzi o stany magazynowe

Tak. System odtwarza stany na dowolnie wskazany dzień na podstawie historii obrotów. Funkcja pomaga przy rozliczeniach i audytach oraz w sporach z kontrahentami, kiedy trzeba wykazać, ile towaru leżało w magazynie w danym dniu.

Tak. Ewidencja jest ilościowa i prowadzona z dokładnością do miejsca składowania, a dla artykułów z kontrolą partii także do numeru partii lub serii i daty ważności. Stan można oglądać w ujęciu zagregowanym albo rozbitym na lokalizacje.

Pole ILOŚĆ jest zablokowane, żeby każda zmiana stanu miała dokument, operatora i czas. Pomyłkę koryguje się dokumentem magazynowym albo wynikiem inwentaryzacji, a nie nadpisaniem liczby.

Dla artykułu definiuje się próg minimalny i maksymalny zapasu. Gdy stan zbliża się do minimum, program wysyła powiadomienie do działu zakupów, zanim zabraknie towaru do sprzedaży.

Nie musi. Przy poziomie SNAPSHOT raport czyta wersje wierszy z chwili startu transakcji i nie blokuje zapisów skanera. Należy tylko pamiętać, że pokazuje stan z początku odczytu.

Glosariusz pojęć związanych ze stanami magazynowymi

Stan magazynowy
Ilość towaru zapisana w systemie dla magazynu, lokalizacji, partii i terminu ważności na wskazany moment.
Obrót magazynowy
Zapis ruchu towaru wynikający z dokumentu, taki jak przyjęcie albo wydanie. Suma obrotów daje stan na dzień.
FIFO
Zasada wydawania towaru w kolejności przyjęcia, od partii najstarszej.
FEFO
Zasada wydawania towaru według terminu ważności, od partii, która straci ważność najwcześniej.
Próg zapasu
Minimalny lub maksymalny poziom stanu zdefiniowany dla artykułu, którego przekroczenie wywołuje powiadomienie.
Poziom SNAPSHOT
Poziom izolacji SQL Server, w którym transakcja czyta wersje wierszy z chwili swojego startu i nie blokuje zapisów.
READ COMMITTED
Domyślny poziom izolacji SQL Server, w którym odczyt widzi tylko zatwierdzone zmiany, ale nie gwarantuje spójności całego raportu.
Inwentaryzacja ciągła
Cykliczne liczenie wybranych lokalizacji bez zatrzymywania pracy magazynu, w odróżnieniu od spisu rocznego.

Warto przeczytać