Beszerzési logisztika támogatása az optimális beszállító kiválasztása révén



Hasonló dokumentumok
Paritások. Szűcs Tamás 2019

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Adatbázisok I Adatmodellek komponensei. Adatbázis modellek típusai. Adatbázisrendszer-specifikus tervezés

Adatbázisok* tulajdonságai

INCOTERMS Az INCOTERMS jelentése és története

B I T M A N B I v: T M A N

Adatmodellek komponensei

A 13 klauzula az eladó kötelezettségének és kockázatának a sorrendjében:

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

ADATBÁZIS-KEZELÉS ALAPOK I.

Adatbázis használat I. 5. gyakorlat

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

Az Európai Unió Hivatalos Lapja L 343/3

A klauzulák fajtái a költség átszállása alapján

Adatbázisok I. Jánosi-Rancz Katalin Tünde 327A 1-1

ADATBÁZISKEZELÉS ADATBÁZIS

3.1. Alapelvek. Miskolci Egyetem, Gyártástudományi Intézet, Prof. Dr. Dudás Illés

Adatbázis fejlesztés és üzemeltetés II. Szabó Bálint

INCOTERMS Története A szokvány nem jogszabály, így nem évül el, azaz ma is érvényes az 1936-os Incoterms - ha arra hivatkoznak.

Bevezetés: az SQL-be

Adatbázis-kezelés. Harmadik előadás

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

BEVEZETÉS Az objektum fogalma

A hierarchikus adatbázis struktúra jellemzői

Gazdálkodási modul. Gazdaságtudományi ismeretek III. Szervezés és logisztika. KÖRNYEZETGAZDÁLKODÁSI MÉRNÖKI MSc TERMÉSZETVÉDELMI MÉRNÖKI MSc

LOGISZTIKAI ADATBÁZIS RENDSZEREK BEVEZETÉS

Adatbázisok I A relációs algebra

Összeállította: Sallai András. Incoterms

Programozás. Adatbázis-kezelés (alapok) Fodor Attila

Adatbázisok biztonsága

Útmutató a beszállítók részére MU 7.18.

ADATBÁZIS ADMINISZTRÁTOR SZAKKÉPESÍTÉS SZAKMAI ÉS VIZSGAKÖVETELMÉNYEI

Adatbázis-kezelés, információs-rendszerek

Adatbázis kezelés Delphiben. SQL lekérdezések

Szoftverprototípus készítése. Szoftverprototípus készítése. Szoftverprototípus készítése

Adatbázis rendszerek I

Adatbázis-kezelés alapok Adatbázisok című tárgyhoz, ismétlés kapcsán

Előzmények

Az Oracle rendszer komponensei

Az INCOTERMS Az INCOTERMS szabályairól általában

a Europe Treasury euró alapú, rendszeres díjas, befektetési egységekhez kötött, teljes életre szóló életbiztosításhoz

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

9.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Relációs modell és relációs algebra. ER konvertáása reációs modellre,példák relációs algebrára Személetes ismertetés

Informatika. Középszintű érettségi vizsga témakörök. 1. Információs társadalom. 2. Informatikai alapismeretek hardver

Korszerű raktározási rendszerek. Szakdolgozat

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

Termékbemutató az Aranyszárny Exkluzív Speciál rendszeres díjas, befektetési egységekhez kötött, teljes életre szóló életbiztosításhoz

Budapesti Műszaki és Gazdaságtudományi Egyetem Automatizálási és Alkalmazott Informatikai Tanszék INFORMATIKA 2 ADATBÁZISOK

Közigazgatási kutatások megvalósítása a TÁMOP számú projekt

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Logisztika és minőségügy a zöldség-gyümölcs kereskedelemben

Informatika-érettségi_emelt évfolyam Informatika

A Ratipur Kft. poliuretán-feldolgozással foglalkozik. Hogyan került kapcsolatba ezzel az anyaggal?

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István Viczián István

Kitöltési útmutató az Intrastat kérdőívekhez

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Széchenyi István Szakképző Iskola

Debreceni Egyetem Informatika Kar

Adatbázisrendszerek Radványi, Tibor

LOGISZTIKAI KÖLTSÉGELEMZÉS. Mi a kontrolling? Mutatószámok

A Szekszárdi I. Béla Gimnázium Helyi Tanterve

A logisztikai rendszer tervezésének alapesetei

LÉTESÍTMÉNYGAZDÁLKODÁS. Változáskezelés. Változás Pont Cím Oldal A teljes dokumentáció átírásra került

ÁLTALÁNOS JELLEGŰ ELŐÍRÁSOK. A hitelesítési folyamat résztvevőit, az alapelemeket és a főbb kapcsolódási pontokat az 1.

Adatbázisok I. Az SQL nyelv

A tételsor a 12/2013. (III. 29.) NFM rendelet foglalt szakképesítés szakmai és vizsgakövetelménye alapján készült. 2/33

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Debreceni Egyetem Informatikai Kar TANULÓI NYILVÁNTARTÓ SZOFTVER FIREBIRD ADATBÁZIS ALKALMAZÁSÁVAL

1. Az adatbázis fogalma, fontosabb összetevÿi, felhasználási módjai

Antreter Ferenc. Termelési-logisztikai rendszerek tervezése és teljesítményének mérése

A.NET keretrendszer (.NET Framework) három alapvetõ összetevõbõl áll:

Tartalomjegyzék. MOK Ügyeletnyilvántartó rendszer használati kézikönyve v2.1

Adatbázisok és adattárházak az információs rendszerek adatkezelői

SOK ÉS SZOKVÁNYOK A NEMZETKÖZI ZI KERESKEDELEMBEN

II. év. Adatbázisok és számítógépek programozása

erő/nyomaték további kapcsolások, terhelések első kapcsolás, terhelés oldás, leterhelés deformáció

Szakmai zárójelentés

WebSphere Adapters. 6. változat 2. alváltozat. WebSphere Adapter for SAP Software felhasználói kézikönyv 6. változat 2. kiadás

DR. PFEFFER ZSOLT Gyakorló kérdések és válaszok közbeszerzési jogi ismeretekből (közbeszerzési kis-káté)

A SZOFTVERTECHNOLÓGIA ALAPJAI

Informatikus informatikus Térinformatikus Informatikus T 1/9

On-line értékelési módszerek II. Lengyelné Molnár Tünde

A KÖRNYEZETI INNOVÁCIÓK MOZGATÓRUGÓI A HAZAI FELDOLGOZÓIPARBAN EGY VÁLLALATI FELMÉRÉS TANULSÁGAI

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

Elérhetőségek és Cégadatok

Fábos Róbert okl. mk. őrnagy, adjunktus. Doktori (PhD) értekezés TERVEZET. Témavezető: Dr. habil. Horváth Attila alezredes CSc. Budapest 2013.

Jogosultságkezelés felhasználói leírás

MUNKAANYAG. Angyal Krisztián. Szövegszerkesztés. A követelménymodul megnevezése: Korszerű munkaszervezés

Objektum Orientált Szoftverfejlesztés (jegyzet)

Fiáth Attila Nagy Balázs Tóth Péter Dóczi Szilvia Dinya Mariann

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

Adatbázis rendszerek. dr. Siki Zoltán

5 HOZZÁFÉRÉS-VÉDELEM. A fejezet VIDEOTON fejlesztési dokumentációk felhasználásával készült

EUCIP Core Sillabusz 3.0 változat

Gazdasági informatika vizsga kérdések

Átírás:

Miskolci Egyetem, Gépészmérnöki és Informatikai Kar Logisztikai Intézet Beszerzési logisztika támogatása az optimális beszállító kiválasztása révén Szakdolgozat Név: Makláry Brigitta Neptun kód: EQP49C

Tartalomjegyzék 1. BEVEZETÉS... 1 2. BESZERZÉS... 2 2.1. A BESZERZÉS FOGALMA... 2 2.2. A BESZERZÉSI KOORDINÁCIÓ MÓDSZEREI... 2 2.3. ANYAGBESZERZÉS... 3 2.3.1. Anyagok... 3 2.3.2. Anyagok csoportosítása... 3 2.4. ANYAGRENDELÉS TECHNOLÓGIAI ANYAGNORMÁK SZERINT... 3 2.4.1. Anyagszükséglet meghatározása... 3 2.4.2. Készlet szükséglet összevetése... 3 2.4.3. Szállítási ciklusidők rögzítése... 4 2.4.4. Biztonsági készlet meghatározása... 4 2.4.5. Anyagrendelés... 4 2.5. A BESZERZÉS FELADATA... 4 2.5.1. Rövid és hosszú távú ellátás biztosítása... 5 2.5.2. Anyagköltségek csökkentése... 5 2.5.3. Ár versenyképesség javítása... 5 2.5.4. Ártárgyalás... 6 2.5.5. Szerep a termékfejlesztésben... 6 2.5.6. Innováció és termékfejlesztés segítése... 7 2.6. BESZERZÉS CÉLKITŰZÉSEI... 7 2.7. A BESZERZÉSI FOLYAMAT... 8 2.7.1. Késztermék megrendelés... 9 2.7.2. Késztermék megrendelés feldolgozása... 10 2.7.3. Termelésprogramozás... 10 2.7.4. Alapanyag meghatározása és készletkövetés... 10 2.7.5. Rendelés előkészítés... 11 2.7.6. Beszállítás és gyáron belüli anyag elhelyezés... 11 2.8. BESZÁLLÍTÓK KOMPLEX MINŐSÍTÉSE... 12 2.9. INCOTERMS... 13 2.9.1. Klauzulák fajtái a költség átszállása alapján... 13 2.9.2. Klauzulák fajtái a fuvarozási mód alapján... 13 2.9.3. Főbb klauzulák... 13 3. ADATBÁZIS ALAPOK... 15 3.1. FOGALMAK... 15 3.2. ADATMODELL... 15 3.2.1. ER adatmodell... 16 3.2.2. Relációs adatmodell... 18 3.3. ADATBÁZIS LÉTREHOZÁS LÉPÉSEI... 18 3.4. AZ ADATBÁZIS SZERKEZETE... 19 4. HASZNÁLT NYELVEK, ALKALMAZÁSOK ISMERTETÉSE... 20 4.1. JDBC... 20 4.2. SQL NYELV... 21 I

4.3. PL/SQL NYELV... 22 5. A PROGRAM ISMERTETÉSE... 23 5.1. ÁLTALÁNOS LEÍRÁS... 23 5.2. KÖVETELMÉNYEK ÉS RENDSZER LEÍRÁS... 24 5.3. ADATBÁZIS LEÍRÁSA... 24 5.4. HASZNÁLT ADATMODELLEK... 25 5.4.1. ER modell... 26 5.4.2. Relációs modell... 26 6. TÁBLÁK FELÉPÍTÉSE... 27 6.1. BESZÁLLÍTÓ TÁBLA LÉTREHOZÁSA... 27 6.2. ALKATRÉSZ TÁBLA LÉTREHOZÁSA... 27 6.3. BESZÁLLÍTÓ-ALKATRÉSZ TÁBLA LÉTREHOZÁSA... 28 6.4. RAKTÁR TÁBLA LÉTREHOZÁSA... 29 6.5. RENDELÉS TÁBLA LÉTREHOZÁSA... 29 6.6. NAPLÓ TÁBLA LÉTREHOZÁSA... 30 7. TÁBLAMŰVELETEK... 31 7.1. ELMÉLETI ISMERTETÉS... 31 7.2. CSOMAGOK... 32 7.2.1. Alkatrész táblához tartozó csomag... 32 7.2.2. Beszállító táblához tartozó csomag... 32 7.2.3. Besz_Alk táblához tartozó csomag... 34 7.2.4. Rendelés táblához tartozó csomag... 36 7.2.5. Raktár táblához tartozó csomag... 39 8. PROGRAMFELÜLET BEMUTATÁSA... 43 8.1. HIÁNYOS KÉSZLET LISTÁZÁSA... 43 8.2. ALAPFELÜLET... 44 8.2.1. Optimális beszállító kalkulálás... 44 8.2.2. Rendelés... 45 8.3. ÚJ ELEM FELVÉTELE... 46 8.4. LISTÁZÁS... 47 8.5. KERESÉS... 47 8.6. MÓDOSÍTÁS... 48 8.7. NAPLÓZÁS... 49 8.8. SÚGÓ... 50 9. ÖSSZEFOGLALÁS... 51 10. SUMMARY... 52 11. IRODALOMJEGYZÉK... 53 12. CD MELLÉKLET TARTALMA... 54 II

1. Bevezetés 2013 nyarán a Samsung Electronics Hungary Zrt.-nél töltöttem a nyári gyakorlatomat, a Beszerzési osztályon. Kérésemre sikerült elegendő információt gyűjtenem arról, hogy milyen szempontok szerint történik egy beszállító kiválasztása az alkatrész megrendelésének esetében. Manapság felgyorsult a világ melyben élünk, ezért egyáltalán nem mindegy, hogy egy rendelt szállítmány mikor érkezik meg a gyárba. A beérkezés után nem lehet azonnal felhasználni, mivel van lerakodási idő is, így hiába van a gyár területén az alkatrész a termelés leállhat az anyaghiány miatt. Az előbbiből adódik, hogy mennyire fontos az időzítés. A Beszerzőnek oda kell figyelnie a szállítási időre, különben leállíthatja a gyártást, mely a cég szempontjából nem túl gazdaságos. A rendelés kiadásánál az időzítés mellett fontos még a költség. Nem mindegy, hogy kitől, milyen szállítási feltételekkel és költségekkel rendelünk egy alkatrészt. Minden beszállító más - más árakkal rendelkezik. A Beszerzőknek ezeket az adatokat hatékonyan és gyorsan kell tudniuk kezelni. Az általam készített programmal az ő munkájukat kívánom megkönnyíteni. Lehetőséget adok arra, hogy pillanatok alatt szinte bármilyen információhoz hozzáférjenek, ami egy alkatrész megrendelésénél szükséges. Egy alapanyagot kiválasztva a rendszer kiszámolja a lehetséges költségeket, így a Beszerző eldöntheti, hogy az ár vagy az idő kapja a magasabb prioritást az anyagrendelésnél. A rendszer nem választ a Beszerző helyett, hiszen a választás nem minden esetben egyszerű. Ha nem felel meg a program által felajánlott érték, akkor azt vissza kell utasítani, ami ronthatja a cégek KPI (Key Performance Indicator) mutatóját. A Logisztikai rendszerek szakirány tanulója vagyok. A szakirányomnak megfelelő témát szerettem volna választani, ezért úgy döntöttem, hogy az általam kedvelt logisztika témát, az anyagbeszerzést összekapcsolom az adatbázis kezeléssel és a programozással. Eredménye SQL és PL-SQL alapú adatbázis, melyre JDBC segítségével felületet készítettem. 1

2. Beszerzés Azt a folyamatot, amivel a vállalati logisztika általában foglalkozik, három részre oszthatjuk: beszerzési, termelési, és értékesítési logisztika. A beszerzési logisztika áll az anyagáramlási folyamatok kezdeténél, mivel biztosítja azokat a bemeneti készleteket, amelyek a termelés elvégzéshez szükségesek. Egy átlagos iparvállalat bevételének 55%-85%-át költi ezekre, így e feladat minél gazdaságosabb és megbízhatóbb ellátása létkérdés. 2.1. A beszerzés fogalma A beszerzés olyan folyamat, mely túllép az egyszerű, hétköznapi vásárláson. Magába foglalja a beszerzés tervezését, a beszerzési stratégia kialakítását. Feladata a megfelelő szállító kiválasztása, a szerződéskötés, a szállítók folyamatos ellenőrzése és fejlesztése, valamint a vállalat egyéb szerveivel kialakítandó tevékenység koordinációja. Ezek révén járul hozzá a beszerzés a vállalati eredményhez. 2.2. A beszerzési koordináció módszerei Centralizált beszerzés: egy központi szerv szerzi be minden egység számára a szükséges alapanyagokat, és látja el a beszerzés megszervezésének teljes feladatát. Előnye, hogy egyetlen egységként olcsóbb. Hátránya viszont, hogy az egyéni igényeket kevésbé képes kielégíteni. Decentralizált beszerzés: minden egység saját magának, másoktól teljesen függetlenül szerzi be a számára szükséges alapanyagokat. Előnye, hogy az egyéni igényeket maximálisan ki tudja elégíteni. Hátránya pedig az, hogy nem kapnak árkedvezményeket, ami a nagyobb mennyiségű megrendelések után jár. Beszerzés gazda: az a szervezeti egység szerzi be az alapanyagokat az összes többinek, amely a legnagyobb mennyiségben használja azokat fel. 2

2.3. Anyagbeszerzés 2.3.1. Anyagok Az anyagok olyan vásárolt készletek, amelyeket termék előállításához vagy szolgáltatások nyújtásához szereztek be. Az újratermelési folyamatban rendszerint egyszer vesznek részt és általában elvesztik eredeti megjelenési formájukat, vagyis a vállalkozási tevékenységet nem tartósan szolgálják. 2.3.2. Anyagok csoportosítása Alapanyagok: azon nyersanyagok és termékek, amelyek feldolgozása az adott gyártási folyamat legfontosabb célja, a fő termék fő alkotórészévé válik. Segédanyagok: a gyártáshoz kisebb mennyiségben felhasznált anyagok. Javítják a gyártmány minőségét. Üzem és fűtőanyagok: elektromos vagy hő energia elő állítását szolgálják. Tartalék-alkatrészek: a termelő berendezések alkatrészpótlására. Egyéb anyagi eszközök: egy évnél rövidebb ideig szolgálják a vállalkozás tevékenységét (pl.: munkaruhák, védőruhák). 2.4. Anyagrendelés technológiai anyagnormák szerint 2.4.1. Anyagszükséglet meghatározása A gyártástechnológia igényének megfelelően műszaki, statisztikai adatok felhasználásával, becsléssel határozható meg a termék előállításához szükséges anyagszükséglet az anyagféleségre vonatkozóan. 2.4.2. Készlet szükséglet összevetése Anyag típusonként meg kell vizsgálni a raktári állományt, hogy látszódjon, mely anyagból mennyi van még készleten. Meg kell nézni, hogy ebből mennyi tartozik a biztonsági készlethez, hiszen ennek mindig raktáron kell maradnia. Az összes készletből a biztonsági készlet levonása után maradt készlettel kell számolni. 3

2.4.3. Szállítási ciklusidők rögzítése A beszállítóval tisztázni kell, hogy a hány nap a szállítási idő a megrendelés kiadásától számítva. Az anyagrendelésnél ezt a szempontot figyelembe kell venni. A szállítási határidőket folyamatosan karban kell tartani. A beszállítónak jeleznie kell az esetleges változásokat, hogy a nyilvántartásban megtörténhessen az érték módosítása. 2.4.4. Biztonsági készlet meghatározása A termelésben, valamint az anyagellátásban fellépő zavarokat ki kell küszöbölni, erre szolgál a biztonsági készlet. A biztonsági készletet mindig meg kell tartani, vészhelyzet esetére (pl.: nem érkeznek meg az anyagok, mert lezárták a repülőteret). A készlet nagyságát általában több szempont határozza meg: a termelő egység készletelőírása (terv), az alkatrészek átfutási ideje, a gyártási ciklusidő, a gyártás bonyolultsági foka. 2.4.5. Anyagrendelés A rendelkezésre álló adatok alapján ki lehet számolni az anyagigényt. Anyagigény=(Gyártandó termék x anyag norma) - (Összes készlet-biztonsági készlet). Anyagigényt továbbítani kell a beszállítók felé. Ez történhet levélben, faxon, elektronikus úton. 2.5. A beszerzés feladata A beszerzés feladata, hogy a vállalat működéséhez szükséges különböző anyagokat, berendezéseket, szolgáltatásokat biztosítsa (iparvállatok bevételük 55-60%-át, élelmiszer és vegyipari cégek 70-75%-át költik inputanyagokra). Feladatai közé tartozik a logisztikai rendszer teljesítményének előmozdítása, a gyors ellátáson, a minőség javításán, a költségcsökkentési lehetőségek feltárásán keresztül. A beszerzés fontos információforrás, mivel az újabb potenciális beszállítókról, újabb termékekről, technológiákról és a beszállítói piacon folyó versenyről is információt ad. 4

2.5.1. Rövid és hosszú távú ellátás biztosítása A beszerzés legfontosabb feladata a rövid és hosszú távú ellátás biztosítása. Az anyag-ellátás és a szolgáltatás-ellátás hiánya esetén a termelés folyamatossága megszakadhat, aminek következtében megreked a vállalkozás eredeti célja, a profit. 2.5.2. Anyagköltségek csökkentése A beszerzés az átlagos feldolgozóipari vállalatok számára nagyon lényeges, mert költségeinek akár 60%-át is kiteheti az anyagköltség. Ha egy cég akár 5%-kal is tudja csökkenteni ezen költségeit, azzal már jelentősen növeli a nyereségét. Az anyagellátási tevékenységnek fontos szerepe van a végtermék minősége és technikai színvonala szempontjából is. A végtermék minősége és színvonala függ a felhasznált anyagoktól és alkatrészektől, ezért a beszerzésnek arra kell törekednie, hogy adott specifikációnak megfelelő minőségű, technikai színvonalú és árú terméket szerezzenek be. 2.5.3. Ár versenyképesség javítása Jelentős költségmegtakarítás, s ezen keresztül nyereségnövelés érhető el, ha a beszerzendő anyag, termék vagy szolgáltatás árából csökkenteni tudunk. A biztonságos rövid távú anyagellátás és az árcsökkentés együttes elérésekor jelentkezhető ellentmondások: A nagy tételben való vásárlás révén diszkontárat lehet elérni. A magas raktárkészlet javítja az ellátás biztonságát és segíti kiküszöbölni a minőségi és mennyiségi hullámzásokból származó problémákat. A nagy készlet miatt nő a raktározási költség, illetve a forgóeszköz lekötés kamatveszteséget okozhat. Hosszú távú szerződések kötése nélkül, nem biztosítható a hosszú távú ellátás biztonsága és minősége. Rövid távú ellátás esetén a szállító-gyártó együttműködés nem megfelelő, nem járulnak hozzá az új termék kialakulásához, a termelési folyamat modernizálásához vagy a további költségcsökkentéshez. Alacsony a kölcsönös bizalom és együttműködés szintje. Az ellentmondások oka, hogy egyrészt cél az ellátás biztosítása, másrészt, hogy ez a biztonság pénzbe kerül. Ezért az optimális ellátási szint eléréséhez a különböző tényezők mérlegelésére és összhangjára van szükség. 5

2.5.4. Ártárgyalás A beszerzési feladatok közül az egyik legjelentősebb a vételárról folytatott tárgyalás. A termék, szolgáltatás egységárát befolyásoló tényezők: Vásárolt mennyiség (tárgyalással elérhető kedvezmény a mennyiség növekedésével javul, vagyis minél nagyobb tételben vásárol egy cég a gyártótól annál nagyobb kedvezményre lesz jogosult), Termék szabványos vagy egyedi volta (szabványosítással tovább csökkenthetők a költségek), Tervezhetően ismétlődő, illetve egyszeri beszerzés (visszatérő beszerzések esetén kedvezőbb az alkupozíció), Minőség (funkciónak megfelelő és feladat orientált minőség), Termékkel, szolgáltatással együtt járó kiszolgálás milyensége, Szállítási feltételek (paritás, távolság, szállítóeszköz), Csomagolás (kis-nagy tételek). 2.5.5. Szerep a termékfejlesztésben Beszerzésnek meghatározó szerepe van a termékfejlesztésben is. Napjainkban a termékek életkora csökkent, a bevezetés és a növekedés szakasza rövidebb lett, s a hanyatlást, a termék piacról való kivezetését sem szabad elhúzni. A beszerzés összegyűjti, osztályozza és szétosztja az illetékes részlegek között az információit, így ezzel folyamatos tájékoztatást nyújt a lerövidült termék életciklus időszakában a kutatás, fejlesztésnek és a termelési részlegnek a beszerzési piac változásairól. A megfelelő információáramlás előnyt biztosít a cég számára. A beszerzés feladata, hogy nyomon kövesse a potenciális partnerek árait, technikai jellemzőit és rugalmasan reagáljon a változásokra. A beszerzés feladatkörébe tartozik a vállalti készletek számontartása is, ez ugyanis befolyásolja a beszerzés időzítését. Anyagköltség szempontjából fontos a beszerzés ütemezése a raktárkészletekkel összhangban. A szállítások megfelelő ütemezésével optimalizálható az egyszeri szállítási mennyiség és a készlettárolási költség. 6

2.5.6. Innováció és termékfejlesztés segítése A beszerzés egyik alapvető célja az optimális minőség biztosítása, hogy a vállalat piacon megjelenő termékének, illetve szolgáltatásának minősége és technikai színvonala kielégítse az elvárásokat. A beszerzésnek a kompetitív pozíció fenntartásához vizsgálnia kell, hogy a vállalat minőségszintje ne legyen alacsonyabb, mint a versenytársaké hasonló termékek esetén. Lényeges, hogy partnerként kezelje a szállítót, s gondoskodjon a saját vállalatán belül, illetve kifelé is a szállító jó híréről, mert az ilyen kapcsolat lehetővé teszi a technikai segítségnyújtást, az innovációkban való segítést, költségcsökkentést, illetve teljesítménynövelési technikák átadását. A jó személyes, illetve cég kapcsolatok az ellátás biztonságát is garantálják. A beszerzés célja és feladata a vállalaton belüli viszonyok fejlesztése, a különböző részlegek egymás közötti kapcsolatainak és harmóniájának megteremtése, mivel ez a részleg találkozik legkomplexebben a vállalat minden szervezetével. 2.6. Beszerzés célkitűzései Maximálisan hozzájárulni a vállalat versenyképességéhez, a profit biztosításához, a versenyben való túléléséhez. Biztosítani az ellátás folyamatosságát, a vállalat működéséhez szükséges minőségű anyagokkal és szolgáltatásokkal. Az anyagok minimális árán való beszerzése, mely arányban áll az elfogadható minőséggel és szállítással. A raktározási kiadások összhangjának segítése az ellátási biztonsággal és a gazdasági előnyökkel. A gazdasági készletek biztonságos minimumon való tartása és kedvező áron túladni a fölösleges készleteken. Vállalati költségszerkezet javítása. Elemzések készítése a hosszú távú ellátások biztonságáról és ennek költségeiről. Más szervezetekkel való együttműködés az integráló szerep felhasználásával. A célok elérése érdekében a beszerzési politika, az eljárások, az irányelvek, a személyzeti állomány és az új termékek folyamatos fejlesztése. 7

Szállító fejlesztése a jobb eredmények elérése érdekében. Segíteni a szállító hírnevének kialakításban (ha megérdemli). Minőség és az értékek megfelelő egyensúlyának fenntartása. Beszerzési piac figyelése, új, megbízható szállítók keresése és kiválasztása. 2.7. A beszerzési folyamat A termelő vállalatok logisztikai rendszere alrendszerekre tagozódik. Ezek a következőek: beszerzési, termelési, elosztási és hulladékkezelési-újrahasznosítási alrendszerek. A vállalati logisztikai rendszer tervezésénél, működtetésénél és ellenőrzésénél a vállalat logisztikai menedzsmentje fontos szerepet játszik, melynek feladata a vállalati általános stratégiák ismeretében az egyes logisztikai alrendszerek számára működtetési stratégiák kidolgozása. Az általános stratégiák és a logisztikai alrendszerek speciális stratégiáinak az együttes figyelembevétele eredményezheti csak a logisztikai folyamatok sikeres és eredményes megvalósítását. A 2.1. ábra a beszerzési logisztikai folyamatot foglalja össze, mely két részre bontható fel: Alapanyag rendelési folyamat, amelyben csak logisztikai információk áramolnak, vagyis ez egy logisztikai információáramlási folyamat. Az alapanyag rendelési folyamat eredményeként megvalósuló folyamat, amelyben anyagáramlás és a hozzákapcsolódó információáramlás is megjelenik. A 2.1. ábra jobb oldalán a beszerzési logisztikai tevékenység alapanyag-rendelési folyamata látható. Az alapanyag rendelését általában két tényező befolyásolja. Az egyik a piacról érkező késztermék megrendelések, míg a másik a piaci igények kielégítését szolgáló termelési tervek megvalósulásához rendelkezésre álló alapanyagok raktári készletei. A 2.1. ábra bal oldalán található, a megvalósuló logisztikai folyamat. Itt a beszállítótól a termelésbe történő anyagátadásig láthatóak folyamatorientáltan kezelve a jelentkező logisztikai feladatok. Például, itt történik a beszállítók időzítése és a szállítás lebonyolítása, illetve az áru megfelelő kezelésének folyamata. 8

2.1. ábra: Beszerzési logisztikai folyamat 2.7.1. Késztermék megrendelés A késztermék megrendelésénél a megrendelést különféle információk írják le. Ezek az információk két csoportba oszthatók. Az egyik csoport a megrendelés tartalmára vonatkozó információkat tartalmazza: melyik vállalat a megrendelő és milyen terméktípusra vonatkozik a megrendelés; a terméktípusokra vonatkoztatva milyen nagyságúak a megrendelt sorozatok, mennyi a szállítási határidő; terméktípusokra és sorozatokra vonatkoztatva mekkora az ár; terméktípusokra vonatkozóan milyenek a minőségi megkötések; a megrendelt késztermékre vonatkozóan, a vevő által igényelt logisztikai szolgáltatások (R-S-T tevékenység, csomagolás, egységrakomány-képzés, komissiózás, termékazonosítás); a termékre és a megrendelőre vonatkozó prioritásokat. 9

A második csoportba tartozó információk a megrendelések beérkezésével kapcsolatosak: mikor és milyen időközönként érkeznek a megrendelések. Érkezhetnek tetszőleges vagy meghatározott időpontokban (naponta, hetente, havonta, stb.). milyen módon, hogyan érkeznek a megrendelések (telefonon, levélben, faxon). 2.7.2. Késztermék megrendelés feldolgozása A késztermék megrendelések feldolgozásának alapvető célja, hogy a vállalat a lehető legrövidebb időn belül választ tudjon adni a megrendelőnek arra vonatkozóan, hogy a vevői igényeket képes-e teljesíteni. A vevői igények teljesítésének több feltétele van. A vállalatnak biztosítani kell a szükséges alapanyagfajta, mennyiség, gyártási kapacitás és logisztikai szolgáltatások erőforrásainak adott időpontban való rendelkezésre állását. 2.7.3. Termelésprogramozás A szükséges gyártási kapacitás megfelelő időpontban való rendelkezésre állását a termelésprogramozás segítségével meghatározhatjuk. Ennek gyorsasága és pontossága függ a vállalat termékstruktúráját leíró számítógépes adatbázistól, valamint a termelésprogramozásnál alkalmazott szoftverektől és hardverektől 2.7.4. Alapanyag meghatározása és készletkövetés A szükséges alapanyagfajta és mennyiség adott időpontra való rendelkezésre állását a következő vizsgálatok alapján tudjuk eldönteni: anyagszükséglet meghatározása a megrendelői igény kielégítésre vonatkozóan, az alapanyag raktárak készlet szintjeinek percre kész követése anyag-fajtánként, a szükséges alapanyag fajták és mennyiségek meghatározása a vevői igény kielégítésre, a szükséges beszállítói kapacitások feltárása és biztosítása az alapanyagellátáshoz. Az anyagszükséglet meghatározásának gyorsasága és pontossága függ a termékstruktúrára vonatkozó anyagszükséglet adatbázis meglététől és annak tartalmától, illetve az alkalmazott anyagszükséglet meghatározó szoftvertől. 10

Az alapanyagraktárak készletszintjeit percre készen nyilvántartják. Ezek alapján könnyen meghatározhatók a raktáron lévő, de még nem lekötött anyagmennyiségek, a raktáron lévő, lekötött anyagmennyiségekből felszabadítható, későbbi időpontra átütemezhető anyagmennyiségek, továbbá a termelési folyamatba jelenleg lehívott anyagmennyiségek, amelyekből esetleges átütemezés lehetséges. 2.7.5. Rendelés előkészítés A megrendelésekre ajánlatokat kell kérni a beszállítóktól. Nem kell ajánlatkérés, ha stratégiai beszállítóról van szó, mivel ilyen esetben az árura egy hosszabb időszakra keretszerződés lett megkötve. Az ajánlatkérést piackutatás előzi meg, melyet a beszállítók körében kell elvégezni. A kutatás mélysége attól függ, hogy már meglévő anyagot szeretnék rendelni vagy teljesen új áruról van szó. Ha már meglévőt szeretnénk szállítatni, akkor meg kell nézni, hogy akitől eddig rendeltünk az megfelelően teljesíti az elvárásokat, vagy felvetődik az a kérdés, hogy van-e a vállalatnál olyan más beszállító, aki képes a szóban forgó anyagok beszállítani. Ha még eddig nem rendelt anyagról van szó, akkor először a már meglévő beszállítói körnél kell érdeklődni, az igény teljesítéséről, és ha ez nem kivitelezhető a beszállítók szélesebb köréből kell választani. A beérkező ajánlatok kiértékelésénél a következő szempontokat kell figyelembe venni: ár, szállítási határidő, minőség, megbízhatóság, a beszállító közelsége, szállításra ajánlott árufajták száma. 2.7.6. Beszállítás és gyáron belüli anyag elhelyezés A rendeléseket mindig úgy kell összeállítani, hogy a szükséges anyagok mindig rendelkezésre álljanak. A beszállítók ütemezése, a szállítási mód és eszköz kiválasztása nagy odafigyelést igényel, hiszen egy vállalat szempontjából az sem gazdaságos, ha nincs anyag és az sem, ha sok van belőle a raktárkészleten. Az áru vállalathoz szállítása során el kell dönteni, hogy az anyag hol kerüljön lerakodásra és, hogy meg kell-e bontani az egységrakományokat. Ezután a beszállított anyagot a gyáron belül a megfelelő helyre és egységben kell elhelyezni. Az újonnan beérkező árut mindenképpen fel kell venni a nyilvántartásba, hogy a készletet ellenőrizve újabb rendeléseket lehessen kiadni. Végül indulhat a termelés. 11

2.8. Beszállítók komplex minősítése A már meglévő és új az beszállítókat a költséghatékonyság miatt értékelni kell. Az értékelés akkor kezdődik, amikor először megrendelésre kerül egy anyag az adott beszállítótól. A pontszámok alapján a beszállítók különböző kategóriákba kerülnek: stratégiai vagy egyedi beszállító. Ha pontszám huzamosabb ideig egy adott szint alatt van, akkor a vállalatnak érdemes felbontani a szerződést és új beszállító után nézni. Az értékelés módját a 2.2. ábra mutatja be. Értékelő kulcs: 2.2. ábra: Beszállítói minősítés 12

2.9. Incoterms Az Incoterms (International Commercial Terms - Nemzetközi Kereskedelmi Feltételek). A költségek szempontjából igen lényeges. Létrehozásának célja egy egységes szabályozás megteremtése volt, amely az eladó és a vevő jogait szabályozza a nemzetközi szállítási szerződésekben, úgynevezett klauzulák formájában. A szokvány nem jogszabály, ezért csak azáltal lép életbe, hogy a szerződő felek elfogadják. Jelentősége abban áll, hogy a szerződésekben nem kell részletesen szabályozni a szállítási feltételeket, elég utalni a megfelelő incoterms klauzulára. A klauzulákat a 2.3.ábra ismerteti. 2.9.1. Klauzulák fajtái a költség átszállása alapján Ha a költség ugyanott száll át az eladóról a vevőre ahol a kockázat, akkor a klauzula 1 pontos. Ha a költség és a kockázat átszállása szétválik, akkor a klauzula 2 pontos. 2.9.2. Klauzulák fajtái a fuvarozási mód alapján Az alkalmazott fuvarozási mód alapján a klauzulák lehetnek tengeri / belvízi klauzulák vagy multimodális klauzulák. A multimodális klauzulák többféle fuvarozási mód és különböző összekapcsolódási módok esetén alkalmazott. 2.9.3. Főbb klauzulák EXW: Ex Works, (gyárból) Az eladó saját telephelyén köteles az árut megfelelően csomagolva, számlázva a vevő rendelkezésére bocsátani. FCA: Free Carrier, (költségmentesen a fuvarozónak) Az eladó köteles az árut saját költségére és kockázatára a vevő által megjelölt fuvarozóhoz eljuttatni és neki fuvarozás céljára átadni. FOB: Free On Board, (költségmentesen a hajón) Az eladó köteles az árut saját költségére és kockázatára az indulási kikötőbe eljuttatni és a hajó fedélzetén a vevő rendelkezésére bocsátani. CIF: Cost, Insurance and Freight, (költség, biztosítás és fuvardíj fizetve) Az eladó köteles az árut saját költségére az érkezési kikötőbe eljuttatni, a kockázat és az áru feletti tulajdonjog azonban az indulási kikötőben, amikor az áru áthalad a hajó korlátja felett, átszáll a vevőre. 13

CIP: Carriage and Insurance Paid To, (fuvarozás, biztosítás fizetve valameddig) Az eladó köteles az árut saját költségére a rendeltetési helyre eljuttatni. A kockázat az első fuvarozótól kezdve a vevőt terheli. DAF: Delivered at Frontier, (határra szállítva) Az eladó köteles az árut saját költségére és kockázatára a szerződésben megjelölt határig eljuttatni és a vámhatár előtt a vevő rendelkezésére bocsátani. A vámmal kapcsolatos költségek a vevőt terhelik. DEQ: Delivered Ex Quay, (leszállítva rakparton történő átadással) Az eladó köteles az árut saját költségére és kockázatára az érkezési kikötőbe eljuttatni és a kikötő rakpartján a vevő rendelkezésére bocsátani. A vámkezeléssel kapcsolatos költségek és terhek a vevőt terhelik. DDU: Delivered Duty Unpaid, (leszállítva vámfizetés nélkül) Az eladó köteles az árut saját költségére és kockázatára a szerződésben megjelölt rendeltetési helyre eljuttatni. Minden költséget és kockázatot köteles viselni, a vám kivételével. DDP: Delivered Duty Paid, (leszállítva vámfizetéssel) Az eladó köteles az árut saját költségére és kockázatára a rendeltetési helyre eljuttatni, minden költséget és kockázatot viselni, beleértve a vámot is. 2.3. ábra: Incoterms klauzulák 14

3. Adatbázis alapok 3.1. Fogalmak Adatbázis (Database, DB): Egy olyan integrált adatszerkezet, mely több különböző objektum előfordulási adatait adatmodell szerint szervezetten perzisztens módon tárolja olyan segédinformációkkal, úgynevezett metaadatokkal együtt, melyek a hatékonyság, integritásőrzés, adatvédelem biztosítását szolgálják. Adatbázis kezelő rendszer (Database Management System, DBMS): Az a program, mely az adatbázishoz történő mindennemű hozzáférés kezelésére szolgál. Feladata még az adatbázis belső karbantartási funkcióinak végrehajtása. Adatbázis rendszer (Database System, DBS): Az adatbázis, az adatbázis kezelő rendszer, valamint az alkalmazói és segédprogramok együttese. 3.2. Adatmodell Azokat a modelleket, amelyek az adatok struktúrájának (szerkezetének) leírására alkalmasak, adatmodelleknek nevezzük. Nem a konkrét adatokkal, hanem azok típusaival illetve a közöttük lévő kapcsolatokkal foglalkozik. Vagyis a valós világ objektumainak csak a feladat megoldása szempontjából fontos jellemzőit emeljük ki és szerepeltetjük az adatmodellünkben. Adatmodell egy eszközrendszer, amellyel leírható a valóság. Több absztrakciós szinten is létezik. Az adatmodellnek a valóság teljes értékű megadásához az alábbi komponenseket kell tartalmaznia: Strukturális rész: az adattípusok és kapcsolatok megadására. (Statikus) Pl.: rendszerelemek, kapcsolatok feltérképezése. Műveleti rész: különböző módosítási vagy lekérdezési tevékenység elvégzésére. (Dinamikus) Integritási rész: az adatbázis belső törvényszerűségeinek betartására ad szabályokat. Konzisztens legyen az adatbázis! Pl.: nem lehet negatív életkor. 15

Az adatmodelleket 2 fő részre osztjuk: szemantikai adatmodellre és adatbázis adatmodellre. A szemantikai adatmodell inkább csak a lényeget emeli ki. Ilyen például az ER, az EER, az UML, stb. Az adatbázis adatmodell megadja a részleteket is. Ilyen például a hálós, a relációs, a hierarchikus, stb.. A későbbiekben az ER modellt és a relációs adatmodellt fogom használni, ezért ezeket nézzük meg részletesebben. 3.2.1. ER adatmodell Egyed kapcsolat modell, más néven ER (Entity Relationship) modell. Csak strukturális részt és elemi statikus integritási részt tartalmaz, továbbá egyszerű grafikus jelölésrendszert is. Nem teljes adatmodell, de egyszerűsége révén elterjedt, és ma is széles körben használatos tervezési segédeszköz a relációs adatbázisok tervezéséhez. 3 fő komponense van: az egyed, a kapcsolat és a tulajdonságok. Egyed: egy objektumtípus, egy a külvilág többi részétől egyértelműen megkülönböztetett dolog. Jellemzői, hogy önálló léttel bír és azt mutatja, amiről az információkat tárolni kívánjuk. Típusai: normál: önmagában azonosítható. (3.1. ábra) gyenge: más egyedhez való kapcsolatán keresztül azonosított. (3.2. ábra) 3.1. ábra: Normál egyed 3.2. ábra: Gyenge egyed Kapcsolat: az egyedek között fennálló ideiglenes vagy tartós asszociáció. AZ ER modellben csak az elsődleges kapcsolatokat adjuk meg. Kötelező jelleg szerinti típusok: opcionális: létezhet olyan egyed-előfordulás, melyhez nem kapcsolódik más egyedelőfordulás a kapcsolatban. (3.3. ábra) kötelező: minden egyed-előforduláshoz kell kapcsolódnia más egyedelőfordulásnak a kapcsolatban. (3.4. ábra) 3.3. ábra: Opcionális kapcsolat 3.4. ábra: Kötelező kapcsolat 16

Számosság jelleg szerinti típusok: 1:1 (egy - az - egyhez): egy egyed-előforduláshoz maximum egy másik egyed társul a kapcsolatban, mindkét viszonylatban. (3.5. ábra) 1:N (egy - a - többhöz): egy egyed-előforduláshoz több más egyed társulhat, de a másik irányban csak egy kapcsolódó egyed-előfordulás létezhet. (3.6. ábra) M:N (több - a - többhöz): mindkét irányban több kapcsolódó előfordulás létezhet. (3.7. ábra) 3.5. ábra: 1:1 kapcsolat 3.6. ábra: 1:N kapcsolat 3.7. ábra: N:M kapcsolat Tulajdonság: az egyedeket, kapcsolatokat jellemző mennyiség, a letárolandó információelemeket tartalmazza. Típusai: Normál: a tulajdonság egy értékkel rendelkezik. (3.8. ábra) Kulcs: a tulajdonságnak egyedinek kell lennie és pontosan meg kell határoznia a tábla rekordjait. (3.8. ábra) Többértékű: az egyed-előforduláshoz köthetően több értéke is lehet az adott tulajdonságnak. (3.8. ábra) Származtatott: olyan tulajdonság, amelynek értéke más tulajdonságokból határozható meg. (3.9. ábra) Összetett: a tulajdonság több tulajdonságokból tevődik össze. (3.9. ábra) 3.8. ábra: Normál (baloldali), kulcs (középső), többértékű (jobb oldali) 3.9. ábra: Származtatott és összetett 17

3.2.2. Relációs adatmodell A relációs adatmodell legfontosabb eleme a matematikai reláció fogalma. Mint minden adatmodell, ez is egyrészt definiálja azokat a jellemző adatszerkezeteket, amelyeken dolgozik, illetve azokat a műveleteket, amelyek rajta értelmezettek. Fontos kiemelni, hogy a relációs adatmodell a logikai adatbázis (vagy fogalmi adatbázis) kereteit határozza meg. Nem foglalkozik azzal a problémával, hogy az adatokat ténylegesen hogyan kell tárolni a háttértáron, hogyan kell módosítani és a memóriába betölteni a felhasználó által igényelt adatokat. Az adatokat táblázatokban tárolják. A táblázatot itt relációnak hívjuk. o A táblázat oszlopára azt mondjuk, hogy mező. o A táblázat egy sora a rekord. A táblázatban szereplő rekordok azonos szerkezetűek, vagyis típusuk azonos! Ez azt jelenti, hogy minden rekordban, ugyanabban a mezőben ugyanolyan típusú adatoknak kell lenniük. A táblázatban nem fontos a mezők sorrendje. A táblázat nem lehet két azonos adatokkal feltöltött sora. A táblázat rekordjainak sorrendje tetszőleges lehet. 3.3. Adatbázis létrehozás lépései Követelmény analízis, feladat specifikáció DBMS kiválasztása Adatmodellezés: o Szemantikai adatmodell elkészítése o A szemantikai adatmodell konverziója a megfelelő adatbázis adatmodellre. o Normalizálás o Az adatbázisban tárolt adatok típusának, integritási feltételeinek meghatározása. Kódolás, implementálás 18

3.4. Az adatbázis szerkezete Tábla: a logikailag összetartozó adatokat foglalja össze. A tábla oszlopokból és sorokból áll, amelyeket mezőknek, illetve rekordoknak nevezünk. Rekord: az adatbázis egy sora. Egy rekordban tároljuk az egymással összefüggő adatokat. Mező: az adatbázis egy oszlopa, amelyben az egyedek tulajdonságértékeit tároljuk. Elemi adatok: a tábla celláiban szereplő értékek, amelyek az egyed konkrét tulajdonságai. Egyed (entitás): az, amit le akarunk írni, amelynek az adatait tároljuk és gyűjtjük az adatbázisban. Attribútum (tulajdonság): az egyed valamely jellemzője. Az egyed az attribútumok összességével jellemezhető. Egyedtípus: az egyedre vonatkozóan megadott tulajdonságok összessége. Egyed-előfordulás: az egyedre vonatkozóan megadott konkrét tulajdonságok. 19

4. Használt nyelvek, alkalmazások ismertetése 4.1. JDBC A JDBC (Java Database Connectivity) programozói felület (API - Application Programming Interface) a Java programozási nyelvhez, vagyis Java osztályok, metódusok és interfészek halmaza. A relációs adatbázishoz biztosítanak alacsonyszintű hozzáférést: kapcsolódást; SQL utasítások végrehajtását; SQL lekérdezések eredményeinek feldolgozását. Az SQL parancsok végrehajtása különböző interfészeken keresztül valósul meg. Ilyen interfész például: Statement, PreparedStatement és a CallableStatement. A Statement egyszerű SQL parancsokhoz (statikus), a PreparedStatement a bemenő paraméterekkel rendelkező SQL parancsokhoz (kvázi-statikus, dinamikus), és a CallableStatement a kimenő és/vagy bemenő paraméterekkel rendelkező SQL parancsokhoz és tárolt eljárásokhoz szükséges. Az interfészeket saját meghajtói implementálják. A meghajtóknak a Java működésének megfelelően elegendő futási időben rendelkezésre állniuk, ezáltal a programfejlesztőnek lehetősége van a Java alkalmazást az adatbáziskezelő-rendszertől függetlenül elkészíteni. A JDBC meghajtók menedzselését DriverManager osztály végzi. Azon okból kifolyóan, hogy egyszerre több adatbázishoz is kapcsolódhassunk, létezik egy lista, melyben a regisztrált meghatók vannak eltárolva. Ebből a listából a DriverManager automatikusan kiválasztja az adott adatbázishoz megfelelő meghajtót, levéve ezt a terhet a vállukról. A JDBC meghajtó betöltődésekor automatikusan regisztrálja magát ebbe a listába, oly módon, hogy minden meghajtónak van egy statikus inicializátora, melyben a DriverManager osztály registerdriver statikus metódusát meghívja. Meghajtót betölteni kétféleképpen lehet, vagy név szerint hivatkozunk rá és a Class.forName statikus metódussal töltjük be, vagy pedig a jdbc.drivers rendszerparaméterben felsoroljuk kettősponttal elválasztva és a DriverManager tölti be őket az inicializáció során. Appletek esetén az utóbbi megoldás nem használható, mert azok nem állíthatnak be rendszerparamétereket. 20

4.2. SQL nyelv Az SQL (Structured Query Language) egy strukturált lekérdezőnyelv, mely a relációs adatbázis kezelő rendszerek (RDBMS - Relational Database Management System) (ilyen például az Oracle) szabvány adatkezelő nyelve. Segítségével hozzáférhetünk az adatbázisban tárolt adatokhoz, metaadatokhoz, és különböző műveleteket hajthatunk végre (pl.: lekérdezés, bővítés, módosítás) rajtuk. Az SQL segítségével az adatok kezelése rugalmasan történik, de mégsem tekintjük valódi programozási nyelvnek. Oka, hogy az SQL nyelv nem tartalmaz vezérlési elemeket, illetve olyan utasításokat, amelyekkel a nemadatbázis felé történő adatforgalom szabályozható, hiszen csak egy meghatározott tevékenységi kört fed le. Ennek következtében önmagában nem használható alkalmazások készítéséhez. Az SQL jelen van alkalmazásokban, amikor az RDBMS-t kell megszólítani, de az egyéb vezérlési elem, adatforgalom, ideiglenes változók kezelésénél már nem használható, így ezen feladatok elvégzésére más megoldást kell keresni. Az SQL nyelvi elemeket négy részre oszthatjuk: DDL - Data Definition Language, vagyis adatdefiníciós nyelv; Utasítások: - CREATE (készítés); - ALTER (módosítás); - DROP (eldobás). DML - Data Manipulation Language, vagyis adatkezelési nyelv; Utasítások: - INSERT (feltöltés); - UPDATE (frissítés); - DELETE (törlés). DQL - Data Query Lanhuage, vagyis adatlekérdező nyelv; Utasítás: - SELECT (lekérdezés). DCL Data Control Language, vagyis adatvezérlő nyelv; Utasítások: - GRANT (jogosultság adás); - REVOKE (jogosultság elvétel); - COMMIT (tranzakció elfogadás); - ROLLBACK (tranzakció visszagörgetés); - SAVEPOINT (tranzakció mentési pont); - LOCK (zárolás); - UNLOCK (felszabadítás). 21

4.3. PL/SQL nyelv Az előzőekben megismert SQL nyelv egyik legfontosabb jellemzője, hogy nem tartalmaz procedurális elemeket. Ennek következtében nem lehet csak SQL utasításokra építve komplett alkalmazásokat készíteni, hiszen nem tartalmaz elágazási, ciklus vezérlési vagy éppen terminál felület működését leíró nyelvi elemeket. Ezért az SQL nem tekinthető egy alkalmazásfejlesztő nyelvnek. Az SQL kizárólagos célja az adatbázissal történő adatforgalom biztosítása. Ebből még az is következik, hogy az alkalmazások készítéséhez egy más jellegű procedurális nyelvre van szükség. Ezt az elvárást elégíti ki a PL/SQL nyelv, amely az Oracle SQL kibővítése. A kibővítés szóhasználat nem tökéletes, mivel a PL/SQL nem tartalmazza az SQL teljes utasításkészletét, például hiányoznak belőle az adatdefiníciós és a védelmet szabályozó utasítások. Azon utasításokat foglalja magában, melyek az adatkezelő eljárások során nagyobb szereppel rendelkeznek. Így lehetőség van az SQL adatkezelő utasításainak, a kurzor szerkezetnek és a tranzakció kezelő utasításoknak a használatára. Tartalmazza az alapvető vezérlési elemeket is, így a WHILE ciklust és az IF elágazást is. Lehetőséget nyújt a memóriaváltozók készítésére, melyekkel közbenső számítási eredmények tárolhatók. Erős a nyelvhez kapcsolódó hibakezelési komponens, s a rugalmas és hatékony programfejlesztést számos függvény segíti. A PL/SQL eljárások feldolgozása programegységekben, úgynevezett blokkokban történik. A blokk általános felépítése: DECLARE - deklarációs rész (a blokk saját, lokális változóit, memória változói) BEGIN - műveleti rész (kötelező rész, SQL és procedurális utasítások) EXCEPTION - hibakezelő rész (felmerülő hibákra való válaszok definiálása) END; A blokkok deklarálásánál hiányzik a blokk azonosítója. A PL/SQL-ben nincs felhasználó által adott egyedi neve a blokkoknak, így a blokkok önmagukban nem hívhatók meg más blokkokból. A blokkok ritkán használatosak önmagukban, mindig valamilyen más típusú objektumok (pl. tárolt eljárások, triggerek) részeként jelenik meg, melyeknek van egyedi azonosító neve, így a befoglaló objektumokon keresztül tudunk a blokkokra hivatkozni. 22

5. A program ismertetése 5.1. Általános leírás A termelési folyamat egyik legfontosabb alap pillére a készlet beszerzése, mivel ezen művelet nem megfelelő teljesítése vonzhat magával gyártás leállást és költség kiesését. Ahhoz, hogy az alkatrész utánpótlás gyors és egyszerű legyen, célszerű az adatokat adatbázisban tárolni, és ezt kezelő rendszert alkalmazni. Segítségükkel a rengeteg papírmunka elhanyagolható, illetve használatával könnyedén rákereshetünk egy-egy termékre vagy megnézhetjük, hogy az egyes anyagból mennyi van készleten. A rendszer melyet elkészítek egy LED TV gyártásának a készlet beszerzését reprezentálja, az optimális beszállítótól. (A programban csak 1 féle termék alkatrészeinek a megrendelésre van lehetőség.) Megmutatja, hogy az alkatrész megrendelésénél, milyen fő szempontokat kell figyelembe venni, attól függően, hogy melyik beszállítótól vásároljuk meg a terméket, változik a megrendelt anyag költsége. A beszállítók egymástól eltérő áron adják az általuk legyártott alkatrészeket, és más a szállítási költségük és idejük is, hiszen nem mindegy, hogy belföldről vagy külföldről történik a küldés. Ezeket a tényezőket mind össze kell hangolni, és lehetőleg a legmegfelelőbbet kiválasztani, a különböző lehetőségek közül. A gyártásnál lényeges, hogy a kívánt készlet mindig elérhető legyen, ezért kell nagy figyelmet szentelni az anyag beérkezésének megfelelő ütemezésére. Érdemes egyféle alkatrészt több beszállítótól beszerezni, így gördülékeny és folyamatos lesz az áru beérkeztetése. Pl.: Egy külföldi beszállító cég terméke olcsó, de a szállítási idő és költség sok. Egy belföldi beszállító alkatrésze viszont drágább, de kevesebb idő alatt és olcsón biztosítja termékét a beszerzőnek. Ilyen esetekben az összköltség lehet, hogy mindkettőnél azonos, így az idő lesz a döntő tényező. Nézzünk rá egy példát! Tegyük fel, hogy az adott alkatrészre október 10.-én és 11.- én van szükség, de egy beszállító nem tudja ezt a mennyiséget garantálni. A belföldi szállítási ideje 2 nap, a külföldié 5 nap. Október 10.-ére megrendelem a hazai szállítótól 10.08.-án és október 11.-ére a külfölditől rendelek 10.06.-án. Ezt a folyamatot nevezik termeléstervezésnek, mikor tudni, hogy mely anyagra mikor van szükség, és ez által mikor kell megrendelést rá kiadni. 23

Összegezve: Az előzőekben láttuk, hogy érdemes több beszállítót is alkalmazni, mivel eltérő az anyag és szállítási költségük; a szállítási idejük; a kapacitásuk. Az elkészülő rendszer, ezeket a szempontokat biztosítja, és lehetőséget ad a beszerzőnek, hogy a számára szükségeset tudja kiválasztani. 5.2. Követelmények és rendszer leírás A szerver gép, amin az adatbázis fut a saját számítógépem lesz. A szerver gépre szükséges egy Oracle Database 11g Express Edition adatbázis kezelő rendszer, valamint Java virtuális gép. Az alkalmazás működéséhez szükséges a stabil szélessávú internetkapcsolat, és egy dedikált IP cím, amin keresztül kívülről is el lehet érni az adatbázist. A program NetBeans IDE 7.3 verziójú fejlesztő környezetben készült, melyben JDBC segítségével megteremtem az elkészített adatbázishoz a hozzáférést. Az adatbázis Oracle SQL nyelven lett megírva, és a tökéletesítéshez különböző PL/SQL nyelvi eszközöket használtam, mint például eljárásokat/függvényeket, triggereket, jobokat és kurzorokat. A működéshez JDK 1.7 es java-t és ojdbc 6 os Oracle drivert használtam. A felhasználónak csak az a dolga, hogy az alkalmazást feltegye gépére, és elindítsa. Nem igényel semmilyen fejlesztői környezetet. Fontos, hogy a felhasználónak legyen működőképes internetkapcsolata, mert anélkül nem éri el az adatbázis elemeit. (A program elindításának útvonala: \Forraskod\Rendelés_készítés\dist\Rendeles_keszites.jar) 5.3. Adatbázis leírása SQL nyelv segítségével felépítek egy adatbázist (táblák elkészítése, lekérdezése, módosítása), melyben előre megadom, hogy a gyártáshoz milyen alkatrészekre van szükség, s ezeket melyik beszállító cég tudja biztosítani, hány nap alatt érkezik meg, illetve milyen áron, módon, paritással, kiszerelésben és kapacitásban szerezhető be. Megrendelhető alkatrészek: előlap (A1), hátlap (A2), talp (A3), kijelző (B2), hangszóró (C1), panel (B3), csavar (B1), PC (C3) és RGB LED szalag (C2). Természetesen egy LED TV nem csak ennyi és nem pont ilyen anyagokból tevődik össze. Az általam használt adatok, beszállítók kitaláltak. Beszállító cégek: Műanyag Kft; Hangzásért Zrt.; Kép a képben Zrt.; Infotech Kft.; Látványkép Zrt.; Csavarog Zrt. és Műalk Zrt.. Nyilvánvalóan mód van új alkatrész, beszállító és kapcsolat felvételére is. 24

A felhasználónak a feladata, hogy a rendeléseket kiadja a kívánt alkatrészre, ezáltal a Rendelés tábla sorait folyamatosan tölti fel. Ezek már bonyolultabb utasításokat igényelnek, így PL/SQL nyelvi eszközöket (trigger, job, kurzor, eljárás készítés) használok megvalósításukra. Minden kiadott rendelés más és más azonosítót (R_ID) kap, melyet a rendszer automatikusan generál, az aktuális dátummal együtt. Majd megadja, hogy mit szeretne megrendelni, hány darabot és kitől. Az egyes beszállítóknak eltérő a szállítási ideje (Becsult_ido), így a raktárkészlet folyamatos feltöltését úgy oldottam meg, hogy a szállítási időt (Becsult_ido) felszoroztam 10 perccel. Ennek oka, hogy 1-20 napig állítottam be az értékeket és, ha ez tényleg nap lenne, nem lehetne megfigyelni a rendszer helyes működését. A gyártást is szerettem volna valahogy szimulálni, így gondoskodtam a raktári készlet folyamatos csökkenéséről. Ezt a folyamatot Job utasítás segítségével oldottam meg, így 40 percenként egy véletlenszerűen kiválasztott alkatrészből csökkentek. A csökkentés az adott anyag 10%-a, mely csökkenési értéke belekerül a Napló táblába is, mint készlet levonás. A Napló tábla, nem csak a készletből való levonást jegyzi fel, hanem mindenfajta anyagmozgást. A rendelések felvételénél eltárolja, hogy rendelés lett kiadva egy alkatrészre, és azt is rögzíti, amikor megérkezik a rendelt szállítmány. A három anyagmozgatási folyamatot eltérő módon jelöltem, így a felhasználó rögtön látja, hogy az alkatrész mikor csökken vagy növekszik. 5.4. Használt adatmodellek Az átláthatóság érdekében a már korábban említett adatmodellek közül az ER modellt és a Relációs adatmodellt találtam a legszemléletesebbnek, így ezt a két modelltípust használtam. Segítségükkel könnyedén áttekinthető a rendszer felépítése és összetétele, illetve a táblák közötti kapcsolatok is jól megfigyelhetőek segítségükkel. (Az elkészített modelleket az 5.1. ábra és az 5.2. ábra ismerteti.) 25

5.4.1. ER modell 5.1. ábra: ER modell 5.4.2. Relációs modell 5.2. ábra: Relációs modell 26

6. Táblák felépítése 6.1. Beszállító tábla létrehozása CREATE TABLE Beszallito (Nev CHAR(30) PRIMARY KEY, Orszag CHAR(30), Varos CHAR(30), Mod CHAR(10), Incoterms CHAR(10), Becsult_ido NUMBER(3), Koltseg NUMBER(6), Telefon CHAR(11)); Beszállító tábla leírása A tábla a különböző Beszállítókról tartalmaz alap információkat. - Nev: a beszállító cég neve, a tábla kulcsa. - Orszag: az ország neve, ahol a beszállító van. - Varos: a város neve, ahol a beszállító van. - Mod: a szállítás módja. (vízi, légi vagy kamionos). - Incoterms: a megkötött incoterms klauzula. - Becsult_ido: a szállítás becsült ideje, napban megadva. - Koltseg: a szállítás költsége, Ft-ban. (Nem tartalmazza az alkatrész árát!) - Telefon: a beszállító elérhetősége. 6.2. Alkatrész tábla létrehozása CREATE TABLE Alkatresz (Alk_kod CHAR(2) PRIMARY KEY, Megnev CHAR(30)); Alkatrész tábla leírása A tábla a különböző Alkatrészekről tartalmaz alap információkat. - Alk_kod: az alkatrész azonosító kódja, a tábla kulcsa. (1betű+1szám, a betű: nagybetű A-Z-ig, a szám: 1-9-ig. Pl.: A1) - Megnev: az alkatrész megnevezése. 27

6.3. Beszállító-Alkatrész tábla létrehozása CREATE TABLE Besz_Alk (Alk_kod CHAR(2) REFERENCES Alkatresz, Beszallito CHAR(30) REFERENCES Beszallito, Db_ar NUMBER(6), Kiszereles NUMBER(6), Min NUMBER(6), Max NUMBER(6), Osszkoltseg NUMBER(8), E_ar NUMBER(6), Azon NUMBER(3), PRIMARY KEY (Alk_kod,Beszallito)); Beszállító-Alkatrész tábla leírása A tábla arra szolgál, hogy a rendszerben felvett Alkatrészeket és Beszállítókat összekapcsolja, és újabb információkat szolgáltasson róluk. - Alk_kod: Az alkatrész kódja, csak olyan kód vehető fel, mely már az Alkatrész táblában szerepel. Elsődleges és idegenkulcs, a táblák összekapcsolásához kell. - Beszallito: A beszállító neve, csak olyan név vehető fel, mely már a Beszállító táblában szerepel. Elsődleges és idegenkulcs, a táblák összekapcsolásához kell. - Db_ar: az alkatrész darab ára, Ft-ban. - Kiszereles: az alkatrész kiszerelése, db-ban. - Min: minimum mennyit lehet rendelni az alkatrészből, db-ban. - Max: maximum mennyit lehet rendelni az alkatrészből, db-ban - Osszkoltseg: a minimális összköltség a termék megrendelésénél. Összköltség = Minimum rendelhetőség * Darab ár + Szállítási költség. - E_ar: az alkatrész egység ára, Ft-ban. - Azon: sorazonosító, a sorok azonosításához kell. 28

6.4. Raktár tábla létrehozása CREATE TABLE Raktar (RAlk_kod CHAR(2) PRIMARY KEY, Keszlet NUMBER(8)); Raktár tábla leírása A tábla a Raktár készletről tartalmaz alap információkat. - RAlk_kod: a raktárban eltárolt alkatrész azonosítója, a tábla kulcsa. (1betű+1szám, a betű: nagybetű A-Z-ig, a szám: 1-9-ig. Pl.: A1) - Keszlet: a raktáron lévő készlet, db-ban megadva. 6.5. Rendelés tábla létrehozása CREATE TABLE Rendeles (R_ID NUMBER(5) PRIMARY KEY, Rendelés tábla leírása Datum DATE, Alk_kod CHAR(2), Db NUMBER(6), Beszallito CHAR(30), Fiz_ossz NUMBER(8), FOREIGN KEY (Alk_kod, Beszallito) REFERENCES Besz_alk (Alk_kod, Beszallito)); A tábla arra szolgál, hogy rendeléseket lehessen készíteni. Ennek módja, hogy csak olyan rendelések adhatóak ki, melyek kompatibilisek a Besz_alk tábla soraival. - R_ID: a rendelés azonosítója, a tábla kulcsa. - Datum: a rendelés kiadásának dátuma, mely a rendszer dátumára van beállítva. - Alk_kod: Az alkatrész kódja, csak olyan kód vehető fel, mely már az Besz_Alk táblában szerepel. Idegenkulcs, a táblák összekapcsolásához kell. - Db: a rendelt alkatrész darabszáma. 29

- Beszallito: Az beszállító neve, csak olyan név vehető fel, mely már az Besz_Alk táblában szerepel. Idegenkulcs, a táblák összekapcsolásához kell. - Fiz_ossz: A megrendelés költsége. Fizetési összeg = Darab szám * Darab ár + Szállítási költség. 6.6. Napló tábla létrehozása CREATE TABLE Naplo (Kod CHAR(2), D DATE, Db NUMBER(6), M VARCHAR2(30), Mozgas CHAR(1)); Napló tábla leírása A tábla naplózza a készlet mozgatását. Segítségével nyomon lehet követni, hogy mikor történt rendelés kiadás, rendelés megérkezés és készlet levonás. - Kod: az alkatrész kódja. - D: a készletmozgás dátuma, melyet a rendszer dátumára állítottam be. - Db: a mozgatott darabszám. - M: a készlet mozgatását jelölő megjegyzés. (Készlet növelés, Rendelés kiadás, Készlet levonás) - Mozgas: a készlet mozgatásának jelölése. (+,,-) 30

7. Táblaműveletek 7.1. Elméleti ismertetés - Csomag (package): A csomag olyan, magas szintű adatabsztrakciós eszköz, mellyel az összetartozó változókat, konstansokat és alprogramokat írhatjuk le, és egy egységként kezelhetjük. A csomagban lehetnek eljárások, függvények, típus definíciók, változó deklarációk, konstansok, kivételek, kurzorok. A csomag két fő részből áll: a specifikációs részből és a törzsből (body). A specifikáció a csomag nyilvános része. A csomag kívülről elérhető elemeit adja meg, melyeken keresztül a felhasználók a csomag objektumaira hivatkozhatnak. A törzs a csomag privát része, melynek elemei a felhasználók számára nem hozzáférhetők. A csomag specifikációban megadott eljárások és függvények teljes definícióit tartalmazza (fejléccel és törzzsel együtt). Tartalmazhat még típusdefiníciókat, konstans, változó és kurzor deklarációkat is. - Tárolt eljárás: Lényege, hogy az adatkezeléshez kapcsolódó több helyen alkalmazott eljárásokat, függvényeket elhelyezhetjük az adatbázisban. Előnye, hogy csak egy helyen szükséges a kódot nyilvántartani, de többen is hozzáférhetnek. Ez a módosításukat is megkönnyíti, hiszen csak egy helyen kell elvégezni. A tárolt eljárások alkalmazása esetén gyorsabb lesz a végrehajtás is, mivel elő-feldolgozott formában tárolódik a művelet, másrészt felesleges részek nem ismétlődnek a memóriában a konkurens felhasználások során. - Job (munkaköteg): a feladatok ütemezésére használható. Végrehajtásukról egy folyamatosan a háttérben futó folyamat (SNP) gondoskodik. A munkakötegek egy várakozó sorban foglalnak helyet, minden Job-hoz hozzá van rendelve a következő futtatási idő. Az SNP megadott gyakorisággal felébred és megnézi, van-e alvó munkaköteg. Ha van, akkor elindítja. A lefutott Job-oknál az SNP meghatározza a következő futás időpontját. Így egy új munkaköteg kerül be a várakozó sorba. 31

- Trigger: Bizonyos tevékenységek a felhasználó közvetlen beavatkozása nélkül végrehajtódnak. A trigger dinamikus integritási feltételt jelent, amelyben adott egy kiváltó esemény és egy választevékenység. Működése egyszerű, ha a kiváltó esemény bekövetkezik, akkor végrehajtódik a választevékenység. 7.2. Csomagok 7.2.1. Alkatrész táblához tartozó csomag Alkatresz_csomag: A csomag tartalmazza a tábla feltöltését. feltolt: az eljárás beszúr egy rekordot az Alkatrész táblába. Alkatresz_csomag létrehozása: CREATE OR REPLACE PACKAGE Alkatresz_csomag AS PROCEDURE feltolt (kod IN Alkatresz.alk_kod%TYPE, nev IN Alkatresz.megnev%TYPE); END Alkatresz_csomag; Alkatresz_csomag törzse: CREATE OR REPLACE PACKAGE BODY Alkatresz_csomag AS PROCEDURE feltolt (kod IN Alkatresz.alk_kod%TYPE, nev IN Alkatresz.megnev%TYPE) AS BEGIN INSERT INTO Alkatresz VALUES (kod,nev); END; END Alkatresz_csomag; 7.2.2. Beszállító táblához tartozó csomag Beszallito_csomag: A csomag tartalmazza a tábla feltöltését, a incoterms és költség módosítását, illetve a szállítási idő és mód módosítását. feltolt: az eljárás beszúr egy rekordot a Beszállító táblába. modosit_ik: a beszállító neve alapján, módosítja a Beszállító táblában az incoterms és a költség értéket. 32

modosit_ido: a beszállító neve alapján, módosítja a Beszállító táblában az idő és a mód értéket. Beszallito_csomag létrehozása: CREATE OR REPLACE PACKAGE Beszallito_csomag AS PROCEDURE feltolt (n IN Beszallito.nev%TYPE, o IN Beszallito.orszag%TYPE, v IN Beszallito.varos%TYPE, m IN Beszallito.mod%TYPE, inc IN Beszallito.incoterms%TYPE, bi IN Beszallito.becsult_ido%TYPE, k IN Beszallito.koltseg%TYPE, t IN Beszallito.telefon%TYPE); PROCEDURE modosit_ik (n IN Beszallito.nev%TYPE, inc IN Beszallito.incoterms%TYPE, k IN Beszallito.koltseg%TYPE); PROCEDURE modosit_ido (n IN Beszallito.nev%TYPE, m IN Beszallito.mod%TYPE, bi IN Beszallito.becsult_ido%TYPE); END Beszallito_csomag; Beszallito_csomag törzse: CREATE OR REPLACE PACKAGE BODY Beszallito_csomag AS PROCEDURE feltolt (n IN Beszallito.nev%TYPE, o IN Beszallito.orszag%TYPE, v IN Beszallito.varos%TYPE, m IN Beszallito.mod%TYPE, inc IN Beszallito.incoterms%TYPE, bi IN Beszallito.becsult_ido%TYPE, k IN Beszallito.koltseg%TYPE, t IN Beszallito.telefon%TYPE) AS BEGIN INSERT INTO Beszallito VALUES (n,o,v,m,inc,bi,k,t); END; 33

PROCEDURE modosit_ik (n IN Beszallito.nev%TYPE, inc IN Beszallito.incoterms%TYPE, k IN Beszallito.koltseg%TYPE) AS BEGIN UPDATE Beszallito SET Incoterms=inc, Koltseg=k WHERE nev=n; END; PROCEDURE modosit_ido (n IN Beszallito.nev%TYPE, m IN Beszallito.mod%TYPE, bi IN Beszallito.becsult_ido%TYPE) AS BEGIN UPDATE Beszallito SET Mod=m, Becsult_ido=bi WHERE nev=n; END; END Beszallito_csomag; 7.2.3. Besz_Alk táblához tartozó csomag Besz_alk_csomag: A csomag tartalmazza a tábla feltöltését és darab ár módosítását. feltolt: az eljárás beszúr egy rekordot a Besz_alk táblába. Az azon mező automatikusan kitöltődik. Minden feltöltéskor lekérdezi a maximum azon értéket, és megnöveli egyel. Az e_ar és osszkoltseg mezőket a rendszer számolja ki. Az egység ár = darab ár * kiszerelés. Az összköltség = minimum rendelhetőség * darab ár + szállítási költség. A rendszer ellenőrzi, hogy a minimum érték magadása után a maximum értéke ne legyen kisebb, ellenkező esetben a kivétel dobódik. modosit_ar: az alkatrész kódja és a beszállító neve alapján, módosítja a Besz_alk táblában az darab ár értékét. A rendszer megkeresi a megadott érték párhoz tartozó azonosítót, ha nem talál ilyet, akkor kivétel dobódik. Ha talál azonosítót, akkor módosítja a darab árat, illetve az egység árat (egység ár = új darab ár * kiszerelés). 34

Besz_alk_csomag létrehozása: CREATE OR REPLACE PACKAGE Besz_alk_csomag AS PROCEDURE feltolt (kod IN Besz_alk.alk_kod%TYPE, besz IN Besz_alk.beszallito%TYPE, d IN Besz_alk.db_ar%TYPE, k IN Besz_alk.kiszereles%TYPE, mi IN Besz_alk.min%TYPE, ma IN Besz_alk.max%TYPE); PROCEDURE modosit_ar (kod IN Besz_alk.alk_kod%TYPE, besz IN Besz_alk.beszallito%TYPE, d IN Besz_alk.db_ar%TYPE); END Besz_alk_csomag; Besz_alk_csomag törzse: CREATE OR REPLACE PACKAGE BODY Besz_alk_csomag AS PROCEDURE feltolt (kod IN Besz_alk.alk_kod%TYPE, besz IN Besz_alk.beszallito%TYPE, d IN Besz_alk.db_ar%TYPE, k IN Besz_alk.kiszereles%TYPE, mi IN Besz_alk.min%TYPE, ma IN Besz_alk.max%TYPE) AS bk Beszallito.koltseg%TYPE; id besz_alk.azon%type; rossz exception; BEGIN SELECT koltseg INTO bk FROM Beszallito WHERE nev=besz; SELECT max(azon) INTO id FROM Besz_alk; IF ma>mi THEN INSERT INTO Besz_alk VALUES (kod,besz,d,k,mi,ma,mi*d+bk,d*k,id+1); ELSE raise rossz; END IF; END; 35

PROCEDURE modosit_ar (kod IN Besz_alk.alk_kod%TYPE, besz IN Besz_alk.beszallito%TYPE, d IN Besz_alk.db_ar%TYPE) AS id besz_alk.azon%type; bk Beszallito.koltseg%TYPE; BEGIN SELECT azon INTO id FROM besz_alk WHERE Alk_kod=kod AND beszallito=besz; SELECT koltseg INTO bk FROM Beszallito WHERE nev=besz; IF (id =null) THEN raise no_data_found; ELSE UPDATE Besz_alk SET db_ar=d WHERE (Alk_kod=kod AND beszallito=besz); UPDATE Besz_alk SET e_ar=d*kiszereles WHERE (Alk_kod=kod AND beszallito=besz); UPDATE Besz_alk SET osszkoltseg=d*min+bk WHERE (Alk_kod=kod AND beszallito=besz); END IF; END; END Besz_alk_csomag; 7.2.4. Rendelés táblához tartozó csomag Rendeles_csomag: A csomag tartalmazza a tábla feltöltését. feltolt: az eljárás beszúr egy rekordot a Rendelés táblába. A r_id mező automatikusan kitöltődik. Minden feltöltéskor lekérdezi a maximum r_id értékét, és hozzáad egyet. Csak olyan rendelést lehet felvenni, ami szerepel a Besz_alk táblában, vagyis az alkatrész kód és beszállító név értékpárok egy sort alkotnak. A megadott darabszám esetében leellenőrzi, hogy az értékpárnak megfelelő-e a kiszerelés és, hogy a minimum és maximum rendelhetőség közé esik-e az érték. Ellenkező esetben kivétel dobódik. A bekért értékek alapján kiszámolja a fizetendő összeget = darabszám * darab ár + szállítási költség. A rendelés kiadásakor a Napló tábla is bővül egy sorral. A sor tartalmazza a rendelésnél megadott alkatrész kódot és 36

darabszámot, az aktuális dátumot, a Rendelés kiadás' megjegyzést, illetve a mozgást jelző üres karaktert. Rendeles_csomag létrehozása: CREATE OR REPLACE PACKAGE Rendeles_csomag AS PROCEDURE feltolt (kod IN rendeles.alk_kod%type, d IN rendeles.db%type, b IN rendeles.beszallito%type); END Rendeles_csomag; Rendeles_csomag törzse: create or replace PACKAGE BODY Rendeles_csomag AS PROCEDURE feltolt (kod IN rendeles.alk_kod%type, d IN rendeles.db%type, b IN rendeles.beszallito%type) AS id NUMBER(3); megj CHAR(20); rossz exception; mi Besz_alk.min%TYPE; ma Besz_alk.max%TYPE; ki Besz_alk.kiszereles%TYPE; da Besz_alk.db_ar%TYPE; bk Beszallito.koltseg%TYPE; BEGIN SELECT max(r_id) INTO id FROM Rendeles; SELECT Db_ar INTO da FROM Besz_alk WHERE Alk_kod=kod AND Beszallito=b; SELECT Koltseg INTO bk FROM Beszallito WHERE nev=b; SELECT Besz_alk.min INTO mi FROM Besz_alk WHERE Alk_kod=kod AND Beszallito=b; SELECT Besz_alk.max INTO ma FROM Besz_alk WHERE Alk_kod=kod AND Beszallito=b; SELECT Besz_alk.kiszereles INTO ki FROM Besz_alk WHERE Alk_kod=kod AND Beszallito=b; 37

IF d>=mi AND d<=ma And d mod ki = 0 THEN INSERT INTO Rendeles VALUES (id+1, SYSDATE, kod, d, b, d*da+bk); ELSE raise rossz; END IF; megj:=' Rendelés kiadás'; INSERT INTO Naplo VALUES (kod, SYSDATE, d, megj, ' '); END; END Rendeles_csomag; A Rendeles_csomag.feltolt hatására lefutó TRIGGER és JOB: Egy rendelés feltöltésének hatására létrejön egy trigger, mely elindít egy munkaköteget. A Trigger megkeresi a rendelésnél megadott beszállító nevéhez tartozó szállítási idő. A jól tesztelhetőség érdekében a Beszállítókhoz tartoznak szállítási napok, így amikor kiadunk egy rendelést, az nem íródik be rögtön a raktári készletbe, hanem a napnak megfelelően fog hozzáíródni a készlethez. A rendszerben valójában nem napként számítja a Szállítási időt, hanem percként, ami fel van szorozva 10-zel, vagyis 2 nap valójában 2 * 10 perc = 20 perc. A Triggerben megadott Job, így mindig a Beszállító táblában megadott érték szerint fog lefutni. CREATE OR REPLACE TRIGGER Rendeles_T1 AFTER insert on Rendeles for each row BEGIN DECLARE jobno NUMBER; bi Beszallito.becsult_ido%TYPE; BEGIN SELECT becsult_ido INTO bi FROM Beszallito WHERE nev=:new.beszallito; dbms_job.submit (jobno, 'keszlet_modositas();', SYSDATE+(bi*10/24/60), null); END; END; 38

A JOB által meghívott keszlet_modositas eljárás: Az eljárás megkeresi az adatokat a maximum r_id alapján a Rendelés táblában, mivel a rendelés kiadása után rögtön a Trigger fut le, melyben a Job meghívja ezt az eljárás, így a maximum r_id értéke mindig helyes lesz. A rendelésnél kiadott darab számmal megnöveli a raktári készletet, az adott alkatrésznél, illetve a Napló táblát bővíti egy sorral. A sor tartalmazza az alkatrész kódját, a növelés idejét, a darab számot, a Készlet növelés megjegyzést és a mozgást jelző + karaktert. CREATE OR REPLACE PROCEDURE keszlet_modositas AS d Rendeles%rowtype; megj CHAR(20); BEGIN SELECT * INTO d FROM Rendeles WHERE r_id=(select max(r_id) from Rendeles); UPDATE Raktar SET keszlet=keszlet+d.db WHERE ralk_kod=d.alk_kod; megj:=' Készlet növelés'; INSERT INTO Naplo VALUES (d.alk_kod, SYSDATE, d.db, megj,'+'); END; 7.2.5. Raktár táblához tartozó csomag Raktar_csomag: A csomag tartalmazza a tábla feltöltését és a Raktár készlet módosítását. feltolt: eljárás beszúr egy rekordot a Raktár táblába. keszlet_naplozas: az eljárás véletlenszerűen kiválaszt egy alkatrész kódot a Raktár táblából, és a készleten lévő anyag 10%-át levonja (természetesen kerekített érték kerül levonásra, hiszen nincs fél alkatrész). A Napló tábla naplózza, hogy milyen alkatrész, mennyi, mikor lett levonva, illetve a Készlet levonás megjegyzés és a - mozgás karakter is beíródik az új sorba. 39

Raktar_csomag létrehozása: CREATE OR REPLACE PACKAGE Raktar_csomag AS PROCEDURE feltolt (kod IN raktar.ralk_kod%type, db IN Raktar.keszlet%TYPE); PROCEDURE keszlet_naplozas; END Raktar_csomag; Raktar_csomag törzse: CREATE OR REPLACE PACKAGE BODY Raktar_csomag AS PROCEDURE feltolt (kod IN Raktar.ralk_kod%TYPE, db IN Raktar.keszlet%TYPE) AS BEGIN INSERT INTO Raktar VALUES (kod, db); END; PROCEDURE keszlet_naplozas AS szam NUMBER; k Raktar.ralk_kod%TYPE; BEGIN SELECT ralk_kod INTO k FROM (SELECT ralk_kod FROM Raktar ORDER BY dbms_random.value ) WHERE rownum = 1; SELECT keszlet INTO szam FROM Raktar WHERE ralk_kod=k; INSERT INTO Naplo VALUES (k, SYSDATE, ROUND(szam/10), ' Készlet levonás', '-'); UPDATE Raktar SET keszlet=szam-round(szam/10) WHERE Ralk_kod=k; END; END Raktar_csomag; 40

Keszlet_naplozas-t meghívó JOB: A munkaköteg arra szolgál, hogy a raktáron lévő készlet ne csak növekedjen, hanem csökkenjen is, így szimulálva a gyártást. A rendszer 40 percenként lefutatja a JOB-ot, mely a fent leírt keszlet_naplozas eljárást hívja meg. DECLARE jobno NUMBER; BEGIN dbms_job.submit (jobno, 'raktar_csomag.keszlet_naplozas();', SYSDATE, 'SYSDATE+(40/24/60)'); END; Napló tábla karbantartása: Az eljárás cursor segítségével kitörli a 4 nappal ezelőtti napló bejegyzéseket, így a Napló tábla jobban átláthatóvá válik és a felesleges adatok nem terhelik le a rendszert. CREATE OR REPLACE PROCEDURE naplo_torles AS datum naplo.d%type; CURSOR c1 IS SELECT d FROM Naplo; BEGIN OPEN c1; LOOP FETCH c1 INTO datum; DELETE naplo WHERE d <(datum-3); EXIT WHEN c1%notfound; END LOOP; CLOSE c1; END; 41

A naplo_torles eljárást meghívó JOB: A munkaköteg minden nap lefut egyszer és meghívja a naplo_torles eljárást. DECLARE jobno NUMBER; BEGIN dbms_job.submit (jobno, 'naplo_torles();', SYSDATE, 'SYSDATE+1'); END; 42

8. Programfelület bemutatása 8.1. Hiányos készlet listázása Minden alkalommal, amikor a program elindításra kerül, egy ablakban a következő kérdés jelenik meg: Kívánja megtekinteni a hiányos anyagok listáját? (8.1. ábra) Az Igen gombra kattintva a Raktár tábla azon sorai jelennek meg, melyek készleten levő darabszáma kisebb, mint 50. SQL parancsa: SELECT * FROM Raktar WHERE keszlet < 50. A beszerző a lista segítségével látja, hogy milyen alkatrészre kell rendelést kiadnia. Az átláthatóság érdekében a mezőnevekre kattintva megjelenik egy kis nyilacska, mely által a táblázat értékei csökkenő vagy növekvő sorrendbe rendezhetőek. A rendszer a táblázatból nem lép ki automatikusan, így a felhasználó addig tudja használni, amíg szüksége van rá. A Nem gombra vagy a jobb felső sarokban lévő X - re kattintva pedig, bezárja ezt az ablakot, és csak a következő elindításkor jelenik meg újra. 8.1. ábra: Hiányos készlet listája 43

8.2. Alapfelület 8.2.1. Optimális beszállító kalkulálás Az alapfelület 2 fő részből tevődik össze, ebből az egyik az Optimális beszállító kalkulálás. Itt anélkül, hogy megrendelnénk az anyagot, meg tudjuk nézni, hogy melyik beszállítótól lenne érdemesebb megrendeli, a kívánt alkatrészt, vagyis összehasonlítást tudunk végezni. A legördülő listából ki kell választani, hogy melyik anyagról akarunk összefoglaló információt kapni. A Kalkuláció gombra kattintva meg is kapjuk az adatokat, egy táblázat formájában. (8.2. ábra) SQL parancsa: SELECT beszallito, mod, koltseg, db_ar, kiszereles, min, max, becsult_ido, osszkoltseg FROM Besz_alk INNER JOIN Beszallito ON beszallito=nev WHERE alk_kod like?. Előfordul, hogy a táblában csak egy sor jelenik meg, ez azért van, mert a kiválasztott alkatrészt csak egy beszállító tudja a vállalatnak biztosítani. Ha nem jelenik meg egy sor sem a táblázatban, akkor még nincs az anyag és a beszállító között kapcsolat felépítve (nincs nyilvántartva a Besz_alk táblázatban). Ha új alkatrész került felvételre, akkor a rendszert újra kell indítani, mert nem lesz benne a kalkulációs alkatrész listában., és nem lehet rá kalkulálást kiadni. 8.2. ábra: Optimális beszállító kalkulálás 44

8.2.2. Rendelés Az alapfelület másik része a Rendelés. (8.3. ábra) Itt lehet egy anyagot megrendelni, a megfelelő értékek megadásával. Fontos, hogy csak olyan rendelés adható ki, mely a Beszállító - Alkatrész (Besz_Alk) táblában szerepel, hiszen itt van nyilvántartva, hogy az anyagokat mely beszállítótól lehet beszerezni. A rendszer azt is ellenőrzi, hogy a darabszám a minimum és maximum rendelhető érték közé esik-e, illetve a kiszerelést is figyeli. Ha az értékeket rosszul adja meg a felhasználó, akkor hibaüzenet jelenik meg, és nem történik meg a rendelés felvétele. Ha a rendelés kiadása sikeres, akkor azt a Rendelések listázása gombra kattintva nézheti meg a beszerző, az eddig kiadott rendelésekkel együtt. 8.3. ábra: Rendelés A 8.3. ábrán látható, hogy a keret jobb felső sarkában van egy? feliratú gomb, erre kattintva kapunk egy kis segítséget a rendelés elkészítéséhez. (8.4. ábra) 8.4. ábra: Rendelés súgó 45

8.3. Új elem felvétele Minden tábla bővíthető új elemekkel, a folyamat menetét a 8.5. ábra mutatja. Az új alkatrész és beszállító esetében a programot újra el kell indítani, hogy a későbbiekben használni lehessen. Az elem feltöltése nagy odafigyelést igényel, mert nincs lehetőség a törlésre, csak az adatbázist kezelő rendszergazdának van rá jogosultsága. Oka, hogy ne lehessen alap információkat kitörölni. Említettem már, hogy minden tábla lehet új értékeket felvenni, csak ki kell választani a kívánt táblát a menüből. A kiválasztás után megjelenik egy ablak, melyben lehetőség van az új adatok rögzítésére. Az értékek kitöltését követően a Feltölt gombra kell kattintani, és a rendszer választ ad a feltöltés sikerességéről. Ha az értékek megadása helyes, akkor bekerül az adatbázisba, ha helytelen, akkor hibaüzenetet kap a felhasználó. Milyen hibák merülhetnek fel az értékek feltöltésénél? Nem megfelelő típusú szöveget írunk a mezőbe (pl.: szám helyett szöveget). A mező értéke nem felel meg a feltételeknek (pl.: nem megfelelő a szállítási mód megadása, a maximum rendelhetőség értékét kisebbre szeretnénk állítani, mint a minimum rendelhetőség). 8.5. ábra: Új rekord felvétele 46

8.4. Listázás A listázás menüpont alatt, a táblák tartalmát lehet megtekinteni. Itt kapunk arról információt, hogy milyen alkatrészek és beszállítók vannak, ezek között milyen kapcsolat van, és a raktárkészletet is megnézhetjük. A listázás elérését a 8.6. ábra mutatja. 8.6. ábra: Táblák listázása 8.5. Keresés Az adatok gyorsabb elérésének érdekében, különböző kereséseket készítettem. A menüből ki kell kiválasztani, hogy mely adatra szeretne a felhasználó keresést végrehajtani, majd rákattint a megfelelőre. A kiválasztás után, megjelenik egy ablak, melyben a legördülő lista segítségével választhatunk, majd a Keresés gombot kell megnyomni. A keresés eredménye egy táblázatban lesz megtekinthető. Milyen adatokat lehet a keresésekkel elérni? Az Alkatrész adatok -ra kattintva, az alkatrész kódja alapján megkapjuk, hogy mely beszállító, milyen egység és darab áron tudja szállítani az alkatrészt. A Beszállító adatok ra kattintva, a szállítás módját tudjuk kiválasztani, és a mód alapján megkapjuk, hogy mely beszállító, honnan, milyen paritással, hány nap alatt és mekkora költséggel szállít. A 8.7. ábra ezt a folyamatot ábrázolja. 47

A Rendelés re kattintva, kiválaszthatjuk annak az alkatrésznek a kódját, melyre már volt rendelés kiadva. Eredményül megkapjuk, hogy kitől, mikor és hány darab lett rendelve. 8.7. ábra: Keresés 8.6. Módosítás Sokszor előfordul, hogy a beszállító cég változtat az általa szállított alkatrész árán, vagy a beszállítási módon, stb. Ilyen esetekben a rendszer értékit is frissíteni/módosítani kell. Erre szolgálnak a különböző módosításokat végrehajtó menüpontok. Minden ablak jobb felső sarkában van egy? gomb, mely segítséget nyújt az adatok helyes kitöltéséhez. A Frissítés gomb megnyomásakor a rendszer ellenőrzi, hogy az értékek alapján végre hajthatja-e a módosítást. Ha nem tudja végrehajtani, akkor hibaüzenetet küld, ellenkező esetben módosul az adatbázis. Milyen módosításokat lehet elvégezni? Incoterms és költség kiválasztásánál a beszállító neve alapján lehet változtatni az értékeket. Figyelni kell az incoterms és a szállítási mód helyes használatára. Szállítási idő és mód -ra kattintva, egy legördülő listából kell kiválasztani, hogy mely beszállító paramétereit szeretnénk megváltoztatni. Itt is fontos a szállítási mód és a paritás helyes értékeinek megadása. 48

Alkatrész ár kiválasztásánál, az alkatrész kódját és a beszállító cég nevét a Besz_alk táblának megfelelően kell megadni, és ennek alapján lehet az új árat beírni. (8.8. ábra) 8.7. Naplózás 8.8. ábra: Módosítás A készlet mozgását a Napló tábla tárolja el. Nyomon lehet követni, hogy mikor lett rendelés kiadva és az mikor érkezett meg, illetve a készlet levonást is feltünteti. A tábla megadja, hogy melyik anyag, mikor és hány darab került mozgatásra. A tábla elérését a 8.9. ábra mutatja. 8.9. ábra: Naplózás 49

8.8. Súgó A súgóban az alapfelületnek és a menüpontnak van leírva a használata. A különböző menüpontokat külön fülekbe helyeztem el, így könnyedén megtalálható bármilyen információ. Itt le van írva, hogy mit, hogyan és hol talál meg a felhasználó, illetve az is, hogy az adott művelet mire szolgál. (8.10. ábra) 8.10. ábra: Segítség 50