A feladat specifikációja, szolgáltatásai

Egy üzlet, egy számítástechnikai berendezések, eszközök kereskedelmével foglalkozó cég számlázó és készletnyilvántartó rendszerét valósítjuk meg. A tervezés során nagy figyelmet kell fordítani a méretezhetőségre, miszerint az elkészült rendszert a továbbiakban szükség esetén fejleszteni, akár egy cég igényeihez mérten alkalmazni is lehessen. A feladat mintájául egy meglévő és jól működő számlázó rendszer szolgált. Az ott megismert kifejezéseket alkalmazom, pl. a cikktörzs megnevezést mely az árucikkek listáját, avagy az árukészlet tagjait jelöli.

A feladat kettős természetű miszerint számlázni kell a kimenő árukat, illetve naprakész készletnyilvántartást kell vezetni. A feladat lényegi elemeit az alábbi ábra mutatja.

Számlázás
    A számlázás az eladott áruk forgalmát rögzíti. Az eladás nem feltétlenül jelöli a készpénzes fizetést, így a fizetés történhet átutalással is. A számlázás során szükséges eltárolni, hogy kinek adtuk el, ez teszi szükségessé a vevők tárolását. A számlázás során a legfontosabb részek az eladott áru maga, annak mennyisége, és az eladási ár, ugyanis a rendszer csak ajánlott árat kínál, az eladóé a lehetőség, hogy ettől eltérő áron értékesítse. A számla továbbá tartalmaz pontos dátumot, illetve az eladót azonosító adatot, hogy később - pl. probléma esetén - visszakereshető legyen.
Készletnyilvántartás
    A rendszer másik fő része a készletnyilvántartás, mely pontos kimutatást ad a raktáron lévő árukról. Ez teljesen szerves része a számlázának, hiszen csak így valósítható meg egy gördülékenyen működő üzleti alkalmazás. A számlázás folyamata természetesen megfelelően módosítja a készletet. Továbbá a készlet rendszer másik eleme a szállítók adatainak, a beszerzési árnak a kapcsolt tárolása. Ez is nagyon fontos egy nagyobb üzletnél, ugyanis meghibásodáskor a számla alapján pillanatok alatt kideríthető, hogy melyik nagykereskedőhöz kell visszavinni az árut. Továbbá lehetőség van visszaárura, illetve egyéb árucikk szűrt készlet kimutatásra.
A pontos tevékenységeket a menürendszer leírásakor mutatom be.

A program tervezése során a már említett méretezhetőség mellett fontos az adatbiztonság biztosítása. Az SQL adatbázis kezelés lehetőséget nyújt különböző jogosultságú felhasználók definiálására.

A menürendszer leírása

A program felépítésénél nagy szerepet játszik a program által kínált környezet, mely a tapasztalatok szerint meglehetősen jelentős a programot használók számára. Ugyanis lehet egy program tökéletesen, hibamentesen megírt de, ha a felülete, a dialógus ablakok, a program színmaszkjai nem megfelelőek, akkor a felhasználó inkább egy kevésbé jó, de használható programot keres. Ezért alkalmazzuk mindenek előtt a Borland Pascal - Turbo Vision szerű szín, menü, dialógus beállításokat. Ez elsősorban a program menüsorában, hátterében tükröződik. A menü felépítését tekintve menubar. A menubar egyes elemei menubox-ok (menupad), és a menubox-ok menuitem-eket (menupad) definiálnak. A háttér ASCII 178-as karakterrel lett feltöltve.

A menüből kiadható parancsok

  • Számlázás menü - a számlázással kapcsolatos teendők
    • Új számla - új számlát hozhatunk létre
      • Először megadjuk a vevő nevét,
      • majd egy újabb menüből választva:
      • vagy új tételt adunk a számlához, vagy nyomtatunk, vagy a tételeket tekintjük át
    • Számla törlése - az 1998-ban módosított törvény alapján, az APEH által minősített programok nem alkalmazhatnak számla módosítást, csak számla törlést, sztornót. Számla törlés esetén a pénztári blokkal együtt egy erre rendszeresített könyven külön fel kell jegyezni. A számla törlése után még elérhető az adatbázisban, speciális fejlesztői meghívásokkal.
    • Számla módosítása - a fent említett törvénymódosítás értelmében nem lehet számlát módosítani, csak törölni
    • Számlák megtekintése - egy újabb menü után választhatunk:
      • Megadjuk a megtekintendő számla számát,
      • A számla tételei között lapozhatunk előre / visszafelé
      • Illetve a számla (újra)nyomtatása (ami ugye nem törvényszerű, amíg a vevő nem adja vissza az eredeti számlát).
  • Készlet menü - a készlettel kapcsolatos teendők
    • Készlet - adott cikkszám ill. cikkszám maszk által megadott árúk leltári adatait tekinthetjük meg. (darabszám, ár, …)
    • Cikktörzs - az árusított összes cikk, a leltár megtekintése
    • Áruforgalom KI - a kimenő (eladott) áruk forgalmát tekinthetjük meg akár egy adott cikk, vagy cikkek esetén
    • Áruforgalom BE - a szállítótól beszerzett, a programba bevételezett egy adott cikk, vagy cikkek forgalmát tekinthetjük meg
    • Bevételezés - ebben a menüben nyílik lehetőség a szállítótól vásárolt áruk bevételezésére
  • Eladók menü - az eladók ki illetve beléptetése a rendszerbe, eladói jogok megadása
    • Eladó bejelentkezése - az eladó egy felhasználói névvel ill. kóddal párosítva léphet a rendszerbe
    • Eladó kijelentkezése - az eladó kijelentkezéssel (logout) fejezi be munkáját
    • Eladótörzs - az eladók listája, név, felhasználónév, jogok felsorolása
  • Vevők menü - a vevők adatbázisával kapcsolatos teendők
    • Vevőtörzs - név ill. vevőkód alapján a vevők kilistázása
    • Vevő felvétele - új vevőt veszünk fel az adatbázisba, vevőkódot generálunk
    • Vevő adatainak módosítása - meglévő vevő adatának módosítása
  • Kilépés menü
    • A programról - a program fejlesztőjéről, a verziószámról
    • Kilépés - kilépés a SzámlaR rendszerből
Adatbázis struktúra

Az adatbázis rendszer felépítésekor törekedni kell a biztonságos adattárolásra, lehetőség szerint a redundáns tárolás elkerülésével. Az adatbázis rendszer mindenek előtt teljesíti az 1NF (első normálforma) feltételeit, ugyanis minden sorában pontosan egy attribútumérték található. A 2NF-a feltételeit is teljesíti, - eszerint lévén, hogy 1NF-ben van és minden másodlagos attribútum teljesen függ a kulcstól. Ezek után már kisebb módosításokkal teljesíti a 3NF-t is ugyanis teljesíti a 2NF-et és a másodlagos attribútumok között nincs funkcionális függőség.

Az egyedkapcsolatokat ábrázoló ETK diagramm
 
 


 
 

Adatbázis állományok

Mivel az adatbázis-kezelést SQL-lel oldjuk meg a táblák felépítését az SQL-ben használatos típusú elemekkel adom meg:
 

leltar tábla (az ETK-n cikk)
cikkszam char(11) megnevezes char(32) ar integer bear integer menny integer afa smallint
szamla tábla
szamlaszam smallint tetelid smallint datum date ido char(8) vevoid smallint eladoid smallint fizmod smallint
tetel tábla
tetelid smallint cikkszam char(11) ar integer menny smallint
elado tábla
eladoid smallint kategoria char(1) nev char(32) username char(16) usercode char(16) userright smallint premium smallint
vevo tábla
    vevoid smallint nev char(64) cim char(64) bankszam char(24) osszvasarl integer kedvezmeny smallint
       
aruforg (kapcsolt, informatív)
    cikkszam char(11) kifele logical datum date menny integer ar integer kapcsoltid smallint ido char(8)
       
partner tábla (fejlesztéshez)
    partnerid smallint nev char(64) cim char(64) bankszam char(24) osszvasarl integer
(remélem ugyanezt az adatstruktúrát valósítottam meg a programban is J )
 
 

A táblákat összefoglaló adatbázis-rendszer a SZAMLAR nevet viseli.

Fontos megjegyezni, hogy DBase alóli futtatás esetén a rendszernek a C:\SZAMLAR könyvtárban kell lennie, és a DBase SQLHOME könyvtárába be kell másolni a saját SYSDBS.DBF állományt, mely megadja a SZAMLAR adatbázis-rendszer elérhetőségét. Az SQLHOME könyvtár útvonalát a CONFIG.DB-ben be kell állítani! Lásd installáció (következő cikk)!

Programmodulok

A program három fő modulból áll. Az egyes modulok külön program file-ban, PRS kiterjesztésű file-ban vannak eltárolva. A PRS kiterjesztésű file-ok az SQL parancsok futtatása miatt voltak szükségesek, mert SQL parancsokat nem lehetett *.PRG-ként eltárolni, illetve így futtatni.

A modulok:

  • A fő programmodul: SZAMLAR.PRS. Ezt kell futtatni, ez tartalmazza az indítást.
  • A számlázást, leltárnyilvántartást - áruforgalmat, bevételezést az SZLAUTIL.PRS teszi meg
  • A vevők ill. eladókkal kapcsolatos modul a VEVOELAD.PRS program file.
Az egyes modulok feladata

SZAMLAR.PRS

  • A program futási környezetének definiálása, hívás az SZLAUTIL file-ba:
    • Státusz változók (SET változó TO érték)
    • Globális változók definíciója, inicializálása
    • Képernyő, címsor előkészítése
  • Az ablakok definíciója definiálása, hívás az SZLAUTIL file-ba
  • Az adatbázis elindítása, az SQL kurzorok definiálása, hívás az SZLAUTIL file-ba
  • A menük definiálása, hívás az SZLAUTIL file-ba
  • A definiált menubar aktiválása
SZLAUTIL.PRS
  • String műveleteket segítő rutinok:
    • AddSpaceA - a string elé annyi Space-t tűz, hogy a string majd középen helyezkedhessen el a képernyőn
    • AddSpaceB - a string után annyi Space-t tűz, hogy a string majd középen helyezkedhessen el a képernyőn
    • FillSizeA - a string elé annyi Space-t tűz, hogy a paraméterben magadott hosszú legyen
    • FillSizeB - a string után annyi Space-t tűz, hogy a paraméterben magadott hosszú legyen
    • ATRIM - a string mindkét oldaláról (bal és jobb) levágja a fölösleges helyközöket, hasonló a TRIM() függvényhez
    • CenterWindow - kiszámolja mennyivel, kell az ablakot eltolni, hogy középen legyen
  • InitSQL - SQL parancsok inicializációja:
    • leltarc kurzor: Adott cikkszámú és/vagy nevű cikket keres ki.
    • vancikk kurzor: Cikkszám alapján keresi a cikket.
    • aruforgc kurzor: Egy bonyolultabb összekapcsolt tábla az áruforgalom megjelenítéséhez. A leltár (cikk) és aruforgalom táblák természetes összekapcsolásának eredménye.
    • getvevoc kurzor: Név alapján keresi a vevőt, ill. az azt azonosító VEVOID-t.
    • szlaszc kurzor: A számlákat összeszámoló kurzor.
    • szlattlc kurzor: Bonyolultabb, három táblát összekapcsoló kurzor. Egy számla tételeinek kiírására szolgál. A számla, leltár, és vevő táblák összekapcsolásának eredménye.
    • szlaertc kurzor: Egy számla összértékének számítása.
    • szlamtet kurzor: Egy számla tételeinek számát adja meg.
    • letszlac kurzor: Megkeresi létezik -e adott számlaszámú számla.
  • Menük definíciója: Menubar definíció
    • Szamlázás menupad definíció
    • Készlet menupad definíció
    • Eladók menupad definíció
    • Vevők menupad definíció
    • Kilépés menupad definíció
(természetszerűen minden egyes menüpadhoz tartozik több menupopup)
  • A menupopup-ok parancsainak lekezelése, a forráskódban bővebben.
VEVOELAD.PRS
    • InitSQL2 - további, a vevők, ill. eladókra vonatkozó SQL kurzorok definiálása
    • Eladotorzs - az eladótörzset megjelenítő rutin
    • geladonev - az eladó nevét és belépési kódját bekérő ablak
    • ujvevo - új vevő felvétele
    • vevomodosit - a vevők adatainak módosítása
Fontosabb eljárások, függvények az SZLAUTIL modulban
    • procedure kwproc - a készlet ablakot jeleníti meg, a készletet sorolja fel a keresési kulcs szerint
    • procedure ctwproc - a cikktörzset (az összes árut) tartalmazó ablakot jeleníti meg
    • procedure bevproc - új áruk bevételezését végzi, két ablakot használ: cikkszámot bekérő, majd adatbeviteli ablak
    • procedure arufproc PARAMETERS kiaru - Az áruforgalmat megjelenítő rutin. A paramétertől függően a kimenő vagy bejövő áruk forgalmát jeleníthetjük meg egy ablakban. A megjelenítendő áruforgalmat cikkszám szerint szűrhetjük.
    • procedure gcikkszproc - cikkszám kereső rutin az új számla, pontosabban az új tétel létrehozásához
    • procedure gvevoidproc - Új számla létrehozásához kéri be a vevőnevet. Keresési kulcs alapján listából választhatunk.
    • procedure ujszlatetel - Új számla készítése esetén új tételt hoz létre. A számlázási almenüből hívódik meg. Ez a rutin a tétel bevitele után már rögzíti az adatbázisban az új tételt.
    • procedure szlaujproc - Az új számla létrehozását készíti elő, a 'Számlázás' menupopup-ból hívódik meg. Vevőnevet kér be, majd aktiválja a számlázási almenüt.
    • procedure tetelmegnez PROCEDURE visszaf - A számlázási almenü vagy a 'Számlák áttekintése' menupad-ból hívódik meg. Megjeleníti egy adott számla tételeit. A paraméteré tekintve ha a visszaf paraméter igaz, akkor az adott számla aktuális tételéhez képest az eggyel megelőzőt, ha a visszaf hamis, akkor pedig a következőt mutatja.
    • procedure szlanez - A számlák áttekintése, a tetelmegnez eljárást hívja meg.
    • procedure szlatorles - A kiválasztott számlát törli. A kiválasztott számla fizikailag nem törlődik, később elérhető. A törléskor csak a számlaszámot változtatja meg, hozzáad 100000-et. A sima számlázáskor pedig a 100000 alatti számlaszámú számlákkal dolgozunk. (Fizikai számlatörlés, avagy az adatbázis tisztítása külön paranccsal érhető el.)
    • procedure vevotorzs - a vevők kilistázása
Következő cikkünkben a forráskód egyes, bonyolultabb részeit áttekintjük, illetve a szükséges kiegészítéseket is megtesszük. Továbbá felhasználói útmutatót is közlünk a programhoz.

Itt megtalálható a program forráskódja, figyelem csak példaprogram, szerzői jogával a cikkíró rendelkezik! (A példaprogramhoz következő cikkünkben feltöltött adatbázisokat is mellékelünk.)