Audyt logistyczny
Strona główna*O firmie*Nasze usługi doradcze*Nasze projekty i klienci*Mapa serwisu*Kontakt

Strona główna > O firmie, publikacje naszych specjalistów > Informatyka w dużym magazynie



Informatyka w dużym magazynie

Marek Wierzbicki

Artykuł oryginalnie opublikowany w materiałach z XVII Górskiej Szkoły PTI, Szczyrk 2005.

Kilkanaście lat temu, kiedy chodziłem ze swoim ojcem do sklepu z częściami motoryzacyjnymi, na każde pytanie sprzedawca odpowiadał jest lub nie ma, bez dłuższego zastanawiania się. Jeśli odpowiedź była twierdząca znikał na zapleczu i po chwili przynosił właściwy element. Niedawno, po tym jak moja żona zahaczyła lusterkiem o bramę i rozbiła je w drobny mak, musiałem po dłuższej przerwie odwiedzić taki sklep. Na pytanie o lusterko do malucha sprzedawca cierpliwie wstukał coś do komputera i już po minucie wiedział, że takie lusterko jest. I o dziwo leży bezpośrednio za jego plecami. Gdybym chciał kupić kilkanaście różnych części spędziłbym tam pewnie pół godziny, podziwiając jak to informatyka przyczyniła się do tego, że sprzedawca nareszcie wie, co ma w swoim sklepie i może to bezproblemowo znaleźć.

Jakkolwiek konieczność poszukiwania zamawianych części przez sprzedawcę najpierw w komputerze, a dopiero później na półkach zaskoczyła mnie, to kiedy patrzę na magazyn książek w firmie w której pracuję, nie wyobrażam sobie innego sposobu jego obsługi. Azymut zajmuje się dystrybucją książek w systemie B2B. Główna linia kompletacyjna obsługuje dostawy do księgarń i mniejszych hurtowni książek. Prowadzimy też outsourcing logistyczny w zakresie kanału B2C, na zlecenie firm prowadzących sprzedaż do klientów indywidualnych. Nasz główny magazyn to kilkadziesiąt tysięcy tytułów i kilkanaście tysięcy miejsc położeń. Skutkuje to tym, że próba zapamiętania co gdzie leży przekroczyłaby zapewne możliwości nawet samego RainMana. Jeśli uwzględnimy fakt, że po takim magazynie biega spora grupa pracowników, przygotowując towar na kilka tysięcy dokumentów dziennie (przy czym największe z nich mają ponad pięćset pozycji) okaże się, że pozornie proste zadanie realizacji zamówienia urasta do rangi problemu, którego nie uda się ugryźć bez zaawansowanych algorytmów realizowanych przy użyciu bardzo szybkich komputerów i innego sprzętowego otoczenia informatyki. W artykule, który Państwo czytacie zaprezentuję swoje spostrzeżenia na temat wykorzystania informatyki w takim dużym magazynie. Nie wszystkie wdrożenia pochodzą z Azymutu, ale jeśli nie są u nas używane to przynajmniej były testowane w naszej firmie.

Podstawy oznaczania towaru

Zanim zacznę rozważania na temat procesów biznesowych, które powinny być realizowane w dużym magazynie, warto wspomnieć o technicznych środkach, które używane są do fizycznej realizacji tych procesów. Nie ma chyba wśród czytelników tego tekstu osób, które przynajmniej raz nie robiły zakupów w hipermarkecie lub innym dużym sklepie, wykorzystującym w swoim działaniu kodów paskowych umieszczanych na opakowaniach sprzedawanych towarów. Ten niepozorny, czarno-biały fragment opakowania, to bardzo ważny element wykorzystywany w całym procesie logistycznej obsługi towaru, który trafia na koniec do naszego domu. Kod paskowy towaru to nic innego jak pewien numer, reprezentujący jednozncznie towar, na którym się znajduje. O jednoznaczność oznakowania towaru można dbać samodzielnie, przechowując we własnym zakresie bazę powiązań między wykorzystanymi już numerami i określanymi przez nie towarami. Lepiej jednak dokonać rejestracji towaru w międzynarodowej bazie towarów prowadzonej przez firmę GS1 (do lutego 2005 roku EAN International). Sposób pierwszy jest lepszy w przypadku gdy magazyn obsługuje towar nieokodowywany przez producenta, a jego okodowanie ma służyć wyłącznie celom wewnętrznym. Drugi sposób przeznaczony jest dla producentów towarów ogólnie dostępnych. Powinni oni (i w większości przypadków to robią) rejestrować siebie i swoje towary w GS1 w celu otrzymania oficjalnego numeru GTIN (Global Trade Item Number - Globalny Numer Jednostki Handlowej), a przez to puli numerów na swoje towary. Zyskują dzięki temu możliwość zdobycia szerszego rynku sprzedaży (wiele hurtowni i hipermarketów w ogóle nie przyjmuje nieokodowanego towaru, bądź żąda dodatkowych opłat za jego okodowanie przed wprowadzeniem do obrotu).

Standardowy kod paskowy spotykany na towarach powszecznego użytku to kody z serii EAN/UPC, najczęściej EAN13 z ewentualnym dwuznakowym rozszerzeniem. Standardowo kod taki reprezentuje dokładnie jeden rodzaj towaru czyli na przykład że jest to mleko, ze spółdzielni w Łowiczu o zawartości tłuszczu 3.2% w opakowaniu 1 litr. To samo mleko w opakowaniach półlitrowych ma już inny kod. W praktyce GS1 zaleca, aby każdy towar różniący się od innych jakąkolwiek stałą cechą, istotną dla producenta, handlowca lub konsumenta, posiadał swój własny numer. Gdyby więc producent chciał dodatkowo przenieść w tym kodzie inną informację (na przykład rejon z którego pochodzi to mleko) to musiałby zarejestrować dwa (lub więcej kodów) dla swojego produktu. Innym rozwiązaniem jest zastosowanie dwuznakowego rozszerzenia kodu. Wtedy podstawowy zarejestrowany kod reprezentuje mleko ze wszystkich regionów, a dodatkowe 2 znaki opisują region skąd pochodzi mleko nalane do tego opakowania.

W przypadku książek stosuje się nieznacznie inne podejście, które nie wpływa jednak na ogólność kodu reprezentującego je. Otóż kod paskowy wydrukowany na książce pochodzi od numeru ISBN (International Standard Book Number) reprezentującego daną książkę lub ISSN (International Standard Serial Number) w przypadku czasopisma. ISBN jest standardem znacznie starszym niż kody paskowe towarów, naturalne więc było, że EAN/UPC musiało dostosować się do ISBNów i ISSNów, a nie odwrotnie. W Polsce nadawaniem numerów ISBN zajmuje się Biblioteka Narodowa w Warszawie. Każdy wydawca przed przystąpieniem do publikacji powinien otrzymać taki numer. Na początku lat dziewięćdziesiątych, kiedy w ramach wkraczania do Polski kapitalizmu powstało wiele nowych firm wydawniczych, nie wszystkie nadawały swoim książkom numery ISBN. Jednak w 1995 roku sejm zadbał o motywację dla wydawców, wprowadzając zerowy VAT tylko na książki opatrzone tym numerem. Kod kreskowy wydrukowany na książce to prosta translacja ISBNu na standard rejestrowany w GS1. W przypadku książek dodatkowe 2 znaki służą do określenia numeru dodruku, czasami koloru okładki bądź innej cechy książki nie wpływającej na jej ISBN. W przypadku czasopism dodatkowe 2 znaki określają kolejny numer publikacji w danym roku bądź od początku wydawania czasopisma (oczywiście modulo 100).

Wraz z przyjęciem nowych unijnych norm w stosunku do żywności dotychczasowe kody okazują się jednak za skąpe. Otóż normy te wymagają, aby producent oznaczał swój towar w sposób umożliwiający dokładne rozpoznanie każdej partii towaru ze względu na moment produkcji jak i partię półproduktów wchodzących w skład wyrobu końcowego. Ma to swoje logiczne uzasadnienie. Jeśli w trakcie produkcji nastąpiło wydarzenie, które spowodowało, że towar nie nadaje się do spożycia producent (oraz wszyscy sprzedający ten towar) muszą mieć możliwość określenia, że towar pochodzi z niebezpiecznej partii i wycofania tego produktu ze sprzedaży. Podobnie ma się potoczyć sprawa w przypadku wykrycia wady w półprodukcie, który był użyty do wytworzenia produktu końcowego. Tu sytuacja może być bardziej skomplikowana, bo ten sam półprodukt mógł trafić do różnej żywności u różnych producentów. To co wprowadzono obecnie w stosunku do żywności producenci samochodów stosują od lat. Dzięki takiej dokładnej rejestracji od czasu do czasu słuszy się w związku z tym komunikaty, że posiadacze samochodów marki X o numerach fabrycznych od-do proszeni są o zjawienie się w serwisie celem wymiany jakiegoś elementu. Aby możliwe było przeniesienie w kodzie paskowym tak dużej ilości informacji potrzeba zastosować kody o znacznie większej długości. Standardem są w takim przypadku kody EAN128 umieszczane na etykiecie logistycznej (na szczęście normy nie wymagają umieszczania tej informacji na każdym towarze, a jedynie na opakowaniach zbiorczych).

Wsparcie sprzętowe

Wróćmy jednak do fizycznej reprezentacji kodów na towarach. Otóż kody te to nic innego jak seria białych i czarnych pasków o różnych szerokościach. We wcześniejszej części artykułu mówiąc o kodach nazywałem je EAN13 i EAN128. Tak naprawdę dopiero fizyczna reprezentacja 13 bądź odpowiednio 128 znaków, w postaci serii białych i czarnych pasków to dobiero właściwy kod paskowy. W pewnym uproszczeniu można powiedzieć, że tą samą liczbę można zapisać przy tym (z użyciem takich samych pasków podstawowych) w kodach Code39, Code93, UCC128, Codebar, ABC-Codebar, CLSI-Codebar, UPC/A, UPC/E, 2 of 5 i innych. Rodzaj kodu jest determinowany przez sposób ułożenia poszczególnych pasków czyli kodowanie liczby w grafikę. Poszczególne kody mają różne cechy predystynujące je do różnych zastosowań. Można od nich wymagać na przykład dużej redundancji wraz z możliwością silnej kontroli poprawności odczytywanych danych bądź (co jest cechą przeciwstawną) silnego upakowania informacji. W skrajnym przypadku kody paskowe mogą przyjąć postać kodów dwuwymiarowych. Na towarach najczęściej stosuje się kody EAN13 a na etykietach logistycznych EAN128.

Jednak kod umieszczony na towarze to dopiero połowa układanki. Druga część to urządzenie, które odczytuje te kody i po zamianie na ciąg znaków odpowiadający temu kodowi przekazuje dalej (najczęściej do komputera). Za fizyczne odczytanie odpowiada czytnik diodowy lub laserowy. Czytniki takie (które różnią się generalnie tylko sposobem emisji światła) wykorzystują zjawisko różnego odbijania się światła od matariału zadrukowanego na czarno i na biało. Jakkolwiek na przykład papier nie odbija zbyt dużo światła (a w porównaniu z lustrem można powiedzieć, że nic nie odbija), jednak nawet taki niewielki promil odbitych promieni wystarcza do zarejestrowania różnicy między czernią i bielą i na tej podstawie odczytania kodu. Jak wcześniej napisałem z punktu widzenia emisji światła istnieją dwa podstawowe typy czytników kodów paskowych. Czytniki diodowe wykorzystują diody led, które emitują światło znacznie bardziej rozproszone niż laser w czytniku laserowym. Dzięki temu czytniki laserowe są w stanie odczytywać kody ze znacznie większej odległości. Jednak rozproszenie światła w czytnikach diodowych też może być zaletą. Dzięki rozproszeniu czytniki mogą uśredniać wygląd kodu na większym obszarze, co skutkuje większą odpornością na zniszczone kody. Właśnie ta cecha jest często wykorzystywana, jeśli kody paskowe są drukowane za pomocą drukarek igłowych. Przy tej okazji warto wspomnieć, że producenci umieszczający swoje kody na towarach popełniaja czasem szkolne błędy, które całkowicie uniemożliwiają odczytanie kodów paskowych. Do podstawowych błędów należy umieszczenie kodów na zbyt ciemnym tle (kody są na przykład pomarańczowo-czarne). Innymi jest wydzielenie zbyt małego białego pola, na którym umieszczony jest kod - zbyt mały margines między początkiem lub końcem kodu a tłem (najczęściej ciemnym) jest traktowana jako kolejny ciemny pasek w kodzie, który to pasek już się nie kończy. Kolejny błąd to zbyt odległe umieszczenie dodatkowgo rozszerzenia kodu EAN13 od właściwego kodu - rozszerzenie nie jest wtedy widziane przez czytnik jako dalsza część kodu tylko jako drugi kod bądź tło.

Oczywiście samo odczytanie to nie cała funkcja czytnika. Odczytany kod należy jeszcze przekazać do komputera, gdzie zostanie właściwie zinterpretowany przez program. Przesyłanie może się odbywać z użyciem standardowych interfejsów komputerowych (np. przez port RS232 czy port klawiaturowy) bądź za pomocą sieci radiowej. Bezprzewodowe przekazywanie danych z czytnika do komputera może odbywać się na kilka sposobów. Od łącza radiowego, zastępującego w prosty sposób kabel RS232 (radio symuluje tu odpowiedznio długi kabel) poprzez obecność czytnika jako urządzenie o własnym IP w sieci WLAN, kończąc na czytniku porozumiewającym się z komputerem za pomocą telefonu komórkowego (a konkretnie karty zapewniającej wyłącznie transmisję danych GPRS czy EDGE). W skrajnym przypadku czytnik kodów kreskowych jest zintegrowany z komputerem i część logiki biznesowej jest zaszyta w samym czytniku i z serwerem nie jest wymieniana podstawowa informacja typu kod który odczytał czytnik, tylko efekt całego działania (na przykład towar X przeniosłem z miejsca położenia A na B).

Kody paskowe mimo wielu zalet posiadaja jednak pewną wadę. Otóż kod taki musi być widoczny dla urządzenia czytającego je. Wady takiej nie posiadają tagi RFID. W skrócie jest to bardzo mały, specjalizowany odbiornik fal radiowych wraz z nadajnikem, który potrafi tylko odpowiedzieć na pytanie czytnika: czy w pobliżu jest jakiś tag RFID? Jeśli jakiś tag jest w pobliżu i usłyszy to pytanie wtedy odpowada jestem tu i mam numer NNN. Informacja taka po odczytaniu jest przekazywana do komputera dokładnie tak jak w przypadku kodu kreskowego (dzięki temu wymiana infrastruktury kodów kreskowych na tagi RFID nie wymaga, przynajmniej na początku, żadnych zmian w oprogramowaniu). Obecne tagi RFID są wielkości poniżej 3 cm i grubości poniżej pół milimetra, co pozwala na umieszczenie ich w zwykłych samoprzylepnych naklejkach. Często na tych naklejkach dodatkowo drukuje się w postaci kodu paskowego ten sam numer, który zakodowany jest w tagu radiowym, aby zapewnić jego obsługę w miejscach, gdzie technologia RFID nie została jeszcze wdrożona. Oczywiście pełne wykorzystanie tej technologii wymaga zmian w oprogramowaniu, ze względu na dostępne możliwości jej użycia, niewystępujące w idei kodów paskowych (np. pełna paleta okodowanego towaru może zostać zapytana przez czytnik: ile was tam jest?). Niestety ze względu na cenę tagów (obecnie powyżej złotówki za sztukę) technologię tą można użyć na razie w przypadku bardzo drogich towarów, bądź opakowań zbiorczych.

Proste wykorzystanie oznaczania towarów

Kiedy wiemy już w jaki sposób rozpoznać towar w magazynie przyszła pora, żeby określić jak wykorzystać tą możliwość. Samo wprowadzenie informatyki intensywnie używającej kodów paskowych w wielu miejscach magazynu może poprawić szybkość pracy bądź jej jakość. Mimo tego, że od wielu lat spora część książek była oznaczana kodami paskowymi, jedno z pierwszych działań, które podjęliśmy w ramach usprawniania pracy naszego magazynu nie dotyczyło samych książek, a związane było z drukowaniem naklejek adresowych na przesyłki. W zamierzchłych czasach zapakowane pudełko było u nas adresowane przez dodatkowo zatrudnioną osobę, która mogła się pochwalić ładnym i wyraźnym charakterem pisma. Po co jednak przepisywać z faktury dane adresowe, skoro w systemie są one już zapisane. Wystarczyło tylko wymusić skorzystanie przez program z tych danych i wydrukować je na samoprzylepnej etykiecie. Ze względu na fakt, że w chwili wystawienia faktury nie ma pewności w ile paczek zostanie ona zapakowana, nalepka nie mogła być drukowana razem z fakturą, tylko dopiero po zapakowaniu towaru. Rozwiązliśmy to w ten sposób, że pakowacz po zapakowaniu paczki zeskanowuje kod paskowy tej faktury (umieszczony tam specjalniew tym celu), wprowadza liczbę paczek, a następnie (po wprowadzeniu dodatkowych parametrów) drukuje nalepki, którymi okleja paczki. Oczywiście na nalepce znajduje się kod paskowy umożliwiający dokładną identyfikację tej paczki (zawiera między inymi numer faktury, liczbę wszystkich paczek, numer paczki, sposób wysyłki i inne). Dane z tego kodu są jeszcze kilka razy używane w procesie dostarczenia paczki do klienta i umożliwiają rejestrację procesów zachodzących w jej wędrówce. Tą część procesu dokładniej opisywałem w ramach konferencji w Szczyrku w 2004 roku, więc teraz ją pominę.

Podobnych działań, które podnoszą efektywność pracy magazynu, jest więcej. Można na przykład przejść z papierowych dyspozycji na wersje elektroniczne. W grę wchodzą zarówno dyspozycje obsługiwane z użyciem HandHeldów (małych przenośnych komputerków porozumiewających się z serwerem poprzez sieć WLAN), jak i urządzeń przekazujących kompletującemu polecenia głosowe typu idź do miejsca ABC i wybierz towar XYZ (polecenia są syntezowane przez specjalistyczne oprogramowanie i przekazywane każdemu kompletującemu osobno). Inne działania to na przykład kontrola poprawności kompletacji. Podobnie jak w hipermarkecie przed wystawieniem faktury wszystkie książki są u nas skanowane i rzeczywista zawartość kosza jest porównywana ze spodziewaną według dyspozycji. Oczywiście wymaga to, aby wszystkie książki były oznaczone kodami paskowymi (obecnie jest to spełnione dla ponad 99% książek). Jeśli nie są, sami je kodujemy na bramie wejściowej. Od skanowania książek odchodzimy, jeśli kompletacja odbywała się z użyciem HandHeldów wyposażonych w skanery kodów kreskowych - kompletujący skanuje wtedy książki przed ich włożeniem do kosza. W takim przypadku kontrola poprawności kompletacji odbywa się w inny sposób. Jeśli towar o wartości i wadze określonej na fakturze został zapakowany w zbyt małą bądź zbyt dużą liczbę paczek, jest to podstawa do podejrzeń, że nastąpiła pomyłka. Jakkolwiek ilość błędów jest mała, to algorytm wyłapywania pomyłek bazujący na wartości, wadze i liczbie paczk wychwytuje je niemal w całości.

Poza takimi prostymi procesami, które zostały znacząco usprawnione, warto wspomnieć o inwentaryzacji, która bardzo się skróciła dzięki zastosowaniu zarówno sprzętu informatycznego jak i heurystyk, do których dochodziliśmy w ciągu kilku lat. Dzięki zastosowaniu skanerów kodów paskowych eliminujemy konieczność ręcznego wprowadzania tytułu do elektronicznego arkusza spisowego. Jednak samo skanowanie towaru, zamiast jego ręcznego wpisywania, dało nam niewielki zysk czasowy. Znacznie więcej zyskaliśmy na oszacowaniu, który towar warto liczyć podwójnie. W pierwszych dwóch inwentaryzacjach cały towar liczony był podwójnie, a przypadki niezgodności między pierwszym i drugim liczeniem były wyjaśniane przez specjalną grupę i trzecie liczenie. Wynik dwóch lub trzech liczeń był porównywany ze stanem komputerowym i ponownie przeliczane były miesca o ilościach niezgodnych z systemem. Kilka lat doświadczeń pokazało, że miejsca, gdzie liczba faktycznie zliczonego towaru jest zgodna ze stanem w systemie komputerowym nie wymagają ponownego liczenia. W związku z tym w czasie ostatniej inwentaryzacji wykonane było wyłącznie jedno liczenie i to one zostało porównane ze stanem elektronicznym. Wszystkie miejsca o ilościach zliczonych różniących się od ilości z systemu zostały ponownie przeliczone. Jeśli drugie liczenie było zgodne z pierwszym, bądź zgodne ze stanem komputerowym również uznawano je za poprawne. Wyłącznie przypadki, które po takim porównaniu charakteryzowały się trzema różnymi wartościami (a było ich znacznie poniżej jednego procenta) podlegały liczeniu przez komisję. Z przyjętych za dobre wyników wylosowaliśmy 1000 indeksów towarowych i komisja przeliczyła je celem sprawdzenia poprawności inwentaryzacji. Sam się zdziwiłem, ale z 1000 indeksów wszystkie! były poprawne. Takie podejście, wykorzystujące wcześniejsze doświadczenia pozwoliły skrócić czas trwania inwentaryzacji z 14 dni (w pierwszym roku, kiedy używaliśmy do tego celu specjalnego sprzętu) do 4 dni w ostatnim roku. Takie skrócenie inwentaryzacji przyniosło wymierne efekty w postaci obniżki kosztów.

Optymalizacja procesów

Proste wdrożenie informatyki w magazynie ma jednak skończone możliwości przyspieszania pracy i polepszania jej jakości. Dalsze obniżanie kosztów wymaga już zastosowania optymalizacji procesów zachodzących w magazynie. Podniesienie ich efektywności może być wykonane w zasadzie rozłącznie w stosunku do wprowadzania metod opisanych wcześniej. W praktyce jednak lepiej zaczynać od najprostszych rozwiązań, gdyż skutkuje to obejmowaniem przez informatykę coraz szerszych obszarów w naturalny sposób. Sposób postępowania z towarem w magazynie powinien być determinowany przez ogólne reguły biznesowe, to znaczy zapewnić jak najlepszą dostępność artykułów przechowywanych w magazynie, po jak najniższych kosztach. Pierwszym, niemal natychmiast rzucającym się w oczy problemem, który wpływa na realizację tej reguły jest zapewnienie optymalnego wypełnienia magazynu. To znaczy nie za mało, żeby nie zabrakło przed kolejną dostawą i nie za dużo, żeby niepotrzebnie nie zajmować powierzchni magazynowej. W najprostszym i modelowym rozwiązaniu odbiorca przekazuje magazynowi informację ile i jakiego rodzaju towar będzie mu potrzebny w najbliższym czasie. Niestety takie modelowe rozwiązania zdarzają się bardzo rzadko. W praktyce znacznie częściej jest tak, że musimy sami określić, co klienci końcowi będą chcieli zakupić z naszego magazynu (za pośrednictwem naszych odbiorców) w najbliższym okresie. Niestety prognozowanie wielkości sprzedaży to bardzo trudny temat i tylko bardzo dobre prognozy nieznacznie minimalizują ryzyko wielkości przyszłej sprzedaży, w porównaniu do prognozy naiwnej (czyli założenia, że jutro będzie tak samo jak dziś).

Na szczęście w magazynie można sobie poradzić bez takich zaawansowanych prognoz. Dzięki zastosowaniu numerycznych metod poszukiwania ekstremum funkcji, można oszacować najbardziej optymalną ilość przechowywanego towaru. Algorytm poszukiwania tej ilości bazuje na minimalizacji kosztów przechowywania towaru i jego braku. W ramach przechowania myślę tu o wszystkich operacjach związanych z tym procesem od przyjęcia towaru, poprzez sam fakt leżenia w magazynie, a na dostarczeniu na wyjście kończąc. W przypadku, gdy na stanie nie mamy ani jednego egzemplarza, a klienci w tym czasie chcieliby kupić N sztuk tego brakującego produktu, wtedy tracimy na braku towaru tyle, ile wyniosłaby potencjalna sprzedaż pomnożona przez zarobek na każdej niesprzedanej sztuce. Ale za to nie ponosimy żadnych kosztów magazynowania. W miarę jak na początku analizowanego okresu mielibyśmy choć trochę tego towaru na magazynie straty wynikające z nieposiadania go byłyby mniejsze, ale koszty przechowywania go (najczęściej znacznie niższe niż zarobek na sprzedaży) by rosły. W miarę jak zapasy rosną straty wynikające z nieposiadania towaru dalej spadają, a koszty magazynowania dalej rosną. W skrajnym przypadku, jeśli towaru mamy nadmiar utracone zarobki są równe zero, a koszty magazynowania duże (płacimy za powierzchnę, która mogłaby być wykorzystana do przechowania innego towaru bądź zawyżamy koszt wydobycia tego towaru z magazynu na skutek zbyt dużego zagęszczenia towarów w magazynie). Jeśli zsumujemy obie pozycje okaże się, że w miarę wzrostu zapasów sumaryczne koszty początkowo by spadały aby po osiągnięciu minimum zacząć rosnąć.

Dokładne wyliczenie zysków i strat jest oczywiście możliwe dopiero po fakcie. Natomiast szacowanie zapasów optymalnych musi być dokonane wcześniej. Najczęściej do takiego szacowania wykorzystuje się proste prognozowanie, które uwzględnia dotychczasową sprzedaż danego towaru modyfikowaną okresem życia produktu oraz ewentualną sezonowością sprzedaży. Kolejnym parametrem, który trzeba uwzględnic w tej układance jest czas oczekiwania na dostawę po zamówieniu u dostawcy, oraz koszt obsłużenia tej dostawy. Cóż bowiem z tego, że towar może zostać dostarczony od producenta w 4 godziny, jeśli za obsługę dostawy od jednego do 100 egzemplarzy płacimy tyle samo (a sprzedajemy 50 sztuk w tygodniu). Czasami warto w takich wypadkach posiadać na magazynie pewien nadmiar towaru, zwłaszcza jeśli koszty magazynowania są znacznie niższe niż koszty dostawy. Na koniec, poza optymalizacją lokalną warto pamiętać o warunkach globalnych. Cały magazyn, bez względu czy pusty czy wypełniony musi być opłacany - tak więc przy zbyt małych zapasach koszt utrzymania pojedynczego wypełnionego miejsca położenia rośnie. Jeśli jednak wypełnienie magazynu zbliża się do 100%, wtedy koszty wyciągnięcia towaru z tego magazynu rosną (coraz trudniej to zrobić). Na to nakłada się warunek brzegowy, a mianowicie pojemność całego magazynu. Może się bowiem okazać, że optymalne zapasy całego asortymenu, który chcemy lub musimy posiadać przekraczają nasze możliwości składowania (warunek ten wyjątkowo nie generuje kosztów w ramach analizy jednego obiektu, a jest tylko ograniczeniem zewnętrznym dla poszukiwanego optimum). Niestety w takim przypadku obliczenia dla poszczególnych towarów trzeba przeprowadzić ponownie, nakładając dodatkową karę za nadmierną wielkość zapasów. Jak widać ostateczna liczba parametrów w równaniu szacującym optymalne wypełnienie znacząco wzrosła. Jeśli uwzględnimy, że wiele towarów ma te parametry bardzo różne, naturalne okaże się, że nie da się oszacować optymalnych zapasów na oko czy choćby z wykorzystaniem kartki i ołówka. A więc do pracy należy zaprzęgnąć komputer z odpowiednim algorytmem poszukiwania minimum właściwie określonej funkcji.

Optymalne wypełnienie to tylko jeden z parametrów, który wpływa na wynik finansowy działania magazynu. Kolejny to koszt wydobycia towaru z magazynu i dostarczenia go do bramy wyjściowej (czasami jest to rampa, czasami taśma na której towar jest pakowany bądź montowany). Wynika on z czasu i trudności wydobycia tego towaru (na przykład z parteru można go wyciągnąć ręcznym paleciakiem, a z wyższych pięter wózkiem widłowym). Dopóki magazyn obsługuje zawsze podobne ilości towarów z całego dostępnego asortymentu, wtedy rozważania co gdzie położyć nie mają większego sensu. Jednak nie wszystkie magazyny pracują w taki sposób. Często zdarza się, że towar wyciągany jest falami (przez pewien okres popularny jest jeden asortyment, później inny). W przypdku książek występuje inna cecha implikująca duże zróżnicowanie obrotu, a mianowicie początek sprzedaży. Książka, która jest nowością sprzedaje się dużo lepiej, niż ta, która jest w sprzedaży od roku. Celowe byłoby, żeby najczęściej wyciągany z magazynu towar leżał jak najbliżej wyjścia i na piętrach dostępnych bez szczególnych utrudnień. Pozornie wydawałoby się, że dzisiejsze nowości powinny być przechowywane na najlepszych miejscach, towar który leżał tam wczoraj powinien być przesunięty trochę dalej, a towar stamtąd jeszcze dalej. Pozornie, gdyż codzienne przesuwanie całego towaru jest bardzo kosztowne.

Podobnie jak w przypadku optymalnego wypełnienia magazynu należy skonstruować model obciążenia firmy kosztami takiego procesu i znaleźć w tym modelu minimum, a następnie wdrożyć taki model w życie. Pierwszym parametrem modelu jest koszt dostarczenia towaru w zależności od miejsca położenia. W praktyce każdemu miejscu należy nadać wagę kosztową z uwzględnieniem wielkości partii zabieranej z tego miejsca. Następnie należy przeliczyć koszt przesunięcia całego towaru z jednego miejsca położenia w inne. Jeśli uwzględnimy statystyczne zależności co do wielkości zamówień danego towaru, to powstaje stosunkowo prosty model, który pokazuje jak często i jak daleko warto przesuwać towar, będący jeszcze niedawno zupełną nowością. Powinno się przy tym pamietać, że najlepszym sposobem na oszacowanie wielkości sprzedaży towaru jest przyjęcie, że sprzedaż maleje wykładniczo, bądź ma przebieg lognormalny i estymować parametry tego przebiegu ogólnie znanymi metodami. Warto jednak pamiętać, że po optymalizacji miejsca położenia towaru okaże się, że koszty magazynowania mogą się zmienić i należy ponownie zabrać się za szacowanie najefektywniejszej wielkości zapasów.

Kolejnym procesem, który wymaga optymalizacji jest przydział dyspozycji do realizacji przez osoby kompletujące zamówienia. Ten problem ma trochę inny charakter, ponieważ działanie to (inaczej, niż dwa poprzednie) musi być wykonywane na bieżąco w trakcie pracy. Standardowo kompletujący pobiera jedną dyspozycję z informacją o towarze, który ma skompletować wraz z miejscami położnia tego towaru i rusza w trasę, w celu skompletowania tej dyspozycji. Jeśli dyspozycja jest mała ilościowo i rozległa ze względu na miejsca położenia kompletujący traci bardzo dużo czasu na tak zwane puste przebiegi, czyli przemieszcza się między alejkami magazynu, bez wyboru jakiegokolwiek towaru. Generuje przy tym niepotrzebne koszty. Po analizie okazało się, że jedna osoba mogłaby realizować w jednym cyklu dwie bądź więcej dyspozycji, eliminując wędrówkę między alejkami tylko w celu dotarcia do wyznaczonego na dyspozycji miejsca. Rozpoczęcie prac nad algorytmem wspomagającym łączenie kilku dyspozycji w jedną multidyspozycję wymagało ustalenia technicznych ograniczeń sprzętu, którym dysponują kompletujący. Ograniczeniami była liczba dyspozycji, które mogą być jednocześnie realizowane (nawet, jeśli są bardzo małe) oraz szacunkowa liczba towaru, który może zostać skompletowany w jednym cyklu (przy większej liczbie dyspozycji). Oczywiście ograniczenia te są różne w zależności od sprzętu którym dysponuje osoba obsługująca dyspozycje i jest parametrem dynamicznym dla każdej optymalizacji.

Po ustaleniu ograniczeń przyszła kolej na określenie, które dyspozycje można ze sobą łączyć w celu uzyskania bardziej efektywnych przebiegów kompletacji, a przez to obniżki kosztów. Tu podstawowym celem było takie łączenie dyspozycji, aby pokrywały się one w jak największym stopniu, nie generując przy okazji konieczności dodatkowych przebiegów po magazynie. Celnym spostrzeżeniem było to, że optymalizację można przeprowadzić rekurencyjnie przerywając ją w chwili, gdy któryś z warunków zostanie przekroczony. Działanie zaczyna się więc od dobrania do bieżącej dyspozycji najlepszej (z punktu widzenia ustalonych kryteriów) i zrobienie z tej pary nowej dyspozycji. Następnie proces powtarza się traktując nową dyspozycję jako bieżącą i szuka się dla niej kolejnej najlepszej. Dzięki dobieraniu dyspozycji parami poszukiwanie największej zbieżności pomiędzy trasami jest łatwiejsze. U podstaw algorytmu leży nagradzanie za zbieżność alejek (miejsc położeń o tej samej pierwszej części koordynaty), którymi przemieszcza się osoba kompletująca jedną z dyspozycji, z alejkami w drugiej dyspozycji. Karane natomiast są przypadki, gdy trasy nie pokrywają się (jedna z dyspozycji nie ma żadnego towaru w alejce z drugiej dyspozycji). Są jednak wyjątki od tych reguł. Jeśli w jednej z alejek dyspozycja zawiera odpowiednio dużą liczbę miejsc kompletacji, wtedy brak przebiegu przez tą alejkę trasy kompletacji drugiej dyspozycji nie jest naganny. Ponadto są alejki, którymi kompletujący musi przejść, mimo tego, że nie ma żadnego towaru do wybrania z niej (gdyż wynika to z układu magazynu). Oczywiście są też wyjątki od wyjątków. Według wcześniej opisanych reguł dwie dyspozycje zawierające towar znajdujący się w dwóch różnych alejkach (każda dyspozycja to jedna alejka) mogłyby zostać sklejone, mimo tego, że alejki te są bardzo odległe i położone w przeciwnych rejonach magazynu (nie wystąpiłby żaden zysk z ich połączenia).

Ze względu na to, że łączenie musi być wykonywane kilkaset razy w ciągu dnia i system musi tą optymalizację wykonać bardzo szybko, działanie oparto o algorytmy heurysyczne. Ze wszstkich dostępnych dyspozycji wstępnie wybierane są te, które są szacunkowo najbliżej i dopiero te kilka czy kilkunaście jest analizowane dokładnie. Z testów przeprowadzonych off-line okazało się, że w ponad 95% przypadków tak dobierane dyspozycje były łączone w sposób optymalny. Pozostałe były połączone tylko nieznacznie gorzej niż optymalnie, za to w znacznie krótszym czasie. Dostrajanie algorytmu polegało na wielokrotnym łączeniu dyspozycji i ocenie tych połączeń przez osoby o największym doświadczeniu w kompletacji towaru i znajomości rozkładu magazynu. Po dostrojeniu pod nadzorem ludzi prowadzone było dalsze strojenie, które pozwoliło na dalsze podniesienie efektywności. Ostatecznie dyspozycje wybierane łącznie mają ponad 50% krótszy czas kompletacji w porównaniu z dyspozycjami wybieranymi pojedynczo. Nie muszę dodawać, że szybszy czas kompletacji wpływa na obniżenie kosztów i wymusza ponowne zoptymalizowanie zarówno procesu wyboru miejsc jak i optymalnego wypełnienia magazynu.

Podsumowanie

To co opisałem to tylko część tego, co da się zrobić z wykorzystaniem informatyki w magazynie. Sporo zależy od organizacji konkretnego magazynu, charakteru całej firmy bądź towaru przechowywanego w nim. Zapewne to co robimy w swoim magazynie dla wąskiej grupy specjalistów nie jest niczym nowym. Należy sobie jednak zdawać sprawę, że są też firmy, które nie wdrażają w magazynie żadnych narzędzi informatycznych, gdyż nie zdają sobie sprawy z potencjalnych możliwości tych narzędzi, bądź nie mają świadomości tego, że koszty wdrożenia mogą się szybko zwrócić. I to przede wszystkim dla nich jest ten artykuł. Bo możliwości informatyczne w magazynie są bardzo duże. W obecnych czasach, kiedy o przewadze konkurencyjnej może zadecydować jeden punkt procentowy marży, obniżenie (bądź nie) o kilka procent kosztów funkcjonowania magazynu może stanowić milowy krok do powodzenia bądź bankructwa firmy. Zapewne niektórzy czytający ten tekst mogą czuć niedosyt, że większość spraw została poruszona wyłącznie pobieżnie. Działo się tak z kilku powodów. Po pierwsze mimo takiego powierzchownego poruszania tematu artykuł i tak rozrósł się bardzo mocno. Po drugie, niektóre rozwiązania, których tu nie opisałem dokładnie, stanowią tajemnicę firmy w której zostały zaimplementowane i w związku z tym nie mogę publikować szczegółów ich wdrożenia. Kolejny powód to fakt, że algorytmy optymalizacyjne muszą być dopasowane do konkretnego magazynu - często nie da się ich przenieść w prosty sposób z innej firmy.

Obszerność tekstu pokazuje przy tym, że wyciśnięcie choćby drobnej poprawy procesu wymaga intensywnej pracy. Czasami pracownicy operacyjni nie są w stanie zauważyć miejsca w którym należy zrobić zmiany w procesach, gdyż zbyt wiele uwagi poświęcają temu, by te procesy działały zgodnie z ich definicją. Czasami brakuje im po prostu globalnego spojrzenia lub doświadczeń w innych magazynach. Znalezienie poszczególnych przypadków nieoptymalnej pracy wynika z porówniania pracy w kilku różnych magazynach - dopiero to porównanie pozwala stwierdzić, że można to zrobić lepiej. Mam nadzieję, że ten tekst pomoże czytelnikom zauważyć że ich magazyn to co prawda bardzo skomplikowany organizm, ale można go jeszcze dostroić i poprawić jego wydajność.