Aplikacja dla magazynów wysokiego składowania rozwiązuje problem, którego nie zna magazyn płaski. Towar leży kilka lub kilkanaście metrów nad posadzką, a operator nie odczyta etykiety palety bez podniesienia karetki. Każda pomyłka adresu kosztuje ponowny przejazd korytarzem i kolejny cykl podnoszenia masztu. System WMS w takim obiekcie wskazuje konkretne gniazdo regałowe i przyjmuje ruch dopiero po potwierdzeniu skanem.
W Studio WMS.net ta logika działa w przeglądarce oraz na terminalach mobilnych z systemem Android. Program magazynowy przechowuje stan każdej lokalizacji w bazie SQL Server, więc operator na wózku widzi ten sam obraz magazynu co kierownik zmiany przy biurku. Poniżej opisujemy adresację z poziomem regału oraz reguły odkładania, a w drugiej części kolejkowanie zadań dla wózków i kontrolę stanów na wysokościach.
Specyfika magazynu wysokiego składowania w systemie WMS
Regał paletowy w obiekcie wysokiego składowania ma zwykle od kilku do kilkunastu poziomów. Adres lokalizacji musi więc zawierać numer poziomu, a baza danych musi znać fizyczne ograniczenia każdego gniazda. Program, który traktuje magazyn jak płaską listę półek, nie odróżni gniazda na parterze od gniazda na dziesięciu metrach, a dla wózka to dwie zupełnie inne operacje.
Drugą różnicą jest flota wózków. Przy rampach pracują zwykle wózki czołowe, a w korytarzach regałowych reach trucki albo wózki systemowe VNA. Każdy typ ma inny zasięg podnoszenia i inną szerokość korytarza roboczego. Aplikacja WMS musi wiedzieć, który wózek może obsłużyć które gniazdo, zanim wyśle zadanie na terminal.
| Typ wózka | Orientacyjna wysokość podnoszenia | Orientacyjna szerokość korytarza | Co musi obsłużyć aplikacja |
|---|---|---|---|
| Wózek czołowy | do ok. 6-7 m | ok. 3,5-4,5 m | rozładunek przy rampie i dowóz palet do punktów przekazania |
| Reach truck (wózek wysokiego składowania) | do ok. 10-13 m | ok. 2,7-3,2 m | pełny cykl od rampy do gniazda, pobrania z dowolnego poziomu korytarza |
| Wózek systemowy VNA | do ok. 14-17 m | ok. 1,6-2,0 m | praca w jednym korytarzu naraz, odbiór palet z punktu P&D |
| Wózek paletowy ręczny lub elektryczny | poziom posadzki | nie dotyczy | transport poziomy do bufora i strefy wydań |
Wartości w tabeli są orientacyjne i zależą od modelu wózka oraz konstrukcji regału. W konfiguracji systemu liczy się jedno: każda lokalizacja ma przypisany maksymalny poziom dostępny dla danej klasy wózka. Bez tej informacji system potrafi wysłać operatora wózka czołowego pod gniazdo, którego fizycznie nie sięgnie.
Adresacja lokalizacji i etykiety regałowe
Najczęściej stosowany format adresu ma cztery człony, zapisywane od ogółu do szczegółu. Przykład A-02-05-3 oznacza strefę A, rząd 02, kolumnę 05 i poziom 3. Kolejność członów odpowiada drodze operatora: najpierw wjazd do strefy, potem wybór korytarza, dojazd do kolumny i na końcu podniesienie karetki.
- Strefa - wydzielony obszar magazynu, np. strefa wąskich korytarzy VNA albo bufor przyjęć.
- Rząd - numer regału lub korytarza; w strefie VNA jeden korytarz obsługuje dwa rzędy po obu stronach.
- Kolumna - pole między słupami regału, liczone od czoła korytarza, gdzie znajduje się punkt przekazania.
- Poziom - numer belki nośnej; poziom 0 to posadzka albo pierwsza belka, zależnie od przyjętej konwencji.
Adres zapisany w bazie danych warto trzymać w osobnych kolumnach, a pełny kod budować jako kolumnę wyliczaną. Takie rozwiązanie pozwala sortować zadania po korytarzu i kolumnie bez parsowania tekstu. Poniższy fragment T-SQL pokazuje przykładową tabelę lokalizacji z indeksem filtrowanym na wolne gniazda. Nazwy tabel są przykładowe, nie odpowiadają schematowi konkretnego produktu.
-- przykładowa tabela lokalizacji regałowych
CREATE TABLE dbo.Lokalizacja (
LokalizacjaId int IDENTITY(1,1) PRIMARY KEY,
Strefa char(1) NOT NULL,
Rzad tinyint NOT NULL,
Kolumna tinyint NOT NULL,
Poziom tinyint NOT NULL,
MaxWysokoscCm smallint NOT NULL,
NosnoscKg smallint NOT NULL,
Zajeta bit NOT NULL DEFAULT (0),
Adres AS (Strefa + '-' + RIGHT('0' + CAST(Rzad AS varchar(3)), 2)
+ '-' + RIGHT('0' + CAST(Kolumna AS varchar(3)), 2)
+ '-' + CAST(Poziom AS varchar(3))) PERSISTED,
CONSTRAINT UQ_Lokalizacja UNIQUE (Strefa, Rzad, Kolumna, Poziom)
);
-- indeks filtrowany: tylko wolne gniazda, posortowane od najniższego poziomu
CREATE INDEX IX_Lokalizacja_Wolne
ON dbo.Lokalizacja (Strefa, Poziom, Rzad, Kolumna)
INCLUDE (MaxWysokoscCm, NosnoscKg)
WHERE Zajeta = 0;

Etykiety regałowe na wyższych poziomach wymagają osobnej decyzji. Etykieta na belce na dziesięciu metrach jest nieczytelna dla zwykłego skanera ręcznego. Stosuje się skanery dalekiego zasięgu albo etykiety zbiorcze na słupie regału ze strzałkami wskazującymi poziomy. Awaryjnie operator wpisuje cyfrę kontrolną drukowaną obok adresu. Kody na etykietach powinny spełniać zasady opisane przy okazji tematu kryteria wyboru lokalizacji, bo ten sam adres pojawia się potem w podpowiedziach systemu przy przyjęciu.
Strategie odkładania palet na regały
Strategia odkładania (putaway) decyduje, do którego gniazda trafi przyjęta paleta. W magazynie wysokiego składowania reguła musi uwzględnić najpierw fizykę, a dopiero potem rotację. Paleta o wysokości 144 cm nie zmieści się w gnieździe o prześwicie 120 cm, a paleta ważąca 900 kg nie może stanąć na belce o nośności 800 kg na miejsce paletowe.
Dane o nośnikach pochodzą z kartoteki typów palet. W Studio WMS.net służy do tego ekran Lista palet w module MAGAZYN, na którym każdy typ nośnika ma kod oraz wymiary w centymetrach. System wylicza z nich objętość, a kolumna współczynnika służy do przeliczeń jednostek. Zakładka Historia pokazuje zmiany definicji, co ułatwia rozliczenie rozbieżności po inwentaryzacji.

Po odfiltrowaniu gniazd, które fizycznie nie przyjmą palety, system stosuje regułę biznesową. Wybór reguły zależy od asortymentu i sposobu pracy magazynu. Szerzej o doborze miejsc według rotacji piszemy w artykule o tym, jak działa rozmieszczenie towaru w magazynie wysokiego składowania.
| Strategia | Zasada przydziału | Kiedy się sprawdza | Ograniczenie |
|---|---|---|---|
| Stałe miejsca | każdy indeks ma przypisane gniazdo lub grupę gniazd | stabilny asortyment o przewidywalnej rotacji | gniazda stoją puste, gdy towaru brak |
| Wolne miejsca | system wskazuje najbliższe pasujące wolne gniazdo | zmienny asortyment, magazyny usługowe 3PL | wymaga skanowania każdej operacji bez wyjątków |
| Klasy ABC według poziomu | indeksy szybko rotujące trafiają na niskie poziomy blisko czoła korytarza | duża rozpiętość rotacji między indeksami | zmiana klasy wymaga przesunięć porządkowych |
| Strefowanie według wagi | najcięższe palety na najniższych belkach | asortyment mieszany pod względem masy | zmniejsza pulę gniazd dostępnych dla lekkich palet |
W praktyce reguły łączy się warstwowo. Towary o stabilnej rotacji korzystają z metody stałych miejsc składowania, a reszta asortymentu trafia do puli wolnych gniazd z preferencją niskich poziomów dla klasy A.
Reguła: paleta nie trafia do gniazda o mniejszej nośności lub niższym prześwicie niż parametry nośnika. Walidacja działa w bazie, zanim zadanie trafi na terminal.
Przy kilku terminalach pracujących równocześnie pojawia się problem współbieżności. Dwa przyjęcia w tej samej sekundzie mogą dostać ten sam wolny adres. Rozwiązaniem jest rezerwacja gniazda w jednej transakcji z podpowiedziami blokad UPDLOCK i READPAST, opisanymi w dokumentacji table hints w Microsoft Learn. Przy poziomie izolacji READ COMMITTED druga sesja pomija wiersz zablokowany przez pierwszą i od razu bierze kolejne gniazdo.
-- przykładowa procedura rezerwacji gniazda dla przyjmowanej palety
CREATE PROCEDURE dbo.ZarezerwujGniazdo
@Strefa char(1), @WysokoscCm smallint, @WagaKg smallint
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Id int;
BEGIN TRANSACTION;
SELECT TOP (1) @Id = LokalizacjaId
FROM dbo.Lokalizacja WITH (UPDLOCK, READPAST, ROWLOCK)
WHERE Zajeta = 0
AND Strefa = @Strefa
AND MaxWysokoscCm >= @WysokoscCm
AND NosnoscKg >= @WagaKg
ORDER BY Poziom, Rzad, Kolumna;
UPDATE dbo.Lokalizacja SET Zajeta = 1 WHERE LokalizacjaId = @Id;
COMMIT TRANSACTION;
SELECT @Id AS LokalizacjaId;
END;
Zadania dla wózków reach truck i VNA
Reach truck obsługuje zwykle pełny cykl sam. Pobiera paletę z bufora przyjęć, jedzie do korytarza i odkłada ją na wskazany poziom. Dla systemu to jedno zadanie z dwoma skanami: skanem etykiety palety przy pobraniu oraz skanem lokalizacji przy odłożeniu.
Wózek VNA pracuje inaczej. Porusza się w korytarzu o szerokości niewiele większej od palety, prowadzony szynami lub przewodem indukcyjnym w posadzce, i rzadko opuszcza swoją strefę. Paletę dowozi mu inny wózek do punktu przekazania P&D na czole korytarza. System WMS tworzy więc dwa powiązane zadania, a drugie staje się aktywne dopiero wtedy, gdy pierwsze zostanie potwierdzone skanem w punkcie przekazania.
Zmiana korytarza przez wózek VNA trwa długo, bo operator musi wyjechać z prowadzenia i ponownie wprowadzić wózek w tory sąsiedniego korytarza. Kolejka zadań dla tej klasy wózków powinna być więc grupowana po korytarzu, a nie po kolejności przyjęć. Tak samo ważny jest układ samych regałów, bo źle zaprojektowane czoła korytarzy blokują punkty P&D. Typowe pomyłki na etapie projektu opisujemy w tekście o tym, jak uniknąć błędów przy planowaniu układu regałów.
- Przeplatanie zadań - po odłożeniu palety system podaje operatorowi pobranie z tego samego korytarza, dzięki czemu wózek nie wraca pusty do punktu przekazania.
- Grupowanie po korytarzu - zadania dla wózka VNA są sortowane według rzędu i kolumny, a zmiana korytarza następuje dopiero po opróżnieniu kolejki w bieżącym.
Priorytety zadań ustala się regułami. Uzupełnienie pola kompletacji, na które czeka zamówienie z bliską godziną wysyłki, wyprzedza zwykłe odkładanie przyjęć. Operator widzi na terminalu tylko jedno zadanie naraz, co ogranicza ryzyko wybrania niewłaściwej palety z listy.
Terminale na wózkach i skanowanie na wysokości
Na wózkach wysokiego składowania montuje się zwykle terminal pojazdowy z większym ekranem, zasilany z instalacji wózka. Terminal ręczny w kabinie reach trucka sprawdza się gorzej, bo operator potrzebuje obu rąk do sterowania masztem. Coraz częściej są to urządzenia z systemem Android, na których działa ta sama aplikacja co na kolektorach ręcznych w strefie kompletacji. Różnice między telefonem a urządzeniem przemysłowym omawia artykuł aplikacja magazynowa Android.
Do odczytu etykiet na wysokościach używa się skanerów dalekiego zasięgu, montowanych na terminalu albo na osłonie kabiny. Odczytują one kod kreskowy z odległości kilku metrów, pod warunkiem że etykieta ma odpowiednią wielkość modułu i nie odbija światła. W korytarzach VNA stosuje się też kamery na karetce, które pokazują operatorowi widok z poziomu wideł.

Łączność bezprzewodowa w magazynie wysokiego składowania wymaga osobnego projektu. Stalowe regały wypełnione towarem tłumią sygnał Wi-Fi, a punkty dostępowe montowane pod stropem nie pokrywają dolnych poziomów wąskich korytarzy. Terminal musi płynnie przełączać się między punktami dostępowymi podczas jazdy, inaczej zadanie potwierdzone skanem zawiśnie w kolejce. Praktyczne wskazówki dla tej klasy urządzeń zbiera tekst o tym, jak działa terminal radiowy w magazynie. Ofertę urządzeń i integracji dla takich obiektów przedstawia strona magazyn wysokiego składowania z systemem WMS.
Operatorzy wózków w dużych magazynach często nie mówią po polsku. Komunikaty na terminalu i treść błędów powinny być dostępne w ich języku, bo pomyłka na dziesiątym poziomie regału jest droższa niż przy półce na parterze. Sposób tłumaczenia interfejsu opisujemy w materiale o tym, czym jest wielojęzyczny program magazynowy WMS.
Uzupełnianie strefy kompletacji z wyższych poziomów
W typowym układzie magazynu wysokiego składowania najniższy poziom regału służy jako pole kompletacji, a wyższe poziomy przechowują zapas rezerwowy tego samego indeksu. Kompletujący pobiera kartony z poziomu posadzki, a wózek wysokiego składowania uzupełnia pole całą paletą z góry. Obie operacje muszą być zsynchronizowane, żeby kompletujący nie stanął przed pustym gniazdem.
Uzupełnienie uruchamia jeden z dwóch mechanizmów. Pierwszy działa zdarzeniowo: każde pobranie przy kompletacji przelicza stan pola i przy spadku poniżej minimum tworzy zadanie dla wózka. Drugi działa cyklicznie jako zadanie SQL Agent, które co kilka minut sprawdza wszystkie pola i tworzy brakujące zadania. Mechanizm cykliczny mniej obciąża transakcję kompletacji, ale reaguje z opóźnieniem.
-- przykładowe zapytanie cyklicznego zadania SQL Agent:
-- pola kompletacji poniżej minimum, bez otwartego zadania uzupełnienia
SELECT p.Indeks, p.LokalizacjaId, p.Ilosc, p.Minimum
FROM dbo.PoleKompletacji AS p
WHERE p.Ilosc < p.Minimum
AND NOT EXISTS (
SELECT 1
FROM dbo.ZadanieUzupelnienia AS z
WHERE z.LokalizacjaId = p.LokalizacjaId
AND z.Status IN (0, 1) -- 0 = nowe, 1 = w realizacji
);
Warunek NOT EXISTS chroni przed zdublowaniem zadania, gdy poprzednie uzupełnienie jest już w drodze. Minimum pola warto liczyć z dziennego zużycia indeksu, a nie ustawiać ręcznie raz na zawsze. Szczegóły organizacji pobrań opisuje artykuł o tym, jak przebiega kompletacja zamówień w systemie WMS.
Inwentaryzacja i kontrola wysokich poziomów
Pełna inwentaryzacja magazynu wysokiego składowania oznacza zatrzymanie pracy na wiele godzin, bo każdą paletę z wyższych poziomów trzeba sprawdzić wózkiem. Z tego powodu obiekty tej klasy przechodzą na inwentaryzację ciągłą. System dzieli magazyn na korytarze i generuje spisy dla kilku z nich dziennie, tak żeby w ciągu roku każde gniazdo zostało sprawdzone co najmniej raz.
Liczona lokalizacja dostaje status blokady na czas spisu. Zadania odkładania omijają ją automatycznie, a zadania pobrania czekają albo są kierowane do innego gniazda z tym samym indeksem. Po zatwierdzeniu spisu różnice trafiają do dokumentu korygującego, a stany magazynowe w systemie odpowiadają temu, co stoi na regale.
| Zdarzenie | Reakcja systemu |
|---|---|
| Operator zgłasza puste gniazdo, które w bazie jest zajęte | blokada lokalizacji i zadanie spisu kontrolnego |
| Skan palety w gnieździe innym niż zapisane w bazie | odrzucenie operacji i komunikat o niezgodności adresu |
| Zaplanowany spis korytarza w ramach inwentaryzacji ciągłej | blokada liczonych gniazd, przekierowanie odkładania |
| Zatwierdzenie spisu z różnicą ilościową | dokument korygujący i wysłanie różnicy do ERP |
Najtańszą formą kontroli jest spis przy okazji. Gdy wózek pobiera ostatnią paletę z gniazda, aplikacja prosi operatora o potwierdzenie, że gniazdo jest puste. Jedno kliknięcie wychwytuje rozbieżność w chwili jej powstania. Zasady organizacji pełnego spisu opisuje artykuł inwentaryzacja w magazynie.
Różnice inwentaryzacyjne muszą trafić do systemu księgowo-handlowego. Wymiana dokumentów korygujących z ERP odbywa się zwykle przez tabele pośrednie albo usługę REST, a jej konfigurację omawia tekst o tym, jak działa integracja systemów magazynowych. Po stronie magazynu liczy się jedno: zapis korekty i zmiana stanu lokalizacji muszą zajść w tej samej transakcji, żeby raport stanów nie pokazał stanu pośredniego.




