Általános Informatikai Tanszék
Automatizált adatbáziskezelő létrehozása logisztikai problémák megoldására
Szakdolgozat (GEIAL-10/BSc/2014)
Készítette: Csizmadia János Neptun kód: XR7CF5 H-3980 Sátoraljaújhely, Esze Tamás utca 11. Témavezető: Dr. Kovács László
Miskolc, 2014
Tartalomjegyzék 1.
Bevezetés ................................................................................................................................... 2
2.
A feladat megoldásának lehetőségei, szakirodalom, piac áttekintése ....................................... 5
3.
Architektúra tervezés .................................................................................................................. 8
4.
Fogalmak és ER modell ........................................................................................................... 12
5.
A Visual Basic bemutatása ....................................................................................................... 15
6.
Formok, vezérlők használata, azok tulajdonságai ................................................................... 22
7.
A program funkcióinak bemutatása .......................................................................................... 24
8.
Az SQL nyelv bemutatása ........................................................................................................ 37
9.
Összeköttetés a Visual Basic és az SQL között (ADO) ........................................................... 40
10. Hibakezelés és védelem .......................................................................................................... 43 11. Tesztelés .................................................................................................................................. 46 12. Összefoglalás ........................................................................................................................... 49 13. Summary .................................................................................................................................. 50
1
1. Bevezetés A lehető legnagyobb problémát egy multinacionális cégnél a tárolás és raktározás jelenti, amelynek digitális módon történő követése jelentősen megkönnyíti és költségkímélővé teszi a már elengedhetetlenül fontos anyagok kezelését. A Robert Bosch Energy and Body Systems cég tesztelési osztályánál, amelynek neve Test Center, hasonló nehézségeket okoz főként a helyhiány és emellett a tárolt anyagok,
teszt
minták
sokfélesége
miatt
fellépő
raktározás
és
annak
nyomonkövetése. Minden, a Test Center-hez befutó megrendelés esetén, ahol a megrendelő lapon nem szerepel, hogy a mintákat vissza kell szolgáltatni a megrendelőhöz, ott a tesztelési osztály feladata az elvégzett teszteket követően a minták tárolása. A megrendelés adott számú, azonos cikkszámhoz tartozó termékpéldány (későbbiekben minta) tesztelésére vonatkozik. Ehhez készül egy teszt-mátrix, amelyet továbbítanak a megrendelő lappal együtt. Ez a mátrix lényegében egy terv, mely mintákon milyen tesztet kell elvégezni, felépítése struktúrális, sorrendiséget tartalmaz. Egy termék validációja esetén ez akár 150200 mintát is jelenthet. A cég1 jelenleg körülbelül 200-300 különböző termék tesztelését is erre az osztályra bízza, amelyek beazonosítására 2013-ban bevezetésre került egy úgynevezett etikett, amely alapján könnyebb a minták felismerése. Ez az etikett tartalmazza a Test Center által generált megrendelési számot, a minta sorszámát, amelyet a teszt-mátrix alapján kap meg és a felelőse nevét. Rendelkezik egy vonalkóddal is, ez azonban még felhasználásra nem került.
Minden
minta
reldelkezik
egy
ilyen
címkével.
A
cég
minden
sorozatgyártásban lévő termékén kötelező jelleggel végez éves minőségi- és megbízhatósági teszteket, amelyek száma – termékektől és üzletágtól függően – 20 darabtól egészen 40 darabig terjedhet.
További probléma, hogy a
reklamációknak köszönhetően bármilyen minta elérését biztosítani kell a minőségbiztosítási osztály számára, amely darabok akár 2006-ban voltak legyártva, akár 2013-ban. Ebből fakadóan nem elegendő egy olyan adatbázis létrehozása, amelyben csak az alapadatokat tároljuk.
1
Robert Bosch Energy and Body Systems
2
A tárolás hely és épület hiányában nem megoldható a Bosch cégen belül, ezért a Test Center kötött egy szerződést egy külsős logisztikai céggel, az ÁTI DEPO ZRt.-vel, a továbbiakban csak ÁTI. Mivel országos szinten több telephellyel is rendelkezik ez a cég, számukra is elengedhetetlenül fontos a szabványok használata. Ilyen szabvány a gitterbox, amely egy fém „ketrec” és kötött dimenzionális méretei vannak, ezek a következők: 1080 cm x 800 cm x 680 cm. Az ÁTI nem tud biztosítani több gitterbox-ot a jelenlegieken kívül, ezek száma 72 darab. A gitterbox a továbbiakban gibo-ként is szerepel. Ahhoz, hogy a minták a lehető legkevésbé sérüljenek a szállítás során, szükséges speciális tárolók használata. Ezeket KLT-nek nevezik, olyan mozaikszó, amelynek több jelentése is van, de itt mint tárolási egység szerepel. Minden ilyen tárolási egység rendelkezik egy műanyag öntvénnyel, amelybe az adott minták pontosan beleillenek, így kisebb a tesztelésen átesett alkatrészek sérülésének veszélye. Alapvetően 6 különböző típusa van, amelyek a Test Center számára megfelelnek. Ezekről a típusokról részletesebb leírás a későbbiek során kerül sor. Egy gitterbox a különböző KLT típusokból több fajtát is tartalmazhat, azok dimenzionális méretétől függően. Egy KLT tartalmazhat más és más TC számhoz tartozó alkatrészeket, akár 8-10 különböző mintát is jelenthet, ezek nyomonkövetése viszont nem egyszerű feladat. Minden gitterbox rendelkezik egy számmal, amely mind a Bosch, mind az ÁTI számára nyújt segítséget a beazonosításhoz. Speciális igény esetén ezek a gitterbox-ok a lehető leggyorsabban be kell, hogy kerüljenek a Test Center-be. Előfordulhat, hogy a validáláskor nem derült ki az összes
probléma
a
termékkel
kapcsolatban,
azonban
a
mindennapos
használatban súlyos hibák léptek fel (blokkolódnak a forgó részek, megnő az áramfelvétele, ezzel együtt elkezd felmelegedni, majd izzani az adott alkatrész, a hőbiztosíték pedig nem old ki időben, amely több járműben is tűzkárhoz vezett, stb.). A régi minták esetén lehetőség van bizonyos utólagos tesztek elvégzésére, amelyek eredménye akár gyártósor leállítást, legrosszabb esetben gyárleállást is okozhat, ezért a reagálás ideje akár a Bosch, akár az ÁTI részéről rendkívül kritikus pont. A gitterbox berendelés folyamata úgy zajlik, hogy a kívánt gitterbox számát el kell küldeni az ÁTI DEPO beszállításért felelős kollégáinak (3 fő), a fuvarozó cég alkalmazottjainak (2 fő) és a Bosch beszállítói osztályának érintett kollégáit (2 fő). 3
Tehát szükség van egy olyan rendszer létrehozására, amely képes akár automatizáltan is működni, lecsökkentve ezzel a Bosch dolgozóinak ezen irányú tevékenységeit, amivel fontos órák spórolhatók meg, ezzel is növelve a produktív munkaidőt. A szakdolgozat témája egy olyan szoftver létrehozása, amelyben a gitterbox-ok tartalma nyílvántartható, illetve a minták tárolási idejének leteltekor automatikusan kezdeményezi a selejtezés folyamatát azáltal, hogy értesíti a raktárat és a Test Center megfelelő alkalmazottjait. Az alapötlet egy olyan alkalmazás létrehozása volt, amely képes adatokat tárolni, lehet benne filtereket alkalmazva szűrni, képes akár e-mail küldésére is. A hibák elkerülése miatt az adatok bevitele form-okon keresztül kell, hogy történjen és a későbbi adatveszteség elkerülése miatt napló fájlt is készítsen adott időközönként. A legjobb és legkézenfekvőbb megoldást a Microsoft Excel 2007 nyújtotta, mivel a cég anyagi okok miatt a Microsoft termékek közül csak az Excel és Word license-t vásárolta meg, a nagyobb költséget jelentő Access nem használható a cégen belül. Mivel az adatbázist alapvetően két ember kezeli, nem jelent gondot a fájltartás, olvasásra mindenképpen megnyitható és minden elvégzett művelet után automatikus mentés történik. Ezért azok a kollégák, akik keresni szeretnének az adatbankban, könnyű szerrel megtehetik azt. Form-on keresztül fogják a felhasználók módosítani az adatokat. Mindez adatbiztonsági szempontból fontos, nagyobb mennyiségű adat elvesztése súlyos munkaórákat jelentene a cég számára, ami megengedhetetlen a megrendelések száma miatt.
4
2. A feladat megoldásának lehetőségei, szakirodalom, piac áttekintése A feladat megoldásának lehetőségei
A rendszer általános architektúráját tekintve egy kliens-szerver kapcsolat, az általános kliens-szerver kapcsolat az 1. ábrán látható.
1. ábra Kliens-szerver kapcsolat
Egy fájlszerveren tárolt fájl elérése a Bosch belső hálózatán úgy történik, hogy a kliens először kapcsolódik egy switch-hez, amely a fizikai végpontok eléréséért felelős. Ez a switch közvetlenül csatlakoztatva van egy disztribútor switch-hez, amelyek különböző épületekben vannak elhelyezve. A szerver és a disztribútor switch között elhelyezkedik egy média konverter, amely a monomódusú optikai szálak multimódosú szálakká történő átalakítását végzi. A monomódusú optikai kábelek használata nagyobb távolságok esetén, míg a multimódusú kábeleké körülbelül 2 kilométeres távolság áthidalására használatos. Előbbi sokkal nagyobb sebességet képes elérni, amelynek határa gyakorlatilag a csatlakoztatott eszköztöl függ. A fájl elérés a 2. ábrán látható.
2. ábra A Bosch kliens gépeinek fájlérési folyamata
Szükséges egy hálózaton elérhető alkalmazás, amelynek létrehozásához a rendelkezésre álló lehetőségek taglalása, ismertetése következik. 5
A
munkahely
biztonsági
előírásainak
betartása
érdekében
történő
megszorításoknak köszönhetően a választási lehetőségek száma rendkívül lecsökkent. Az adatbázis kezelése gyorsaság és teljesítmény szempontjából egyértelműen relációs adatbázis irányába mutat, azonban az SQL nyelv a végfelhasználók számára átláthatatlan, értelmezhetetlen, olvashatatlan. Előre megírt procedurák, kurzorok, triggerek segítségével van lehetőség a felsorolt problémák javítására, (azonban idő és fejlesztői környezet hiányában az SQL nem jelentett megoldást a problémára.) Habár folyamatosan fut egy SQL szerver a cégen belül, biztonsági okokból ez a szerver nem használható semmilyen formában, ennek karbantartása és üzemeltetése egy külön osztály feladata. További problémát jelent az is, hogy telepítési jogosultság sincs, csak osztályvezetői engedéllyel lehet szoftvert installálni, és ehhez is több oldalas igénylés szükséges, amelynek elbírálása 8-9 emberen megy keresztül, köztük az anyacégen is, ami Németországban található. A Microsoft által fejlesztett Access is remek megoldást nyújthat, azonban a cég ezen
program
license-t
nem
vásárolta
meg,
ennek
egyenes
irányú
következménye, hogy az Excel, amely alapvetően táblázatkezelő, bár nagy adathalmaz kezelésére nem igazán alkalmas, ez esetben mégis elegendő lehetőséget
tud
biztosítani
annak
érdekében,
hogy
egy
automatizált,
végfelhasználók által átlátható adatbázist kezeljen. Az egyetlen lehetőség az Excel maradt, amely adatok tárolására alkalmas, tartalmaz Visual Basic fejlesztői környezetet, lehetőséget biztosít szűrők használatára. Előzetes becslések alapján az adatmennyiség nem haladja meg a kritikus 1048576 sorok számát, amely a cégnél használatos Microsoft Excel 2007 határszáma, sőt ennek körülbelül csak a tizede kerül majd felhasználásra. Ezen információk ismeretében egy ilyen szintű adatbázis teljes mértékben kezelhető marad, erőteljes lassulás nem tapasztalható. Rendkívül nagy előnye, hogy nyílt, license probléma nincs, és a hálózaton keresztül bárki elérheti. Amennyiben valaki már használja a fájlt, akkor is meg lehet nyitni olvasásra, amely a működést nem befolyásolja. Az adatbevitelt csak két személy végezheti, akik egyszerre soha nem szeretnének rekordokat felvinni, ezért a körülmények ismeretében elegendő lehetőséget biztosít egy alkalmazás létrehozásához. 6
A korlátozások ellenére a dolgozat olyan modult is tartalmaz, mellyel megvalósítható az SQL adatbázisokban történő adattárolás, de ennek bevezetése még nagyon sok időt és energiát fog felemészteni.
Szakirodalom
A Visual Basic-ben való programozáshoz rendkívül nagy segítséget nyújthat John Walkenbach Excel 2007 Bible[1] című könyve, amely minden lényeges információt tartalmaz, amely segítségével az alapoktól kiindulva el lehet jutni a haladó szintig. A tananyag logikusan felépített, jól strukturált, példakódokban bővelkedik. A megértés csupán annyiban nehezebb, hogy a könyv angol nyelven íródott, magyar nyelvű változata egyelőre nem jelent meg. Egy másik hasznos könyv Farkas Csaba és Szabó Marcell nevéhez fűződik, a címe pedig A programozás alapjai Visual Basicben[2]. A könyv magyar nyelven íródott és mivel nem csak az Excel rendelkezik Visual Basic fejlesztői környezettel, ezért ez egy kicsit több témára irányul, mint például a Visual Basic 6, valamint a script-ek írásában is nagy segítséget nyújt.
Az SQL megvalósításhoz nagyban hozzájárult Michael J. Hernandez - John L. Viescas SQL-lekérdezések földi halandóknak[3] című könyve, amely CD melléklettel is rendelkezik, amely sok hasznos példával járul hozzá az SQL nyelv megértéséhez, elsajátításához. Hasonlóan jól felépített és részletesen kitárgyalt könyv Bódy Bence Az SQL példákon keresztül[4] című könyve, amelynek nagyszerűsége abban rejlik, hogy minden példára többféle megoldást is felsorakoztat, ami nagy segítséget nyújt a programozó számára abban, hogy a számára legmegfelelőbb és legegyszerűbb megoldást kiválasztva jusson el a problémától annak fizikai megvalósításáig.
A feladat megoldásának fő problémája nem a szakirodalom megtalálása, hanem a funkciók kialakításának logikai felépítése volt.
7
3. Architektúra tervezés A tervezés fázist a szoftvertechnológiában általában nagyon vékony vonal választja el az elemzés fázisától. Az elemzés gyakran tervezési fázisba hajlik át, ahol azonkívül, hogy modell készül a megoldandó feladatról, a megvalósítás lépései is definiálásra kerülnek. „Az architekturális tervezés az a tervezési folyamat, amelynek során kijelölik a rendszert alkotó alrendszereket és azt a keretrendszert, amely vezérli az alrendszereket és biztosítja közöttük a kommunikációt.”[5]. Tehát a tervezés alapját képező szoftver architektúra érhető el a folyamat segítségével. A rendszerstruktúra létrehozása azért fontos, mert egy bonyolult rendszer önállóan, egy feladatként nem tervezhető, szükséges az adott részfeladatokra bontása, a részfeladatok
közötti viszony leredukálódik vezérlési és adatcsere
kapcsolatra. A struktúra lehetőséget biztosít a specifikáció és a tervezés folyamatának összehangolására és összekötésére. Az architektúra tervezés célja a rendszer struktúrájának kialakítása, valamint a keretrendszer megalkotása. A tervezés fázisa során felmerülhetnek bizonyos kérdések, amelyek a későbbiek során kritikussá is válhatnak, de a kezelését, esetleges megoldását már az első lépések során meg lehet oldani és bizonyos követelmények további elemzésével a rendszer jobb mutatókkal rendelkezhet. Ezek az alapvető követelmények a következők:
teljesítmény: kellően gyors lesz-e a rendszer, szükséges-e lépéseket tenni valamilyen más irányba, amely segíthet a sebesség optimalizálásában;
megbízhatóság:
történhet-e
bármilyen
okból
kifolyólag
adatvesztés,
összeomlás, esetleges használhatatlanság;
karbantarthatóság: mennyi időt fog majd a jövőben igénybe venni a javítás.
A teljesítmény nagyban függ attól a környezettől, ahol a rendszert használni fogják. Elsősorban hardveres korlátok akadályozhatják a programozót egy feladat megoldásában, például nem áll rendelkezésre a kellő erőforrás, valamely algoritmus túl sok memóriaigénnyel rendelkezik, a szükséges CPU idő nagyon nagy.
Nem
feltétlenül
csak
hardveres
8
határai
lehetnek
egy
rendszer
sebességének, lehetnek szoftveres problémák is. Adott esetben olyan szintű lassulást eredményezhet több szoftver együttes használata, amely egy rendszert a lassúsága miatt teljesen használhatatlanná teszi. A megbízhatóság fontossága vitathatatlan. A szerepe abban rejlik, hogy az adatbevitel során ne kerülhessenek olyan értékek az adatbázisba, amelyek a program leállását eredményezhetik, mert egy hiba nem volt lekezelve és az adott szkript nem futott le végig. Minden adatnak konzisztensnek kell lennie, ami azt jelenti, hogy semmilyen ellentmondás nem megengedett azok feldolgozásakor. Változók használatakor ügyelni kell a típusokra, ne fordulhasson elő olyan probléma, hogy egy olyan beviteli mezőbe, ahol dátumot kellene megadni, belekerülhessen más adattípus, mert a jövőbeni kalkulációkban, feldolgozásokban fatális hibához vezethet, amely az adatbázis összeomlásához vezethet, vagy adott esetben teljesen használhatatlanná válhat. Karbantarthatósági szempontból a legkritikusabb rész a gyakorlat során fellépő hibák javítása. Természetesen a fejlesztőnek a lehető legtöbb hibalehetőséget fel kell tárnia az elemzés során, azonban az összes megtalálása a kezdetekben szinte lehetetlen. Amennyiben fellép bármilyen hiba, azt a lehető leggyorsabban el kell tudni hárítani, az ezzel eltöltött időt pedig le kell redukálni. Ha egy program működése nem stabil és az utómunkálatok sok időt vesznek igénybe, az a programozó számára munkaterhelhetőségi szempontból hátrányt jelent, mert nem fog tudni más feladatra koncentrálni, amely idő- és bevétel kiesést fog jelenteni céges szemszögből. Programozáskor lehetőség van az esetleges jövőbeli újrahasznosíthatóságot is figyelembe venni. Így törekedni kell arra, hogy az adott modulokat kis módosításokkal fel lehessen használni más projektekben is, amely természetesen időbefektetéssel jár, de még mindig kifizetődőbb minimális munkával a cél elérése, mint a feladat átgondolása után a nulláról elkezdeni és felépíteni azt. Programozási szempontból a szoftvert felépítő modulok implementálásakor az volt cél, hogy a kód, amennyire lehet, általános felépítésű legyen. Egy összetettebb rendszert alrendszerekre kell bontani, majd meg kell állapítani a kommunikációs kapcsolatokat, azokat a pontokat, amelyek elengedhetetlenek az alrendszerek tovább bontásához. 9
A következő szint a modul, amelyeket a moduláris felbontás segítségével lehet létrehozni. A modul „olyan rendszer-komponens, amely szolgáltatás(oka)t nyújt más moduloknak és igénybe veszi mások szolgáltatásait, de nem tekinthető független alrendszernek” [5]. A vezérlési modellek közül kettő általánosan használt [5]:
központosított vezérlés,
esemény alapú vezérlés.
Lévén, hogy a Visual Basic eseményvezérelt programozási nyelv, a vezérlési modellek
közül
egyértelműen
az
esemény
alapú
vezérlési
modell
a
leginformatívabb jellegű. Az alrendszernek rendelkeznie kell azzal a tulajdonsággal, hogy az őt ért külső vagy más alrendszer által létrehozott eseményekre valamilyen módon lekezelést tudjon nyújtani. Egy esemény nem csak egyszerűen egy szignál, jelentheti akár egy érték megváltozását is. Leírására két modell használatos:
broadcast modell: minden alrendszer értesül az eseményről, azonban a lekezelést az az alrendszer végzi, amelyiknek ez a feladata.
megszakításvezérelt modell: valós idejű rendszerek esetén felhasználható, ahol egy megszakítás-kezelő, megfigyelő dolgozza fel az eseményt és adja át a vezérlést egy olyan alrendszernek, amelynek feladata annak lekezelése.
Az alkalmazás működésének a szemléltetésére a megszakításvezérelt modell bizonyult a legmegfelelőbbnek, amely az 3. számú ábrán látható.
10
3. ábra Az adatbevitelre vonatkozó megszakításvezérelt modell
A feladat megoldásához szükséges egy use-case diagram elkészítése is, amely egyszerűsített formája a 4. ábrán látható.
4. ábra Egyszerűsített use-case diagram
A nyíl nélkül jelölt vonal csak „Actor” (lényegében felhasználó) és használati eset között lehetséges. Az ábrán fehér, nem kitöltött végű nyillal jelölt az általánosítás, míg értelemszerűen a szaggatott vonalon <<extends>> a kibővítést, a <
> pedig a tartalmazást jelenti.
11
4. Fogalmak és ER modell Az ER modell az Entity-relationship rövidítéséből képzett mozaikszó, más szóval egyed-kapcsolat modell [6]. Grafikus megjelenítő eszköz, amely az adatbázis struktúráját mutatja meg. Nem teljes adatmodell, de egyszerű, ezért rendkívül elterjedt. Megalkotása az 1980-as évek elejére tehető. Alapvetően 3 fő komponense van [6]:
Egyed: az egyed egy objektum típus, egy egyértelműen elkülönített dolog, amely önállóan is létezik és információkkal rendelkezik, amelyek tárolására szükség van.
Kapcsolat: az egyedek között lévő ideiglenes vagy hosszú
távú
asszociáció, melyek közül csak az elsődleges kapcsolás megadása kötelező.
Tulajdonság: az egyedeket és kapcsolatokat jellemzik, a tárolandó információt tartalmazza.
A kapcsolatok számossága alapján megkülönböztethetünk több kategóriát is:
1-1 kapcsolat: egy egyedhez maximum egy egyed kapcsolódik a kapcsolatban, mindkét irányban.
1-N kapcsolat: egy-több kapcsolat, amely esetben az egyik irányból egy egyedhez több egyed kapcsolódhat, de a másik irányban csak egy egyed kapcsolódik.
N:M: több-több kapcsolat, mindkét irányban több egyed kapcsolódhat.
A tulajdonságok alapján is több kategória létezik:
normál: egyértékű, egyértelmű tulajdonság
kulcs: azonosító jellegű, egyedi
összetett: több tagból áll
többértékű: több értéket is felvehet
származtatott: értéke számítható
12
Az ER modell megértéséhez szükséges néhány alapfogalom tisztázása, ezek a következőek:
Gitterbox: tároló, amelyet a külső raktározó cég használ, egy típusa van, dimenzionális mérete kötött (5. ábra)
5. ábra Gitterbox
KLT: szintén tároló, de különböző típusai vannak, ezek dimenzionális méretben térnek el egymástól (6. ábra)
6. ábra KLT
TC number: TC szám, a megrendelőlap feldolgozásakor kapja a teszt vagy validáció a számot, amelynek első két karaktere tartalmazza a TC mozaikszót, a következő két karaktere jelzi az évet és a további karakterek jelentik a megrendelés számát egyezményesen
Responsible: felelős, egy megrendelésnek egy felelőse van
Type: a termék típusát jelöli, ezzel az ágazat is megismerhető (több osztályba sorolhatóak a termékek)
Quantity: darabszám, azt mutatja meg, hogy az adott termékből hány darab van az adott KLT-ben
Storage deadline: tárolási határidő, ennek leteltekor kezdődhet meg a leselejtezés 13
Project name: a projekt neve, ez általában fantázia név (például: N130, T1N) vagy utalás a termék jövőbeli felhasználására (Ford Transit, John Deere)
Description: leírás, amellyel beazonosítható a termék (teszt kerék, motor, modul, pollenszűrő stb.)
Serial number: mintaszám, a minták általában az "Sn" mozaikszóval és számmal vannak ellátva, de sok esetben előfordul a "New", "Old" vagy "Standard" szavakból keletkező "n", "o", "st" rövidítések használata is.
Load: kitöltöttség, a gitterbox kihasználtsága százalékos értékben kifejezve
ID: gitterbox száma, ez 01-től kezdődik és jelenleg 72-nél tart (a számozás nem feltétlenül folyamatos).
Picture: egy fénykép a gitterbox-ról, beazonosításban segít
A feladat ER modellje a 7. ábrán látható.
7. ábra A feladat ER modellje
Az ER modellből kiderül, hogy a tulajdonságok mindegyike normál, leszámítva a gitterbox egyedi azonosítóját, az egyedi azonosító elsődleges kulcs. A gitterbox tartalmazhat több KLT-t, amely szintén tartalmazhat több mintát, akár több, különböző TC számmal rendelkezőek is lehetnek egy KLT-ben.
14
5. A Visual Basic bemutatása A Visual Basic a Microsoft által kifejlesztett programozási nyelv, ami tekintve azt, hogy a számítógép tulajdonosok nagyszámban használnak Microsoft Windows operációs rendszereket, a kompatibilitás nem jelent gondot a Visual Basic-ben fejlesztők számára. Alapvetően objektumorientált és eseményvezérelt nyelv, a felhasználói felület könnyen kezelhető, szerkeszthető, amely rendkívüli módon leegyszerűsíti a programozó feladatát a design elkészítésében. A forráskód strukturált, a vezérlés a fejlesztő által előre definiált események bekövetkezéséhez köthető, ezeket más néven triggereknek hívják.
Változók
Változó deklarációja a Dim kulcsszó segítségével történik, szintaktikája a Dim változó neve [As típusa]
[7]. Több változó definiálásra is van lehetőség, ebben
az esetben a változó neve és típusa után vesszővel elválasztva adhatjuk meg a következő deklarálandó nevet és típust. Mint minden programozási nyelvben, a Visual Basic is rendelkezik különböző adattípusokkal, ezek közül a legegyszerűbb az integer. Ezzel a típussal ellátott változó egész számokat tárol, amely előjelesen -32768-tól +32767-ig kaphat értéket. Létezik előjel nélküli változata is, ez a [0:65535] tartományon értelmezhető. Megadása deklaráció során: Dim szam As Integer
A következő típus a String, amely karakterek sorozatából áll és kaphat bármilyen értéket, legyen az betű vagy szám. Az egyik leggyakrabban használt típus, gyakorlatilag minden nyelvben létezik valamilyen formában, legyen az egyszerű vagy összetett típus, hossza véges. Egy String típusú változó deklarálása a következőképpen történhet:
15
Dim valtozo As String
Mint a legtöbb programozási nyelvben, itt is létezik double típus, amely 64 bites lebegőpontos szám. Definiálása a Dim lebego As Double módon lehetséges. Minden változó különböző élettartammal és érvényességi körrel rendelkezik. Alapvetően három típusa létezik:
lokális változó: általában segédváltozók, amelyeket pl. egy For ciklus lefuttatásához használ a programozó.
modul változó: érvényessége a Sub lefutásának végéig tart, értékét ezután elveszíti.
globális változó: a Sub lefutása után értéke még felhasználható egyéb Subon belül.
A változók rendelkeznek különböző minősítőkkel is:
public: nyilvános, tehát bármely modul számára elérhetővé tehetjük.
private: csak az adott modulon belül használható.
Amennyiben a Dim kulcsszó helyett a Static minősítőt alkalmazza a programozó, a változó a eljárásból való kilépése után továbbra is megőrzi az értékét. Tömbök A C nyelvtől eltérően a tömbök definiálásakor nem szögletes zárójelben kell megadni a tömb méretét, hanem normál zárójelek között. Deklarálása: Dim tomb(0 To 200) As String
A fent említett tömb 200 elemű és minden eleme String típusú. A Visual Basic lehetőséget biztosít egy egyszerűbb megadásra is. Ebben az esetben az indexelés alapértelmezetten 0-tól indul, tehát a zárójelben csak a tömb utolsó elemének számát kell megadnunk a következő módon: Dim tomb(200) As String
A két példa teljes mértékben ekvivalens deklarációnak minősül.
16
Vezérlési szerkezetek A ciklusmagot és a feltételes utasításokat a C nyelvvel ellentétben nem szükséges kapcsos zárójelek közé tenni, azonban minden feltételnek vagy ciklusnak rendelkeznie kell egy lezáró taggal, amely minden esetben tartalmazza az End utasítást. Az egyik leggyakrabban használt feltétel vizsgálat a jól ismert if-else szerkezet. Szintaktikája és megadása: If (feltétel, amely értéke true vagy false) Then utasítás1 utasítás2 Else utasítás3 End if
Lehetőség van rögzített lépésszámmal ciklust is megadni. Ezt a For kulcsszóval jelezzük, amely után zárójelben definiálható a kezdő- és végérték, valamint a lépésköz. Szintaktika: For változó = kezdőérték To végérték [Step lépésköz] utasítások [Exit For] ha a ciklus vége előtt szükséges a kilépés Next változó
A szögletes zárójelben lévő definíciók opcionálisak, megadásuk nem kötelező. Feltétellel vezérelt ciklusok közül három használatos, melyek közül kettő elől-, egy pedig hátul tesztelős.
17
Ezek közül az első a While, ahol a ciklus addig végzi az iterációkat, amíg a feltétel hamissá nem válik. Szintaktikája: While (feltétel) utasítások Wend
A Do-Loop rendelkezik mind elől-, mind hátul tesztelős formában, előbbi megadása a következő: Do [While (feltétel)] utasítások Loop
Utóbbi szintaktikája: Do utasítások Loop While(feltétel)
Mindkét esetben a feltétel hamissá válása előtt a kilépés az Exit Do paranccsal biztosított. Modul Az alkalmazás alapját képező egység a modul. Három alapvető típusa van, ezek a következőek:
form
standard
osztály
Egy alkalmazás összes ablakához kapcsolódik egy form modul, amely kiterjesztése *.frm, ahol a csillag a form nevét jelöli. Ez a modul tartalmazza a tulajdonságait. Esemény eljárásokat tartalmaz, amelyek lényegében definíciók,
18
hogy bizonyos események bekövetkezésekor milyen utasítást kell végrehajtani, de tartalmazhat objektum nélküli alprogramokat is. A standard modul megírására akkor van szükség, ha az adott kódrész semmilyen vezérlővel nincs kapcsolatban, de felhasználható több helyen is, mert bizonyos események lekezeléséhez ugyanazokra a metódusokra van szükség. Csak kódot tartalmaz, adatot nem Standard modul esetében nem kell a kódot többször bemásolni, elegendő csak meghívni,
így kevesebb
munkája
is van
a
programozónak. Osztálymodulok a Visual Basic objektum orientált programozási részének alapját képezik. Olyan objektum létrehozására hivatott, amelyet maga az alkalmazás is használ. Tartalmazhat kódot és adatot is. Felépítését tekintve két részből áll, az első a deklarációs rész, a második a kódrész. Előbbiben változók, konstansok, DLL eljárások szerepelhetnek, amíg utóbbi tartalmazza az ezekkel történő műveleteket. Minden modul rendelkezik egy egyedi névvel, ezt a nevet célszerű úgy kiválasztani, hogy utaljon a modul funkciójára. Szerkezeti felépítése a következőképpen néz ki: Private Sub modul(param1, param2) deklarációs rész kódrész End Sub
Function A legnagyobb különbség a modul és a function között, hogy míg a modulnak nincs visszatérési értéke, a function visszatérési értéke felhasználható akár több modul esetén is.
19
Felépítése következik: Function nev(x As Integer, y As Integer) As Integer nev = x * y End Function
Az első sorban, a paramétereket tartalmazó zárójel után található As Integer kifejezés, amely a visszatérési érték típusát jelöli. Modulban meghívása a következőképpen történhet: Private Sub modul() Dim valtozo As Integer valtozo = nev(6, 6) End Sub
Option utasítások Az Option utasítások segítenek szintaktikai és logikai hibák elkerülésében. Megadása a modul vagy function előtt lehetséges, de nem kötelező. Az Option Explicit utasítás lényegében egy kényszerítés, amely lehetővé teszi, hogy minden változó deklarálása kötelező használat előtt. Két értéke van On és Off, alapértelmezetten On a beállított értéke. Az Option compare string-ek összehasonlítására szolgál, két értéke lehet: Binary és Text. Option Strict használata esetén lehetőség van arra, hogy egy adott típusú változó ne kaphasson meg más típusú értéket. Az Option Strict On utasítást kiadva kapcsolható be ez a megszorítás, azonban típuskonverzió megadása ebben az esetben kötelező, ellenkező esetben hibaüzenet generálódik. Alapértelmezésben ez az opció ki van kapcsolva. Események Az esemény egy művelet, amely objektumon vagy objektummal történik. A Visual Basic egy eseményvezérelt nyelv, ezért lehetőséget biztosít arra, hogy programkódból le lehessen kezelni ezeket az eseményeket. Eseménynek minősül, 20
ha a felhasználó módosítja egy szövegdoboz értékét, kattint egy gombra, kiválaszt egy értéket egy listából, tehát valamilyen változást generál. A Visual Basic alkalmazások, programok írásakor nem szükséges minden eseményt kézzel megírni, vannak előre definiált események, amelyek kezelését kell csupán definiálni. A Windows folyamatosan vizsgálja a különböző vezérlők állapotát és jelzés érkezik arról, hogy milyen vezérlő elem állapota változott meg. Beavatkozás nélküli alkalmazásokkal szemben a Visual Basic a felhasználót is bevonja a program működésébe. Nem csak egy lefutása létezik, az akciók a felhasználótól függnek. Azonban a program mindig egy folytonos vonalon fut, mindig egy ágon. Alapelve, hogy megjeleníti a felhasználó számára a lehetőségeket, majd vár annak kiválasztására, aktivitására. Amennyiben egy billentyűleütés vagy egérhasználat (akár egérpozíció változás) történik, az előre definiált utasítások lefutnak. Külső erőforrás elérése Létezik egy FileSystem nevű modul, amely eljárásokat és végezhető műveleteket tartalmaz fájlokra és mappákra vonatkozóan, valamint rendszer szintű operációk végezhetők ennek segítségével. A következő alapvető lehetőségek állnak rendelkezésre:
FileOpen: fájl megnyitása
FileClose: fájl lezárása
FileCopy: fájl másolása (teljes fájl másolása fájlrendszeren)
GetAttr:lekérdezhető,
hogy
az
adott
fájl
vagy
mappa
milyen
tulajdonságokkal rendelkezik (rejtett, csak olvasásra, rendszer szintű fájl)
SetAttr: beállítható, hogy az adott fájl vagy mappa milyen tulajdonságokkal rendelkezik (rejtett, csak olvasásra, rendszer szintű fájlok beállítása)
MkDir: mappa létrehozása
RmDir: mappa törlése
Kill: fájl vagy mappa törlésére használatos, de folyamat is leállítható vele
Ezek mindegyike rendelkezik szintaktikai előírásokkal, részletezésre nem kerülnek a dolgozatban.
21
6. Formok, vezérlők használata, azok tulajdonságai A VB2 felüleletet az Alt + F11 billentyű leütésével lehet elérni. A form-ot ugyanúgy, mint a modulokat és class-okat a jobb gomb kattintása után insert menüponton belül lehet aktiválni. Form
Egy form alapvetően a következő tulajdonságokkal rendelkezik:
betűtípusok beállítása: méret, típus, rendezés
hivatkozási név: az a név, amellyel a VB kódban lehetőség van a további hivatkozásra (pl. click event)
kép beszúrása, háttér, alapszín beállítása
méretezés: pixelben történik
egérhasználat: különböző egér ikonok használata
Vezérlők
A vezérlők eléréséhez szükség van a toolbox-ra, amely „drag and drop” elven működik, tehát a programozónak csak meg kell „fognia” a kiválasztott vezérlőt és ráhúzni a form-ra. A vezérlők alapvetően a következők lehetnek:
checkbox: értéke true vagy false
label: felirat
textbox: szövegdoboz, default értéke, hogy nincs benne szöveg
combobox:
lehetőség van
adott RowSource
kijelölésére, amely
segítségével legördülő listából választhat a felhasználó értéket
listbox: hasonló a combobox-hoz, itt azonban lehetőség van többszörös kijelölésre is
2
A VB mozaikszó a továbbiakban a Visual Basic kifejezést jelöli.
22
optionbutton: hasonló a textbox-hoz, csoportba foglalva csak egy válaszható; értéke true vagy false
togglebutton: beragadó gomb
frame: keret, elhelyezhető benne az összes fent említett vezérlő, nagy előnye, hogy eseményhez köthető a benne definiált vezérlők elérése
commandbutton: nyomógomb
spinbutton: léptető, értéke minimum és maximum között definiálandó, megjelenítéséhez szükség van valamilyen indikátorra
image: kép elhelyezése, méretezése
Minden előbb említett vezérlő rendelkezik _click vagy _change eseménnyel, amely eseményeket lekezelő trigger automatikusan létrehozható, ha a programozó kettőt kattint a vezérlőn. Továbbá egy ControlTipText nevű tulajdonság segítségével iránymutatást adhatunk a felhasználónak, hogy az adott vezérlő milyen funkciót tölt be, ennek a tulajdonságnak az értéke String. A VB-ben az összes toolbox-ban található eszköznek van Enable referenciája, amely lehet true, amikor az eszköz használható
és
false,
amikor
inaktív.
Lehetőség
van
további
vezérlők
hozzáadásához, ezt a toolbox-on jobb kattintás után Additional controls menüpontban érhető el. Bár a VB automatikusan elnevezi az újonnan létrehozott eszközt, javasolt valamilyen egyéni, egyértelmű azonosítóval ellátni, mert a továbbiakban egyszerűbbé válik a használata nagyobb program írása esetén.
23
7. A program funkcióinak bemutatása A feladat meghatározásakor fontos szempont volt, hogy a rendszer automatizáltan is működhessen, amelyhez elengedhetetlenül fontos volt a tervezés. A tervezés során bizonyos elemek még nem kerültek bele, azonban a folyamatos fejlesztés és a felhasználóktól érkező visszajelzések alapján egyre egyértelműbbé vált, hogy a kezdeti megoldások nem feltétlenül bizonyulnak elégségesnek. Mivel tökéletes program nincs, a folyamatos karbantartás elengedhetetlenül fontos és az utólagos módosítások a program stabilitásában, a változók számának és felhasználásának optimalizálása pedig a sebességen tud segítséget nyújtani. A program alapvető funkciói a következőek:
új bejegyzések felvitele form-on keresztül
meglévő bejegyzések módosítása form-on keresztül
bejegyzések törlése
kihasználtsági szint megjelenítése diagramon
lejárati idők megjelenítése diagramon
logbook készítése az adatbázison történő összes módosításról
logbook automatikus mentése 90 naponta, de lehetőség biztosítása a manuális mentésre
adatbázis exportálása SQL fájlba
lejárati idők ellenőrzése automatizáltan és manuálisan
e-mail küldés manuálisan a külső raktár részére
automatizált e-mail küldés a külső raktár, valamint a csoporton belül a termék felelősei számára; automatikus berendelés a selejtezéshez
SQL fájl tartalmának megjelenítése webes felületen
Továbbá az egyszerűség kedvéért egy főmenü és egy súgó is a felhasználók rendelkezésére áll.
24
Főmenü A végfelhasználók mindenképpen hatékonyabban dolgozhatnak, ha a különböző funkciókat egy helyen, egy form-on találják, amelyekhez tartozik egy-egy nyomógomb is, értelemszerű elnevezéssel. A főmenü alapvetően két részre van osztva, ahol a bal oldalon a funkció tömör leírása, jobb oldalon pedig a hozzájuk tartozó gombok találhatóak. Mind a kettő úgynevezett frame-ben van elhelyezve, amely felfogható csoportba foglalásnak is. A munkafüzet bal felső sarkában elhelyezett gomb segítségével érhető el a főmenü, azonban az egyszerűség és gyorsaság kedvéért a Crtl + m billetyűkombináció leütésével is meghívható a form. A főmenü kinézete a 8. ábrán látható.
8. ábra A főmenü grafikai megjelenése
A következőkben a funkciók bemutatása, elemzése, működésük reprezentálása történik.
25
Új bejegyzések felvitele form-on keresztül A program egyik legnagyobb részét az új rekordok bevitele teszi ki. A felhasználó minden olyan lépését ki kell küszöbölni, ahol hibát véthet, hibás adatot adhat meg. A Bosch által folyamatosan piacra dobott új termékek is tesztelést igényelnek. Mivel előre nem lehet tudni, hogy a Teszt Center milyen minták tesztelését fogja végezni, sajnos vannak olyan textbox tartalmak, például típus vagy leírás, amelyeknek a tartalmát nem tudja kiválasztani legördülő listából, de lehetősége van kézzel bevinni a kívánt adatot. A gitterbox számának kiválasztásakor a GIBO_nr_add_Change() modul lefut, minek hatására megvizsgálja, hogy mekkora a gitterbox jelenlegi kitöltöttsége. Ez az információ rendkívüli jelentőséggel bír, mivel a hozzáadáskor a különböző KLT típusok térfogatát hozzáadja a már meglévő töltöttségi szinthez és a módosított érték fog bekerülni az adott gitterboxhoz tartozó érték helyére. A megszorítások a következő adatbeviteli mezőket érintik:
End of storage: tárolási idő, amelynek minimum az adatbevitel dátumához képest egy nappal nagyobbnak kell lennie.
KLT types: meg kell adni a KLT típusok darabszámát, a checkbox bepipálása előtt a textbox-ok inaktívak, aktiválás után csak számot lehet bevinni 0 és 9 között. Abban az esetben, ha a felhasználó az „Only HVAC3” opciót választja, a gitterbox kihasználtsága automatikusan 100% lesz.
Link to the picture: minden új gitterbox hozzáadásakor szükség van kép megadásához. A textbox tartalma nem módosítható, kép megadására az „Open” gomb megnyomásával van lehetőség. A program automatikusan másolja a hálózaton lévő egyik mappába, elnevezi a „GIBO_” + gitterbox száma + „.jpg” formában és a betallózott helyről törli azt.
Az „Add” gomb egészen addig marad inaktív, amíg a gitterbox száma kiválasztásra nem kerül. Az összes többi textbox tartalma tetszőleges lehet, mivel több olyan termék is létezik, amelyet még a Teszt Center nem tesztelt, de a jövőben fog, azonban erre nem lehet teljes mértékben felkészülni.
3
Az HVAC mozaikszó a Heating, ventilation, and air conditioning kifejezés rövidítése
26
Ha az adatbevitel során többszörös elütés történt vagy az adatbevitelt végző felhasználó véletlenül rossz adatokat vitt be, a „Clear” gomb lenyomásával az összes beviteli mező tartalmát törölheti. A „Quit” gomb lenyomásával a form eltűnik és visszatér a főmenübe. A teljes form tartalma a 9. ábrán látható.
9. ábra Új rekord felvitelére szolgáló form kinézete
Meglévő bejegyzések módosítása form-on keresztül Előfordulhat, hogy az adatbázis feltöltője hibát vétett, azonban ezt csak a hozzáadás után vette észre. Erre az esetre készült egy másik felület, amely lehetővé teszi a bevitt rekordok módosítását. Alapértelmezés szerint nincs gitterbox kiválasztva és minden műveletet végző gomb inaktív (leszámítva a „Quit” feliratút), egészen addig, amíg ki nem választja a felhasználó, hogy mely gitterbox tartalmát szeretné módosítani. Két eset lehetséges:
a tároló egység létezik,
a tároló egység nem létezik.
27
Az első esetben a form-on lévő szövegdobozokba automatikusan beolvassa egy sor összes bejegyzését és letárolja egy változóban a kitöltöttség értékét. A „Previous” és „Next” gombok segítségével lehet soronként vizsgálni a bevitt adatokat. Mivel egy gitterbox-hoz több bejegyzés is tartozhat, a bal alsó sarokban elhelyezett „Page nr.” mutatja az éppen aktuális sort 0-tól kezdődően. Minden egyes módosítás során szükség van megszorításokra, ezért az „End of storage” és „Link to the picture” mezők kitöltése kötelező, a konvenciók ugyanazok, mint az új bejegyzés létrehozásakor. A bal felső sarokban található egy „Generate e-mail” gomb, erről a későbbiekben esik szó. A „Quit” gomb lenyomásával bármikor vissza lehet térni a főmenübe. A felhasználói felület a 10. ábrán látható.
10. ábra Bejegyzés módosításához rendelkezésre álló form
Törlés A gitterbox-ban tárolt alkatrészek, minták rendelkeznek lejárati idővel. Emiatt szükséges
a
törlés
funkció
használata,
amelyet
egy
„Delete”
gomb
megnyomásával tehet meg a felhasználó. Annak érdekében, hogy véletlenül semmilyen bejegyzést ne lehessen törölni, a következő teendőket kell a felhasználónak elvégeznie: törölni kell minden olyan textbox tartalmát, amely módosítható: Type, Description, Quantity of parts, Serial numbers, Project name, TC number. Amennyiben ezek közül csak egy is tartalmaz adatot, üzenet jelzi, hogy van még törlendő bejegyzés. Ha a program ezen része mindent rendben talált, a felhasználónak meg kell erősítenie törlési szándékát, ahol értesítést kap 28
arról, hogy a törlés után az adatok többé nem lesznek elérhetőek. A törlésre szolgáló gomb az 11. ábrán látható.
11. ábra A törlés folyamatábrája
Napló A logbook minden, az adatbázisban történő változást rögzít, legyen az új rekord felvétele, meglévő módosítása, vagy törlése. Minden változás rendelkezik egy saját színnel és magyarázattal, aminek köszönhetően a logbook munkafüzet egy plusz oszloppal rendelkezik, ahol ha új adat bevitel történt zöld cella színnel az „add”, törlés esetén fehér alapszínnel a „del” kifejezés található. A módosítás a követhetőség érdekében két részre osztott. Az első bejegyzés a „mod from”,ahol az összes adat, amely a módosított sorban található belekerül a logbook munkafüzetbe, mint önálló sor, majd egy újabb sorban a „mod to” kifejezéssel ellátott sorban a már módosított adatok találhatóak.
29
A logbook-ról a következő modul lefutásával készíthető biztonsági másolat: Private Sub Save_logbook() Dim wb As Workbook Sheets("logbook").Visible = True Worksheets("logbook").Copy Set wb = ActiveWorkbook With wb .SaveAs
ThisWorkbook.Path
&
"\
-
Logbook_
"
&
Format(Date,
"yyyy_mm_dd") & " " & Format(Time, "hh_mm_ss") .Close False End With End Sub
Minden alkalommal, amikor a munkafüzet aktiválódik, megvizsgálja egy script, hogy az előző kimentéshez képest hány nap telt el. Ha ez a szám nagyobb vagy egyenlő, mint kilencven, meghívja a fent bemutatott sub-ot és a biztosnsági másolat mentése megtörténik. Ennek kimenete egy excel fájl, amelynek mentési helye megegyezik az adatbázis helyével, neve tartalmazza a „- Logbook_” kifejezést, a kimentés napját (év-hónap-nap) és idejét (óra-perc-másodperc). E-mail kezelés, értesítések küldése A követelmények meghatározásakor az egyik leglényegesebb pont az e-mail küldő funkció volt. Nagyban megkönnyítheti a munkát, ha nincs szükség a tárolt értékek manuális ellenőrzésére. A cél az, hogy az alkalmazás képes legyen az önálló működésre. Egy standard e-mail rendelkezik a következő elemekkel:
To = "" ; kinek küldünk e-mail-t
CC = "" ; ki kap másolatot az e-mail-ről
BCC = "" ; szintén másolat, de nem jelenik meg a címzett a sorban
Subject = "" ; e-mail tárgya
HTMLBody = "" ; az e-mail „teste”
Két e-mail generálására is szükség van, mivel két külön réteget kell értesíteni. Az egyiket egy külsős cégnek (ÁTI DEPO), a másikat pedig a Teszt Center 30
dolgozóinak. A megoldás a Windows Startup használata volt, amely segítségével minden hétfőn lefut a saját számítógépemen egy script, amely végigvizsgálja az összes adatbázisban lévő termék tárolási idejét és kiválasztja azokat, amelyek leselejtezésre kerülhetnek. Az Excel táblában ehhez a rekordhoz tartozó, egy sorban lévő értéket összegyűjtve egy String változóban tárolja azokat és átadja az e-mail body részének, ezt kapják meg az internál kollégák és a termék tárolási egységének a számát a külsős raktározó cég dolgozói. Az időzítés nagyon fontos, mert ha a leselejtezés a hétfői napon tudatosul a kollégákban, nagyobb eséllyel fogják tudni tervezni a hét további részére annak elvégzését, természetesen legjobb esetben még az adott napon, amikor a gitterbox beérkezik. Amennyiben a vizsgálat nem hétfőn történt, a következő program indításakor lefut a script és automatikusan kiszámítja a következő hétfői dátumot és az lesz a következő vizsgálat időpontja. Két hétfő között eltelt időszakban semmilyen műveletet nem végez a rendszer automatikusan. Az e-mail küldéshez létre kell hozni és be kell állítani az Application.Outlook objektumot, amely a következőképpen tehető meg: Dim OutApp As Object Dim OutMail As Object Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0)
Mivel a VB a Microsoft által fejlesztett nyelv, így az e-mail kezelés és küldés rendkívül kényelmes és egyszerűen megvalósítható. A Microsoft Outlook kétfajta aláírás beszúrására ad lehetőséget, lehet belső és külső aláírás, annak megfelelően, hogy cégen belül vagy külső személy részére szeretnénk e-mail-t küldeni. A programozó megkeresheti és fel is használhatja akár az internál, akár az externál aláírást is:
31
Dim SigString As String Dim Signature As String SigString = Environ("appdata") &
"\Microsoft\Signatures\signature.htm"
If Dir(SigString) <> "" Then Signature = GetBoiler(SigString) Else Signature = "" End If
Az e-mail küldés, a standard formának megfelelően a következő kóddal van lehetőség az e-mail paraméterezésére: With OutMail .To = "[email protected]" .CC = "" .BCC = "" .Subject = "GIBO bekérése" .HTMLBody = strbody & "
" & Signature .Send End With
Lehetőség van manuális e-mail küldő felület elérésére is, ahol a címzett a külső cég három alkalmazottja, valamint 2 logisztikus munkatárs. A kitárolni kívánt gitterbox-ok nevét egér kattintás segítségével lehet kijelölni, akár többet is. Amennyiben a felhasználó kiválasztotta őket, az „Add to list” gomb segítségével hozzáadhatja egy textbox-ba, amely az e-mail body részét fogja képezni az előre megfogalmazott levélben. A korábban már említett 10. ábrán a „Generate e-mail” gomb segítségével lehet eljutni a 12. ábrán látható felülethez.
12. ábra E-mail küldő form
32
Súgó A „Help” menü rendelkezik minden olyan információval, amely a különböző opciók használatához elengedhetetlenül fontos. A tagoltság érdekében a magyarázatok külön füleken, úgynevezett „tab”-okon vannak elhelyezve a könnyebb felhasználás és érthetőség érdekében, funkciókra bontva, pontokba szedve. Külön kiemelt szerepet kaptak a megszorítások is. Az utolsó fülre, "Deadline check" részletes leírás került a teljes metódusról és a szerepkörökről, kinek mi a feladata. A menüpont felülete a 13. ábrán látható.
13. ábra Súgó
33
Grafikai indikátorok A tárolási egység telítettségének kiszámításához szükség van a gitterbox-ban tárolt KLT típusok pontos megadásához, amelyek dimenzionális méreteiből kalkulálható a térfogat. Ezen térfogatok összege a gitterbox maximális felhasználható térfogatához képest viszonyítandó százalékos értékben megadva. A diagramok 10-es bontásokban kerülnek megjelenítésre (14. ábra).
14. ábra Kitöltöttségi tényező
A selejtezés az adminisztrációs feladatok miatt viszonylag sok időt ölel fel, ezért ezt az időpontot fontos előre is tudni, hogy mikor, mennyi munkára lehet számítani ezzel kapcsolatban. Annak érdekében, hogy lehessen kalkulálni, körülbelül melyik hétre esik majd a legtöbb selejtezés, szükség volt egy másik indikátorra, amely megmutatja, hogy mikorra várható a következő selejtezés és mekkora volumenű lesz. Az alapötlet az volt, hogy ne az összes termékre legyen megjelenítő eszköz, mert átláthatatlanná válna. Azonban, ha minden gitterbox-on belül megjelenítésre kerül a legkorábban lejáró termék tárolási ideje, akkor egy átláthatóbb diagram készülhet.
34
A hátralévő tárolási idő napokban ábrázolt és maximum egy éves viszonylatban látható a 15.ábrán.
15. ábra Tárolásból hátralévő napok száma
A megkeresés úgy zajlik, hogy minden gitterbox első bejegyzésének lejárati ideje szolgál alapul. Egy modul átnézi az összes, egy gitterbox-ban található minták tárolási idejét, kiválasztja azok közül a legkisebbet, majd ezt elhelyezi egy munkalapon a gitterbox számával együtt úgy, hogy a tárolási időt kivonja az aznapi dátumból, így megkapható a hátralévő napok száma. Mivel a projekt előző felelőse nem feltétlenül sorban haladt a gitterbox-ok számozásával kiküldés előtt, ezért nem minden szám jelenik meg ezen a munkalapon és a diagramon. Adattárolásra négy különböző datasheet áll rendelkezésre. Ebből kettő, konkrétan a „Munka1” és „logbook” munkalapok tartalmazzák a felhasználó által bevitt adatokat, a „Munka2” és „Munka3” munkalapok pedig az alkalmazás működését segítik oly módon, hogy itt található a legördülő listák tartalma, mellékes számítások, KLT típusok térfogata, gitterbox teljes felhasználható térfogat értéke, diagramok és az a dátum, hogy mikor kell az alkalmazásnak a tárolt adatokban végig vizsgálni a hátralévő tárolási időket és kiküldeni az e-mail-t a felelősök részére.
35
Az alkalmazás moduljainak egyszerűsített formája az 16. ábrán látható.
16. ábra Modul-Form kapcsolatok
Az ábra nem tartalmaz minden egyes modult, azonban a működéshez tartozó legfontosabbak megtalálhatóak. A GIBO_Form és Search_Form tartalmaznak további modulokat, amelyek feladata bizonyos adatok szűrése, esetleges hibák kezelése, jelzése. Kétféle grafikai indikátor van, amelyek a fent szereplő ábrán nincsenek külön választva, felépítésük hasonló, néhány változóban tér el működésük.
36
8. Az SQL nyelv bemutatása Az SQL [8] rövidítés a Structured Query Language kifejezésből származik, melyet az ANSI4 szabványosított 1986-ban. Strukturált lekérdező nyelv, mely relációs adatmodell alapján felépülő adatbázisok kezelésére képes. Deklaratív és nem imperatív: csak azt szükséges megadni, hogy mit és milyen formában szeretne a programozó visszakapni, azt viszont nem szükséges meghatározni, hogy a DB kezelő milyen műveletek sorozatával állítja elő a várt eredményt.
Az SQL három résznyelvre bontható:
DDL: az SQL adatdefiníciós nyelv;
DML: az SQL adatmanipulációs nyelv;
DQL: az SQL adatvezérlő nyelv.
A DDL (Data Definition Language) parancsok közé tartoznak a következők:
ALTER TABLE: meglévő tábla módosítása
ANALYZE: teljesítménnyel kapcsolatos adatok összegyűjtése
CREATE TABLE: új tábla létrehozása
CREATE INDEX: index létrehozása
DROP INDEX: index elvetése
DROP TABLE: tábla elvetése
GRANT: jogosultságok kiosztása / elvétele
A DML (Data Manipulation Language) parancsok:
4
INSERT: új rekord felvétele paramétereknek megfelelően
UPDATE: rekord módosítása
DELETE: rekord törlése
Amerikai Szabványügyi Hivatal
37
A DQL (Data Query Language) parancsok:
SELECT: a select parancs segítségével létező adatokból lehet lekérdezéseket végezni, ahol definiálható a visszakapott értékek sorrendje, csoportok képezhetőek belőlük
A feladat megoldása során a CREATE, INSERT és SELECT parancsok kerülnek felhasználásra, ezek szintaktikája a következő:
CREATE TABLE táblanév (definíciók); INSERT INTO táblanév VALUES (értékek); SELECT mező FROM táblanév WHERE logikai_feltétel egyéb_utasítások.
A kulcsszavakat és beépített függvényeket lehet nagybetűvel jelezni. A dőlt kisbetűvel jelölt kifejezések a programozó által a továbbiakban felhasználni kívánt kifejezések, tehát elnevezésük a program írójára van bízva. Nincsenek különösebb
konvenciók,
de
általánosságban
kijelenthető,
hogy
a
kód
olvashatóságának érdekében angol elnevezések használata javasolt. Abban az esetben, ha egy entitás neve több szóból áll, az aláhúzás (_) karaktert szokás alkalmazni és kerülendő a kis- és nagybetűk vegyes használatából adódó entitás nevek, mint például upperCase. A parancsok angol mondatok, melyek szavakból vannak összefűzve, így egyszerűen értelmezhetők. Rendkívül fontos a szintaktika, azonban a hiba megtalálására kifejezetten nagy segítséget nyújtanak a különböző fejlesztői környezetek, ahol a hiba pontos helyét kapja meg a programozó, ennek köszönhetően könnyen elháríthatja a hibát különösebb utána járás nélkül. Az SQL használatához speciális futtatási környezet szükséges. Ezt a környezetet többféleképpen
is
megteremthetjük,
amelyek
továbbiakban.
38
közül
kettőről
lesz
szó
a
Az első lehetőség esetén a regisztráció után az ORACLE weboldaláról térítésmentesen letölthető. Az ORACLE telepítése után a Mysql használatra kész, különösebb konfiguráció nélkül is el lehet kezdeni a névtér lefoglalását, táblák létrehozását,
lekérdezések
megírását,
procedúrák,
kurzorok,
triggerek
programozását. A második lehetőség az Easyphp nevű programcsomag, amely azonkívül, hogy tartalmaz Mysql-t, php oldalak futtatását is lehetővé teszi. Részletesebb leírás a következő fejezetben olvasható.
39
9. Összeköttetés a Visual Basic és az SQL között (ADO)
Az adatok SQL fájlból történő importálására lehetőséget biztosít az Excel, azonban az export funkció egyelőre nem érhető el, ezt a programozónak kell megoldani VB forráskód segítségével. Az ADO [9] használatához két library szükséges, amelyek a VB referenciái között találhatóak:
Microsoft ActiveX Data Objects 6.1 Library
Microsoft ADO Ext. 2.8 for DDL and security
Az objektum létrehozására két lehetőség van:
Dim
CreateObject.
Dim használata Ez a művelet két részre bontható, ahol az első a deklaráció, amelyet a Dim kulcsszó segítségével tehet meg a programozó, a második a beállítás, ez a Set paranccsal történik. Dim conn As ADODB.Connection Set conn = New ADODB.Connection
A két művelet összevonható, ekkor a deklarációban megtörténik a példányosítás. Dim conn As New ADODB.Connection
CreateObject használata
A művelet össze nem vonható, külön kell deklarálni, beállítani, azonban a deklarációnál nem szükséges típust definiálni. Dim conn1 Set conn1 = CreateObject("ADODB.Connection") As Object
40
Kapcsolat felépítésének paraméterezése
Miután megtörtént a példányosítás, következhet a kapcsolat felépítése, amelyhez elengedhetetlen a következő paraméterek ismerete:
ServerName: a szerver címe. Egy IP cím, amely alapértelmezetten 127.0.0.1
DatabaseName: az adatbázis neve, tetszőleges név lehet
UserID: alapértelmezett értéke „root”, azonban ez az SQL szerver konfigurálásától függ, szintén tetszőleges lehet.
Password:
alapértelmezett
értéke
nincs,
szintén
a
szerver
konfigurálásától függ. Példa forráskód (minden változó típusa String): Dim Cn As ADODB.Connection ServerName = "127.0.0.1" DatabaseName = "gibo" UserID = "root" Password = "" Set Cn = New ADODB.Connection Cn.Open
=
"Driver={MySQL
ODBC
";Database=" & DatabaseName &
3.51
Driver};Server="
&
ServerName
&_
";Uid=" & UserID & ";Pwd=" & Password & ";
Amennyiben a kapcsolat be van állítva egy With segítségével végre lehet hajtani különböző SQL utasításokat. Ilyen például a megadott nevű tábla törlése és létrehozása, ennek megoldása következik: With Cn .Open ConnectionDef .Execute "DROP TABLE GIBO;" .Execute "DROP TABLE TEST_ORDERING;" .Execute "DROP TABLE KLT;" .Execute
"CREATE
TABLE
GIBO(id
int
not
null
PRIMARY
KEY
auto_increment, Name_of_gibo VARCHAR(255));" .Execute Type_part
"CREATE
TABLE
VARCHAR(255),
VARCHAR(255),
Ordering_nr
TEST_ORDERING(T_id
Description_part VARCHAR(255),
41
int
auto_increment,
VARCHAR(255),
Project_name
Quantity_of_part
VARCHAR(255),
Serial_nr VARCHAR(50), Storage_deadline DATE, Responsible VARCHAR(255), FOREIGN KEY(T_id) REFERENCES GIBO(id));" End With
A kapcsolatot minden művelet után bontani kell, ezt a recordset és a connection lezárásával és a Nothing értékre való beállítással lehet megtenni. A módosítások véglegesítése a recordset.UpdateBatch kiadásával tehető meg, amely után le is kell zárni a kapcsolatot. Ennek megadása következik: rs.UpdateBatch rs.Close Set rs = Nothing Cn.Close Set Cn = Nothing
A jövőben megvalósításra kerülő SQL táblák felépítése a 17. ábrán látható módon lenne megvalósítható:
17. ábra SQL táblák
Három tábla szükséges, amelyek összekötése úgy zajlik, hogy a GIBO tábla id-ja az elsődleges kulcs, a TEST_ORDERING tábla T_id kulcsa hivatkozik rá idegen kulcsként. A KLT tábla K_id kulcsa szintén idegen kulcs, hivatkozik a T_id kulcsra. Mivel az Excel táblában egy sor számít egy bejegyzésnek, javasolt, hogy ugyanazt az azonosítót kapja meg minden tábla adott sora, mert így sor alapján lehet lekérdezéseket végezni, így az adatok nem fognak elcsúszni, kisebb a hiba lehetősége.Természetesen a táblák törlésekor figyelembe kell venni, hogy a hivatkozó táblát kell először törölni, gyökér hivatkozást nem lehet törölni. 42
10.
Hibakezelés és védelem
Alapvető elvárás egy program részéről a stabilitás és megbízhatóság. A tapasztalatok azt mutatják, hogy bár a lehetőség tárháza gyakorlatilag majdhogynem végtelen, kijelenthető, hogy a kis cégek által megírt programok nem stabilak, a hibakezelésük minimális, adott esetben teljesen hiányzik. Ez egy általános felhasználó számára megterhelő, mivel a folyamatos adatbevitel nem biztosított és ugyanazon rekordok felvitele több időt vehet igénybe, adatvesztés következhet be, amely egy nagyobb cég esetében megengedhetetlen. A felhasználónak szüksége van visszajelzésre, amelyet sajnos sok esetben nagyon gyengén vagy egyáltalán nem adnak, ebből következik, hogy a felhasználó többször is elkövetheti ugyanazt a hibát, mivel a program hibakezeléséből nem derül ki, hogy mi is a probléma igazi forrása, mely probléma lehet teljesen triviális is Ezért a VB-ben programozók számára létezik egy nagyon egyszerű módja a hibakezelésnek, ha hiba lép fel, lépjen a program a következő sorra, ezt a következő kóddal adhatjuk meg: On Error Resume Next
A hiba kezelésére létezik egy másik alapvető módszer, ez a GoTo utasítás. Ennek használata nem igazán javasolt, a program sok ilyen hivatkozás által átláthatatlanná válik, azonban alkalmazása semmilyen bonyolultságot nem hordoz magában. A programozónak létre kell hoznia egy hivatkozást, amely lehet bármilyen karakter, melybe beletartoznak a szokásos ANSI karakterkódolásnak megfelelő elemek, valamint a következő kód alkalmazása: On Error GoTo somewhere
ahol a somewhere a programozó által definiált programrészre ugrik és lefuttatja azt. Létezik a hibakezelésnek egy olyan módja is, hogy bizonyos események közötti függőség létrehozására támaszkodva kapja meg a hiba tényleges okát és forrását 43
a felhasználó. Ennek megoldása is szintén a programozó feladatai közé tartozik. Nagy előnye, hogy sokkal informatívabb jellegű üzeneteket lehet eljuttatni ezen módszer segítségével, tehát a hibakezelés sokkal leíróbb, hamarabb elérhető, hogy a felhasználó ne követhesse el még egyszer ugyanazt a hibát, amely a program stabilitásán tovább segíthet. A hibavédelem során a programozónak fel kell készülnie minden olyan eshetőségre, amelyet előre feltárhat, például a szoftvertechnológiából jól ismert Evolúciós modell, amely folyamatosan tárja fel a program készítése közben azokat a
megszorításokat,
szükséges
szűréseket,
további
funkciókat,
amelyek
elengedhetetlenül fontosak a program stabilitásához, eredeti funkcióinak hibátlan működéséhez. Fel kell készíteni a programot arra, hogy egy texbox, amelynek a bemenő értéke csak szám lehet, csakis kizárólag számot vehessen fel. Erre a VB a KeyPress eseményt kínálja fel, ahol a felhasználó számára engedélyezett karakterek leütése definiálható, minden más esetben nem kerül karakter a szövegdobozba. Legegyszerűbb megoldása abban az esetben, ha a felhasználó csak számokat vihet be 0-9-ig: Private Sub TextBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If (KeyAscii >= vbKey0 And KeyAscii <= vbKey9) Then Else KeyAscii = 0 End If End Sub
Sok esetben előfordul, hogy a feldolgozni kívánt adatokhoz tartoznak további képek, dokumentumok, más és más kiterjesztéssel. Ezek szűrése is rendkívül fontos, mivel ha a programozó lehetőséget biztosít a felhasználó számára bármilyen fájl hozzáadásával, akkor a funkció akár teljes mértékben érvényét veszíti. Ezért, ha bármilyen dokumentum is csatolandó, javasolt a lehetséges formátumok szűrése. A legkézenfekvőbb megoldás egy olyan tallózó létrehozása, amely csak adott típusokat jelenít meg.
44
Forráskód következik: Private Sub Open_file_Click() Dim pathString As String pathString
=
Application.GetOpenFilename(FileFilter:="Pictures,
*.jpg;
*.jpeg", Title:="Select a picture!", MultiSelect:=False) End sub
A tallózó az Application.GetOpenFilename() utasítás segítségével érhető el, amelynek paraméterei a következőek:
FileFilter: megadható szöveg, amely a megjelenítéskor segítséget nyújthat, itt van lehetőség a „*” karakter után a szűrni kívánt fájlformátumok definiálására
Title: a felugró dialog box neve, amelyben ha a programozó valamilyen insturkciót oszt meg, egyszerűbb felhasználást tesz lehetővé
MultiSelect: többszörös kijelölés engedélyezhető, ha értéke true és tiltható, ha false
További problémát rejthet magában, ha egy nyomógomb kattintására felvitt adatok nem kerülnek törlésre a form-on elhelyezett vezérlőkből, mivel ebben az esetben duplikáció jöhet létre, amely fals adatok bevitelét eredményezheti, az adatbázis értéktelen, használhatatlan információkat tartalmazhat és azok kezelését, szűrését rendkívüli módon megnehezíti. Megoldást a vezérlők default értékkel történő ellátása jelenthet, minden egyes rekord felvitele előtt és után. Annak érdekében, hogy a felhasználók ne tudjanak kárt tenni a már meglévő adatbázisban, szükség van jelszavas védelemre. Lehetőség van bizonyos műveletek (cellaformázás, sorok beszúrása, sorok törlése) zárolására, de akár a teljes munkafüzet is jelszóval védhető, amelynek egyetlen hátránya, hogy minden alkalommal, amikor form-on keresztül szeretne a felhasználó adatokat bevinni, ezt a jelszavas védelmet az adatok bevitelének időtartamára fel kell oldani. A védelem a következőképpen aktiválható és oldható fel: Worksheets("Munka1").Protect Password:="gibo_databank" Worksheets("Munka1").Unprotect Password:="gibo_databank"
45
11.
Tesztelés
A szoftverfejlesztés egyik legfontosabb pontja a tesztelés. A programozó által vétett hibák feltárásának legjobb módja, amely az esetleges jövőbeli problémákat is orvosolhatja, még az üzembe helyezés előtt. A tesztelés többféleképpen történhet, annak függvényében, hogy mik a célok. Ezek a következők lehetnek[10]:
a rendszer minőségi állapotának ellenőrzése
döntés meghozatala (megfelel az elvárásoknak vagy sem)
hibák feltárása
hibák elkerülése, megakadályozása
A tesztelés fontosságának megértéséhez szükséges néhány alapfogalom [9] tisztázása, ezek részletezése következik a továbbiakban[10].
Tesztelési hibák jelenléte: a vizsgálat felfedhet hibákat, de arról visszajelzés nem fog érkezni, hogy nincs hiba. A teszt azonban minőséget és megbízhatóságot növel, ami egy szoftver esetében fő szempont.
Nem lehetséges teljes mértékű, kimerítő teszt: minden kombinációt nem érdemes végigtesztelni, csak azokat, amelyek kritikusnak bizonyulnak.
A korai tesztelés: mindig szükség van a rendszer tesztelésére már a kezdetektől, mert a korai fázisban detektált hibák javítása sokkal egyszerűbb, mint egy későbbi észlelés során, ahol már a komplexitás miatt a hiba forrása nem feltétlenül lesz egyértelmű.
Hibák csoportosítása: sajnos a tesztelésre nem áll rendelkezésre végtelen mennyiségű idő, ezért általában azokat az egységeket érdemes tesztelni, ahol a bemeneti értékek valamilyen feltételhez kötöttek vagy valamilyen egyéb megszorítást igényelnek.
Féregírtó paradoxon: a tesztelés során szükség van a metódus vagy beviteli értékek változtatására, mert azonos metódus egy idő után nem feltétlenül bizonyul hasznosnak tesztelési szempontból.
Körülményektől függ a tesztelés: a rendelkezésre álló idő nagyban meghatározza a tesztelési fázisok számát, azok bonyolultságát. 46
Hibátlan rendszer téveszméje: hibátlan szoftver nincs, a javítást mindig a megrendelő igényei szerint kell megtenni.
A tesztelés alapvetően 4 részre bontható:
komponensteszt:
a
rendszer
moduljait
teszteli
egyenként,
a
legalacsonyabb tesztelési szint.
integrációs teszt: az integrációs teszt több modul együttműködési tesztje, amely lehet például értékátadás.
rendszerteszt: a komplett rendszer tesztelése, az összes modul együttes tesztje
átviteli teszt: az élesített rendszer használata a végfelhasználók által, remélhetőleg semmilyen kritikus hiba, probléma nem maradt.
A verziókövetés egy szükséges pont, mivel sajnos van olyan eset, amikor egy módosított verzió rosszabbnak bizonyul, mint az előző verzió, ilyenkor javasolt a régi verzió visszaállítása és az új esetleges javítása, legrosszabb esetben elvetése. A VB rendelkezik beépített hibajelzéssel, amely két részből áll. Aposztrófok közé helyezett szám az első része és egy szöveges leírás a második része. A hiba fellépésekor két lehetőség van:
debug: a kód editor a problémás részre ugrik, így a programozó változtathat a forráson
end: a program futása leáll, a programozónak ismernie kell a hiba forrását
A szakdolgozat során leírt alkalmazás tesztelése alapvetően a szándékos és véletlen hibák feltárásán alapszik egy külső felhasználó segítségével. Amikor egy alkalmazás tesztelése zajlik, nem csak a programozónak kell használnia, esetleg hibákat találnia, mert ő tudja, hogy hova, milyen értéket kell írnia. Egy laikus véletlenszerű értékekkel kitöltve képes arra, hogy egy nem várt eseményt idézzen elő, amely kitöltés számára ugyan egyértelmű lehet, azonban a program írója nem feltétlenül ezeket a bemenő értékeket várja. Ez nagyban segít esetleges fatális hibák elkerülésében. Az adatok feltöltése tesztelés céljából általában véletlenszerű adatokkal történik, amely tesztelés általában valamilyen nem várt eseményt idéz elő, amelyet le kell kezelni. A fent említett alkalmazás sok fajta adatot kezel. Az adatbevitel során törekedni kellett arra, hogy a bevitt adatok kellően sokrétűek legyenek, legyen benne ékezetes betű, dátum, szám. A Teszt Center egyik 47
munkatársa volt a felelős azért, hogy minden olyan alternatívát kipróbáljon, amely az alkalmazás esetleges hibáihoz vezethet. Ebbe beletartozik az adott napi dátumhoz képest korábbi dátum felvitele, amely nem megengedett. A gitterboxhoz tartozó kép a kezdetekben nem volt szűrve csak kép formátumokra (.jpg, *jpeg), amely azt eredményezte, hogy egy bármilyen fájlra hivatkozhatott az adatbázist kitöltő személy. Ez a megadott hivatkozás lehetett egy véletlen kattintás eredménye is, azonban kevesebb fájlból, csak képek közül nagyobb eséllyel adhat meg a felhasználó helyes képet. Ha a feltöltés során voltak fals adatok, a módosítás sem egyszerű, mert vannak esetek, amikor az alkalmazás csak a jó adatokat tudja visszatölteni a megszorításoknak köszönhetően. Ebben az esetben az alkalmazás hibát észlel és leláll, amely azt eredményezheti, hogy bizonyos adatok módosulhatnak, bizonyos adatok nem. A tesztelési folyamat során lehetőség volt arra, hogy az alkalmazást különböző számítógépeken, különböző konfigurációval, tehát különböző környezetben tesztelhessük. A referenciák hiányán kívül más probléma nem volt észlelhető, ebben az esetben be kellett tallózni az alkalmazás számára a szükséges library-ket és a működés ugyan úgy zajlott, mint a fejlesztői számítógépen. Az idő elteltével és a funkciók bővülésével ahhoz, hogy az alkalmazás jól tesztelt legyen, több kolléga is megkapta azt a feladatot, hogy töltse ki az adatbázist számára egyértelműen, kattintson minden gombra, attól függetlenül, hogy a kitöltés során az a gomb csak később játszana szerepet, így akár a program még hibát is jelezhet. Dátumok esetében a dátum helyessége és a formátum a kritikus pontok. A helyesség egy egyszerű sub segítségével megoldható, meg kell vizsgálni, hogy a felhasználó által megadott dátum korábbi-e vagy ugyanaz, mint az aznapi dátum. A formátumot azonban már az elején be kell állítani, mert a VB nem ugyanolyan formátumú dátumokat nem ugyanúgy kezel. A dátumok képezik az e-mail küldés alapjait, tehát nem megengedett olyan dátum felvitele, amely nem felel meg az elvárásoknak. További segítséget nyújt a felhasználó számára egy naptár feldobása, amely során nem kézzel bevitt értéket kell vizsgálni, ahol lehet például elütés, hanem egy standard formátumot kell a saját formátumnak megfelelően formázni. A tesztelés főként a komponensek vizsgálatát foglalja magába, azonban az egész alkalmazás több irányból megközelítve, rendszer szinten is jónak bizonyult. 48
12.
Összefoglalás
A munkahelyi körülmények általában segítik a munkát, azonban bizonyos esetekben (általában multinacionális cégek esetében) nagyon sok megszorítás lehet érvényben. Nem egyszerű egy olyan megoldást választani, amely mindenki számára megfelelően kezelhető, érthető és az alkalmazás számára rendelkezésre áll az összes erőforrás. A fent említett alkalmazás – a tapasztalatok alapján – nagyon rövid idő alatt elkezdte törleszteni a belefektetett munkaidőt, azonban az adatok felvitele folyamatos és még nem teljes. A projekt várható befejezési időpontja, amelyhez az alkalmazás készült, előre láthatólag 2014. szeptember. Összességében a Visual Basic egy kényelmes programozási nyelvnek mondható, mivel nagy segítséget nyújt a kód írásakor a Ctrl + Space billentyűkombináció leütése után az automatikus kiegészítés vagy a rendelkezésre álló lehetőségek felajánlása. A felhasználói felület könnyen elkészíthető, egyetlen hátránya, hogy a méretezés csak megadott egységekben történik egér segítségével (nagyítás, nyújtás, kicsinyítés), pontos méretek megadásához használni kell a Properties ablak-ot. A Visual Basic súgója rendkívül hasznos, példakódokkal illusztrált, használata javasolt. Az SQL nyelv megismerése viszonylag kevés időt igényelt, de ehhez szükséges figyelembe venni, hogy a mintatanterv részét képezi, sőt államvizsga tárgyként is szerepel. Az ADO használata kényelmes, nem túlbonyolított, amely a paraméterek számát tekintve előnyös. A jövőbeli tervek között szerepel egy, a cég belső hálózatán keresztül elérhető webes felület, amelyen keresztül a felhasználók kereshetnek, tovább szűrhetnek. A hiba kezelésének különböző fajtáit sikeresen elsajátítottam, amely már azóta sokszor segítette a munkámat különböző kisebb projekt esetében, ebből kiindulva a szakdolgozat témája elég sokrétűnek bizonyult, a megírása során szerzett tapasztalatok pedig felbecsülhetetlen értékűek.
49
13.
Summary
Regulary the environment helps you in your work, but in some cases (especially at multinational companies) there can be several restrictions. It is not easy to find a solution, which is suitable for everybody, accessible and all necessary resources are available. The application mentioned above – based on the experiences – started to return the invested work time in a short time, however the database is not complete yet and the administration of the data is still in progress. The target end-date of the project, for which the application has been made, is September 2014. In summary, the Visual Basic is a relatively easy-to-use programming language, the assistance feature (ctrl-space hotkey) is useful while programming to supplement the keywords or to find the available options. The user interface can be developed quite fast, however it has a disadvantage, namely that changing of the element’s size can be modified with mouse only in defined units (enlarge, stretch, reduction). In order to set self defined values, the usage of Properties window becomes necessary. The help option of the Visual Basic is advantageous, because it illustrates with examples, therefore it is recommended to use. Understanding the SQL language required relatively short time, but it is necessary to note that it is part of the curricula and even state examination within the subjects as well. The usage of ADO is convenient, (which is not too complex), so it is very effective considering the number of parameters. The creation of a web-interface is planned, which will be available in the local Bosch network and users will be able to search and filter via this page. I have learned various solutions for error handling, what really helped me in case of some other projects, and based on this, the thesis topic proved to be multifaceted, and the experiences gained during writing and these experiences are invaluable.
50
Felhasznált irodalom [1]John Walkenbach(2007): Excel 2007 Bible, ISBN: 978-0-470-04403-2 [2] Farkas Csaba - Szabó Marcell(2005): A programozás alapjai Visual Basicben, JEDLIK OKTATÁSI STÚDIÓ KFT., ISBN: 9789632142937 [3]http://www.libri.hu/konyv/michael_j_hernandez.sql-lekerdezesek-foldihalandoknak-cd.html [4]http://www.jos.hu/Konyv/0311/ [5]http://users.itk.ppke.hu/~szoer/Nyomtat/SE_7-eloadas-2011.pdf [6]http://www.iit.uni-miskolc.hu/iitweb/export/sites/default/department/labs/iitszolgaltatasok/www-db/Tantargyak/AB1/Eloadas-2008-1/ab1-2.pdf [7] http://www.agt.bme.hu/szakm/oop/vba.htm [8] http://www.inczedy.hu/~szikszai/adatbazis/sql.pdf [9]http://msdn.microsoft.com/en-us/library/windows/desktop/ms677497 (v=vs.85).aspx [10] http://aries.ektf.hu/~gkusper/SzoftverTeszteles.pdf
51