Proiectarea Unui Sistem Informatic Pentru Gestiunea Stocurilor de Mărfuri în Cadrul Unei Societăți Comerciale
Introducere
Stocurile de materii prime și materiale, precum și gestionarea acestora sunt principalele pârghii în succesul unei societăți în activitatea economică. Acesta este motivul pentru care am ales această temă. Modalitatea în care te aprovizionezi,contractarea cu furnizorii,datele și formele de livrare, ciclicitatea aprovizionării, diversitatea fondului de mărfuri și materiale aprovizionate, modalitățile de plată ale aprovizionării stocurilor duc implicit la succesul sau falimentul unei firme.
Proiectul tratează în prima parte noțiuni teoretice privind gestionarea judicioasă a stocurilor de materii prime și materiale iar în partea a doua conține aplicații informatice( programe) de gestionare a acestor stocuri.
Programele informatice pot fi utilizate în unitățile economice, sunt funcționabile și au menirea de a ajuta managerul societății( întreprinderii) de a lua decizii corecte și juste în ceea ce privește aprovizionarea firmei, în capitolul pe care il tratează tema proiectului și anume: stocuri.
Capitolul I – Gestiunea stocurilor de mărfuri în cadrul unei întreprinderi
1.1.Stocurile de mărfuri – definiție și generalități
Ca definiție stocurile de mărfuri existente în cadrul unei întreprinderi, reprezintă totalitatea mărfurilor ( produse destinate revânzării) existente la un moment dat în magaziile sau depozitele întreprinderii, mărfuri ce au fost vândute în spațiile de comercializare ale întreprinderii.
Stocurile de mărfuri reflectă activitatea comercială a întreprinderii (de desfacere și aprovizionare), iar structura acestora reflectă activitatea spațiilor de desfacere în funcție de vadul comercial, perioada, puterea de cumpărare a populației, etc.
Stocurile în cadrul unei întreprinderi pot fi împărțite în gestiuni distincte ce trebuie să aibă obligatoriu spații de depozitare separate precum și gestionar responsabil care prin atribuțiunile de serviciu să răspundă de integritatea stocurilor de mărfuri atât cantitativă cât și calitativă acestora.
În ceea ce privește scopul constituirii stocurilor de mărfuri distingem mai multe aspecte:
la nivelul economiei naționale; sunt constituite de către organele competente ale statului stocuri de mărfuri strategice care poartă denumirea de "rezerva de stat"(RS); Aceste stocuri au funcția de a face față în societatea românească situațiilor deosebite(conflicte armate, inundații, stare de necesitate, seisme, etc.). Ca exemplificare aici amintim faptul că marea majoritate a silozurilor de cereale din țară au spații de depozitare care sunt destinate rezervei de stat(RS) unde sunt depozitate cerealele și plantele tehnice strategice.
la nivelul agenților economici (întreprinderilor) stocurile de mărfuri sunt constituite cu scopul optimizării și asigurării continuității desfășurării obiectului de activitate al întreprinderii, ceea ce va duce la realizarea profitului scontat prin programul de dezvoltare al întreprinderii.
Atât la nivelul economiei naționale precum și la nivelul întreprinderii aceste stocuri au o importanță deosebită, dar în cazul în care prin managementul adoptat stocurile nu sunt dimensionate corect, acestea creează probleme mari, atât economiei naționale cât și agentului economic ( întreprinderii).
"În legătură cu cele arătate trebuie subliniat că procesul de stocare al resurselor materiale influențează activitatea economiei sub două aspecte de sens contrar : pe de o parte asigură desfășurarea normală și armonioasă activității din economie, fără ca societatea să fie lezată de lipsa la un moment dat a resurselor de care are nevoie; pe de altă parte diminuează eficiența activității din economie când se manifestă suprastocarea, care determină scoaterea din circuitul economic, pentru anumite perioade a unor cantități de resurse materiale, suplimentare ce ar putea permite creșterea producției, realizarea unui volum mai mare de produse.
Cele doua influențe de mai sus ale stocării materialelor, materiilor prime și produselor finite au preocupat și preocupă specialiștii pentru determinarea stocului optim având finalitatea bunei funcționări a unei întreprinderi"
Deoarece supradimensionarea stocurilor determină imobilizarea de capital, marile concerne sau întreprinderi nu acceptă depășirea soldurilor stocurilor de mărfuri, valoarea de 25% din capitalul investit. Pe lângă imobilizările de capital care sunt consumate la constituirea de stocuri deținerea acestora mai angrenează o serie de cheltuieli cum ar fi :
cheltuieli cu spațiile de depozitare – păstrare;
taxe de asigurare;
dobânzi pentru credite;
cheltuieli de pază și securitate;
deprecieri ale soldului stocurilor datorită uzurii fizice și morale;
Mai sus am amintit noțiunea de sold stoc și trebuie să precizăm că soldul final al unui stoc de mărfuri se determină după relația matematică logică :
Sf = Si + I – E unde:
Si – sold inițial;
I – intrările în perioada respectivă;
E – ieșirile în perioada analizată;
1.2.Tipurile de stocuri de mărfuri și materiale
În cadrul unei întreprinderi există mai multe tipuri de stocuri care trebuiesc dimensionate corect și au rolul de alimentare ritmică a unităților de desfacere cu ajutorul cărora se realizează direct obiectul de activitate. Aceste tipuri de stocuri sunt :
curent;
de siguranță;
de pregătire sau de condiționare;
pentru transport;
Stocul curent(Sc) reprezintă cantitatea de mărfuri și materiale existente în depozitele și gestiunile întreprinderii care au menirea de a alimenta unitățile de desfacere în funcție de cereri și pentru a asigura ritmicitatea aprovizionării. "Evoluția stocului" se prezintă ca în figura 1.1. , stocul în funcție de zilele lucrătoare având o evoluție dinamică, atingând diferite niveluri pe parcursul timpului dintre două aprovizionări succesive. Nivelul maxim se atinge la data intrării mărfurilor în gestiune ( după efectuarea recepției) , nivelul mediu este jumatatea nivelului maxim iar nivelul minim poate fi considerat atunci cand întreprinderea ori se reprofilează sau poate chiar falimentează când stocul curent poate avea valoare 0. Consumul din stoc(r) poate fi același în perioade de timp egale sau haotic.Important este ca întreprinderea prin personalul competent din resortul aprovizionare să aibă o previziune cât mai aproape de realitate a anului financiar în momentul când întocmește programul de aprovizionare.
Figura 1.1. – Evoluția Stocului
unde:
I – intervalul mediu dintre achiziționările succesive de mărfuri;
r – cantitatea de mărfuri, produse finite, semifabricate, materiale și consumabile utilizate în activitatea întreprinderii;
t – durata de comandă și aprovizionare;
Scrmax – stoc curent maxim;
Scrm – stoc curent mediu;
Scrmin – stoc curent minim;
Stocul de siguranță(Ss) reprezintă cantitatea de mărfuri și materiale constituită în cadrul depozitelor și gestiunilor întreprinderii care are rolul de a alimenta unitățile de desfacere în momentul în care din motive obiective sau chiar subiective stocul curent este epuizat( are valoarea 0).
Dupa cum se observă și din denumirea acestuia acest stoc de mărfuri este intangibil și în permanență el trebuie reîmprospătat din intrările în stocul curent.
Stocul de pregătire sau de condiționare este un stoc specific întreprinderilor de producție iar materialele ce fac obiectul acestui stoc necesită o perioadă de timp de la data achiziționării și până la introducerea acestora în procesul tehnologic. Exemplificăm: lemnul în industria mobilierului care necesită o perioadă de timp până la prelucrare în care se face uscarea; bumbacul balotat, varul stins în construcții, făină în panificație și producția de panificație, etc.
Stocul de transport reprezintă cantitatea de mărfuri și materiale existente în mijloacele de transport, care au rolul completării stocului curent. Acest tip de stoc pare verosimil, dar ar trebui să ne gândim la o societate care face importuri de mărfuri transportate naval, unde durata unui transport poate dura o lună și poate și mai mult.
1.3.Modalități de exprimare a stocurilor
O primă formă de exprimare a stocurilor( unitatea de măsură) este aceea de unități fizice( naturale). Prin utilizarea acestei formei există posibilitatea de a estima spațiile de depozitare necesare, capacitatea mijloacelor de transport necesarului de mobilier pentru depozitare a stocului, necesarul de forță de muncă, dispozitive și utilaje folosite în spațiile de depozitare.
O a doua formă de exprimare a stocurilor este cea valorică( lei, mii lei, mil lei) formă care este în sprijinul sectoarelor economice care pot determina mult mai usor necesarul de fonduri, taxele ce trebuiesc achitate, determinarea capitalului circulant aferent mărfurilor și materialelor, determinarea vitezei de rotație, volumul creditelor și a altor indicatori economici care sprijină managerul societății în luarea unor decizii.
O a treia formă de exprimare este aceea în zile care utilizează perioada rămasă de utilizat a stocului curent în funcție de consumul mediu al stocului. La întreprinderile de producție această formă de exprimare a stocului este în corelație directă cu capacitatea de producție a întreprinderii.
1.4.Corelații și factori de influență a nivelului stocurilor
O primă corelație între stocurile întreprinderii și factorii de influență a nivelului acestora este aceea cu capitalul social, în mare măsură putem afirma că aceste stocuri sunt parte componentă a capitalului social. Stocurile de mărfuri curente sunt realizate din aporturile la capitalul social al acționarilor, profitul realizat din etapa anterioară a anului financiar precum și din credite acordate de bănci pe termen scurt și mediu.
Ca a doua importanță a corelației stocurilor este aceea cu veniturile firmei. Creșterea veniturilor firmei duce la o scădere a stocurilor curente, deci la diminuarea intervalului mediu dintre două aprovizionări, creșterea profitului întreprinderii, diminuarea stocului de siguranță și a celorlalte stocuri, deci permite extinderea activității întreprinderii.
Viteza de rotație a capitalului circulant influențează stocul de producție în sensul că mărirea vitezei de rotație duce implicit la diminuarea stocurilor.
O altă corelație semnificativă este aceea cu indicatorii din programul de aprovizionare:
stocul de producție cu stocul de sfârșit de an, care reprezintă suportul material al stocului la începutul anului următor;
necesarulde materiale și mărfuri pentru realizarea anului următor;
Între volumul producției și stocuri există o legatură indistructibilă care influențează managementul aprovizionării întreprinderii.
Corelația cea mai importantă este între stocuri și normele de consum. Această corelație are un imens ajutor organelor ce stabilesc programul de aprovizionare în stabilirea cantităților de aprovizionat în funcție de programul de fabricație.
Cea mai importantă corelație este aceea între cheltuielile de producție și cele cu stocurile. Creșterea cheltuielilor cu stocurile duce implicit la diminuarea activității economice a întreprinderii.
1.5. Clasificarea gestiunilor de stocuri
În funcție de condițiile procesului de stocare și natura resurselor care se achiziționează precum și modalitățile și condițiile de transport, gestiunile de stocuri se clasifică astfel :
cu comenzi egale la perioade de timp egale;
cu comenzi variabile la perioade de timp egale;
cu comenzi diferite la perioade diferite;
1.6. Metode de modele și determinare a stocurilor
Stocul curent(Sc) se determină cu una din relațiile :
Sc = CmZ * Î
sau
Sc = CmZ * Ic unde:
CmZ – consumul mediu zilnic;
Î – intervalul dintre două aprovizionări succesive;
Ic – perioada de achiziție conform contractului de furnizare;
CmZ se determină cu relația :
CmZ = N / 360 unde:
N – necesarul de mărfuri anual conform cifrei de afaceri;
Stocul de siguranță(Ss) este un alt tip de stoc existent în cadrul unei întreprinderi, după cum am menționat are rolul de tampon în activitatea de reaprovizionare a spațiilor de desfacere. Necesit. Necesitatea constituirii acestui stoc depinde la o întreprindere la alta, deoarece și acest stoc la constituirea lui duce la imobilizări financiare suplimentare care se adaugă peste imobilizările aferente constituirii soldului curent(Scr). Determinarea nivelului acestui stoc se face cu metoda devierii( abaterii) medii, determinare care se face cu ajutorul relației:
Ss = CmZ x D unde:
Cmz – consumul mediu zilnic determinat conform relației de mai sus;
D – neregulalitate medie;
Neregulalitatea medie se determină în funcție de datele statistice existente în perioada de bază referitoare la abaterile efective ( De) de la intervalul mediu de livrare cu ajutorul relației :
D = De * Qe / Qe
Se iau în calcul numai neregulalitățile în plus de la intervalul mediu( abaterile pozitive) care se stabilesc cu relația:
De = Ie – Î
Stocul de condiționare( Scd) este determinat de durata timpului de condiționare al produselor ce fac obiectul acestor stocuri. Determinarea nivelului acestui stoc se face conform relației :
Scd = CmZ * Tcd unde:
Tcd – timpul de condiționare și pregătire[zile];
Stocul pentru transport ( St) se stabilește în funcție de timpul necesar transportului mărfurilor, timp care obligatoriu trebuie să includă și timpul necesar încărcării și descărcării mărfurilor.
Nivelul acestui stoc se determină cu relația :
St = CmZ * Tt unde :
Tt – timpul necesar transportului inclusiv operații încărcare – descărcare;
Pentru a fi eficient sistemul informational specific proceselor de constituire și folosire a stocurilor trebuiesc îndeplinite următoarele :
să fie simplu, cu arie de cuprindere mare, pentru a evidenția toți factorii și multitudinea de fenomene, situații și corelații care caracterizează procesele de stocare;
sa fie așezat în buna măsură pe baze informatice și să aibă un grad de operativitate accentuat care să asigure transmiterea în timp util factorilor interesați de la toate nivelele organizatorice, datele informatice referitoare la starea și dinamica proceselor de stocare pentru analize, și luarea unor decizii operaționale;
să fie accesibil pentru toate nivelele organizatorice și toți factorii cărora li se adresează informațiile, în raport cu competențele decizionale;
să asigure culegerea, prelucrarea și transmiterea de informații în volumul, structura și calitatea care să permită o analiză completă cu rezultate expresive, semnificative pentru a constitui o bază reală fundamentată în luarea deciziilor care se impun după caz;
Capitolul II – Alegerea mediului IT de lucru
2.1. ADO.NET
ADO.NET este un set de clase ce ofera programatorilor acces la baze de date . Ofera acces consistent la surse de date precum Microsoft SQL Server si surse de date expuse prin OLEDB si XML. ADO.NET separă accesul datelor de datele manipulate în componente discrete. Un alt aspect important este ca se poate lucra in modul deconectat astfel incat datele se memoreaza in memoria locala.
Clasele ADO.NET sunt împărțite în două componente : data provider care furnizeaza accesul la o anumita baza de date, executa comenzi SQL si preia rezultatele comenzilor iar Dataset reprezentata printr-o colectie de tabele asupra carora se executa diferite operatii printr-un obiect DataAdapter putand fi accesata fara o conexiune permanenta cu sursa de date.
.NET Framework include furnizorii ADO.NET pentru acces direct la Microsoft SQL Server si pentru accesul indirect la alte baze de date precum OLEDB si ODBC iar fiecare furnizor are o implementare proprie a setului de obiecte. Cei doi furnizori de date contin aceleasi obiecte dar unele dintre proprietati si metodele lor sunt diferite.
Atunci cand dorim sa utilizam o sursa specifica de date pentru aplicatie, trebuie sa alegem furnizorul potrivit, sa gasim un provider nativ.NET.
Clasele ADO.NET contin namespace-uri pentru accesarea si gestionarea datelor din diverse surse, furnizorii avand propriul namespace. Pentru a le folosi trebuie inclusa o referinta in proiect si anume System.Data.dll. Fiecare namespace e descris in tabelul urmator:
2.2. Microsoft SQL SERVER 2008
Microsoft SQL Server 2008 este RDBMS( Relational Data Base Management System) – sistem pentru gestiunea bazelor de date, o platforma avansata, de incredere si scalabila produs de Microsoft. A facut impact asupra organizatiilor din intreaga lume cu capabilitati inovatoare, ofera o eficienta neegalabila. S-au facut investitii considerabile in imbunatatirea aplicatiei si in capabilitatile de management multi-server.
E mediul de lucru cel mai folosit pentru baze de date deoarece se ocupa direct de crearea bazelor de date mari si organizarea datelor mai usoara.
Una dintre principalele aplicatii de administrare multi-server imbunatatita care permite organizatiilor sa gestioneze mai bine mediile SQL Server include:
SQL Server Utility – o metoda de administrare noua pentru a monitoriza si gestiona aplicatiile de baze de date si instante SQL Server printr-o singura interfata de management cunoscuta ca punctul de control utilitar.(UCP). SQL Server Utility gestioneaza si vizualizeaza instantele Sql Server, fisiere de baze date.
Punctul de Control utilitar colecteaza configurarile si performantele informationale din administrarile SQL la fiecare 15 minute. Dupa ce au fost datele colectate de la instantele administrate, SQL Server Management Studio ofera un raport cu privire la resursele serverului SQL prin evaluarea politicilor analizate.
O importanta majora o constituie obiectul Explorer care ne permite sa cautam si sa selectam orice obiect din server.
2.3.Microsoft Visual Studio
Este cel mai utilizat mediu de dezvoltare de la Microsoft. Putem dezvolta programe de mare amploare atat cu cod nativ cat si cu cod gestionat. Are un debugger integrat care lucreaza atat la nivel de sursa cat si la nivel de masina. Contine si un designer prin care putem crea interfete grafice. Datorita diversitatii accepta diferite limbaje de programare si suporta un extra debugger suport pentru aproape orice limbaj de programare.
2.4.Limbajul C#
Este un limbaj de programare desprins din C pentru o gama larga de nevoi de dezvoltare.
Introduce unele caracteristici unice si puternice, cum ar fi delegati care pot fi priviti ca indicatori functie de tip in conditii de siguranta, expresii care introduc elemente de limbaje de programare functionale, precum si un model simplu de clasa de mostenire. Similar cu Java, este orientat pe obiect, vine cu o biblioteca extinsa de clasa si sprijina tratarea exceptiilor, mai multe tipuri de polimorfism si separarea de interfete de implementari. Aceste caracteristici, combinate cu instrumentele sale puternice de dezvoltare, suport multi-platforma, și generice, face C # o alegere bună pentru foarte multe tipuri de proiecte de dezvoltare software: proiecte de dezvoltare de aplicații rapide, proiecte implementate de către persoane fizice sau echipe mari sau mici, aplicatii Internet, și proiecte cu cerințe stricte de fiabilitate.
2.5.NET Framework
Reprezinta interfata dintre aplicatiile .NET si sistemul de operare. Contine limbaje de programare precum C#, C++ si J# dar trebuie sa respecte anumite principii ce tine de programarea orientata pe obiecte avand numele Common Type System( CTS) .
CTS e un standard care ne arata cum sunt prezentate in memoria calculatorului valori si definitii de un anume tip si ne permite sa scriem programe in diferite limbaje de programare pentru a partaja cu usurinta informatia.
Common Language Runtime(CLR) reprezinta masina virtuala care compileaza codul imediat datorita JIT( Just in Time) in acest fel aplicatiile sunt din ce in ce mai rapide. Pe langa asta gestioneaza memoria – elibereaza automat zone din memorie ocupate de date inutile.
The Framework Class Library(FCL) reprezinta o biblioteca standard, o intreaga colectie de clase, interfete reutilizabile.
Capitolul III – Proiectarea Sistemului Informatic
3.1. Designul conceptual al bazei de date
In proiectarea unei baze de date se are in vedere realizarea unul model conceptual, deoarece e mult mai simplu sa modificam conceptual decat baza de date unde au fost deja introduse date. Ne stabilim:
numarul de inregistrari care trebuie sa fie echivalent cu numarul de obiecte in baza de date.
campurile sau caracteristicile fiecarei inregistrari
relatiile dintre obiectele bazei de date astfel incat sa obtinem schema finala a bazei de date.
In ceea ce priveste anomaliile dintre atribute aplicam un set de reguli ce vor transforma structuri mai complexe in structuri de marime mica astfel incat vom beneficia de manipularea si mentinerea datelor. Procesul poarta denumirea de normalizare, proiecteaza tabelele dintr-o baza de date incat formele normale sa fie respectate si sa elimine depedentele functionale cunoscute sub numele de anomalii de actualizare a datelor. Obiectul normalizarii este de a evita anomaliile si a inlatura redundantele.
Prima forma normala(NF1) cere ca fiecare camp al unei inregistrari sa aibe doar o valoare anatomica iar pentru asta ca sa identificam mai usor inregistrarile, fiecare inregistrare trebuie sa fie unica . Pentru ca o inregistrare sa fie unica, va fi utilizata cheia primara.
Trecerea la a doua forma normala(NF2) necesita ca atributele unei tabele sa fie dependente functionale de cheia primara. Daca nu respecta aceasta conditie, vor fi separate in tabele diferite.
Forma normala 3(FN3) consta in eliminarea dependentelor tranzitive iar fiecare atribut care nu este cheie primara este independent.
Obiectivele informaționale ale acestui sistem informatic pentru gestionarea stocurilor de mărfuri vizează, în esență, prelucrarea automată a datelor în condiții de raționalitate economică și de optimizare a fluxurilor și a circuitelor informaționale. Proiectarea corectă și eficientă a bazei de date reprezintă un punct extrem de important, deoarece toate informațiile ce vor vi vehiculate în sistemul informatic vor proveni sau vor merge spre baza de date centrală.
Un alt punct cheie pe care baza de date îl acoperă este reprezentat de sistemul de logare. Logarea în sistem este făcută pe baza unui NUME DE UTILIZATOR și a unei PAROLE. Toate aceste date sunt reținute în baza de date iar accesarea acestor informații de către aplicație implică livrarea coerentă și exactă a datelor. Diferite tipuri de utilizatori vor avea drepturi diferite, ceea ce înseamnă că la stocarea informațiilor de logare trebuie avut grijă ca fiecărei persoane înregistrare să i se atribuie un identificator prin care aplicația se poate decide ce drepturi va avea respectivul utilizator în sistem.
Scopul acestui sistem informatic pentru gestionarea stocurilor de mărfuri este acela de a acoperi o plajă cât mai largă de informații legate de mărfurile existente, de documentele utilizate în tranzacții, de situația financiară globală precum și situația financiară pe segmente de timp.
Baza de date are sarcina de a livra informații aplicației astfel încât, prin prelucrare aceasta să poată îndeplini următoarele cerințe:
cunoașterea situației „la zi” a stocurilor și a soldurilor;
furnizarea de rapoarte privind stocurile, soldurile și a rulajelor conturilor de evidență analitică a magaziilor de materii prime și materiale ;
vizualizarea stocurilor, soldurilor și a rulajelor pe conturi la cerere;
calculul prețului de ieșire din stoc;
păstrarea în siguranță a datelor;
cunoașterea situației materiilor prime și materialelor din orice punct al întreprinderii.
Toate aceste informații vor fi livrate cu exactitate, fără a fi alterate în timp, sau modificate de persoane neautorizate. Pierderile de informații sunt prevenite prin diferite mijloace, unul dintre ele fiind aducerea fiecărei tabele la un nivel de normalizare cât mai înalt.
Cele mai înalte niveluri de normalizare previn orice pierdere de informație, iar pe măsură ce progresăm, spre niveluri mai înalte de normalizare, se crează tabele din ce în ce mai specializate crescând numărul lor și complexitatea asocierilor SQL.
Toate aceste aspecte garantează faptul că baza de date va putea fi folosită cu siguranța deplină a accesării de informații reale și coerente.
Majoritatea datelor ce vor fi accesate din baza de date curentă vor fi extrase în diferite forme. Mai exact, datele stocate în baza de date reprezintă intrările de bază necesare calculului diferitelor funcții ce vor duce la aflarea informației dorite de utilizator. Reducerea redundanței, chiar pe cât posibil eliminarea acestea, presupune eliminarea tuturor informațiilor ce pot fi deduse prin calcul. Totuși unele câmpuri, deși ar fi putut fi comasate, nu ar fi fost eficient din punct de vedere al procesării datelor. În acest sens, voi exemplifica la momentul analizei fiecărei tabele.
Intrările aplicației au fost proiectate având în vedere conținutul activităților de evidență, informare și pentru obținerea situațiilor de ieșire.
Situațiile de ieșire, descrise în tabelele următoare, sunt proiectate în funcție de cerințele și nevoile utilizatorului aplicației. În concordanță cu cerințele de informare, se proiectează machetele pentru situațiile de ieșire. Rezultatele aplicației depind de datele de intrare și de corectitudinea modului de culegere a acestora. Proiectarea corecta a bazei de date va asigura protecția informațiilor introduse, însă nu va putea depista eventuale erori de inserare a datelor(erori din punct de vedere financiar).
Aceste situații pot fi:
După cum am precizat anterior, în baza de date curentă sunt stocate numai informațiile de baza, fiind evitată redundanța datelor. Pentru a putea asigura corectitudinea situațiilor de ieșire prezentate anterior se vor utiliza anumiți algoritmi de calcul pentru fiecare informație în parte. Astfel, utilizând datele stocate, vor putea fi livrate către aplicație toate informațiile precizate în situațiile de ieșire.
Algoritmii folosiți sunt următorii:
Stocul curent = Stocul curent + Cantitate , cand are loc o
intrare, sau:
Stocul curent = Stocul curent – Cantitate, cand are loc o ieșire
Prețul mediu (unitar) = Soldul curent / Stocul curent;
Soldul curent = Soldul curent + Valoare, cand are loc o
intrare, sau :
Soldul curent= Soldul curent – Valoare, cand are loc o ieșire
Stocul inițial (al lunii n)= Stocul final (al lunii n-1) sau e 0 cand
se achiziționează în luna n un nou material;
Soldul inițial (al lunii n)= Soldul final (al lunii n-1) sau e 0 cand se achiziționează în luna n un nou material;
Cantitatea intrată = sum(Cantitatea) group by cod material pentru
intrări de materiale (în cazul situației S2) sau
Cantitatea intrată = sum(Cantitatea) group by cont debit (în cazul
situației S3);
Cantitatea ieșită = sum(Cantitatea) group by cod material pentru ieșiri
(în cazul situației S2) sau
Cantitatea ieșită = sum(Cantitatea) group by cod credit (în cazul
situației S3);
Rulajul debitor = sum(Valoare) group by cod material pentru intrări de
materiale
Rulajul creditor = sum(Valoare) group by cod material pentru ieșiri de
materiale
Stocul final = Stocul curent la sfârșit de lună
Soldul final = Soldul curent la sfârșit de lună
Valoare = Preț * Cantitate
În continuare va fi prezentată structura bazei de date. În primă instanță va fi făcută o descriere generala a bazei de date (o privire de ansamblu), dupa care fiecare entitate va fi tratată individual pentru a putea fi explicată în detaliu.
Baza de date este realizată în SQL Server 2008 R2 și respectă cerințele de optimizare enunțate. Ea se numește „Stoc_Mărfuri” și este formată din 6 tabele: Înregistrări, Solduri, Produse, Conturi, Furnizori, Înregistrări și Utilizatori. Relațiile dintre aceste tabele sunt de tip 1 la n (∞) și vor fi prezentate la descrierea în detaliu.
Figura 3.1. – Structura generală a bazei de date
Cele 6 tabele componente ale bazei de date sunt compuse din diferite câmpuri de bază care stochează informațiile într-un format eficient și mai ușor de accesat și prelucrat.
3.2. Descriera entitaților
Tabelele componente sunt formate din următoarele câmpuri:
În continuare va fi prezentat rolul pe care îl are fiecare tabel în parte și categoriile de informații pe care acesta trebuie să îl asigure la nivelul bazei de date.
Conturi
În acest tabel vor fi stocate informații legate de conturile utilizate în cadrul tranzacțiilor financiar-bancare ce sunt efectuate la nivelul companiei ce va utiliza prezenta aplicație . De asemenea, prin intermediul legăturilor cu celelalte tabele și prin informațiile stocate la nivelul acestui tabel vor putea fi livrate date legate de fiecare cont utilizat la nivelul fiecărei operațiuni de intrare/ieșire de mărfuri.
Restricțiile regăsite la nivelul acestui tabel sunt:
ID_Cont – primary key,
TipCont – not null, maxim 5 caractere,
DenumireCont – maxim 40 de caractere.
Furnizori
Acest tabel stochează informații legate de partenerii companiei prin intermediul cărora sunt făcute aprovizionările cu mărfuri. Datele stocate la nivelul prezentului tabel acoperă informațiile strict necesare livrării de informații despre proveniența fiecărui produs în parte. O altă funcționalitate asigurată de acest tabel o reprezintă situația financiară dintre compania curentă(cea care utlizează aplicația) și fiecare furnizor. Astfel vor putea fi accesate în orice moment informații despre facturi emise, achitate sau de retur.
Restricțiile prezente în acest tabel sunt:
IDFurnizori – primary key
NumeFurnizor – not null, maxim 40 de caractere,
Adresa – not null, maxim 40 de caractere,
NumarTelefon – not null
Înregistrări
Această tabelă stochează date legate de fiecare tranzacție ce este făcută la nivelul mărfurilor. Mai exact, sunt stocate toate intrările și ieșirile de mărfuri, în detaliu, fiind precizate toate datele necesare identificării documentelor utilizate în tranzacție, conturi creditoare și debitoare, tipuri de produse, preturi, cantități. Diferențierea dintre înregistrările de tip intrare și înregistrările de tip ieșire este făcută prin intermediul câmpului TipInregistrare, de tip întreg. Interpretarea valorilor din acest câmp este următoarea: 0 – intrare și diferit de zero – ieșire. Atât cantitățile cât și prețurile produselor vor fi stocate cu o precizie foarte mare, fiind utilizat tipul de date real, iar în cazul în care utilizatorul dorește un rezultat mai puțin exact(rotunjit), va putea efectua interogările în modul dorit. Relațiile acestui tabel cu celelalte tabele vor fi discutate pe larg în secțiunea următoare.
Restricțiile prezente la nivelul acestui tabel sunt:
IDInregistrare – primary key,
TipInregistrare – not null,
NumărDocument – not null,
IDProdus – not null,
CodFurnizor – not null,
Cantitate – not null,
Preț – not null.
Produse
Această tabelă reține informații legate de produsele ce sunt implicate în tranzacții de intrare/ieșire. Datele stocate vor fi utilizate pentru a furniza informații legate de denumire, unități de măsură și codul de identificare a contului care este utilizat în realizarea operațiunilor.
Restricțiile prezente la nivelul acestei tabele sunt:
IDMaterial -primary key,
DenumireMaterial – maxim 40 de caractere, not null,
UnitateDeMasura – maxim 7 caractere, not null,
CodCont – not null (este foarte important ca acest câmp să fie completat deoarece prin intermediul acestuia vor putea fi identificate probleme ce ar putea apărea din punct de vedere financiar).
Solduri
În cadrul acestui tabel sunt reținute informații cu privire la situația soldurilor curente. În detaliu, informațiile fac referire la cantitățile totale existente, valoare mărfuri, tipurile de stocuri, cheltuieli de întreținere, pierderi, perioade de timp în care este făcută analiza situației stocurilor și soldurilor. Acest tabel conține datele generale referitoare la situație curentă. Acest lucru presupune faptul că o mare parte din operațiunile efectuate cu baza de date vor fi efectuate prin intermediul acestui tabel. Așadar, măsurile de protecție a datelor trebuie să fie stricte iar controlul modificărilor trebuie să fie unul strict. Tranzacțiile efectuate asupra acestui tabel vor fi controlate de o serie de triggere ce vor acționa în cauză, în momentul în care utilizatorul dorește să execute operațiuni ce ar putea afecta integritatea datelor stocate.
Restricțiile prezente la nivelul câmpurilor, sunt:
IDSold – primary key,
CantitateaTotală – not null,
CheltuieliIntretinere – not null,
TipStocProduse – maxim 20 de caractere, not null,
IdProdus – not null.
Utilizatori
Aceast tabel este unul care necesită atenție sporită. Acest lucru se datorează faptul că prin intermediul informațiilor stocate la nivelul acestui tabel este făcută autentificarea utilizatorilor aplicației. În primul rând este absolut necesar ca prin proiectarea aplicației, accesul la acest tabel să fie permis numai administratorului, sau managerului principal. În cadrul acestei tabele vor fi stocate datele de autentificare în funcție de tipul de cont al utilizatorului. Astfel, un utilizator poate avea un cont de administrator, *** sau ***. Fiecare dintre aceste conturi este evidențiat de valoarea câmpului TipUser. Este deosebit de important ca utilizatorii obișnuiți sa nu poată accesa acest tabel decât pentru citire, atunci când este făcută autentficarea. Este de preferat ca la nivelul aplicației sa fie proiectată o funcție de verificare a complexității parolei de acces, astfel încât în momentul creării unui cont nou, administratorul să fie atenționat cu privire la complexitatea parolei introduse.
Este absolut necesar ca datele introduse la crearea unui cont să fie corecte și să corespundă cu identitatea reală a utilizatorului.
Restricțiile prezente în acest tabel sunt:
Utilizatori – primary key,
Parola – maxim 50 de caractere,not null,
TipUser – maxim 50 de caractere, not null,
Nume – maxim 20 de caractere, not null,
Prenume – maxim 20 de caractere, not null.
3.3. Relațiile dintre entități
Toate tabele prezentate anterior sunt legate între ele prin foreign keys (chei externe) pentru ca plaja de informații ce pot fi livrate să fie cât mai mare posibil.
Aceste relații dintre tabele sunt de diferite tipuri: unu la unu, unu la mai mulți sau mai mulți la mai mulți. Următoarele descrieri prezintă cu exactitate fiecare relație existentă la nivelul tabelelor.
Figura 3.2. – Relațiile la nivelul tabelelor
Relațiile prezentate în diagrama de mai sus au la bază cheile externe create la nivelul proiectării bazei de date. Aceste chei externe sunt:
FK_Inregistrari_Conturi – face legătura dintre ID_Cont, din tabela Conturi, și ContulCreditor, din tabela Inregistrari.
FK_Inregistrari_Furnizori – face legătura dintre IDFurnizori, din tabela Furnizori, și CodFurnizor, din tabela Inregistrari.
FK_Inregistrari_Produse – face legătura dintre IDMaterial, din tabela Produse, și IDProdus, din tabela Inregistrari.
FK_Produse_Conturi .- face legătura dintre IDMaterial, din tabela Conturi, și CodCont, din tabela Produse.
FK_Solduri_Produse – face legătura dintre ID_Cont, din tabela Produse, și IDProdus, din tabela Solduri.
Scopul analizei relațiilor dintre entități este de a asigura utilizatorului întreg suportul necesar tranzacțiilor de date. Deși tranzacțiile ce pot fi efectuate au fost validate anterior, atunci când au fost precizate datele de intrare ce sunt necesare, precum și care ar putea fi ieșirile cerute de utilizator, prin descrierea exactă a legăturilor este verificată din nou capabilitatea bazei de date de a realiza cu succes toate tranzacțiile ce au fost specificate la nivelul proiectării.
Pentru validarea acestor chestiuni au fost ultilizate legăturile primary key/foreign key. În urma analizei schemei logice, precum și a testelor efectuate, s-a ajuns la concluzia că baza de date îndeplinește toate cerințele specificate la nivelul proiectării.
Datele care trebuie să fie suportate de sistem, și implicit de baza de date vor fi inserate de fiecare utilizator în parte, acestea variind în funcție de drepturile de acces pe care acesta le are(prin tipul contului de utilizator cu care a fost înregistrat).
În sistem vor putea fi introduse următoarele categorii de date, care vor fi stocate la nivelul bazei de date centrale:
Nume de utilizator, parolă și drepuri de acces pentru utilizatorii nou creați,
Noi informații despre utilizator,
Detalii despre produse și categorii de produse,
Detalii de intrare/ieșire mărfuri,
Detalii despre documentele utilizate în tranzacții,
Detalii despre furnizori,
Anularea unei tranzacții în caz de eroare și înștiințarea utilizatorului de situația produsă,
Generare de rapoarte referitoare la punctele de minim și maxim ce pot fi atinse de stocurile de mărfuri existente.
Toate operațiile ce vor fi efectuate asupra bazei de date vor fi executate în funcție de datele existente . Prin proiectare, baza de date va suporta efectuarea următoarelor operațiuni efectuate de utilizatori prin intermediul aplicației:
Autentificarea cu un nume de utilizator și parolă aferentă acestuia,
Salvarea oricărei schimbări efectuate asupra bazei de date(adăugare, ștergere, update produse/categorii),
Asigurarea efectuării oricărui tip de căutare la nivelul informațiilor existente;
3.4. Modelul logic al bazei de date
Modelul logic obținut în momentul de față este revăzut împreună cu utilizatorii pentru a ne asigura că modelul este reprezentarea corectă a cerințelor firmei.Diagrama de mai jos ilustrează modul în care datele circulă în cadrul firmei.
Figura 3.3. – Modelul logic al bazei de date
În cazul în care, după crearea aplicației, datorită creșterii nivelului de lucru, este nevoie ca baza de date să fie extinsă. Din aceasta cauză, baza de date centrală a fost structurată în așa fel încât să poată asigura această creștere fără riscul pierderii de informații sau riscul afectării eficienței de lucru cu aceasta. Acest lucru va permite adaugarea cu ușurință de noi tabele care vor deservi la stocarea noilor informațiilor legate de partea pe care s-a produs extinderea. De asemenea, în cazul în care calculul unor date va fi considerat costisitor(din punct de vedere al timpului), vor putea fi create noi tabele ce vor stoca informațiile respective(chiar daca ar exista riscul să fie stocate informații redundante).
3.5.Proiectarea Interfeței de logare
Prima fereastră a aplicației o constituie fereastra de logare și are rolul de a identifica persoana care accesează aplicația.Astfel, utilizatorul tastează username-ul și parola aferentă acestui nume.Utilizatorii care au acces la această aplicație pot fi de 3 tipuri:
cei care au dreptul de citire a datelor
cei care au drept de scriere și citire a datelor
administratorul (sau administratorii) care au permisiuni nelimitate.
După ce utilizatorul introduce datele necesare logării,aplicația caută în baza de date pentru a verifica dacă există o înregistrare care să corespundă datelor introduse.Dacă nu există nicio astfel de înregistrare utilizatorul va primi un mesaj de eroare,putând alege să închidă aplicația sau să reintroducă datele.Dacă o înregistrare va fi gasită in baza de date care să corespundă datelor introduse utilizatorului i se va deschide fereastra principală a aplicației.
Figura 3.4. – Fereastra de logare
În această fereastră,prezentată în figura de mai sus,utilizatorul va avea acces după ce se va loga, în funcție de permsiunile acestuia la unul din cele trei meniuri principale
Vizualizare:Accesibil utilizatorilor care au drept doar de citire in baza de date. Cuprinde submeniurile:Vizualizare Intrări,Vizualizare Ieșiri și Centralizarea Documentelor.
Actualizare:Accesibil utilizatorilor care au atat drept de citire cat și de scriere în baza de date.Aceștia pot doar să adauge ,să modifice și să șteargă produse din baza de date. Cuprinde submeniurile:Intrări,Ieșiri,Modificare Intrări,Modificare Ieșiri,Ștergere Intrări,Ștergere Ieșiri.
Administrare:Accesibil administratorilor ,care pot modifica informații despre useri și despre conturi.Cuprinde submeniurile Conturi,Utilizatori și Căutare după lună
Atunci când un utilizator se loghează,el este automat introdus în meniul Vizualizare.Dacă va încerca să acceseze ferestere care nu-i sunt permise va primi un mesaj de eroare și va fi redirecționat la meniul Vizualizări.
3.6. Vizualizări
Meniul Vizualizari permite utilizatorului logat să verifice informații despre produsele achiziționate și despre produsele vândute prin cele doua submeniuri:Vizualizare Intrări și Vizualizare Ieșiri.Ambele submeniuri afișează informații despre Numărul Documentului în care s-a efectuat tranzacția,contul creditor și contul debitor,data efectuării tranzacției,cantitatea cumpărată/vândută și respectiv prețul plătit/primit.
Figura 3.5. – Fereastra de Vizualizări
Alături de submeniurile Situație Intrări și Situație Ieșiri mai există și un al treilea submeniu Centralizarea Documentelor care permite vizualizarea generală a tranzacțiilor efectuate, structurate după numărul documentului.Utilizatorul poate introduce numele unui produs pentru a filtra astfel căutările.
O facilitate importantă pe care o oferă aplicația este aceea că orice căutare este realizată real-time.Asta înseamnă că ori de câte ori utilizatorul introduce date în TextBox-ul pentru căutare, o interogare SQL se efectuează în background,ce cauzează updatarea continuă a tabelei cu rezultate.Căutarea se face în meniul Vizualizări după numele produsului,pentru submeniurile Situație Intrări și Situație Ieșiri respectiv după numărul documentului în submeniul Centralizarea Documentelor.
Fiecare submeniu din meniul Vizualizări permite printarea căutării curente.Printarea informațiilor se va face intr-un document PDF,utilizatorul alegând numele acestuia,pentru identificarea lui ulterioara.
3.7. Actualizare
Meniul Actualizare este accesibil utilizatorilor care au drept de adăugare/modificare și de ștergerea tranzacțiilor efectuate.Acesta cuprinde alte 6 submeniuri: Intrări, Ieșiri, Modificare Intrări, Modificare Ieșiri, Ștergere Intrări, Ștregere Ieșiri.
Figura 3.6. – Fereastra de Actualizare
Submeniul Intrări permite utilizatorului introducerea produselor în baza de date.Toate produsele introduse se vor salva în același document și va avea același cont creditor.Utilizatorul va trebui să mai introducă neaparat data ,codul furnizorului,codul materialului,cantitatea si prețul produsului.Dacă una din aceste date nu va fi în formatul corect tranzacția nu va fi efectuată. Utilizatorul va putea anula tranzacția și prin apăsarea butonului Renunță.
Submeniul Ieșiri este similar cu cel de Intrări singura diferență fiind dată de faptul că tranzacția ce se execută în curs mai poate fi întreruptă și de lipsa unui produs din stoc.Dacă utilizatorul decide să vândă o cantitate de produse mai mare decât stocul disponibil,va primi un mesaj de eroare,iar tranzacția va fi abandonată.
În momentul în care utilizatorul apasă butonul Introduceți,în baza de date se întamplă două lucruri:
Se inserează în tabela Înregistrări din baza de date valorile introduse anterior
Se updatează tabela cu Solduri din baza de date în funcție de tipul tranzacției ( Intrare sau Ieșire). Daca tranzacția este de intrare se adaugă cantitatea introdusă la stocul de produse din luna respectivă și se actualizează prețul mediu pentru produsul respectiv după formula Preț=Valoare/Cantitate.Dacă tranzacția este de ieșire se execută o operație similară,singura diferență fiind dată de faptul că din Soldul lunii respective se scade cantitatea introdusă,iar din valoarea totală a soldului din luna respectivă se scade valoarea introdusă în tranzacție.
Submeniurile Modificări Intrări/Ieșiri se ocupă cu modificările ulterioare ce pot fi aduse unor tranzacții deja efectuate.
Figura 3.7. – Fereastra de Actualizare – Modifica Intrari
Ca și în meniul Vizualizări, căutarea tranzacțiilor în baza de date se face real-time în timpul introducerii de caractere în TextBox-ul din fereastra.Căutarea se poate face în două moduri:
În funcție de numărul documentului
În funcție de codul produsului (unic identificabil în baza de date)
Dacă utilizatorul apasă butonul Modifică,atunci rândul curent va primi culoarea verde iar acesta va putea modifica orice câmp din tranzacția respectivă (cu excepția numărului documentului care va fi colorat în rosu) .În momentul în care utilizatorul părăsește rândul respectiv va începe în mod automat actualizarea bazei de date.
Updatarea bazei de date înseamnă atât modificarea tabelei cu înregistrări prin modificarea valorilor vechi din tabela Înregistrări cu noile valori introduse dar și actualizarea tabelei Solduri,prin modificarea Cantității Totale și a Valorii Totale.
Modificarea tabelei cu Solduri se face în felul următor:
Dacă tranzacția este una de intrare iar cantitatea modificată este mai mare decât vechea cantitate, atunci în tabela Solduri se adună la Cantitatea Totală diferența dintre noua cantitate și vechea cantitate.Dacă tranzacția este una de ieșire atunci se va scădea diferența dintre noua cantitate și vechea cantitate. Dacă stocul de produse ajunge la valoarea 0 atunci utilizatorul va primi un mesaj de eroare și tranzacția va fi abandonată.
Dacă tranzacția este una de intrare,dar noua cantitate introdusă este una mai mică decât vechea cantitate, atunci în tabela Solduri se scade din Cantitatea Totală diferența dintre cantitatea modificată și vechea cantitate.În ambele cazuri discutate la nivelul tabelei Înregistări se modifică și Valoarea introdusă facându-se produsul dintre noua cantitate și preț.
Dacă în schimb se modifică prețul unui produs iar tranzacția este una de ieșire atunci în tabela Solduri se vor întâmpla urmatoarele modificări:Se va calcula noua valoare introdusă în baza de date prin înmulțirea cantitații cu noul preț.La vechea Valoare Totală din tabela Solduri se va aduna diferența dintre noua valoare introdusă și vechea Valoare Totală.Se va calcula apoi noul preț mediu pentru pentru produsul respectiv ca raport dintre noua Valoare Totală și Cantitatea Totală.
Dacă sunt modificate și Cantitatea și Prețul dintr-o înregistrare se fac urmatoarele modificări:Se actualizează tabela cu Înregistrări calculându-se Valoarea ca produs dintre noul preț și noua cantitate, și se modifică tabela Solduri așa cum s-a prezentat și în paragraful anterior.
Submeniurile Șterge Intrări si Șterge Ieșiri se ocupă cu ștergerile tranzacțiilor existente din baza de date.La fel ca și la submeniurile anterioare,odată cu modificarea/ștergerea înregistrărilor din baza de date are loc niște modificări în cascadă la nivelul bazei de date.
Figura 3.8. – Fereastra de Actualizare – Sterge Intrari
Odata cu apăsarea butonului Șterge-mă! două lucruri se întamplă în baza de date:
Se șterge tranzacția din baza de date,fie ea de intrare sau de ieșire
Se actualizeză tabela Solduri astfel:Dacă înregistrarea ce a fost stearsă este una de intrare,se scade din Cantitatea Totală cantitatea ștearsă de către utilizator ,si din Valoarea Totală valoarea înregistrării șterse.Se Recalculează prețul mediu ca raportul dintre Valoarea Totală și Cantitatea Totală. Dacă în schimb tranzacția este una de ieșire atunci se reevaluează Cantitatea Totală din tabela Solduri adunându-se la ea cantitatea ce tocmai a fost stearsa.In mod analog se actualizează Valoarea Totală,adăugându-se valoarea ce tocmai a fost ștearsă și se modifică prețul mediu pentru produsul respectiv,la fel cum s-a procedat pentru o tranzacție de intrare.
3.8.Administrare
Meniul Administrare este disponbil utilizatorilor care au drept de administrare asupra bazei de date.Acest meniu cuprinde alte trei submeniuri:Utilizatori,Conturi și Căutare după Lună.
Submeniul Utilizatori îi permite administratorului să adauge,, să șteargă sau să modifice informațiile despre un user.În momentul în care utilizatorul va începe să tasteze în TextBoxul din fereastră,se va executa o interogare SQL în baza de date care va genera o lista cu userii înregistrați în baza de date, care corespund filtrului selectat
Figura 3.9. – Fereastra de Administrare – Utilizatori
Utilizatorul are la dispoziție patru filtre pentru afișarea utilizatorilor:
Căutarea după username
Căutarea după nume
Căutarea după prenume
Căutarea după privilegiile pe care le are userul
Submeniul Conturi permite administratorului bazei de date să gestioneze conturile create la nivelul bazei de date.Aici există doua tipuri de conturi:Activ și Pasiv,iar fiecare cont poate fi atât cont creditor cât și cont debitor.
La fel ca la submeniul anterior,și la acest submeniu administratorul sistemului are dreptul de a adăuga un cont nou sau să modifice/șteargă conturi existente.
Figura 3.10. – Fereastra de Administrare – Conturi
Căutarea conturilor se face după codul contului,unic identificabil în baza de date iar utilizatorul poate stabili filtrul pe care îl aplică căutarii dintre:
Cont Activ
Cont Pasiv
Toate Conturile
În momentul în care utilizatorul realizează modificarea informațiilor despre un cont,la nivelul bazei de date se realizează o updatare în cascadă a tabelelor care sunt relaționate cu tabela Conturi.Updatarea în cascadă se realizează atât la ștergerea unui cont cât și la modificarea informațiilor despre un cont.
Figura 3.11. – Fereastra de Administrare – Cauta dupa luna
Submeniul Căutare după Luna permite administratorului o vizualizare a situației tranzacțiilor din luna respectivă sau dintr-o luna oarecare.Afișarea situației cuprinde și informații despre profitul lunar,luându-se în calcul și cheltuielile aferente depozitării produselor.
Administratorul poate să aleagă o lună în care să vizualizeze tranzacțiile efectuate și profitul obținut pentru fiecare produs sau poate să seleceze luna curenta și îi va fi aratată situația vânzarilor/cumpărărilor din luna respectivă.
Aceste informații pot fi printate și într-un document PDF,în scopul de a fi vizualizate în timp sau pentru a face comparații cu alte documente.
Capitolul IV – Implementarea aplicației
4.1. Implementarea codului în C#
Codul aplicației este structurat pe cinci mari clase care corespund celor cinci ferestre care apar în aplicație.Prima fereastră reprezintă fereastra de logare care introduce utilizatorul în fereastra principală.Aceasta clasă conține o metodă care se activează la apăsarea butonului Login și care execută o interogare SQL ce permite validarea informațiilor introduse de utlizator.
using (SqlConnection con = new SqlConnection("data source=.;database=licenta;integrated security=SSPI"))
{
con.Open();
string query = "select Nume,Prenume,TipUser from Utilizatori where (Utilizatori=@user and Parola=@parola)";
SqlCommand comanda = new SqlCommand(query, con);
comanda.Parameters.AddWithValue("@user", Username);
comanda.Parameters.AddWithValue("@parola", Parola);
using (SqlDataReader reader = comanda.ExecuteReader())
{
while (reader.Read())
{
Nume = reader.GetValue(0).ToString();
Prenume = reader.GetValue(1).ToString();
switch (reader.GetValue(2).ToString())
{
case "Administrator":
this.TipUser = TipAcces.Administrator;
break;
case "Reader":
this.TipUser=TipAcces.Reader;
break;
case "Writer":
this.TipUser = TipAcces.Writer;
break;
}
}
}
}
Pentru a extrage date din baza de date se folosește o clasă din framework-ul .NET,SqlDataReader,care impreună cu SqlDataWriter constituie modalitatea prin care aplicația interactionează cu baza de date.
Fereastra principală constituie clasa principală a aplicației,ea conținând principalele metode de interacțiune cu baza de date,de exportat gridview-uri în PDF-uri sau de construire a interfeței grafice.
Clasa conține două metode importante :
private void GetData(SqlCommand selectCommand, DataGridView data);
private void AddRowsToDataGridView(SqlCommand selectCommand,DataGridView dgv);
Prima metodă are rolul de a extrage informații din tabelele din baza de date și de a le insera în tipuri speciale de elemente grafice numite Gridview-uri
private void GetData(SqlCommand selectCommand, DataGridView data)
{
try
{
using (SqlDataAdapter dataAdapter = new SqlDataAdapter(selectCommand))
{
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
DataTable table = new DataTable();
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
dataAdapter.Fill(table);
data.DataSource = table;
dataGridView1.AutoResizeColumns(
DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
A doua metodă are rolul de a insera aceste date manual in Gridview-uri.Aceasta este o metodă importantă și necesară din cadrul aplicației deoarece datele introduse manual in elementul vizual vor putea fi modificate sau șterse ulterior.Acest lucru se intamplă în meniul Actualizari prin apăsarea butoanelor Sterge/Modifică sau în meniul Administrare.
Clasa principală din cadrul aplicației,Form1,mai conține și metode importante ce permit exportarea gridview-uri în documente pdf.Pentru a realiza acest lucru se utilizează un framework special iTextSharp care permite salvarea în documente cu extensii diferite a unor elemente vizuale din framework-ul .NET.
Metoda de mai jos realizează un document pdf,formatat într-un mod elegant care permite salvarea Situației Ieșirilor la un moment dat.Pentru a-i permite utilizatorului să aleagă numele pe care vrea să îl dea pdf-ului se creează o nouă instanță a clasei Fereastra_Nume unde acesta va putea introduce textul.
Fereastra_Nume fereastra = new Fereastra_Nume();
fereastra.ShowDialog();
Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35);
PdfWriter pdf = PdfWriter.GetInstance(doc, new FileStream(fereastra.Nume_Introdus + ".pdf", FileMode.Create));
doc.Open();
BaseColor grey = new BaseColor(128, 128, 128);
iTextSharp.text.Font font = FontFactory.GetFont("Arial", 20, iTextSharp.text.Font.BOLD, grey);
Paragraph parag = new Paragraph("Situatie Iesiri \n\n\n ", font);
parag.Alignment = Element.ALIGN_CENTER;
doc.Add(parag);
PdfPTable table = new PdfPTable(this.dataGridViewDocumente.Columns.Count);
for (int i = 0; i < this.dataGridViewDocumente.Columns.Count; i++)
{
table.AddCell(new Phrase(this.dataGridViewDocumente.Columns[i].HeaderText));
}
for (int i = 0; i < this.dataGridViewDocumente.Rows.Count; i++)
{
for (int j = 0; j < this.dataGridViewDocumente.ColumnCount; j++)
{
if (this.dataGridViewDocumente[j, i].Value != null)
{
table.AddCell(new Phrase(dataGridViewDocumente[j, i].Value.ToString()));
}
}
}
doc.Add(table);
doc.Close();
Aplicația conține metode care actualizează aplicația în mod dinamic,odată ce tastează produsul/contul/înregistrările despre care vrea să obțină informații suplimentare.Acest lucru se realizează cu Event-uri care se activează odată ce userul tastează într-un TextBox.Spre exemplu metoda private void textBox3_TextChanged(object sender, EventArgs e) actualizează în mod automat gridview-ul specific actualizării din Șterge Ieșiri.
Pe lânga clasa principală,aplicația mai conține și alte clase care se ocupă cu adăugarea de noi utilizatori sau de conturi în baza de date.Aceste clase interacționează,utilizând mecanisme din programarea orientată pe obiect pentru a oferi consistență și lizibilitate codului aplicației.
Toate situațiile excepționale care apar la nivelul aplicației sunt gestionate prin mecanismul excepțiilor,pentru a oferi utilizatorului informații suplimentare despre erorile ce pot apărea in decursul unei aplicații.
4.2. Implementarea bazei de date in Sql Server 2008
Implementarea bazei de date nu este o cerința atât de complexă precum este proiectarea conceptuală a acesteia.Ea înseamnă execuția unor interogări SQL necesare în crearea tabelelor responsabile cu gestionarea înregistrarilor din baza de date.
Pentru a creea baza de date,precum și tabelul pentru Utilizatori s-au executat urmatoarele instrucțiuni:
Crearea bazei de date
create database Stocuri_Marfuri
Crearea tabelului Utilizatori
create table Utilizatori(
Utilizatori varchar(50) Primary key,
Parola varchar(50) not null,
TipUser varchar(50) not null,
Nume varchar(50) not null,
Prenume varchar(50) not null,)
În mod analog sunt create și celelalte tabele din baza de date,fiecare având și constrângerile care au fost prezentate în capitolul 3.
Următoarea etapă în implementarea bazei de date o constituie introducerea datelor în baza de date.Introducerea datelor în baza de date trebuie să respecte regula conform căreia datele sunt introduse prima dată în tabelele care nu conțin nicio cheie externă,și apoi dupa acest lucru se introduce date în tabelele ce conțin cheie externă.Sintaxa SQL Pentru adaugarea unei înregistrari în tabelul Conturi este următoarea:
Insert into Conturi values ( 402,'Cont de cumparaturi','A')
Interogarea anterioară inserează în tabelul Conturi o înregistrare având atributele specificate între paranteze.
Toate operațiile efectuate mai sus pot fi executate și în modul vizual,cu ajutorul SQL-Server fără a scrie efectiv interogările.
Implementarea corectă a bazei de date este un pas important în functionarea corectă a aplicației,deoarece cea din urmă se va folosi de datele deja existente în baza de date pentru a putea adăuga înregistrări de la nivelul aplicației.
Concluzii
În concluzie, aplicația realizată oferă unei firme posibilitatea să-și gestioneze stocurile de mărfuri într-un mod elegant și modern.Prin modul în care este construită,aplicația oferă o gamă largă de facilități utilizatorilor,de asemenea aceasta permite împărțirea persoanelor care accesează aplicația pe trei nivele,pentru ca astfel să filtreze privilegiile utilizatorilor în funcție de rangul din cadrul firmei.
Aplicația utilizează medii de lucru moderne (framework-ul .NET 4.5 și SQL Server 2008 R2) ,pentru ca facilitățile de care aceasta dispune să fie scrise într-o manieră cât mai elegantă și cât mai plăcută utilizatorilor.Limbajul de programare în care este creată aplicația este unul de nivel înalt.
Baza de date a aplicației este una simplă, ceea ce oferă aplicației o viteza de procesare în transmiterea informațiilor superioară.Aceasta folosește triggere pentru a realiza actualizarea datelor într-un mod cât mai optimizat și de asemenea are o structură normalizată,pentru a evita datele redundante.
Funcționalitățile aplicației mai pot fi extinse pe parcurs,deoarece lizibilitatea codului aplicației este ridicată iar codul este ușor inteligibil si reutilizabil.
Permițând un număr de operații extins ce se pot executa asupra bazei de date (efectuarea de tranzacții de intrare/ieșire sau modificări/ștergeri ale unor înregistrări deja existente în baza de date ),aplicația poate să servească cerințelor tuturor firmelor care se ocupă cu gestionarea stocurilor de mărfuri,având o dimensiune relativ mică,cu o bază de date complexă prin gândire dar mică în dimensiuni.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Proiectarea Unui Sistem Informatic Pentru Gestiunea Stocurilor de Mărfuri în Cadrul Unei Societăți Comerciale (ID: 163258)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
