Aplikacja dla magazynów organizuje pracę przez zadania. Zamiast kartki z listą pozycji operator dostaje kolejne polecenie: przyjmij paletę, odłóż ją w lokalizacji, pobierz towar do zamówienia. System zna stan każdego miejsca składowania, więc może wskazać najbliższą wolną lokalizację i sprawdzić, czy skan zgadza się z poleceniem.

Ten tekst opisuje organizację pracy od strony mechanizmów: kolejki zadań, metod kompletacji, układu składowania palet i wymagań serwerowych. Mobilną aplikację na kolektory porównuje z ewidencją papierową osobny tekst o aplikacji dla magazynów, a pracę na wysokich regałach opisuje tekst o aplikacji dla magazynów wysokiego składowania.

Aplikacja dla magazynów jako narzędzie organizacji pracy

Celem kontroli i oceny gospodarki magazynowej jest utrzymanie właściwego poziomu zapasów oraz skrócenie ścieżki towaru w łańcuchu logistycznym. Aplikacja przekłada te cele na czynności. Każda operacja zostawia ślad w bazie, a raport pokazuje, gdzie proces traci czas.

  • Zarządzanie zapasami - utrzymanie poziomu zapasu odpowiedniego do popytu, czyli bez niedoborów i bez zamrożonego kapitału.
  • Ograniczenie etapów magazynowania - mniej przeładunków i przesunięć między kolejnymi ogniwami łańcucha.
  • Technologia składowania - dobór układu regałów i zasad odkładania do rotacji towaru.
  • Transport wewnętrzny - redukcja kosztu przejazdów wózków między strefami.

Aplikacja wspiera operacje magazynowe od przyjęcia po wydanie. Śledzenie zapasów w czasie rzeczywistym daje kierownikowi wgląd w ilość towaru na półkach, a to ogranicza jednocześnie niedobory i nadmiar. Przegląd technik organizacji przestrzeni znajduje się też na stronie o systemie do magazynu.

Zadania i kolejki - jak aplikacja porządkuje pracę zmiany

Każda czynność w magazynie jest w systemie zadaniem o typie i priorytecie oraz z przypisaną lokalizacją. Typy obejmują przyjęcie i odłożenie towaru oraz jego pobranie, a także przesunięcie i inwentaryzację. System tworzy zadania na podstawie dokumentów, a operator otrzymuje je na kolektorze w kolejności ustalonej regułami.

Trudność pojawia się, gdy kilku operatorów prosi o zadanie w tej samej chwili. Bez kontroli współbieżności dwie osoby dostałyby to samo polecenie albo jedna czekałaby na zwolnienie blokady założonej przez drugą. Baza SQL Server rozwiązuje problem hintami blokad. Przykład poniżej, w przykładowym schemacie, pobiera jedno najważniejsze zadanie i oznacza je jako przydzielone w jednej instrukcji.

DECLARE @OperatorId int = 17;

WITH nastepne AS (
    SELECT TOP (1) *
    FROM   dbo.ZadanieMagazynowe WITH (ROWLOCK, UPDLOCK, READPAST)
    WHERE  Status = 'NOWE'
      AND  StrefaId IN (SELECT StrefaId
                        FROM   dbo.UprawnienieStrefy
                        WHERE  OperatorId = @OperatorId)
    ORDER BY Priorytet DESC, Utworzono
)
UPDATE nastepne
SET    Status = 'W_TOKU',
       OperatorId = @OperatorId,
       Rozpoczeto = SYSDATETIME()
OUTPUT inserted.ZadanieId, inserted.Typ, inserted.LokalizacjaZ, inserted.LokalizacjaDo;

Podpowiedź UPDLOCK blokuje wybrany wiersz do zapisu, a READPAST pomija wiersze zablokowane przez innych. Dzięki temu dwóch operatorów nigdy nie otrzyma tego samego zadania i żaden nie czeka na drugiego. Klauzula OUTPUT zwraca dane przydzielonego zadania bez dodatkowego zapytania, co opisuje dokumentacja Microsoft dotycząca klauzuli OUTPUT.

Reguła: przydział zadania i zmiana jego statusu odbywają się w jednej instrukcji, aby nie powstało zadanie przydzielone dwukrotnie.

Priorytety i strefy pracy

Priorytet zadania wynika z terminu wysyłki oraz typu dokumentu, a także statusu klienta. Strefa pracy ogranicza listę zadań do obszaru, w którym operator ma uprawnienia i sprzęt. Dzięki temu wózek czołowy nie dostaje zadania z regału wysokiego, a pracownik z terminalem ręcznym nie jest kierowany do strefy chłodniczej bez odzieży. Uprawnienia do stref zapisuje się w tabeli powiązanej z operatorem, więc zmiana przydziału nie wymaga zmian w aplikacji.

Statusy zadania od utworzenia do zamknięcia

Zadanie przechodzi przez kilka statusów, a każde przejście ma jednego właściciela. System zmienia status przy przydziale, operator przy potwierdzeniu skanem, a kierownik przy wycofaniu. Ślad zmian pozwala odtworzyć, kto i kiedy wykonał daną czynność.

StatusKiedy występujeKto zmieniaDalszy krok
NOWEZadanie powstało z dokumentu i czeka w kolejceSystemPrzydział operatorowi
W_TOKUZadanie przydzielono i rozpoczętoSystem przy przydzialePotwierdzenie skanami
ZAMKNIETESkany zgodne z poleceniem, stan zaktualizowanyOperatorKolejne zadanie lub zamknięcie dokumentu
ANULOWANEZlecenie wycofano albo zadanie przekazano innej osobieKierownikZwolnienie rezerwacji towaru

Zadanie w statusie W_TOKU, które nie zostało potwierdzone w zadanym czasie, wraca do puli. Zdarza się tak po rozładowaniu baterii kolektora albo po zmianie stanowiska bez zamknięcia zadania. Odzyskiwaniem zajmuje się zadanie okresowe, na przykład w SQL Server Agent, z parametrem czasu nieaktywności.

DECLARE @MinutNieaktywnosci int = 20;   -- parametr przykładowy

UPDATE dbo.ZadanieMagazynowe
SET    Status = 'NOWE',
       OperatorId = NULL
WHERE  Status = 'W_TOKU'
  AND  Rozpoczeto < DATEADD(MINUTE, -@MinutNieaktywnosci, SYSDATETIME());

Parametr ustawia się ostrożnie. Zbyt krótki powoduje, że zadanie wraca do puli, gdy operator jeszcze je wykonuje, a zbyt długi zostawia towar zarezerwowany bez potrzeby.

Metody planowania układania i kompletacji towarów

Kolejność zadań zależy od metody kompletacji. Aplikacja nie wybiera jej sama: parametry ustawia kierownik procesu, a system generuje listy według wybranej zasady. Poniższe zestawienie porównuje pięć metod, które w praktyce występują najczęściej.

MetodaZasadaWpływ na organizację pracy
Analiza ABC/XYZABC klasyfikuje towary według wartości, a XYZ według rotacjiTowary szybkorotujące trafiają bliżej strefy wydań
Cross-dockingPrzyjęcie kieruje towar bezpośrednio do strefy wydawczejMinimalizuje składowanie i liczbę przesunięć
Wave pickingKompletacja zamówień na określone fale czasoweWyrównuje obciążenie i dopasowuje pracę do odjazdów
Batch pickingKompletacja kilku zamówień jednocześnie z grupowaniem produktówSkraca dystans, lecz wymaga sortowania po zebraniu
Zone pickingMagazyn podzielony na strefy z przypisanymi pracownikamiKrótsze trasy, ale konieczność łączenia zamówienia z kilku stref

Wybór metody zależy od struktury zamówień. Wiele małych zamówień z podobnych pozycji sprzyja batch pickingowi, a duże zamówienia paletowe pracują lepiej w fali. Mechanizm generowania list i tras opisuje tekst o kompletacji zamówień, a ustawianie towaru według rotacji tekst o rozmieszczeniu towaru i analizie ABC. Zasady klasyfikacji ABC-XYZ opisuje także strona o metodach klasyfikacji asortymentu.

Pracownica w kasku i kamizelce odblaskowej z tabletem przy regale odczytuje listę pobrań
Lista pobrań na tablecie prowadzi operatora po kolejnych lokalizacjach zgodnie z wybraną metodą kompletacji.

Analiza ABC i XYZ w praktyce

Klasa ABC odpowiada na pytanie o wartość obrotu, klasa XYZ na pytanie o regularność popytu. Towar z klasy AX rotuje szybko i przewidywalnie, więc jego miejsce jest blisko strefy wydań. Towar z klasy CZ leży rzadko i nieregularnie, więc trafia do dalszych, wyższych lokalizacji. Aplikacja przelicza klasy okresowo, a nie jednorazowo, ponieważ rotacja zmienia się z sezonem.

Rodzaje składowania palet a organizacja pracy

System regałowy narzuca kolejność, w jakiej palety można wyjmować, a aplikacja musi ten fakt znać. W regale przejazdowym (drive-in) ostatnia wstawiona paleta opuszcza kanał jako pierwsza. W regale przepływowym (pallet flow) kolejność jest odwrotna, bo palety przesuwają się grawitacyjnie od strony załadunku do strony wydania.

System składowaniaKolejność wydawaniaKonsekwencja dla aplikacji
Block stackingZwykle od ostatnio ułożonej (LIFO)Ograniczenie liczby partii w jednym stosie
Drive-inLIFO w kanaleJeden kanał przeznaczony dla jednej partii
Drive-throughFIFO, załadunek z jednej strony i wydanie z drugiejMożliwe utrzymanie rotacji według terminu
Pallet flowFIFO, palety przesuwają się na pochylniachDobra podstawa dla rotacji FIFO i FEFO
Push-backLIFO, kolejne palety wypychają poprzednie do tyłuWiele partii wymaga rozdzielenia na kanały
Double-deepDwa rzędy palet, dostęp do tylnego wymaga specjalnego wózkaKontrola, która paleta stoi z przodu

Wniosek dla aplikacji jest praktyczny. Reguła rotacji zapisana w kartotece towaru musi być zgodna z możliwościami regału. System, który przydziela do jednego kanału typu LIFO dwie partie o różnych terminach, wymusi w przyszłości przeładunek. Poprawne odkładanie zależy więc od opisu lokalizacji w bazie, a nie od dyscypliny operatora. Sposób opisu miejsc omawia tekst o miejscach składowania i typach regałów.

Aplikacja a sklep internetowy i wiele magazynów

W sklepie internetowym struktura magazynu ma szczególne znaczenie, bo zamówienia napływają ciągle i w małych ilościach. Aplikacja musi szybko odejmować rezerwacje i przekazywać stany do platformy sprzedaży. Sposoby wymiany danych ze sklepem opisuje tekst o systemie WMS dla sklepu internetowego, a integrację z ERP tekst o integracji systemów magazynowych.

Oprogramowanie można wdrożyć lokalnie w pojedynczym magazynie albo centralnie w chmurze prywatnej. Wariant centralny obsługuje wiele magazynów z różnych lokalizacji w jednej, rozproszonej strukturze. Porównanie modeli znajduje się w tekście o programie magazynowym w chmurze i on-premise.

Bez względu na model aplikacja obsługuje dokumenty magazynowe. Są to przyjęcie i wydanie z magazynu oraz przesunięcia i inwentaryzacje. Każdy dokument zmienia stan i zostawia ślad, dzięki czemu historię ruchu towaru można odtworzyć.

Rezerwacja stanu przy zamówieniach ze sklepu

Zamówienie z e-sklepu rezerwuje towar, zanim ktokolwiek go pobierze. Stan dostępny to stan fizyczny pomniejszony o rezerwacje, a platforma sprzedaży odczytuje właśnie tę wartość. Przy wielu jednoczesnych zamówieniach rezerwacja musi być atomowa, inaczej ten sam towar sprzeda się dwa razy.

UPDATE dbo.StanTowaru
SET    Zarezerwowane = Zarezerwowane + @Ilosc
WHERE  TowarId = @TowarId
  AND  Ilosc - Zarezerwowane >= @Ilosc;

IF @@ROWCOUNT = 0
    THROW 50010, 'Brak wystarczajacego stanu dostepnego.', 1;

Warunek w klauzuli WHERE i zwiększenie rezerwacji odbywają się w jednej instrukcji, więc dwa równoległe zamówienia nie zarezerwują tego samego towaru. Gdy żaden wiersz nie zostanie zmieniony, procedura zgłasza błąd i platforma sprzedaży odrzuca zamówienie albo proponuje termin uzupełnienia.

Ewidencja według numerów seryjnych

Magazyn wysokiego składowania obsługiwany dla wielu klientów wymaga innych funkcji niż zwykły, księgowy program magazynowy. Chodzi o ewidencję towaru według numerów seryjnych (SN) i o wycenę usług magazynowych, która stanowi podstawę faktury dla klienta. Model pracy operatora logistycznego omawia tekst o WMS dla operatora 3PL.

Numer seryjny identyfikuje pojedynczą sztukę, a nie partię. W bazie zapisuje się go w tabeli powiązanej z pozycją dokumentu i lokalizacją, a unikalność pary indeks towaru i numer seryjny pilnuje indeks unikalny. Skan przy przyjęciu i przy wydaniu pozwala odtworzyć historię jednej sztuki, co przydaje się przy reklamacji albo naprawie gwarancyjnej.

Reguła: przed zakupem aplikacji sprawdza się obsługę ewidencji według numerów seryjnych oraz integrację z ERP.

Wymagania techniczne i instalacja aplikacji

Aplikacje SoftwareStudio z Poznania działają w technologii ASP.NET i opierają się na rozwiązaniach firmy Microsoft. Do pracy potrzebny jest serwer z systemem operacyjnym, serwerem stron WWW (IIS) i silnikiem bazy danych Microsoft SQL Server. Instalacja polega na utworzeniu witryny WWW i umieszczeniu aplikacji w wybranym katalogu.

KrokZadanie administratoraUwaga
Nowa witryna w IISNadanie opisu używanego wewnętrznie do identyfikacji witrynyOpis nie wpływa na działanie aplikacji
Adres i portPrzypisanie adresu IP i numeru portu TCPPara adres-port musi być unikalna na serwerze
Katalog aplikacjiWskazanie folderu z plikami aplikacjiUprawnienia dla użytkowników ustala się przy tym kroku
Baza danychInstalacja i konfiguracja Microsoft SQL Server według wymagań producentaKonto usługi aplikacji otrzymuje tylko potrzebne uprawnienia

Ustawienia witryny można później zmieniać we właściwościach witryny w Menedżerze usług internetowych, bez ponownej instalacji środowiska. Podstawy działania serwera opisuje dokumentacja Microsoft o serwerze IIS. Ofertę aplikacji magazynowych przedstawia strona o aplikacji magazynowej.

Alejka magazynu z wielopoziomowymi regałami paletowymi i wózkiem widłowym w oddali
Struktura regałów, którą aplikacja odwzorowuje w bazie jako lokalizacje z adresem oraz typem i pojemnością.

Wskaźniki oceny organizacji pracy po wdrożeniu

Skuteczność aplikacji ocenia się po kilku mierzalnych wskaźnikach. Regularny pomiar pozwala wychwycić obszar wymagający poprawy, zanim stanie się źródłem strat. Wartości porównuje się z okresem sprzed wdrożenia, a nie z ogólnymi średnimi z rynku.

  • Czas realizacji zamówienia - od wygenerowania zlecenia do zamknięcia listy pobrań.
  • Dokładność inwentaryzacji - odsetek lokalizacji, w których spis zgadza się ze stanem systemu.
  • Liczba pomyłek kompletacyjnych - błędne pozycje w wysyłce odniesione do liczby wydań.
  • Koszt obsługi pozycji - koszt pracy i sprzętu przypadający na jedną obsłużoną pozycję.

Zestaw wskaźników procesu i sposób ich liczenia porządkuje tekst o zarządzaniu procesami magazynowania. Pracę aplikacji w praktyce można sprawdzić w wersji demonstracyjnej systemu, zanim zapadnie decyzja o zakupie.

Wykrywanie wąskich gardeł w kolejce

Kolejka zadań jest też narzędziem diagnostycznym. Strefa, w której zadania czekają coraz dłużej, ma za mało operatorów albo za mało sprzętu. Zapytanie poniżej zestawia oczekujące zadania według stref i podaje ich średni wiek.

SELECT   StrefaId,
         COUNT(*)                                        AS Oczekujace,
         MIN(Utworzono)                                  AS NajstarszeZadanie,
         AVG(DATEDIFF(MINUTE, Utworzono, SYSDATETIME())) AS SredniWiekMin
FROM     dbo.ZadanieMagazynowe
WHERE    Status = 'NOWE'
GROUP BY StrefaId
ORDER BY SredniWiekMin DESC;

Rosnący średni wiek w jednej strefie przy małym obciążeniu pozostałych oznacza, że pracowników można przesunąć w trakcie zmiany. Wniosek wynika z danych z bazy, a nie z odczucia kierownika.