SZAKDOLGOZAT
Kovács István
SZAKDOLGOZAT FIFO elvű raktárnyilvántartó mintarendszer adat és logikai moduljainak megvalósítása adatbázis háttérrel
Készítette: Kovács István Gazdaságinformatikus
Témavezető: Dr. Kovács László egyetemi docens Konzulens: Lengyelné Szilágyi Szilvia egyetemi docens
Miskolci Egyetem 2012
Tartalomjegyzék
1. Bevezetés .................................................................................................... 4 2. Raktározási folyamat ................................................................................ 5 2.1 Darabáru-raktározási rendszerek .......................................... 6 2.1.1 Tárolási rendszerek .............................................................. 9 2.1.1.1 Állványok nélküli statikus tárolási rendszerek ............ 9 2.1.1.2 Állványos, statikus tárolási rendszerek ....................... 10 2.1.1.3 Állványos, dinamikus tárolási rendszerek .................. 11 2.2 Magasraktározási rendszerek ............................................... 12 2.3 Raktározási elvek ................................................................... 13 3. Matematikai modell................................................................................ 16 4. Mintarendszer kidolgozása .................................................................... 25 4.1 Szoftverfejlesztés lépései ........................................................ 26 4.2 Felhasznált stratégiák ............................................................ 26 4.3 Algoritmusok .......................................................................... 27 4.4 Tárolás ..................................................................................... 27 4.5 Elvárt működés ....................................................................... 28 4.6 Komponens diagram .............................................................. 28 4.7 Osztálydiagram....................................................................... 30 4.8 Osztályok és kapcsolataik ...................................................... 31 4.9 Osztályok és metódusaik ........................................................ 36 4.10 Aktivitás diagram ................................................................. 40 4.11 Szekvencia Diagram ............................................................. 41 4.12 Adatbázis Séma .................................................................... 41 4.13 SQL utasítások ...................................................................... 42 4.14 Implementáció ...................................................................... 42 2
4.14 Eredmények .......................................................................... 42 5. Összefoglalás ........................................................................................... 45 6. Summary ................................................................................................. 46 Irodalomjegyzék ........................................................................................... 49 Köszönetnyilvánítás ...................................................................................... 50
3
1. Bevezetés Dolgozatom a raktározáshoz kapcsolódik, amely a logisztika legfontosabb felelősségi köre. A logisztika definíciójának számos megközelítési módja és meghatározása létezik, azonban mi most azt az egyet nézzük, ami a későbbi témáinkhoz a legszorosabban kapcsolódik ez pedig a következő: „a logisztika a termékek és a szolgáltatások rendszereken belüli és rendszerek közötti áramlásának optimális kialakítására, valamint eredményes lebonyolítására szolgáló tudományterület.” [1] A definíció, utalást enged a raktározásra, mint folyamatra azonban ezzel csak később fogunk megismerkedni mivel csak a definíció önmagában nem ad elég ismeret nekünk ahhoz, hogy a raktározás belső folyamatait, rendszerét, valamint elveit kellőképpen megértsük, ezért egy kicsit jobban elmerülünk a logisztikában, mint tudományágban. Napjainkra szinte mindegyik vállalat felismerte, hogy megfelelő logisztikai rendszer nélkül nem tud nagy sikereket elérni a piacon ezért lépéseket tettek ennek érdekében. A fejlesztések eredményeként a logisztika egy olyan dinamikusabban fejlődő tudományággá vált, amely a szakma eddigi legaktuálisabb ismereteit szintetizálja, azokat saját céljai érdekében egy sajátságos rendszerbe rendezi és e tudományok és szakmák már meglévő eljárásait, módszereit alkalmazza folyamatai optimalizálására. Mivel eltérőek az igények és a kapacitások az ellátási láncban ezért a kapcsolódási helyeken általában bizonyos mennyiségű készlet-felhalmozódás történik, ezért célszerű a megfelelő raktározás kialakítása, amely a logisztikai rendszerek egyik nagyon fontos része. Kiemelt a szerepe a termékek minőségi és mennyiségi megőrzésért felelős alrendszer működésének, ami maga a tevékenység helyszíne, vagyis a raktár valamint annak kialakítása és működése. Ezért döntő fontosságú a tervezés során a megfelelő struktúra kialakítása a minél optimálisabb raktározási rendszerhez. A raktározás során figyelembe kell venni a megvalósítandó funkciókat, a tárolandó áru tulajdonságait, a forgalmi adatokat, az anyagmozgatási rendszert, a szállítási módokhoz való csatlakozási lehetőségeket, valamint nem utolsó sorban a beruházási és működési költségeket. 4
Az alapokat megismerve elegendő ismerettel rendelkezünk ahhoz, hogy a későbbieket gond nélkül megértsük. Érdemes tudni azonban azt is, hogy maga a logisztika egy nagyon széles körű tudományág, amely dinamikusan fejlődik, vagyis ami most aktuális egy kicsit később már lehet, hogy nem lesz az. A cél, hogy elegendő ismerettel rendelkezünk ahhoz, hogy folytathassuk a megismerését a raktározás lenyűgözően precízen kitalált és működő folyamataival 2. Raktározási folyamat A raktározás elég sajátos szerepet tölt be a kitermeléstől a fogyasztásig, terjedő komplex folyamatrendszerben. A raktározási rendszerek árukészletet gyűjtenek, majd továbbadják az anyagáramlás intenzitás változásának kiegyenlítése céljából. A raktárak olyan létesítmények, melyek megőrzik az áruk minőségét és mennyiségét minimális veszteséggel. Ugyanis számításba kell vegyük azt a minőségromlást is, amely a tárolás során keletkezik az adott árucikkben. Ilyen veszteség lehet például a korrodálódás, lehorzsolás. A raktár befogadóképessége valamint a raktározási rendszer teljesítőképessége befolyásolja a szükség szerinti ki- és betárolás intenzitását. A raktárakat tehát nem, mint épületeket, hanem mint komplex létesítményeket kell megvizsgálni. A raktárak
rendelkeznek
saját kapcsolatrendszerrel
és belső
folyamatokkal. A raktárakat alábbiak szerint csoportosíthatjuk: [2] -
Gazdasági ágazatok alapján: ipari, mezőgazdasági, kereskedelmi és közlekedési.
-
A termelési folyamatban betöltött szerepük szerint lehetnek: alapanyag, segédanyag, félkész termék és
5
késztermék raktárak. -
A térbeli elosztási folyamatban betöltött szerepük szerint lehetnek: fogyasztásicikk-kereskedelmi, termelőeszköz-kereskedelmi, felvásárló, melléktermék- és hulladékgyűjtő kereskedelmi, közlekedési, szállítmányozói, központi és regionális ellátó-, elosztó raktárak.
Ezen információk tudatában lehetőség nyílik egy kicsit mélyebbről is megvizsgálni a belső folyamatokat, vagyis a raktározási vagy tárolási rendszereket, amelyek a különböző típusú raktáraknak köszönhetően több különböző fajtájuk is létezik. Legelőször is két nagy nagyobb csoportra osztjuk a raktározási rendszereket, amelyeket egyenként részletesen is megvizsgálunk, mégpedig vannak darabáruraktározási rendszerek és magasraktározási rendszerek. 2.1 Darabáru-raktározási rendszerek A darabáru-raktárakban tárolandó termékek két csoportba oszthatók: [2] -
egyedi darabárukra,
-
egységrakományba foglalt darabárukra
1. ábra Darabáru-raktározás[3] Azok a darabáruk, amelyek az egyedi darabáruk csoportjába sorolhatók be általában vagy kis mérettel rendelkeznek (azaz, 20 és 50kg közötti tömegű termékek) vagy pedig nagyméretűek (vagyis 500 és 2000kg közötti tömegű,
6
egyedileg kezelhető tárolási egységek). Az egységrakományok olyan képzett mozgatási – tárolási egységek, amelyek egyedi darabárukból, csomagolt ömlesztett anyagokból
állnak.
Ezeket
az
egységrakományokat
segédeszközközök
felhasználásával (rakodólapok, tárolóládák, árualátétek ) vagy másfajta módon például zsugorfóliába csomagolással vagy akár ezen dolgok ötvözésével is tárolhatjuk. Ötvözés például a darabárukat egy élelmiszerraktárban ahol rakodólapot és fóliát egyaránt alkalmaznak ugyanazon cikkek tárolására. A cél, hogy a tárolást ezek a segédeszközök illetve módok lényegesen könnyedebbé tegyék. A tárolandó áru a raktárba történő érkezéskor érkezhet úgy, hogy már egységrakománynak van képezve az előbb említett módok valamelyikével vagy érkezhet olyan módon, hogy abból a raktárnak kell egységrakományt képezni. Az egységrakományokat
tároló
raktáraknak
feladatuk
szerint
két
fő
típusa
különböztethető meg: [2] -
teljes egységrakományokat tároló raktárak ahol csak megbontatlan csomagolásban tárolják a hozzájuk beérkezett terméket és így is adják tovább,
-
komissiózó raktárak ahol a kiszállítási egység és a tárolási egység eltérő lehet, ha a raktárban tárolási egység mennyisége nem egyezik meg a raktárból igényelt mennyiséggel
A komissiózó raktárak azt eredményezik, hogy a kiszállítási egységek inhomogén egységrakományok is lehetnek, melyet egyedi áruk vagy különböző árufajta összerakása révén keletkeznek. Ezek a raktárak oly módon is kialakíthatóak, hogy a megbontatlan egységrakományokat külön egy tartalék vagy háttérraktárba tárolják és innen töltik fel az élő raktárrészt, ahol a komissiózást végzik. Az árukészlet tárolt formájának összetétele alapján megkülönböztethetünk monostruktúrájú vagy polistruktúrájú raktárakat. Monostruktúráról beszélünk, ha a tárolandó egységek száma kicsi azonban az egy árucikkből történő tárolás során tárolandó egységek száma viszont nagy. Polistruktúráról beszélünk viszont akkor, ha az ellenkezője valósul meg, ugyanis ezeknél a fajta raktáraknál a tárolandó egységek száma nagy
7
és az egy árucikkből tárolandó tárolási egységek száma kicsi. Az egyes darabáruraktározási rendszerek változatai abban térnek el egymástól, hogy a tárolási egységek jellege, az alkalmazott tárolási rendszer és az anyagmozgató rendszer különböző. A tárolási egységek paraméterei a tárolási és anyagmozgató rendszer megválasztása szempontjából határozhatóak meg. Ilyen paraméter lehet többek között a tömeg, térfogat, összetétel és a jelleg. Darabáru-raktározási rendszerek főbb változatai:
2. ábra Tárolás-technikai változatok[4] Ezek közül viszont mi a 3 legfontosabbat nézzük meg részletesebben: állvány nélküli statikus állványos statikus állványos dinamikus 8
A raktárakban tárolandó áruk ki- és betárazására felhasználható anyagmozgató rendszerek az alábbiak lehetnek: [2] -
kézi, valamint kézi eszközös, amelyet olyan raktárakban használnak ahol a tárolandó
egységek
még
kézi
erő
segítségével
biztonságosan
megmozdíthatók és rövidtávon szállíthatók. -
targoncás lehet az anyagmozgató rendszer, ahol a tárolási egységek már nem mozdíthatóak meg kézi erővel biztonságosan, viszont a különböző fajta targoncák ellenére ezt a fajta anyagmozgató rendszert sem lehet mindenhol használni annak ellenére, hogy manapság ez a legelterjedtebb rendszer
-
darus olyan helyeken használnák ahol a megmozdítandó árucikk egy targonca számára lehetetlen a biztonságos mozgatása az alakja, formája, vagy nagy tömege miatt, az ilyen helyeken darukat használnak a biztonságos mozgathatóság érdekében.
-
állványkiszolgáló gépes és
-
egyéb (pl. robotos, átadó kocsis)
2.1.1 Tárolási rendszerek 2.1.1.1 Állványok nélküli statikus tárolási rendszerek Állványok nélküli tárolásról akkor beszélhetünk, ha az egyes árufajtákból való tárolandó mennyiség nagy, illetve ha nem követelmény a hozzáférhetőség minden áruegységhez tetszőleges időközönként, továbbá előfeltétel az áru egymásra rakodási lehetősége. Alapesetei: -
közvetlen halmozás
-
sík rakodólapos tárolás
-
oldalfalas rakodólapos tárolás
Az állványok nélküli tárolás előnyei: [2] -
elmarad a tároló berendezések (állványok) létesítésének jelentős költsége;
-
rendszerint jobb a terület- és térkihasználás;
9
-
a raktár könnyen és gyorsan átállítható újabb árufajták tárolására.
Hátrányai: [2] -
a tárolási egységekhez nem lehet közvetlenül hozzáférni;
-
a tárolási magasságot az áru tulajdonságai és biztonsági előírások korlátozzák;
-
a fifo-elv csak szakaszosan vagy gyakori belső átcsoportosításokkal valósítható meg.
2.1.1.2 Állványos, statikus tárolási rendszerek Az állványos tárolás lehetősége akkor merül fel, ha az áru vagy annak csomagolása nem rendelkezik kellő szilárdsággal a halmozáshoz, illetve ha a belőlük képzett halmaz instabil, életveszélyes. Az állványos tárolás egyik előnye, hogy az egyes árufajtákhoz és árucikkekhez tetszőleges időközönként hozzáférhetünk. Megkülönböztetünk: [2] -
polcos állványos tárolást;
-
tárolóládás állványos tárolást;
-
rekeszes állványos tárolást;
-
át- illetve bejárható állványos tárolást;
-
különleges állványos tárolást.
„A polcos állványos tárolás kis forgalmú és nagy áruválasztékú raktárak (pl. szerszámraktárak, szertárak, kisebb áruházak raktárai), általában polistruktúrájú árukészlet esetében alkalmazható megoldás. A tárolóládás állványos tárolás általában kis térfogatú árukat (apró cikkeket) nagy választékban tároló, polistruktúrájú készlettel rendelkező raktárakban (pl. gyógyszerraktárak komissiózó raktérrészei) valósítható meg. A rekeszes állványos tárolás olyan raktárakban alkalmazható, ahol követelmény a minden egységrakományhoz való közvetlen hozzáférés. Ezt a tárolási rendszert kell alkalmazni olyan áruk +esetén is, amelyeknél az árujellemzők vagy a csomagolás szilárdsága a 10
rakományok egymásra helyezését nem teszi lehetővé. Az át- vagy bejárható állványos
tárolás
olyan
raktárakban
alkalmazható,
ahol
a
tárolt
egységrakományok száma többszöröse az árufajták számának, homogén egységrakományokat kell tárolni, illetve nem kell az egységrakományokat megbontani, vagyis nincs szükség arra, hogy minden egyes rakományhoz közvetlenül hozzá lehessen férni.”[2] 2.1.1.3 Állványos, dinamikus tárolási rendszerek Az állványos dinamikus tárolást arról lehet felismerni, hogy az egyik fő jellemzője, hogy az áru be- illetve kitárolását követően az állványon levő áru egy része vagy egésze is változtatja helyzetét. Főbb változataik: [2] -
az utántöltős állványos tárolás;
-
a gördíthető állványos tárolás;
-
a körforgóállványos tárolás.
„Az utántöltős állványos tárolás az átjárható állványos tárolás továbbfejlesztett változata. A tárolási egységek alátámasztó hossztartók lejtős kialakításúak: a tároló csatornákban a tárolási egységek a nehézségi erő segítségével a betárolási oldal felől a kitárolási oldal felé haladnak. Körforgó állványos tárolás esetében egymással összekapcsolt tálcák, polcok vagy egyéb tartóelemek mozognak függőleges („páternoszter”-rendszer) vagy vízszintes („karusszel”-rendszer) irányba. A működtetéskor valamennyi egység megindul a pályán, és mindaddig mozgásban marad, amíg a kívánt tárolási egységet tartalmazó állványrekesz az átadóhelyre nem érkezik.”[2] 2.2 Magasraktározási rendszerek
11
Akkor beszélünk magasraktározási rendszerről, ha a darabáruk tárolása oly módon történik, hogy az meghaladja az átlagos emelőtargoncák által elérhető maximális tárolási magasságot. Ekkor az áruk állványokba való helyezését és azok levételét felrakógépek vagy felrakótargoncák végzik az állványok közötti folyosókon.
3. ábra Magas raktározás[5] A magasraktározási rendszerek azért terjedtek el, mert a legtöbb esetben a talajszinten való területkihasználtság korlátolt, ezért a talajtól való elmozdulás a cél a levegőben. A tér minél jobb kihasználása a raktár technika fejlődése alapozta meg oly módon, hogy olyan konstrukciók valósultak meg gépek, illetve állványok formájában melyek lehetővé tették a termelési folyamatok automatizálását, valamint ezzel magát a magasraktározást. A tárolótéren a raktár fő feladata valósul meg a tárolás, az állványok és a felrakógépek vagy felrakótargoncák segítségével. Az árugyűjtő és –elosztó tér, melyet röviden előkészítőtérnek is nevezhetünk, a tárolást megelőző és a tárolást követő műveletek elvégzési helye. Tárolást megelőző műveletek például a beszállító járművek lerakása, egységrakomány képzés, rakomány ellenőrzése és azok nyilvántartásba vétele. Tárolást követő műveletet pedig lehetnek rendelés összeállítás, csomagolás és az elszállító járművek felpakolása. A magasraktárak aszerint, hogy milyen feladatot látnak el különböző lehet a felszereltségük, illetve a műszaki megoldásaik. A raktár rendeltetése alapján megkülönböztethető: [2] -
teljes egységrakományok tárolására alkalmas,
12
-
komissiózó és
-
kombinált
magasraktár. A komissiózó raktár különböző árufajtákból való egy kiszállítási egység képzését teszi lehetővé. Két alaptípusa különböztethető meg aszerint, hogy hol végzik a komissiózást: [2] -
komissiózás a tárolótérben, az állványon levő egységrakományokból,
-
komissiózás a komissiózótérben.
A komissiózótér a magasraktár azon része, ahol a komissiózást végzik. A komissiózás folyamata a következő: a tárolótérből teljes egységrakományt vesznek ki majd azt a komissiózótérbe szállítják és az ott előre kijelölt helyre rakják le. Az egységrakományon elvégzik a komissiózást, majd visszaviszik a tárolótérbe a maradék rakományt. Kombinált magasraktárról akkor beszélünk, ha a tároló- és a komissiózó tér egy egységet alkot. A tárolótér két részre osztható kombinált raktárak esetén: egy része a tartalékraktár, másik része pedig az élőraktár. Az élő raktárrészt a tartalékraktárból töltik fel felrakógépek segítségével a beérkező egységrakományokkal. Ezzel azt elérve, hogy árugyüjtést csak az élő raktárrészben kell végezni. A különböző raktározási rendszerek megismerése után a következő lépés, hogy megismerkedjünk azzal az elméleti háttérrel, ami a raktározás mögött „megbújva” összefogja az egészet egy egységes és rendszerezett folyamattá, ezek pedig maguk a raktározási elvek. 2.3 Raktározási elvek A raktározási elveknek alapvetően több fajtája is létezik aszerint, hogy milyen típusú maga a raktár.[6] Legelőször megnézzük őket általánosságban, hogy milyenek léteznek majd végül a számunkra fontosabbakat részletesebben is kifejtjük, ilyen például a FIFO-elv és még áttekintjük LIFO-elvet, ami azért lehet érdekes a számunkra mert vannak olyan helyzetek amikor sérülhet a FIFO elv de erről majd később is szó esik.
13
-
FEFO elv: (First Expired First Out) Ez az elv az árucikkek lejárati idején alapul méghozzá olyan módon működik, hogy az a termék kerül ki legelőször a raktárból, amelynek a leghamarabb jár le a szavatossági ideje. Ez az elv egy élelmiszer raktárban igen fontos a megfelelő minőség tartásához.
-
LOFO elv: (Low First Out) az elv az árucikk az értékétől függően kerül kiszolgálásra, vagyis ennél az elvél, az az árucikk kerül ki a legelsőként a raktárból, amelyet a legalacsonyabb áron szereztek be.
-
HIFO elv: (High First Out) a LOFO elvnek az ellentéte, vagyis itt az az árucikk kerül legelőször kiszolgálásra a raktárból, amelyet a legmagasabb áron szereztek be.
-
Távolság szerinti elv: A stratégia lényege hogy a távolságot veszi alapul és nem a sorrendet a kiszolgálás során, vagyis az az árucikk kerül először kiszolgálásra a raktárból, amely a távolságot mérve a legközelebb esik. Ez nagyban felgyorsítja a munkát, ha egy betárazás után nem kell nagy távolságokat megtenni egy kiszolgáláshoz, hanem a hozzánk legközelebb esőt tárazzuk ki. Viszont ezt a fajta stratégiát csak olyan raktárakban lehet érvényesíteni ahol az árucikkek minőségromlása minimális hosszúidő elteltével.
-
FIFO-elv: (First In First Out) Alapvetően a definíció a raktározási folyamatra tér ki mégpedig olyan módon, hogy az áru folyamatos cserélődési lehetőségének biztosítására való elv. Röviden a definíció: az először raktárba került áru kerül ki először. Azonban nekünk most alapvető célunk az is, hogy betekintést adjunk az SAP rendszer fifo elvű moduljába ezért ezt az elvet nekünk most más szemszögből is meg kell vizsgálni, mégpedig úgy ahogy az az SAP rendszerben működik. Az egyszerűbb megértés érdekében egyszerűbb, ha egy példán keresztül nézzük meg a működést. Vegyünk, egy gyárat ahol vannak gyártósorok illetve egy raktár, ami kiszolgálja a gyártósorokat. A fifo elv az SAP rendszeren keresztül olyan módon érvényesül, hogy a gyártósorról számítógépen keresztül 14
bevisznek egy alkatrészigényt a rendszerbe, amit a rendszer a raktárba továbbít. Egy átlagos eléggé nagy gyárban ez azt jelenti, hogy egyszerre több gyártósorról érkeznek a raktárba alkatrész igények. Ekkor érvényesül a fifo elv, ugyanis a raktárba beérkező alkatrész igényeket olyan formában szolgálják ki, hogy amelyik érkezett be elsőként azt szolgálják ki elsőként. Azonban mivel ez a rendszer is az ember bevonásával működik, ez sem egy tökéletes rendszer olykor-olykor ugyanis sérülhet a fifo elv. Tegyük fel, hogy a raktárba érkeznek be a különböző alkatrészigények szokásos módon, azonban az egyik gyártósorról későn érkezik be az alkatrészigény és mire sorra kerülne a fifo elv betartásával addigra már az a sor állna, ami elég nagy kiesést okozhat egy cégnél, még ha ezek csak percek is. Ezért ilyenkor annak érdekébe, hogy a termelékenység ne essen le, sérül a fifo elv és azt a sort szolgálják ki a raktárból legelőször, amelyik éppen nagyon közel van, ahhoz leálljon anyaghiány miatt.
-
LIFO-elv: (Last In First Out) Ahogyan a FIFO elv definíciójából is következtetni lehet a LIFO-elv éppen az ellenkezője a FIFO-nak ugyanis itt arról van szó, hogy ami utoljára kerül, be a raktárba az kerül ki elsőnek onnan. Ezt olyan raktáraknál használják, ahol állványos soros tárolás működik, kiváló módszer mivel lényegesen lassíthatná a ki-tárazást, ha az egy állványos rendszernél be kellene nyúlkálni mindig a végére hogy az, kerüljön ki elsőként, ami be is. Azonban ahogy azt az előbbi elvnél tettük a LIFO-elvet is meg kellene vizsgálni az SAP rendszer szempontjából azonban ezt az elvet hivatalosan nem használják az SAP rendszereknél mivel jelentős időveszteséget okozna, de ahogy azt fentebb is említettem olykor-olykor sérülhet a fifo elv emberi hiba folytán e-miatt ilyenkor egy nagyon rövid időre életbe léphet egy LIFO- vagy LIFO szerű elv.
15
3. Matematikai modell Mielőtt még elkezdenénk komolyabban foglalkozni a matematikai modellel először annak bevezetéséül megnézzük a vállalati irányítási szinteket azonban egy kicsit másrészről megközelítve azt. Megpróbáljuk nem a logisztika oldaláról megközelíteni, hanem a matematikai oldalról, hogy az egyes raktárak hogy mi alapján hozhatják azokat a hosszú illetve rövidtávú célkitűzéseket a vállalat illetve esetünkben most a raktár számára. A logisztikában 3 fajta vállalati irányítási szintről beszélhetünk: stratégiai, taktikai és operatív. A mi szemszögünkből most a stratégiai és az operatív a legfontosabb. A taktikai szint jelen esetünkben azért nem fontos annyira, mert a stratégiai szinten kidolgozottakat tervezi meg és irányítja.
-
Stratégiai szint: A hosszú távú logisztikai célkitűzéseket határozza meg az egész vállalat és részlegei számára. A szinthez kapcsolódó feladat a stratégia választás, a rendszerek tervezés-fejlesztés irányítása, a kapcsolódó kontrolling megszervezése és
irányítása,
a
logisztikai
szervezet
kialakítása,
az
üzemi
telephely
megválasztással kapcsolatos döntések meghozatala. A mi esetünkben tulajdonképpen egy vállalati részleget vizsgálunk meg, ami nem más, mint a raktár. A matematikai oldalról azt kell megvizsgálnunk, hogy egy raktárnak hogyan határozhatunk meg hosszú távú célokat úgy, hogy nem a vállalati irányítási elveket hívjuk segítségül. A stratégiai elv kiválasztásánál figyelembe kell vennünk a raktár típusát. A típus alapján leszűkítjük az elvek számát, majd ezek után elméleti matematikai összefüggések segítségével a különböző tényezők között meghatározzunk a mérhető költséget a raktárra nézve és ez alapján a leggazdaságosabb raktározási elvet fogjuk kiválasztani. Vegyük példának okáért most a FIFO elvet, mint ahogy azt már a definícióba is tárgyaltuk a FIFO elv az elsőnek beérkezőt viszi ki legelsőnek. Tehát a különböző tényezők megvizsgálása után, mint
16
például a befektetett energia vagy teljesítmény stb. az elméletben felállított matematikai modell azt az eredményt hozta, hogy a FIFO elv a leggazdaságosabb stratégia a raktár számára. Tehát matematikai alapokra alapozva minden egyes tényező meghatározható mivel mérhető költség és a konkrét raktárfajta és annak berendezése szerint már meghatározható, az az elv, amely a leggazdaságosabb lesz. Mivel a fent említettek alapján a taktikai szint kevésbé fontos ezért át is térnénk rögtön az operatív szintre, ami a matematikai modellt már gyakorlati szintre viszi, hiszen itt már az ellenőrzése folyik a stratégiai szintnek és ez későbbiekben nagy jelentőségű lesz. -
Operatív szint: Feladata a logisztikai folyamatok végrehajtásának irányítása, ellenőrzése a tőle feljebb lévő területen, mint a stratégiai szint.
Ezen a szinten valósul meg az eddig elméleti szinten kidolgozott matematikai modellek gyakorlatba helyezése, vagyis maga a kiszolgálás. Az egyes tényezőket, amit később részletesen is ismertetni fogok, ezen a szinten kapnak tényleges kézzel fogható értéket. Ilyen például a kiszolgálás során eltelt idő, amelyet a stratégiai szinten csak elméletileg tudtunk összefüggéseket felállítani az idővel kapcsolatban most azonban már azt is láthatjuk, hogy a kiszolgálás során eltelt idő tényleg a minimális-e vagyis hogy tényleg költséghatékony-e az elméletben meghatározottak. A különböző irányítási szintek után megnézzük konkrétabban a matematikai modellt a kiszolgálásra nézve előbb azonban csak elméleti szinten, hogy mégis milyen tényezők merülhetnek fel és azok az egyes raktártípusokban hogyan térhetnek el egymástól. Célunk a raktározás költség modelljének felállítása ezért legelőször is egy példán keresztül közelítjük meg a problémát, amely nem más, mint a polcos állványos statikus raktár: Az indikátorokat 3 fő csoportba soroljuk: vannak a tárolási struktúra, a működési indikátorok és a gazdasági indikátorok. - Tárolási struktúra:
17
- Pozíció(P): A pozíció 3 elemű vektor, amely tartalmazza a magasságot (H), távolságot(D) és a mélységet (De). P= (D, H, De) - Méret(S): A méret szintén egy 3 elemű vektor, amely az x,y és z koordinátákat tartalmazza, ahol x a szélesség, y a magasság és z a mélység. S= (x, y, z) - Súly(We): A súly, mint skalár szerepel, amely a megmozdítandó árucikket jelzi. - Működés: A statikus indikátorok függvényében lehet vizsgálni a működési indikátorokat. - Idő(t): Az idő egy a kiszolgálás időtartamát megadó skalár. - Munka(W): A munka egy szorzat amely nem más mint az idő és a befektetett teljesítmény szorzata. Jelen esetben teljesítménynek vehetjük a pozíció, méret és súly által alkotott szorzat ugyanis a pozíció magában foglalja a távolságot, magasságot és mélységet, amit meg kell tennünk ahhoz, hogy eljussunk az árucikkig. A méret a x,y és z koordinátákkal tartalmazza, hogy mekkora méretű árucikket kell kiszolgáljunk. Végül pedig a súly, amely tudatában tudjuk, milyen segédeszközzel lehet az adott árucikket kiszolgálni. W= P*t, ahol P=E/t E pedig a befektetett energia amely magába foglalja a termékhez való eljutást és annak kiemelését. - Gazdasági indikátorok: A gazdasági indikátorok a működés függvényében határozhatók meg.
18
- Kihasználás: A raktár kihasználtságát grafikonnal lehet szemléltetni, amely egy raktár teljesítményének ingadozását mutatja az idő változásával
szemben. Miután példán keresztül megismerkedtünk az egyes tényezőkkel a matematika gyakorlati oldaláról most vizsgáljuk meg ezek közül a fontosabb tényezőket részletesebben elméleti szemszögből, hogy mit értünk az egyes tényezők alatt majd pedig, hogy milyen elvárások lehetnek ezekkel kapcsolatban az egyes raktártípusokra tekintve: -
Idő(T): mint költségfajta jelenik meg, ugyanis sokat számít, hogy egy adott árut mennyi idő alatt tudunk betárazni vagy éppen kitárazni, ha arra van szükség
-
Távolság(D): az a távolság, amely a jelenlegi helyzetünktől egészen az árucikkig vezet
-
Magasság(H): az állványzat aljától számított az árucikkig terjedő függőlegesen mérhető távolság.
-
Mélység(De): egy adott tárhelyen az elejétől az árucikkig mért távolság.
19
-
Pozíció(P): (távolság, magasság,mélység) a távolság, mélység és a magasság hármasa által meghatározott pont a térben, amely az árucikk pozícióját adja meg.
-
Súly(We): az a súly, ami egy egységnyi tárhelyre eső árucikket érint nem feltétlenül darabra nézve, ha egy tároló rekeszben mondjuk, több ezer csavar van.
-
Méret(S): az árucikket befogadó segédeszköz, mint például tároló rekesz mérete, vagy ha elég nagy az önálló tároláshoz, akkor maga az árucikk mérete, de legtöbbször ezeket is dobozban tárolják, tehát annak a méreteit vesszük alapul ilyen esetekben.
-
Munka(W): a kiszolgálásba befektetett az a munka, ami ahhoz kell, hogy eljussunk a tárhelyig kiemeljük az árucikket és kiszolgáljuk.
-
Árucikk(Go): egy adott tárhelyen található valamilyen típusú, árú, méretű, valamint tömegű termék. Az elméleti áttekintés után megnézzük az elvárásokat az egyes raktártípusokra nézve. Darabáru raktározás matematikai modellje -
Állvány nélküli statikus matematikai modell: általában ezek a fajta, tárolási rendszerek minimális fajtájú árucikket tárolnak, ami átlagban 2-3 féle. Ilyen lehet egy raklapokat tároló raktár. A kiszolgálási időt megnézve azt mondhatjuk, hogy mivel minimális az árucikkek fajtája ezért a kiszolgálási időt ez nagyban megrövidíti egy sok árucikket tároló raktárhoz képest. Azonban figyelembe kell vennünk azt is, hogy pont az állvány hiánya miatt néha olyan halmokat képeznek, ami nem férhető hozzá biztonságosan és ez többszörösére is növelheti a kiszolgálási időt. A távolságot az esetek nagy részében minimálisnak tekinthetjük, hiszen az egész raktárterületen minimális az árucikkek fajtája ezért rövid távolságon belül elérhetővé válnak. 20
A mélység az állvány nélküliségnél tulajdonképpen mindig ugyanaz ugyanis nincsenek polcok emiatt egy oszlopban vannak a termékek felsorolva tehát a magasság ami változik. A magasság egy olyan tényező, amit két szemszögből is érdemes megvizsgálni: ha összehasonlítjuk egy magas raktárhoz, akkor azt a következtetést vonhatjuk le, hogy a magasság minimális mivel egymásra halmozásnál a biztonság megőrzése is fő cél. Azonban ha azt nézzük, hogy a halmozás miatt nincsenek sorok, vagyis mindig a legfelső terméket kell levenni egy adott oszlopból akkor viszont maximálisnak tekinthetjük és költség szempontjából költségesnek a kiszolgálást erre a tényezőre, nézve mert ez hatással van a befektetett munkára. A pozíció a távolság, mélység és a magasság tudatának függvényében már egyszerűen meghatározható főleg, hogy a mélységet gyakorlatilag egy adott oszlopnál mindig fixnek tekinthetjük. A súly az egy halomba rakodott áruknál gyakran megegyezik vagy alig tér el egymástól, de minden esetben az árucikktől függ.
A méret is egy olyan tényező, ami az árucikktől függ minden esetben, annyit azonban el lehet mondani, hogy a biztonság megőrzése végett az egymásra halmozandó árucikkek mérete majdnem mindig ugyanolyan, ami nagy részben megkönnyíti a kiszolgálást.
A befektetett munkát, ha megnézzük egy állvány nélküli statikus raktárban, ami átlagos, vagyis kevés az árucikk és biztonságosan vannak halmozva a termékek, akkor azt állapíthatjuk meg hogy a befektetett munka alacsonyabb tud lenni más raktárakéhoz képest még ha a magasságot mindig maximálisnak vesszük akkor is.
21
-
Állványos statikus matematikai modell: ezeknél a raktáraknál már rengeteg fajta terméket tárolnak állványokon, amelyek sorokra vannak osztva és egy soron belül rengeteg tároló egység A kiszolgálási időt megnézve azt mondhatjuk, hogy mivel sok a sor és rengeteg a tároló helység ezért lassabbnak számít az állvány nélkülihez képest azonban sokkal rendezettebb és nagyobb méretben működik. A távolságot mindig attól függ, hogy az adott termék éppen melyik soron és melyik tároló helységben található A magasság az állványzat miatt már nagyobb úgy hogy közben a biztonságot is megőrzik, de nagyrészt attól függ, hogy az adott termék hányadik úgynevezett „emeleten” van. Ebben az esetben már megjelennek a különböző mélységek is az állványos rendszer használata miatt. Mivel maguk a sorok az állvány rendszer miatt fixek ezért azt mondatjuk el, hogy a mélység egy bizonyos korlát közé esik, amit az állványzat határoz meg. A pozíció a távolság, mélység és a magasság tudatának függvényében már egyszerűen meghatározható annyi különbséggel az előzőhöz képest, hogy itt már valamivel nehezebb behatárolni a pozíciót a mélység eltérése miatt. A súlyt állványos rendszernél általában nem darabra nézik, hanem egy segédeszközre, mint például a raklap mennyi árucikk van elhelyezve és annak a súlyát mérjük egybe.
A méret nagyon árucikk függő és mivel egy raklapra akár több fajtát
is
rakhatnak
állványos
raktározásnál
ez
jelentősen
megnehezíti a méret kiszámolását mivel az egy raklapon szereplő termékek különböző méretűek is lehetnek.
22
A befektetett munka egy állványos rendszernél már nagyon változó lehet az árucikk elhelyezkedése miatt, mivel a sorok vannak függőleges és vízszintes irányba is ezért nagyban függ a többi tényező alakulásától Magasraktár matematikai modellje A magas raktárnál az előzőekhez képest annyi a lényeges eltérés hogy a raktár minél jobb térkihasználása miatt minél magasabbra törekvő tárolás azt eredményezi, hogy csak különleges targoncákkal vagy egyéb segédeszközzel lehet elérni. Ez viszont lényegesen megnöveli a magasságot, ami párhuzamba hozható az idővel és így arra a következtetésre juthatunk, hogy a kiszolgálás ideje jelentősen nőhet mivel a magasság az egyik eleme a pozíciónak, ami az időt jelentős részben meghatározza. Ezért ezt a fajta, tárolási rendszert alkalmazva arra számíthatunk, hogy a költségünk egyrészt nő viszont a térkihasználás itt lesz legjobb. Tehát a modell pontos felállításához a fentebb említett tényezők mindegyikére szükség van. Érdemes észrevenni, hogy az egyes tényezők raktártípustól függően eltérőek. Minden raktártípus hordoz olyan egyedi jellemzőket, amely a többi típustól eltérő. Az alábbiakban egy álltalános modellt állítunk fel:
23
Beszállít ás lerakat Betárolási stratégia
elhelyez és
raktár
Termelés/Piac igényfelmerülés Kitárolási stratégia
kitárazás
raktár
lerakat
Egy raktár működési modelljét ábrázoltam folyamatábrán keresztül. A beszállítás időbeli lefutását egy eloszlásfüggvénnyel szokás megadni, mégpedig a leggyakrabban használt az exponenciális eloszlásfüggvény: P 1
0
idő
Exponenciális eloszlás
24
Az exponenciális eloszlás 0 és 1 valószínűség között megmutatja, hogy milyen időközönként érkezik be a raktárba az áru. Ahogy a függvény nő úgy nő a valószínűség az áru beérkezésére. A függvény: 1-e-λ*t amelyből logaritmussal meg is tudjuk határozni az időt. Az időszeletekből pedig tudjuk, hogy milyen árucikkek érkeznek be a raktárba és mikor.
1
árucikk3 árucikk1
árucikk4
árucikk2
0
A raktár anyagféleség grafikonja képet ad arról, hogy melyik árucikkből mennyi található a raktárban, vagyis látjuk, hogyan gazdálkodhatunk a meglévő készletből. 4. Mintarendszer kidolgozása A cél egy olyan alkalmazás fejlesztése, amely képes a FIFO elv alapján idő összehasonlítási alapot adni számunkra tesztelni különböző betárolási stratégiákat. Mindezt oly módon, hogy az alkalmazás egyfajta be- és kiáramló folyamatot generál egy általunk megalkotott raktárban. Ennek a folyamatnak a kimeneti oldalát vizsgálva az időeredményeket összegyűjtve grafikont képezünk az adatokból. Ezeket az adatokat egy adatbázisban tároljuk az összes többi lefutással együtt betárolási stratégiánként külön-külön táblákba tárolva azokat. Majd később az adatbázisból kinyert összes adatból betárolási stratégiánként egy-egy átlag függvényt képzünk. Így már képesek vagyunk szimulálni a raktárból való kiáramlási időket úgy, hogy nem csak egy esetet vizsgálunk meg, tehát valósághűbb adatokhoz jutunk. Valamint összehasonlítási alapot kapunk a stratégiák költségigényéről.
25
4.1 Szoftverfejlesztés lépései 1. feladat kitűzése Az elérendő célok meghatározása. Raktárszimulációs program fejlesztése. 2. Elemzés Ismeretek gyűjtése és összegzése a kitűzött feladathoz (felhasználandó stratégiák). A kitűzött cél részletes kifejtése. Összefüggések keresése 1.12 Tervezés Az alkalmazás alapvető belső szerkezetének megtervezése, vagyis hogy milyen osztályok kerülnek a forráskódba. Egy követelmény rendszer felállítása a futtatandó alkalmazással szemben, valamint egy rendszerterv elkészítése, amely az UML szabványnak megfelelő műszaki koncepciót tartalmaz. Az algoritmusok kidolgozása 1.13 Kivitelezés A program kódolása Java nyelven a tervek alapján A kód ellenőrzése – formai és tartalmi ellenőrzés 1.14 A program bevezetése Mintavételezés 4.2 Felhasznált stratégiák -
Véletlenszerű elhelyezés: A stratégia úgy működik, hogy az anyag a raktárba érkezésekor úgy helyezik az el, hogy megkeresik a legközelebb található üres tárhelyet és oda tárolják be az adott árucikket.
-
Bérraktározás: A bérraktározási stratégia a raktárt árutípusokra bontja fel és az alapján határozza meg azok helyét, lehet ez ABC szerinti elhelyezés vagy esetleg a raktár régiókra való bontása.
26
4.3 Algoritmusok Alapvetően 4 fajta algoritmus létrehozatala történt meg: 2. Raktár algoritmus: Egy olyan algoritmus, amely futása során egy 3 dimenziós tömböt úgy tölt fel, hogy nem minden egyes tömbelemet tölt fel, hanem véletlenszerű sorrendben csak egy előre generált darabszámnyit. Ezzel egy olyan alapállapotot megalkotva, amelybe már lehetséges betárolni, hogy stratégiákat alkalmazunk. 3. Véletlenszerű elhelyezés: Az algoritmus végighalad az előző algoritmus által feltöltött tömb minden egyes elemén, majd ahol üres elemet talál a legközelebb, azt tölti fel. 4. Bérraktár algoritmus: Ahogy az előző algoritmus, ez is az első algoritmus, már feltöltött tömbjét felhasználva halad végig a tömbelemeken, mégpedig oly módon, hogy oszloponkénti elrendezést valósít meg, tehát végig megy az oszlopokon és üres helyet találva tölti fel azokat. 5. FIFO kitárolási algoritmus: Az algoritmus az előző két algoritmus valamelyikének (a kiválasztástól függően) tömbjét alkalmazva kiüríti a tömb elemeit a betárolási sorrendben, tehát ami elsőnek került be a tömbbe az is kerül ki elsőként. 4.4 Tárolás Az időértékek tárolása egy Oracle adatbázisban valósul meg, ahol a betárolási stratégiáknak megfelelően egy-egy tábla létrehozatalával biztosított az időértékek folyamatos és biztonságos tárolása, oly módon, hogy az bárhonnan elérhető legyen további adatok hozzáadása vagy átlag függvény képzése céljából.
27
4.5 Elvárt működés A program elindítása után egy kezelő felület jelenik meg, ahol a betárolási stratégiák vagy éppen az átlagfüggvény képzése közül választhatunk. Az általunk kiválasztott opció után egy új ablakban a kitárolási idők grafikonja jelenik meg. A resetDB gombra kattintva az adatbázis tábláinak kiürítésébe egyezünk bele. 4.6 Komponens diagram Az alkalmazás komponensei a következők: -
Raktar.java: az a része a programnak ahol a raktár alapállapotot generáló algoritmus fut le.
-
BetarEgy.java: itt helyezkedik el a véletlenszerű elhelyezést megvalósító algoritmus.
-
BetarKetto.java: ez az osztály tartalmazza a bérraktár betárolási stratégiát.
-
Fifo.java: ez az osztály tartalmazza a Fifo kitárolási stratégiát.
-
Adatbazis.java: az adatbázishoz kapcsolódást valamint felvitel és lekérdezésért felelős osztály.
-
ResetDB.java: az adatbázis sorainak kitörlésére alkalmazható metódust tartalmaz kapcsolódással.
-
Raktarszimulacio.java: a futtatható osztály, amely az összes futás közben szükségessé váló osztályt meghívja futásra.
-
Oracle RDBMS: a biztonságos adattárolást és könnyű elérhetőséget biztosítja.
-
Raktarszimulacio.jar: maga a futtatható program. amely a kezelőfelület biztosítja a felhasználó számára.
28
29
4.7 Osztálydiagram
30
4.8 Osztályok és kapcsolataik
-
Raktár osztály: az osztály, mint már azt korábban is említettem a raktár alapállapotát hivatott létrehozni. Úgy valósághűbb a szimuláció, ha nem üres raktárral dolgozunk, hanem már egy működő raktárt veszünk alapul. Az osztály úgy állítja fel az alapállapotot, hogy generál egy véletlen számot 40 és 60 között, ennyi elemet fog elhelyezni majd pedig ennek a generált számnak megfelelően sorokat és oszlopokat generál ahova tárolni fog elemeket. Magát a raktárt egy háromdimenziós tömb alkotja, melyben vannak sorok oszlopok és pozíció értékek. A pozíció tárolja az adott elemről a távolságot, magasságot és a mélységet. Amint azt az ábrán is láthatjuk két osztály öröklődik ebből az osztályból, vagyis átadja értékeit a gyermek osztályoknak, hogy az itt felállított alapállapotot tudják azok felhasználni.
31
-
Betáregy osztály: az osztály a véletlenszerű betárolási stratégiát valósítja meg. A már adott állapotú raktárunkat ábrázoló tömbön végigmegy egyesével az elemeken. Egy adott sor összes oszlopán, majd ha ott talált elemet elhelyezi a tárhelyre, ha pedig nem akkor a következő sorra ugrik. A lényeg, hogy ahol a legközelebb üres tárhelyet talál, oda betárol egy elemet. Valamint a betárolási sorrendet, az az a betárolt elem sorát és oszlopát egy másik tömbbe regisztráljuk a kitárolási folyamathoz.
-
Betárkettő osztály: a felépítése az osztálynak hasonló a Betáregy osztályhoz azzal a különbséggel, hogy ebben az osztályban a bérraktározási stratégia lett megvalósítva. Mivel csak pozíciókat tárolunk és nem neveket fajtákkal ezért feltételezzük, hogy oszloponként vannak elhelyezve az áruk. Tehát az algoritmus az egyes oszlopokon végigmenve keres üres helyet az adott elemnek, amelyet elhelyezésre szánunk. A sorrendet ebben az esetben is letároljuk egy tömbbe, hogy az felhasználhassuk a kitárolási folyamat során.
32
-
Fifo osztály: Az alkalmazás egységes FIFO kitárolási elvet alkalmaz minden egyes futtatás esetén ugyanis ezen stratégia alapján kapott időkre vagyunk kíváncsiak. Az osztály két metódust is tartalmaz egyet-egyet a betárolási stratégiákra nézve. A két metódust egységesen vizsgáljuk meg, hiszen a különbség az köztük, hogy más osztályokból kapják az adatokat. Az elv, hogy a stratégia által kapott betárolási sorrendet ugyanabban a sorrendben hajtsa végre, csak jelen esetben kitárolást végez. Tehát ami elsőként került be a tömbünkbe az is kerül ki elsőként. A kitárolt elemnél a távolságból és egy átlagsebességből kiszámolja a kitárolási időt és egy újabb tömbbe tárolja el őket, amelyet majd továbbad a megjelenítést elvégző osztálynak. A fenti ábrán láthatjuk az asszociációs kapcsolatból az osztályok között, hogy a Fifo osztály biztosan lefut, míg a másik két osztály közül csak az egyik fut le a meghívástól függően.
33
-
Chart osztály: ez az osztály egy ingyenesen elérhető jFreechart nevű java kiegészítés segítségével jött létre, amely olyan osztályokkal és metódusokkal egészíti ki java könyvtárunkat, amiket alapból a java nem tartalmaz és ezekkel a függvénykirajzolást lehet megvalósítani. Az osztály azt a feladatot hivatott elvégezni, hogy az osztályoktól megkapott értékeket, mint például a Fifo osztály vagy az Adatbázis osztály ezeket az adatokat összegyűjti egy datasetbe és függvény részeiként kezelve a végén megjeleníti a függvényeket ezzel grafikusan szemléltetve az alkalmazás működési hátterét. Az ábrán láthatjuk, hogy a Fifo osztályból kétféle metódus alapján kétféle eredményeket kaphatunk attól függően, hogy melyik metódus futott le az alkalmazásunk futtatása során. Míg az adatbázissal 1 az 1 asszociációban áll ugyanis írás vagy olvasás mindig történik az adatbázis felé irányulva tehát állandó a kapcsolat.
-
Adatbázis osztály: Az adatbázis osztály, amely tartalmazza azokat a statementeket, amelyek segítségével a grafikon egyes pontjait lementjük az adatbázisba, hogy bármikor könnyen és biztonságosan hozzáférhető legyen. Ugyanakkor az osztály tartalmaz két fontos metódust, mégpedig a függvények átlagképzése, ami nem csinált mást mint, hogy kiszámolja az eddigi összes futtatás alapján adatbázisba tárolt függvénypontok átlagát és ezt továbbadja a Chart osztálynak megjelenítésre. Mindkét betárolási stratégiából átlagot képez és
mintegy
összehasonlítási
alapot
jeleníti
meg
mindkettőt,
hogy
következtetéseket tudjunk levonni a továbbiakban.
34
-
ResetDB osztály: Az osztály azért jött létre, hogy lehetőséget adjon a felhasználónak egy teljesen új kezdőállapot felállítására. Az osztályban lévő metódusok nem tesznek mást mint, az egyik megvalósítja az adatbázissal való kapcsolatot míg a másik a két betárolási stratégia által az adatbázisban tárolt sorokat kitörli. Az ábrán egyértelműen látszódik az asszociációs kapcsolatból, hogy az osztály nem minden futtatás esetén fut le, csak ha meg van hívva.
-
Raktárszimuláció osztály: maga a futtatható osztály ahol az alkalmazás kezelőfelülete is meg lett valósítva. Feladata, hogy a már létrehozott osztályokat összekapcsolja a kezelőfelülettel. 3 darab radiobutton lett létrehozva és ezek egy csoporttá alakítva, hogy egyszerre csak egyet lehessen kiválasztani az opciók közül. Egy resetdb gomb lett elhelyezve, amely az azt
35
már korábban is említett adatbázisban tárolt sorokat törli ki. Majd végül pedig a futtatás gomb, amely lenyomása során megtörténik az osztályok futtatása olyan módon, hogy ellenőrzi a program hogy melyik opciót választottunk ki, majd pedig az annak megfelelő osztályokat futtatja le. Ha ez például egy betárolási stratégia, akkor felállít egy alapállapotot a raktárról, valamint elvégzi a betárolást. Ezek pedig a kitárolás ahol már az időket is kiszámolja egyúttal, majd pedig az alkalmazás új ablakot dob fel ahol megjelenik a grafikon, ahol a kitárolásbeli időeltérések láthatóak mialatt az adatbázisba le is menti a megjelenített értékeket. Ha viszont az átlag függvény opciót választjuk, akkor az adatbázis osztály hívódik meg egyenes úton, hogy az eltárolt értékeket át tudjuk adni az azt megjelenítő osztálynak, amely egy új ablakot nyitva grafikusan szemlélteti a stratégiák közötti eltérést. 4.9 Osztályok és metódusaik
Raktar Randomallapot()
Feladata, hogy egy adott 3 dimenziós tömböt töltsön fel véletlenszerűen, véletlenszerű pozíció adatokkal.
getRaktar()
Feladata a feltöltött tömb visszaadása
BetarEgy betar1()
Feladata, hogy a Raktar osztályból megkapott tömböt feltöltse úgy, hogy ahol legközelebb üres helyet talál, oda tölt fel pozíció adatot, valamint a feltöltés sorrendjének lementése egy tömbbe.
getBetar1()
Feladata a feltöltött tömb visszaadása.
36
getBetartomb1()
Feladata a feltöltési sorrend visszaadása.
BetarKetto betar2()
Feladata, hogy a Raktar osztályból megkapott tömböt úgy töltse fel, hogy oszloponként végighaladva oda tölt fel pozícióértéket, ahol üres helyet talál valamint a feltöltés sorrendjének lementése egy tömbbe.
getBetar2()
Feladata a feltöltött tömb visszaadása.
getBetartomb2()
Feladata a feltöltési sorrend visszaadása.
Fifo FifoKitar1()
A metódus feladata, hogy a BetarEgy osztályból kapott kiegészített tömböt a feltöltésnek megfelelő sorrendben kiürítse és időt számoljon ki a tömbben tárolt távolságból valamint az átlagsebességből.
FifoKitar2()
A metódus feladata megegyezik az előbb leírtakkal, annyi különbséggel, hogy a metódus az adatokat a BetarKetto osztályból kapja meg.
37
Chart createDataset()
Feladata, hogy a Fifo osztály FifoKitar1() metódusából kapott idő tömbök elemeit egy-egy sorozatba gyűjtse össze majd azokat egységesítse egy datasetbe.
createDataset1()
A metódus annyiban tér el az előzőtől, hogy a FifoKitar2() metódustól kapja az idő adatokat.
createDataset2()
A metódus feladata, hogy az Adatbázis osztályból kapott korábban eltárolt adatok átlagaiból egy-egy sorozatot állítson össze a két betárolási osztálynak megfelelően majd a sorozatot egy datasetbe egységesítse.
createChart()
Feladata, hogy egy XY tengelyű koordinátarendszerbe felvigye a grafikon pontjait az előző metódusok egyikétől kapott datasetben lévő koordináták alapján.
Adatbazis connect ()
Feladata az Oracle adatbázishoz való csatlakozás.
input1()
Feladata a BetarEgy osztály által feltöltött tömb kiürítése után kiszámolt idők a Fifo osztály által, azok az adatbázis veletlen táblájába való mentése.
input2()
Feladata a BetarKetto osztály által feltöltött tömb kiürítése után kiszámolt
38
idők a Fifo osztály által, azok az adatbázis berraktar táblájába való mentése. A metódus az adatbázis veletlen táblájából
atlagA()
kiolvasott adatokból átlagot számol minden egyes koordináta pontra. A metódus az adatbázis berraktar
atlagB()
táblájából kiolvasott adatokból átlagot számol minden egyes koordináta pontra. getPontatlagx1() … getPontatlagx40()
a metódusok a veletlen tábla adatainak átlagaival térnek vissza
getPontatlagy1( )… getPontatlagy40()
a metódusok a berraktar tábla adatainak átlagaival térnek vissza
ResetDB Feladata az Oracle adatbázishoz való
connect()
csatlakozás. Feladata, hogy az adatbázis felhasznált
reset()
tábláinak sorait törölje.
Raktarszimulacio jRadioButton1ActionPerformed()
Feladata, hogy egy String típusú változóba elmentse, hogy a véletlenszerű betárolási stratégia lett kiválasztva.
jRadioButton2ActionPerformed()
Feladata, hogy egy String típusú változóba elmentse, hogy a bérrktár betárolási stratégia lett kiválasztva.
jRadioButton3ActionPerformed()
Feladata, hogy egy String típusú változóba elmentse, hogy az átlagfüggvény lett kiválasztva.
39
jButton1ActionPerformed()
A metódus megvizsgálja melyik radiobutton lett kijelölve, majd az annak megfelelő osztályokat hívja meg.
jButton2ActionPerformed()
A metódus feladata, hogy kapcsolatot létesítsen az adatbázissal a ResetDB osztály révén és kitörölje a tábláinak sorait.
main()
A fő metódus amely az előző metódusokból meghívottakat futtatja le.
40
4.10 Aktivitás diagram A diagram bemutatja az időben lezajló változások és folyamatok ábrázolását a program kezdeti- és végállapota között.
41
4.11 Szekvencia diagram A diagram megmutatja az objektumok egymás közötti üzenetváltását, vagyis a metódusok meghívását és azok visszatérő értékeit.
4.12 Adatbázis séma Az adatbázisban az alábbi táblák, illetve mezők találhatóak: x1
x2
Véletlen … x39
x40
y1
y2
Bérraktár … y39
y40
A függvényeket soronként tároljuk. Minden egyes mező tartalmaz egy a koordinátarendszerben ábrázolandó függvény egy pontját.
42
4.13 SQL utasítások -
Táblák létrehozása: CREATE TABLE veletlen( x1 number(15,10) ,x2 number(15,10), … x39 number(15,10), x40 number(15,10) );
CREATE TABLE berraktar( y1 number(15,10),y2 number(15,10), y39 number(15,10),y40 number(15,10) ); -
Az INSERT utasítás PreparedStatement-el lett megvalósítva és a programfuttatáskor kapnak értékeket az egyes mezők.
-
Az alkalmazás megvalósítása során 1 típusú lekérdezés lett alkalmazva, mégpedig abból a célból, hogy a cél az adatok kiolvasása a táblákból és azok feldolgozását már az alkalmazás végzi. A felhasznált lekérdezések: SELECT * FROM veletlen; SELECT * FROM berraktar;
4.14 Implementáció Az a mintarendszer kidolgozása pontban leírtak alapján valósult meg az alkalmazás implementációja Java környezetben, valamint az Oracle adatbázis és azon tábláinak létrehozása. Az alkalmazás minden olyan operációs rendszeren lefut ahova a Java feltelepíthető. 4.15 Eredmények A program elkészültével már képesek vagyunk azt a célt elérni, ami a tervben is le volt írva mégpedig, hogy következtetéseket vonjunk le a program különböző futásaiból és megmondjuk költségre nézve melyik betárolási stratégia éri meg jobban
43
1. Véletlenszerű betárolási stratégia Ahogy az a diagramon is látszik az idő eltérések igen intenzíven változnak. Az egyes elemek a raktárban egyre hátrébb kerülnek, vagyis a raktár hátsó részére ahová hosszabb az út. Ahogy egyre hátrébb kerülnek az elemek úgy nő az idő, de a kitárolások során hely szabadulhat fel, ezért a közelebbi helyeket újra fel lehet használni, ami idő megtakarítást jelent. Azonban ha összességében nézzük a grafikont egy erős növekedés látható visszaesésekkel.
2. Bérraktározási betárolási stratégia A következő betárolási stratégiát megvizsgálva láthatjuk, hogy a régiónként való elhelyezés miatt a függvény meglehetősen sűrű eltéréseket mutat. Ez azért van, mert egyik régióból a másikba haladva tudjuk feltölteni a raktárunk szinte cikkcakk szerűen, ahogy az a grafikonon is látszik. Azonban itt is láthatjuk, hogy a raktár mivel nem teljesen szimmetrikus ezért, ahogy egyre hátrébb kerül az elem a raktárban a kitárolási idő is úgy növekszik viszont az előzőhöz képest gyengébben.
44
3. Átlag függvény Az átlagfüggvényünk egyfajta összehasonlítási alapot a nekünk a betárolási stratégiáinkról. Az előző két ábrán is észre lehetett már venni a különbségeket a betárolási stratégiák között, de átlagolva őket sokkal szembetűnőbb a különbség és egyből le is lehet vonni a következtetést, hogy a bérraktározási stratégia, amely régiónként helyezi el a termékeket a raktárban időhatékonyság szempontjából sokkal jobban teljesít mint a véletlenszerű stratégia, ahol egy folyamatos növekedést mutat a függvényünk és nagyobb kitárolási időket.
45
5 Összefoglalás „A logisztika a termékek és a szolgáltatások rendszereken belüli és rendszerek közötti áramlásának optimális kialakítására, valamint eredményes lebonyolítására szolgáló tudományterület.” [1] A raktározás során a logisztika egy kulcsfontosságú tényező. A raktáraknak alapvetően két formáját különböztetjük meg: darabáru raktározási rendszerek, illetve magas raktározási rendszerek. A darabáru raktározási rendszernek sok fajtája van, számunkra az állványos statikus tárolási rendszer ezen belül is a polcos tárolás, ami azért fontos, mivel ezt használják a raktárakban a leggyakrabban. A polcos állványos tárolás kis forgalmú és nagy áruválasztékú raktárak (pl. szerszámraktárak, szertárak, kisebb áruházak raktárai), általában polistruktúrájú árukészlet esetében alkalmazható megoldás. A raktár folyamatos működéséhez szükségünk vannak raktározási elvekre. Két fajtáját különböztetjük meg, mégpedig a betárolási stratégiákat illetve a kitárolási stratégiákat. A raktározási elveknek alapvetően több fajtája is létezik aszerint, hogy milyen típusú maga a raktár. Ezek a stratégiák lehetnek: FEFO, LOFO, HIFO, távolság szerinti elv, FIFO és LIFO. FIFO-elv: (First In First Out) az először raktárba került áru kerül ki először. A cél egy raktárszimulációs program megalkotása, amely a FIFO elven keresztül lehetővé teszi számunkra különböző betárolási stratégiák kitárolásának időbeni eltérésének vizsgálatát. Az alkalmazás két betárolási stratégiát alkalmaz, amelyek a következők: -
Véletlenszerű elhelyezés: A stratégia úgy működik, hogy az anyag a raktárba érkezésekor úgy helyezik az el, hogy megkeresik a legközelebb található üres tárhelyet és oda tárolják be az adott árucikket.
-
Bérraktározás: A bérraktározási stratégia a raktárt árutípusokra bontja fel és az alapján határozza meg azok helyét, lehet ez ABC szerinti elhelyezés vagy esetleg a raktár régiókra való bontása. 46
A stratégia kiválasztását követően a program futtatás során az alkalmazás egy raktári alapállapotot hoz létre a valósághűbb szimuláláshoz. Ezután a stratégiának megfelelően 40 elemet tölt fel a raktárunkba szemléltethetőbb megjelenítés miatt. A feltöltés után folyamatosan be-ki tárolásokat végez, a program pontosan 5 ciklus futtat le. Majd idő értékeket számol a távolság és átlagsebesség hányadosából. Az adatokat sorozatokba gyűjti, amit egy datasetben tárol és ezt átadja a megjelenítő osztálynak és egy új ablakban megnyílva mutatja nekünk a stratégia által meghatározott kitárolási időket. A megjelenítés alatt a program egy Oracle adatbázisba menti le a függvény pontjainak koordinátáit a biztonságos és könnyű hordozhatóság miatt. A program rendelkezik egy „átlag függvény” funkcióval is, ami az összes adatbázisban tárolt koordináta átlagát számolja ki a betárolási stratégiákra nézve és együtt jeleni meg őket ezzel mintegy összehasonlítási alapot adva a felhasználónak. A program lehetőséget nyújt az adatbázisban tárolt adatok kitörlésére ezzel egy új tesztelési sorozatra lehetőséget adva. A tesztelés során az átlag függvény funkciót felhasználva számos futtatás után megállapítható volt a grafikonokból, hogy a két felhasznált betárolási stratégia közül a bérraktározási stratégia volt az a stratégia, amely időhatékonyabb. Mivel az idő a raktározásban egy költségfajta ezért azt mondhatjuk, hogy a bérraktározási stratégia költséghatékonyabb stratégia, mint a véletlenszerű. Az elkészült mintarendszer egy nyílt keretrendszert ad az egyedi tárolási stratégiák tesztelésére; rugalmasan bővíthető. Az oktatás keretében felhasználható a logisztikai folyamatok modellezésére. 6. Summary Logistics is a very important part of the warehousing. There are two different kinds of storing system: the unit storage warehouse and the high storage warehouse. The unit storage warehouse system contains plenty of subsystems one of which is the shelved rack storage system. This one is important for us because it is used by most of the warehouses. It could be for example a supermarket warehouse or a warehouse where tools are stored. For the continuous warehousing without stops an entry into storage 47
strategy and a withdraw strategy are required. Withdraw strategies could be for instance FEFO, FILO, Principle by distance, FIFO, LIFO. The definition of FIFO principle is simple: What we store into the warehouse first, we withdraw out of the warehouse first. My goal was to write an application which simulates the warehouse background processes by entry into storage strategies and the FIFO withdraw strategy. The entry into storage strategies are the following: The first is the Random entry into storage strategy. The Random strategy works by taking one element and going through the warehouse rows in order to find an empty place for the element and if there is one then it takes it there. The second strategy is the storage by region. The strategy works thus that it sorts the elements into regions ordered by the alphabet or another principle. The point is that the strategy is going through the columns and if it finds an empty place for the element in the region, it takes it there. The application uses those two ways of entry into storage strategies and simulates with them the warehouse. The working process of the application is: when you open the application a window pops up where you can choose either entry into storage strategy or an average function. After choosing our option and having pressed the run button the program runs its program lines. In case that we chose an entry storage strategy the application first sets up a random status of the warehouse for a more realistic simulation. Subsequently the program runs the class of the strategy and stores forty elements into the warehouse. Afterwards it uploads the sequence to an array for the withdraw storage. Thereafter the program sends the data to the class of the withdraw storage where the withdraw storing of the elements takes place and the time of the withdrawing is calculated. When all time values are calculated the display class follows. It converts the time values to series and gathers them into a dataset which draws the graph of it. Meanwhile, the application saves the time values into the Oracle database in order to enable an easy and safe way of carrying. After the whole process is done a new window pops up which shows us the withdraw time differences of the warehouse. I mentioned before that there is an average function option that collects the time values out of the database. Subsequently it sends the values to the display class which makes a graph of each strategy so we can see the difference of each. Accordingly we can form our own 48
opinion about which is the better strategy and costs less time. After plenty of tests it will be out of question that the storage by region is the better strategy. Judging by the average function it is obvious that the storage by region takes less time to store out the elements. As above mentioned the application is capable of storing the time values in a database, gathering all of them and giving the opportunity to the user to draw an average function. Furthermore, it gives an option to reset the database so it can work with new values.
49
Irodalomjegyzék [1] Zenit Logisztikai Eszközök Kereskedőháza Kft., Bajkó Sándor FIFO rendszerű, átfutó illetve hagyományos állványrendszerek alkalmazásának összehasonlítása 2010. http://www.zenitkft.hu/downloads/diploma_tanulmany/diplomamunka_bajko_sandor. pdf [2012.04.26] [2] relation software & solution, Jenei István Raktározási rendszerek 2005. http://www.relation.hu/upload/anyagok/raktarozasi_rendszerek.pdf [2012.04.28] [3] META raktárrendszerek http://www.allvanyrendszerek.hu/images/static/meta_multipal_s2000_01_n.jpg [2012.06.15] [4] PointerNET Market-place http://www.pointernet.pds.hu/ujsagok/transpack/kepek/transpack_200701_40-1.jpg [2012.06.22] [5] Árkád Online Építőipari- Építészeti magazin http://www.arkadmagazin.hu/elem/epulet/cikk/univer%2003.jpg [2012.06.28] [6] Management Mania https://managementmania.com/en/logistics [2012.08.05]
50
Köszönetnyilvánítás -
Köszönetem fejezem ki Dr. Kovács László tanárúrnak a teljes dolgozatkészítés folyamán tanúsított segítőkészségért, valamint az irányadó útmutatásokért, amelyek nagymértékben segítették disszertációm megírását.
-
Köszönetet mondok Dr. Mang Béla tanárúrnak a dolgozat logisztikai részében a matematikai modellhez nyújtott segítségéért.
51