Towar wymagający stałej temperatury, z krótkim terminem ważności albo z klasą zagrożenia zmienia reguły pracy magazynu. Zwykły program do magazynowania odpowiada na pytanie, ile sztuk leży w której lokacji. W warunkach specjalnych dochodzą trzy dalsze pytania. W jakich warunkach towar leży, jak długo tam leży i czy wolno go jeszcze wydać.
Ten tekst opisuje dwie warstwy takiego programu. Pierwsza obejmuje fizyczne warunki: strefy temperaturowe i alarmy odchyleń. Druga dotyczy statusu zapasu: partii z terminami ważności oraz blokad jakościowych. Rozmieszczanie zwykłego asortymentu opisano osobno w tekście o programie do magazynowania towarów.
Program do magazynowania a strefy temperaturowe
Strefa temperaturowa jest w bazie danych atrybutem lokacji, a nie napisem na drzwiach chłodni. Każda lokacja należy do jednej strefy, a strefa niesie zakres dopuszczalnych temperatur i limit czasu, przez jaki odczyt może wykraczać poza zakres. Reguły odkładania i wydawania korzystają z tej jednej relacji.
Wymaganie temperaturowe ma również kartoteka towaru. Kartoteka wskazuje strefy dopuszczone dla indeksu, a program porównuje ten zapis ze strefą lokacji docelowej przy każdym odkładaniu. Towar wymagający chłodni nie trafi do strefy ogólnej, nawet gdy lokacja jest wolna i pasuje wymiarami. Sposób opisu takich cech omawia tekst o strukturze kartotek magazynowych.
| Strefa | Typowy zakres | Co egzekwuje program | Skutek naruszenia |
|---|---|---|---|
| Strefa ogólna | Brak wymagania | Zgodność typu nośnika i wymiarów | Brak blokady |
| Chłodnia | Zwykle 2-8°C | Odkładanie tylko dla indeksów dopuszczonych, licznik czasu poza strefą | Kwarantanna partii po trwałym odchyleniu |
| Mroźnia | -18°C lub niżej | Krótki limit czasu na rampie i w kompletacji | Ocena jakościowa palety po przekroczeniu limitu |
| Rampa i strefa przejściowa | Zależnie od procesu | Limit czasu przebywania zamiast zakresu | Alarm dla kierownika zmiany |
Zgodność strefy towaru ze strefą lokacji
Zgodność sprawdza prosty warunek w procedurze odkładania: strefa lokacji musi należeć do zbioru stref dopuszczonych dla indeksu. Błąd wykryty na tym etapie kosztuje jedno skanowanie. Ten sam błąd wykryty po tygodniu kosztuje całą partię.
W praktyce trzeba odróżnić strefę stałą od przejściowej. Chłodnia jest strefą stałą. Rampa przyjęć i strefa kompletacji są przejściowe, bo towar spędza tam minuty, a nie tygodnie. Dla nich ważny jest limit czasu, a nie sam zakres temperatury.
Czas poza strefą przy przyjęciu i kompletacji
Przy towarze mrożonym o jakości decyduje nie tylko temperatura w komorze, lecz także czas, który paleta spędziła na rampie. Program może zapisywać znacznik czasu przy zdjęciu palety ze strefy chłodniczej i przy odłożeniu jej do strefy docelowej. Różnica między nimi jest czasem poza strefą. Gdy przekroczy limit zdefiniowany dla indeksu, paleta dostaje status do oceny jakościowej.
Kompletacja w komorze wymaga analogicznego podejścia. Lista pobrań grupuje pozycje tak, aby pracownik opuszczał komorę raz na zlecenie, a nie raz na pozycję. Mechanizm wyznaczania tras opisuje tekst o kompletacji zamówień.
Odczyty temperatury i alarmy odchyleń
Rejestratory zapisują odczyty w stałych odstępach, a program do magazynowania trzyma je w tej samej bazie co stany magazynowe. Wspólna baza pozwala jednym zapytaniem ustalić, które partie leżały w strefie w czasie odchylenia. Osobny system monitoringu tego nie umożliwia bez ręcznego łączenia danych. Ogólne zasady współpracy oprogramowania z urządzeniami opisano w tekście o automatyzacji w magazynie.
Poniższy przykład pokazuje schemat i procedurę alarmową w T-SQL. Nazwy tabel i kolumn są przykładowe, a nie opisem rzeczywistego schematu produktu. Procedura uznaje odchylenie za trwałe, gdy wszystkie odczyty z okna czasowego strefy leżą poza dopuszczalnym zakresem.
CREATE TABLE dbo.StrefaTemp (
StrefaId int NOT NULL PRIMARY KEY,
Nazwa nvarchar(40) NOT NULL,
TempMin decimal(4,1) NOT NULL,
TempMax decimal(4,1) NOT NULL,
MaxMinutPozaZakresem int NOT NULL
);
CREATE TABLE dbo.OdczytTemp (
StrefaId int NOT NULL REFERENCES dbo.StrefaTemp (StrefaId),
CzasOdczytu datetime2(0) NOT NULL,
Wartosc decimal(4,1) NOT NULL,
CONSTRAINT PK_OdczytTemp PRIMARY KEY (StrefaId, CzasOdczytu)
);
GO
CREATE PROCEDURE dbo.usp_BlokujPoOdchyleniu
@StrefaId int
AS
BEGIN
SET NOCOUNT ON;
DECLARE @razem int, @poza int;
SELECT @razem = COUNT(*),
@poza = SUM(CASE WHEN o.Wartosc < s.TempMin
OR o.Wartosc > s.TempMax THEN 1 ELSE 0 END)
FROM dbo.OdczytTemp AS o
JOIN dbo.StrefaTemp AS s ON s.StrefaId = o.StrefaId
WHERE o.StrefaId = @StrefaId
AND o.CzasOdczytu >= DATEADD(MINUTE, -s.MaxMinutPozaZakresem, SYSDATETIME());
IF @razem > 0 AND @poza = @razem
UPDATE sp SET StatusKod = 'KWARANTANNA'
FROM dbo.StanPartii AS sp
JOIN dbo.Lokacja AS l ON l.LokacjaId = sp.LokacjaId
WHERE l.StrefaId = @StrefaId AND sp.StatusKod = 'DOSTEPNY';
END;
Okno czasowe eliminuje fałszywe alarmy. Otwarcie drzwi komory na kilka minut podnosi odczyt czujnika przy wejściu, ale nie oznacza utraty partii. Limit MaxMinutPozaZakresem jest więc parametrem strefy, a nie stałą w kodzie.
Reguła: alarm zależy od czasu trwania odchylenia, a nie od pojedynczego odczytu.
Progi ostrzegawcze i alarmowe
Dwa progi dają lepszą kontrolę niż jeden. Próg ostrzegawczy leży wewnątrz zakresu i powiadamia kierownika zmiany, gdy temperatura zbliża się do granicy. Próg alarmowy leży na granicy zakresu i uruchamia zmianę statusu partii. Powiadomienie trafia na terminal mobilny operatora.
Odczyty przechowuje się dłużej niż stany dzienne, bo służą jako dowód w sporze z dostawcą lub przewoźnikiem. Tabela odczytów rośnie szybko, dlatego jej klucz klastrowy zaczyna się od strefy i czasu, a starsze dane trafiają do partycji archiwalnych. Zasady partycjonowania opisuje dokumentacja Microsoft o tabelach i indeksach partycjonowanych.
Partie i terminy ważności w towarze wrażliwym
Stan magazynowy towaru z terminem ważności nie jest jedną liczbą. Jest zbiorem wierszy o kluczu: indeks, partia, lokacja. Każdy wiersz ma własny termin ważności i własny status. Wydanie wybiera wiersze według najkrótszego terminu (FEFO), a nie według daty przyjęcia (FIFO).
Przy przyjęciu system wymusza podanie partii i terminu, jeśli kartoteka oznacza indeks jako partyjny. Numer partii i termin trafiają na etykietę palety, a skanowanie etykiety przy odkładaniu i pobraniu wiąże fizyczną jednostkę z wierszem stanu. Zasady zapisu partii w ewidencji omawia tekst o partiach produkcyjnych w ewidencji magazynowej. Śledzenie tych samych partii w produkcji opisuje artykuł o traceability.

Minimalny pozostały okres przydatności
Odbiorcy z sieci handlowych często wymagają, aby towar opuszczał magazyn z określonym minimalnym procentem okresu przydatności. Program porównuje termin ważności partii z datą planowanej wysyłki i odrzuca partie poniżej progu przy alokacji zlecenia. Próg jest parametrem odbiorcy, więc ta sama partia może być dostępna dla jednego klienta i niedostępna dla drugiego.
Partie zbliżające się do progu trafiają na listę sprzedaży priorytetowej. Lista jest wynikiem zapytania po dacie ważności, a nie ręcznego przeglądu półek. Zasady rotacji dla różnych grup asortymentu porównuje wspomniany wcześniej tekst o rozmieszczaniu towarów.
Blokady i statusy jakościowe zapasu
Status jakościowy jest polem wiersza stanu i decyduje, czy alokacja wydania może ten wiersz wziąć pod uwagę. Zapasy w kwarantannie i partie wstrzymane po odchyleniu temperatury pozostają w magazynie, ale nie biorą udziału w kompletacji. Przykładowy zestaw czterech statusów wystarcza w większości magazynów.
- DOSTEPNY - wiersz uczestniczy w alokacji wydań.
- KWARANTANNA - towar czeka na decyzję jakości; ruchy wewnętrzne są dozwolone, wydania nie.
- ZABLOKOWANY - wstrzymanie po odchyleniu lub reklamacji; zmienić je może tylko rola z uprawnieniem jakościowym.
- DO_UTYLIZACJI - towar wykluczony ze stanu dostępnego, czeka na dokument rozchodu.
Reguła: blokadę egzekwuje kod alokacji wydania w bazie, a nie ukrycie pozycji na ekranie terminala.
Zapytanie alokacji czyta głównie wiersze dostępne, więc opłaca się dla nich osobny indeks. Indeks filtrowany obejmuje tylko wiersze spełniające warunek i jest mniejszy od pełnego. Zapytanie musi zawierać identyczny warunek w treści, bo przy wartości przekazanej parametrem optymalizator może z indeksu nie skorzystać. Szczegóły opisuje dokumentacja indeksów filtrowanych.
CREATE NONCLUSTERED INDEX IX_StanPartii_Dostepne
ON dbo.StanPartii (KodTowaru, DataWaznosci)
INCLUDE (LokacjaId, Ilosc)
WHERE StatusKod = 'DOSTEPNY';
GO
CREATE PROCEDURE dbo.usp_ZmienStatusPartii
@KodTowaru varchar(30),
@NumerPartii varchar(30),
@NowyStatus varchar(20),
@Uzytkownik sysname,
@Powod nvarchar(200)
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRANSACTION;
UPDATE dbo.StanPartii
SET StatusKod = @NowyStatus
OUTPUT inserted.KodTowaru, inserted.NumerPartii,
deleted.StatusKod, inserted.StatusKod,
@Uzytkownik, @Powod, SYSDATETIME()
INTO dbo.StatusLog (KodTowaru, NumerPartii, StatusPrzed, StatusPo,
Uzytkownik, Powod, Czas)
WHERE KodTowaru = @KodTowaru AND NumerPartii = @NumerPartii;
COMMIT TRANSACTION;
END;
Dziennik zmian powstaje w tej samej transakcji co zmiana statusu, dzięki klauzuli OUTPUT. Nie da się więc zmienić statusu bez śladu i nie da się zapisać śladu bez zmiany. Prawo do wywołania procedury przypisuje się rolom, jak w opisie ról i użytkowników w systemie WMS.
Towary ADR i segregacja w strefach
ADR reguluje przewóz drogowy towarów niebezpiecznych. W magazynie te same dane wejściowe, czyli klasa zagrożenia i numer UN, służą do zbudowania reguł segregacji, które obiekt ustala na podstawie przepisów pożarowych oraz karty charakterystyki. Numer UN jest czterocyfrowym identyfikatorem substancji lub grupy substancji. Klasy zagrożeń oznacza się numerami od 1 do 9.
Karta charakterystyki (SDS) ma szesnaście sekcji. Dla magazynu istotna jest sekcja 7 o postępowaniu i magazynowaniu oraz sekcja 14 z informacjami transportowymi, w której podano numer UN i klasę. Program przechowuje te wartości jako pola kartoteki, a sam plik SDS jako załącznik indeksu.
| Para klas w jednej lokacji | Przykładowy wynik reguły | Reakcja programu |
|---|---|---|
| Klasa 3 z klasą 3 | Dozwolone do limitu ilości | Odkładanie z sumowaniem ilości w strefie |
| Klasa 3 z klasą 5.1 | Zakaz wspólnej lokacji | Odmowa na terminalu z przyczyną |
| Klasa 8 z klasą 3 | Wymaga decyzji osoby odpowiedzialnej | Operacja czeka na zatwierdzenie |
| Klasa 9 z klasą 9 | Dozwolone | Odkładanie bez dodatkowych kroków |
Tabela pokazuje sposób zapisu reguł, a nie gotową macierz zgodności. Rzeczywiste wartości ustala osoba odpowiedzialna za bezpieczeństwo obiektu na podstawie przepisów i kart charakterystyki. Reguła ma trzy możliwe wyniki, a nie dwa. Oprócz dozwolone i zakaz istnieje wynik wymagający decyzji, na przykład inspektora bezpieczeństwa.
Limity ilości w strefie
Strefa ma także limit sumarycznej ilości substancji danej klasy. Przy odkładaniu program sumuje ilości w strefie i porównuje je z limitem, zanim potwierdzi lokację. Ta sama suma daje dane do raportu dla przeglądu przeciwpożarowego, bez ręcznego liczenia. Praktykę bezpieczeństwa w obiekcie opisuje tekst o bezpieczeństwie w magazynie.
Przykład wdrożenia dla magazynu substancji chemicznych, z wymianą danych z systemem klasy ERP, przedstawia materiał o wdrożeniu systemu WMS z integracją SAP dla magazynu chemicznego.
Terminal mobilny jako punkt kontroli
Wszystkie opisane reguły trafiają do pracownika przez terminal. Przy odkładaniu pracownik skanuje etykietę palety i etykietę lokacji. Aplikacja wysyła oba kody do serwera. Serwer sprawdza w jednej transakcji zgodność strefy oraz status partii, a potem segregację i limit, po czym odsyła zatwierdzenie albo odmowę.
Odmowa ma nieść przyczynę zapisaną w słowniku, na przykład brak zgodności strefy albo status kwarantanny. Sam komunikat o błędzie, bez przyczyny, prowadzi do tego, że pracownik odkłada towar w pierwszym wolnym miejscu i zgłasza problem dopiero po zmianie.

Wybór urządzeń i sposób pracy aplikacji opisują teksty o kolektorze danych Android WMS oraz o systemie WMS w mroźni. Chłodnia stawia terminalom dodatkowe wymagania. Bateria pracuje w niskiej temperaturze inaczej niż w hali ogólnej, a obsługa w rękawicach zmienia wymagania wobec klawiatury i ekranu.
Uruchomienie w magazynie o podwyższonych wymaganiach
Wdrożenie zaczyna się od inwentaryzacji tego, co już zainstalowano w obiekcie. Chodzi o czujniki oraz sterowniki chłodni. Analiza wskazuje strefy bez pomiaru i protokoły, którymi urządzenia się komunikują. W chłodniach stosuje się także mapowanie temperatury, czyli okresowy pomiar rozkładu temperatur w komorze, który wskazuje miejsca najcieplejsze i najzimniejsze.
Konfiguracja obejmuje cztery rodzaje parametrów, które powinny leżeć w tabelach konfiguracyjnych, a nie w kodzie procedur.
- Strefy i limity czasu - zakresy temperatur oraz czas dopuszczalnego przekroczenia.
- Progi alarmowe - wartości ostrzegawcze i graniczne, osobno dla każdej strefy.
- Słowniki statusów - lista statusów wraz z regułami przejść między nimi.
- Macierz segregacji - wyniki dla par klas zagrożeń i limity ilości.
Parametry ustawia administrator w panelu opisanym w tekście o konfiguracji programu Studio WMS.net. Testy przeprowadza się na jednej strefie, zanim reguły obejmą cały obiekt. Scenariusz testowy zawiera dwie próby wymuszenia błędu. Pierwsza to odłożenie towaru do niezgodnej strefy. Druga to wydanie partii w kwarantannie. Każda musi zakończyć się odmową.
Po teście rejestr odmów pokazuje, czy reguły działają w praktyce. Pusta lista odmów po tygodniu pracy nie oznacza sukcesu. Oznacza zwykle, że pracownicy obchodzą system poza terminalem.




