Proiectarea Unui Sistem Informatic Pentru Gestiunea Stocurilor
CUPRINS
Introducere …………………………………………………………………………………………………………………. 2
Capitolul I : Analiza gestiunii stocurilor …………………………………………………………………………. 3
I. 1 Stocurile ………………………………………………………………………………………………………………… 3
I.1.1 Definirea stocurilor ……………………………………………………………………………………….. 3
I.1.2 Tipuri de stocuri ……………………………………………………………………………………………. 3
I.1.3 Rolul stocurilor …………………………………………………………………………………………….. 3
I. 2 Gestiunea stocurilor ………………………………………………………………………………………………… 4
I.2.1 Sfera gestiunii stocurilor ……………………………………………………………………………….. 4
I.2.2 Obiective și rezultate ale gestiunii științifice a stocurilor …………………………………… 4
I.2.3 Funcțiile gestiunii stocurilor …………………………………………………………………………… 5
I.2.4 Elementele principale ale unui proces de stocare ………………………………………………. 5
I.2.5 Factorii de influență a gestiunii stocurilor ………………………………………………………… 5
I.2.6 Situații periculoase în gestiunea stocurilor ……………………………………………………….. 6
I.2.7 Modalități practice de gestiune a stocurilor ………………………………………………………. 6
I.2.8 Indicatori ai eficienței gestiunii stocurilor ………………………………………………………… 10
Capitolul II : Proiectarea programului de gestiune a stocurilor unei farmacii ………………………. 11
II.1 Noțiuni de proiectare a bazelor de date ………………………………………………………………………. 11
II.2 Analiza principalilor indicatori și operatori relaționali …………………………………………………. 12
II.2.1 Caracteristici ale bazelor de date relaționale ……………………………………………………. 12
II.2.2 Operatorii relaționali ai bazelor de date relaționale……………………………………………. 13
II.2.3 Noțiunile și conceptele bazelor de date relaționale, modelul entitate-relație ……….. 14
II.2.4 Modelarea grafică a bazelor de date relaționale ……………………………………………….. 15
II.3 Analiza detaliată a proiectării bazei de date relaționale care va gestiona
stocurile unei farmacii …………………………………………………………………………………………….. 16
Capitolul III : Realizarea programului de gestiune a stocurilor unei farmacii realizat în
Microsoft Access 2000 …………………………………………………………………………… 18
III.1 Prezentare Access ………………………………………………………………………………………………….. 18
III.2 Crearea bazei de date de gestiune a stocurilor unei farmacii ……………………………………….. 19
III.3. Crearea de filtre, interogări și rapoarte ……………………………………………………………………. 24
III.4. Crearea unei interogări de tip crosstab …………………………………………………………………….. 31
III.5.Utilizarea programului de gestiune a stocurilor unei farmacii realizat în
Microsoft Access 2000 ………………………………………………………………………………………….. 38
Concluzii ……………………………………………………………………………………………………………………. 42
BIBLIOGRAFIE ………………………………………………………………………………………………………… 43
Introducere
Tema proiectului ”Proiecatarea unui sistem informatic pentru gestiunea stocurilor” este în strânsă legătură atât cu disciplina „Sisteme informatice de asistare a deciziilor” la care se prezintă acest proiect, cât și cu cu specialitatea Facultății de Științe Economice, Contabilitate și Informatică de Gestiune, din a cărei programă face parte disciplina menționată.
După cum reiese și din titlul temei, proiectul cuprinde două componente: o componentă informatică și o componentă economică. Acestea sunt tratate separat din punct de vedere al bazelor teoretice, după care acestea devin un tot unitar, la realizarea practică a sistemului informatic, materializat prin obținerea unui program de gestiune a stocurilor, în mod arbitar ales al uneii farmacii, deoarece este un model simplu de gestiune a stocurilor, folosind platforma de programare a Microsoft Access 2000.
Pentru realizarea unei unități în expunerea proiectului, s-a făcut în primul rând prezentarea noțiunilor teoretice ale componentei economice, urmată de prezentarea noțiunilor teoretice ale componentei informatice, iar în final se arată pas cu pas modul de programare al softului de gestiune al farmaciei. În momentul utilizării bibliografie a unor relații, noțiuni sau paragrafe, acestea sunt indicate corespunzător în proiect, prin folosirea notelor de subsol.
La tratare noțiunilor teoretice ale componentei economice s-a făcut o prezentare amănunțit stocurile și gestiunea stocurilor. Sunt arătate modalitățile de definire a stocurilor, tipurile și rolul acestora. La gestiunea stocurilor se dezbat ariile de cuprindere ale gestiunii stocurilor, obiectivele și rezultatele unei gestiuni informatice a stocurilor, funcțiile gestiunii stocurilor, elementele procesului de stocare, factorii de influență și situațiile periculoase întâlnite în cazul unei gestiuni informatizate a stocurilor, modalitățile practice de gestiune și indicatorii eficieței gestiunii stocurilor.
La tratarea noțiunilor teoretice ale componentei informatice s-au prezentat criteriile unei proiectări de baze de date, analiza principalilor indicatori și operatori ai unei baze de date relaționale, noțiunile, conceptele, caracteristicile și modelarea grafică a bazelor de date relaționale bazate pe modelul entitate-relație, precum și analiza detaliată a proiectării în cazul particular ales al unei baze de date relaționale care va gestiona stocurile unei farmacii.
Prezentarea teoretică a platformei de programare a programului Microsoft Acces 2000 este urmată de expunerea pas cu pas a proiectării bazei de date, a creării acesteia precum și a creării filtrelor, interogărilor și rapoartelor.
În ultima parte a proiectului este dezbătută utilizarea sistemului informatic de gestiune a stocurilor unei farmacii, din punct de vedere al unui utilizator de program, care în cazul analizat poate fi reprezentat de persoana care vinde medicamentele aflate în stocul și respectiv în gestiunea farmaciei.
Capitolul I : Analiza gestiunii stocurilor
I.1 Stocurile
I.1.1 Definirea stocurilor
Stocurile reprezintă cantități de resurse materiale sau produse finite sau într-un stadiu oarecare de fabricație, acumulate în depozitele de aprovizionare ale unităților economice într-un anumit volum și o anumită structură, pe o perioadă de timp determinată, în vederea unei utilizări ulterioare.
Stocul este o rezervă de material destinat să satisfacă cererea beneficiarilor, aceștia identificându-se, dupa caz, fie unei clientele (stoc de produse finite), fie unui serviciu de fabricație (stocuri de materii prime sau de semifabricate), fie unui serviciu de întreținere (articole de consum curent sau piese de schimb), fie unui serviciu de după vânzare (piese detașate).
Stocul reprezintă ansamblul de bunuri care se formează în ciclul de exploatare al intreprinderii pentru a fi vândut în starea în care se gasește în urma unui proces de producție în curs sau viitor, sau pentru a fi consumat la prima necesitate.
Stocul reprezintă un ansamblu de bunuri sau de articole acumulate în așteptarea unei utilizări ulterioare, mai repede sau mai târziu și care permite alimentarea utilizatorului pe măsura nevoilor sale, fără a fi perturbat de întârzieri în livrări sau de incapacitatea furnizorului de a fabrica temporar respectivele bunuri.
Noțiunea de stoc grupează:
aprovizionarea: materiile prime, furnizorii;
produsele: intermediare și finite;
intermediarii: cumpărătorii care revând marfa.
Orice stoc se caracterizează printr-un flux de intrare pe care intreprinderea îl poate previziona într-un anumit grad, precum și printr-un flux de ieșire, pe care rareori intreprinderea îl poate stapâni, fiind impus de clienți, dar și de un nivel de bunuri în așteptare.
I.1.2 Tipuri de stocuri
Din punct de vedere al producției, stocurile pot fi de producție (stoc în amonte), de desfacere (stoc în aval) și stoc interoperațional.
Din punct de vedere al rolului jucat pe plan economic, stocurile pot fi cu rol de regulator, cu rol strategic și stocuri speculative.
Din punct de vedere al modului de depozitare, care ține seama și de unele proprietăți fizico-chimice ale elementelor, avem: produse periculoase, voluminoase, fragile etc.
Din punct de vedere al modului de gestionare există stocuri cu gestiune normală, stocuri cu “afectare directă” (comandate special pentru o anume comandă), stocuri “fără gestiune” (din magaziile intermediare, cu o supraveghere globală) și stocuri de produse consumabile.
Din punct de vedere al caracteristicilor formării și destinației lor, există stoc curent, stoc de siguranță, stoc de pregătire sau de condiționare, stoc pentru transport intern și stoc de iarnă.
I.1.3 Rolul stocurilor
Rolul determinant al stocurilor este evidențiat de faptul că acestea asigură certitudine, siguranță și garanție în alimentarea continuă a producției și ritmicitatea desfacerii rezultatelor acesteia. Altfel spus, procesul de stocare apare ca un regulator al ritmului aprovizionărilor cu cel al producției, iar stocul reprezintă acel “tampon inevitabil” care asigură sincronizarea cererilor pentru consum cu momentele de furnizare a resurselor materiale. Rolul stocului este multiplu și are numeroase rațiuni economice, financiare, tehnice, comerciale.
Justificarea existenței stocurilor de materii prime, componente sau produse finite rezultă din:
a) Rațiuni financiare: stocarea produselor scumpe pentru un scop speculativ specific perioadelor de criză sau inflație, menținerea valorii anumitor materii prime sau produse, eliminându-se astfel riscul creșterii exagerate a cheltuielilor de fabricație datorită penuriei;
b) Rațiuni economice: reducerea cheltuielilor de transport prin achiziționarea unor cantități mai mari decât stocul curent necesar, acceptarea ofertei propuse de furnizor cu cantități fixe de livrare la prețuri foarte avantajoase pentru produsele care nu implică costuri mari de stocare, stocarea producției excedentare în raport cu cererea în cazul în care oprirea și repornirea activităților productive costă, fiind preferată realizarea unei producții constante cu stocuri care să raspundă cererilor suplimentare ocazionale;
c) Rațiuni tehnice: ameliorarea calității produselor (uscarea lemnului, șampanizarea vinului);
d) Rațiuni comerciale: reducerea termenelor de livrare mai ales cand clienții doresc produsele într-un timp scurt, achiziții în perioada reducerilor oferite de furnizori, pentru a promova un produs, politica de marketing prevăzând și acțiuni punctuale când se realizează reduceri de prețuri, perioadă în care cererile cresc și se justifică crearea stocului, pentru a realiza un răspuns prompt la cererile aleatoare.
I.2 Gestiunea sal producției, iar stocul reprezintă acel “tampon inevitabil” care asigură sincronizarea cererilor pentru consum cu momentele de furnizare a resurselor materiale. Rolul stocului este multiplu și are numeroase rațiuni economice, financiare, tehnice, comerciale.
Justificarea existenței stocurilor de materii prime, componente sau produse finite rezultă din:
a) Rațiuni financiare: stocarea produselor scumpe pentru un scop speculativ specific perioadelor de criză sau inflație, menținerea valorii anumitor materii prime sau produse, eliminându-se astfel riscul creșterii exagerate a cheltuielilor de fabricație datorită penuriei;
b) Rațiuni economice: reducerea cheltuielilor de transport prin achiziționarea unor cantități mai mari decât stocul curent necesar, acceptarea ofertei propuse de furnizor cu cantități fixe de livrare la prețuri foarte avantajoase pentru produsele care nu implică costuri mari de stocare, stocarea producției excedentare în raport cu cererea în cazul în care oprirea și repornirea activităților productive costă, fiind preferată realizarea unei producții constante cu stocuri care să raspundă cererilor suplimentare ocazionale;
c) Rațiuni tehnice: ameliorarea calității produselor (uscarea lemnului, șampanizarea vinului);
d) Rațiuni comerciale: reducerea termenelor de livrare mai ales cand clienții doresc produsele într-un timp scurt, achiziții în perioada reducerilor oferite de furnizori, pentru a promova un produs, politica de marketing prevăzând și acțiuni punctuale când se realizează reduceri de prețuri, perioadă în care cererile cresc și se justifică crearea stocului, pentru a realiza un răspuns prompt la cererile aleatoare.
I.2 Gestiunea stocurilor
Intreprinderile sunt supuse unei duble constrângeri: cadența de aprovizionare foarte scazută generează stocuri mari și costuri importante de stocare în timp ce ritmul de aprovizionare ridicat multiplică costurile de lansare a comenzilor. Față de aceste considerații, gestiunea materialelor cuprinde o serie de activități prin care:
se efectuează normarea stocurilor;
se optimizează sistemul logistic de aprovizionare, depozitare, manipulare, conservare;
se reduc cheltuielile de stocare;
se realizează evidența strictă a materialelor.
I.2.1 Sfera gestiunii stocurilor
Ca proces economic complex, gestiunea stocurilor are o sferă largă de cuprindere, aceasta incluzând atat probleme de conducere, dimensionare, de optimizare a amplasării stocurilor în teritoriu, de repartizare a lor pe deținători, de formare și evidență a acestora, cât și probleme de recepție, de depozitare și păstrare, de urmărire și control, de redistribuire și mod de utilizare.
I.2.2 Obiective și rezultate ale gestiunii științifice a stocurilor
Obiectivele principale ale conducerii proceselor de stocare pot fi sintetizate astfel:
prevenirea formării de stocuri supranormative, cu mișcare lentă sau fără mișcare și valorificarea operativă a celor existente (devenite disponibile);
asigurarea unor stocuri minim necesare, asortate, care să asigure desfașurarea normală a activității economico-productive a agenților economici prin alimentarea continuă a punctelor de consum și în condițiile unor cheltuieli cât mai mici;
asigurarea unor condiții de depozitare-păstrare corespunzatoare în vederea prevenirii degradării materialelor existente în stocuri;
folosirea unui sistem informațional simplu, operativ, eficient, util și cuprinzător care să evidențieze în orice moment starea procesului de stocare;
aplicarea unor metode eficiente de urmărire și control care să permită menținerea stocului în anumite limite, să prevină imobilizările neraționale.
Soluționarea oricărei probleme de stoc trebuie să conducă la obținerea răspunsului pentru următoarele două chestiuni, care constituie de fapt obiectivele principale ale gestiunii:
1) determinarea mărimii optime a comenzii de aprovizionare;
2) determinarea momentului (sau frecvenței) optime de aprovizionare.
I.2.3 Funcțiile gestiunii stocurilor
Principalele funcții ale gestiunii stocurilor se pot nominaliza prin:
crearea siguranței și certitudinii cu privire la asigurarea alimentării continue a procesului de producție;
imobilizarea unor cantități cat mai reduse în materiale stocate;
diminuarea continuă a cheltuielilor de stocare;
formarea de stocuri pentru situații neprevăzute.
I.2.4 Elementele principale ale unui proces de stocare
Stabilirea politicii de gestiune a stocurilor este nemijlocit legată de cunoașterea elementelor prin care se caracterizează procesele de stocare și care determină nivelul de formare al stocurilor:
A. Cerere ce consum, element de bază în funcție de care se determină nivelul și ritmul ieșirilor, volumul și ritmul necesar pentru intrări și nivelul stocului. Cererea de consum reprezintă numărul de produse solicitate în unitatea de timp. Acest număr nu coincide întotdeauna cu cantitatea vândută deoarece unele cereri pot ramâne nesatisfăcute datorită deficitului în stoc sau întârzierilor în livrare. Evident, dacă cererea poate fi satisfacută în întregime, ea reprezintă cantitatea vândută.
B. Costurile reprezintă cheltuielile ce trebuie efectuate pentru derularea procesului de aprovizionare-stocare (respectiv cele cu comandarea, contractarea, transportul, depozitarea, stocarea materialelor etc.). În calculul stocurilor se au în vedere:
costurile de stocare – cuprind suma cheltuielilor ce trebuie efectuate pe timpul staționarii resurselor materiale în stoc;
costul de penurie sau costul ruperii stocului – definit atunci când volumul cererii depășește stocul existent;
cheltuieli datorate variațiilor ritmului de producție – cheltuielile fixe legate de creșterea ritmului de producție, de la nivelul zero, la un anumit nivel dat;
prețul de achiziție sau cheltuielile directe de producție.
C. Cantitatea de reaprovizionat reprezintă necesarul de aprovizionat care se stabilește în funcție de necesarul pentru consum pentru întreaga perioada de gestiune.
D. Lotul reprezintă cantitatea cu care se face aprovizionarea la anumite intervale, în cadrul perioadei de gestiune stabilită (trimestru, semestru, an) și care este funcție de caracterul cererii.
E. Parametri temporali sunt specifici dinamicii proceselor de stocare: perioada de gestiune, intervalul de timp între două aprovizionări consecutive, durata de reaprovizionare, momentul calendaristic la care se emit comenzile de reaprovizionare, coeficientul de actualizare.
F. Gradul de prelucrare a produselor: cu cât bunurile păstrate în stoc sunt într-un stadiu mai avansat de finisare, cu atât mai repede pot fi satisfăcute comenzile, dar cu atât mai mari vor fi cheltuielile de stocare. Cu cât produsele sunt mai puțin finisate, cu atât mai mici sunt cheltuielile de stocare, dar timpul necesar pentru livrarea unei comenzi este mai mare. În plus, erorile de previziune tind să crească pe masură ce gradul de prelucrare a produselor este mai avansat. Rezultă că pentru a reduce influența factorilor nefavorabili este necesar să crească și stocul tampon.
I.2.5 Factorii de influență a gestiunii stocurilor
Factorii cei mai relevanți care influențează gestiunea stocurilor sunt:
cererea, care poate fi constantă sau aleatoare cu o probabilitate cunoscută sau necunoscută;
cantitatea de aprovizionat (Q) rezultată din analiza cererii;
durata de aprovizionare (d) – timpul consumat de la emiterea comenzii până la recepția materialului în depozitul întreprinderii;
intervalul dintre două reaprovizionări (t);
perioada de timp pentru care este planificată gestiunea (T);
stocul curent optim (Sc);
date despre furnizor: capacități, termene de livrare, loturi de livrare;
capacitățile de depozitare ale întreprinderii;
cheltuielile ocazionate de desfășurarea procesului de aprovizionare, dintre care cele mai importante sunt:
Cl – cheltuieli pentru lansarea comenzii, independente de mărimea stocului curent sau de cantitatea comandată;
Cs – cheltuieli cu stocarea, manipularea, transportul și conservarea materialelor, dependente de mărimea stocului depozitat;
Cp – cheltuieli de penalizare, care apar atunci când cererea este mai mare decât stocul existent și ea se datorează lipsei de materii prime pentru prelucrare.
I.2.6 Situații periculoase în gestiunea stocurilor
Responsabilii cu gestiunea stocurilor trebuie să evite două situații periculoase: un nivel de stoc prea mare sau un nivel de stoc prea scăzut, ambele cu consecințe economice dezavantajoase.
Dacă nivelul de stoc este prea mare:
se înregistrează numeroase cheltuieli suplimentare (construcția de depozite, asigurări, personal salarizat, întreținere, pază etc.);
imobilizările de capitaluri scad competitivitatea firmei;
poate crea dificultăți de lichidități;
crește riscul de degradare și deteriorare a produselor stocate;
conduce la situații în care firma vinde cu rabat (scăderea profitului) producția stocată.
Dacă nivelul de stoc este prea scăzut:
multiplică riscul de a întrerupe și chiar de a opri fluxul productiv;
dezorganizează întreprinderea;
generează întârzieri în livrări, diminuarea vânzărilor și în final pierderea clientelei.
Astfel, intreprinderea va construi și va exploata un sistem de gestiune economică a stocurilor, printr-un efort financiar care merită a fi luat în considerare, sistem care va avea ca obiective:
reducerea la maxim a nivelului mediu al stocurilor;
minimizarea riscurilor de întrerupere a producției.
I.2.7 Modalități practice de gestiune a stocurilor
Modelul S-s. Gestiunea de tip S-s sau cu două depozite se caracterizează prin faptul că reaprovizionarea se face în momentul în care nivelul curent al stocului a atins o anumită valoare notată generic cu “s”. Acest lucru este echivalent unei gestiuni cu două depozite, în cadrul căreia reaprovizionarea se face în momentul în care primul depozit s-a golit. În perioada de reaprovizionare (de avans) consumul se va realiza din cel de-al doilea depozit, care joacă rolul stocului de siguranță.
În acest model considerăm:
cererea totală pentru perioada T este R, aleatorie;
costul stocării este cS;
costul lansării unei comenzi de reaprovizionare este cL;
termenul de livrare £ poate fi:
a) neglijabil și obținem costul total pentru intervalul T ca fiind:
unde: q – reprezintă cantitatea de reaprovizionat.
b) cvasiconstant este nivelul minim de reaprovizionare Ns; când stocul atinge acest nivel se lansează o comandă de q piese. Mărimile date sunt: T, £, R, cS, cL și ne propunem să determinăm pe Ns și pe q astfel încât costul stocului pentru perioada T să fie minim. O metodă aproximativă constă în a admite că ritmul mediu al cererii este constant; în acest caz optimul cantității q0 este independent de Ns:
Dacă £ este durata medie a termenului de reaprovizionare (cu o abatere medie pătratică mică) se va evalua legea de probabilitate a cererii pentru acest interval de timp.
Fie F£ (r) probabilitatea cererii de r produse în intervalul £: F£ (r) = P(R£r) = probabilitatea cumulată. Se impune condiția ca probabilitatea epuizării stocului să fie mai mică sau egală cu valoarea dată £ , unde £ reprezintă probabilitatea de penurie.
Trebuie să avem: 1 – F£ (r) = £. Fie Q soluția ecuației: 1 – F£ (r) = £, de unde rezultă Q = Ns.
Această metodă este aproximativă, deoarece implică ipoteze de lucru distincte pentru stocurile fiecărui depozit.
Metoda A.B.C. este un procedeu rapid pentru analiza aprovizionării și gestiunii economice a materialelor. Această analiză clasifică mărfurile achiziționate în funcție de valorile de aprovizionare ale acestora și de ponderea achizițiilor. Prin aceasta pot fi văzute punctele de plecare pentru realizarea unei politici raționale a achizițiilor, pe care se pot baza mai multe măsuri, începând cu simplificarea procedeelor de comandă, până la numărul de salariați folosiți în depozite.
Factorul esențial în folosirea metodei A.B.C. constă în alegerea unui criteriu corespunzător pe baza căruia se efectuează împărțirea materialelor în cele trei grupe A, B, C. Un asemenea criteriu poate fi valoarea de consum a materialului dat, în timpul stabilit, valoarea specială a materialului cu privire la folosirea lui în producție, proveniența din import etc.
O dată criteriul ales și împărțirea în grupe efectuată, metoda A.B.C. poate fi utilizată în diferite domenii ale gestiunii stocurilor.
Controlul selectiv al stocurilor permite o gestiune selectivă a stocurilor. Stocurile tampon ale articolelor de valoare mare sunt menținute la un nivel destul de mic. Aceste articole trebuie să fie supuse unui control de gestiune foarte strâns din partea personalului aprovizionării (articolele de mare valoare sunt adesea gospodărite cu ajutorul unui sistem de reaprovizionare periodică și dacă intervalele sunt suficient de frecvente, un stoc tampon este mai puțin necesar).
Această metodă dă o atenție mai mică articolelor de valoare mică, a căror epuizare se evită prin asigurarea unor stocuri tampon și se pot reduce investițiile în stocuri, micșorând în același timp riscurile de epuizare.
Din analiza structurii materiale a unităților economice rezultă că valoarea mare în stoc este deținută de un număr relativ mic de materiale, care nu numai că influențează direct volumul de mijloace circulante atras, dar joacă și rolul principal în desfășurarea procesului de fabricație.
Stocurile sunt împărțite în trei clase:
– clasa A, în care intră articolele cu valoare mare reprezentând cantitativ 10 % din stoc și 70 % valoric;
– clasa B, în care intră articole reprezentând 20 % atât cantitativ cât și valoric;
– clasa C, în care intră articole ce reprezintă cantitativ 70 % din stoc și 10 % valoric.
Gruparea materialelor în funcție de ponderea lor valorică în stocul total, pe baza datelor din tabelul de mai sus, se prezintă într-o formă expresivă în Fig. 1.
Fig. 1. Graficul de evoluție al curbei valorilor cumulate
Metoda A.B.C., pe lângă faptul că oferă o politică diferită pentru articolele din categoria mai scumpă, permite și utilizarea unor metode de gospodărire diferită.
Întrucât în categoria A sunt puține articole, se poate controla zilnic nivelul stocurilor, pentru a observa variația cererii și a supraveghea de aproape respectarea termenelor de către furnizori.
Se pot folosi modele economico-matematice exigente, care au în vedere elemente (factori) concrete ce condiționează nivelul stocurilor și care asigură constituirea lor la dimensiuni cât mai mici, determinând creșterea vitezei de rotație a mijloacelor circulante la maxim.
Cu articolele din categoria B se poate adopta o politică intermediară, exercitând un oarecare control, dar baza rămâne tot stocul tampon, spre deosebire de politica dusă pentru categoria A. La articolele mai ieftine este mai eficient să se suporte sarcina stocurilor, decât să se plătească salariile personalului care ar fi indispensabil pentru mărirea controlului. Pentru grupa B se pot aplica două soluții:
stabilirea de modele distincte pentru dimensionarea stocurilor de materiale din această grupă cu un grad de exigență mediu;
folosirea pentru materialele care, ca pondere valorică, tind către grupa A de importanță, a modelelor precizate pentru această din urmă grupă, iar pentru materialele ce tind ca valoare către grupa C a modelelor specifice acestora.
Pentru materialele din categoria C se pot folosi procedee mai puțin exigente (chiar cu caracter statistic) și care vor avea în vedere factorii cu acțiune hotărâtoare în optimizarea proceselor de stocare (cheltuielile de transport, sursa de proveniență etc.).
Viabilitatea unui sistem de gestiune a stocurilor este determinată, în general, de felul în care acesta răspunde unor cerințe de bază, cum ar fi:
gradul ridicat de utilitate practică;
adaptabilitatea la utilizarea mijloacelor electronice de calcul;
suplețea și operaționalitatea în derularea și adaptarea proceselor de stocare;
aria de cuprindere mare;
concordanța cu fenomenele reale ale procesului de formare și consum a stocurilor;
reducerea la minim a imobilizărilor de resurse materiale și creșterea vitezei de rotație a mijloacelor circulante ale agenților economici;
cheltuielile de conducere, organizare și desfășurare a proceselor de stocare cât mai mici.
Analizat din aceste puncte de vedere, sistemul A.B.C. răspunde în mare măsură cerințelor. Acest sistem aplicat la gestiunea stocurilor are în vedere, în primul rând reducerea imobilizărilor la materialele de bază și care se consumă în cantități mari, aspect asigurat prin exigența metodologică de dimensionare a stocurilor și de urmărire a derulării proceselor de stocare.
Strategia IMPACT (Inventory Management Program and Control Techniques) este considerat ca un model eficient de stabilire a stocurilor de siguranță. Este o metodă de depozitare economică, adaptată cerințelor calculatoarelor electronice. Acest model a fost dezvoltat de IBM.
Estimarea necesarului se face prin extrapolarea valorilor din trecut. Influențele conjuncturale și sezoniere sunt luate în calcul prin metoda de nivelare exponențială. Stocul de siguranță se determină cu ajutorul calculului probabilităților.
Conform metodei IMPACT, sortimentelor din depozit se împart în trei grupe:
1. produse cu desfacere mare (vitale);
2. produse cu desfacere mijlocie (importante);
3. produse cu desfacere redusă ( obișnuite).
Mărimea stocului de siguranță depinde de precizia estimării necesităților (cererii). Cu cât va fi apreciată mai precis în prealabil cererea, cu atât va fi mai mic stocul de siguranță.
Pentru a putea aplica metoda IMPACT sunt necesare: cunoașterea cererilor ri (i = 1, 2,…, T), pe T intervale de timp și calculul abaterii medii pătratice σ.
Pentru determinarea stocului de siguranță, metoda IMPACT folosește următorii indicatori:
a) cererea medie (necesarul mediu)
unde: T – este numărul de intervale de timp cercetate;
ri – este cererea în intervalul i, i = 1, 2,…, T;
b) MAD (Mean Absolut Deviation) reprezintă abaterea absolută de la medie a cererilor, ca unitate de măsură a “împrăștierii” valorilor efective în jurul valorii medii.
MAD se determină ca valoare medie a valorilor absolute ale abaterilor de la cererea medie.
c) coeficientul de siguranță exprimă potențialul de livrare al furnizorilor. Coeficientul de siguranță (K) se stabilește pe bază de tabele ale funcției normale, în cadrul căreia sunt date valorile lui K, corespunzător diferitelor niveluri ale potențialului de livrare al furnizorilor.
Potențialul de livrare (Z) exprimă gradul de satisfacere de către furnizor a unei comenzi. Acest potențial de livrare se mai numește grad de deservire sau nivel de serviciu.
Potențialul de livrare (Z) se determină după relația:
unde: CLE – este cantitatea livrată efectiv;
CLC – este cantitatea ce trebuie livrată conform comenzii.
Dacă 0 < Z < 1 sau Z = 0, atunci se înregistrează lipsa materialelor în stoc, fără o posibilitate eficientă de acoperire; iar dacă Z = 1, avem de-a face cu un serviciu perfect de servire din partea furnizorilor.
Relația de determinare a potențialului de livrare se poate exprima și sub alte forme, și anume:
unde: NUC – reprezintă numărul de unități (bucăți) comandate; NUL reprezintă numărul de unități (bucăți) lipsă.
sau
unde: NZT – reprezintă numărul total de zile lucrătoare din perioada de gestiune; NZL reprezintă numărul de zile cu lipsă de stoc.
Când un produs se fabrică din mai multe materii prime, care intră simultan în consum, potențialul de livrare se calculează în funcție de necesitatea prezenței în același moment în depozit a tuturor materiilor prime care concură la obținerea lui. Stocul de siguranță se calculează după formula:
NS = K MAD
Între potențialul de livrare și costul stocării necesitat de constituirea și deținerea stocului de siguranță există o corelație strânsă. Creșterea potențialului de livrare determină creșterea costului total de stocare, dar într-o proporție mai mică, ceea ce înseamnă că eficiența este cu atât mai mare cu cât potențialul de livrare se apropie de unu.
Trebuie excluse influențele întâmplătore, însă luate în considerare influențele conjuncturale și sezoniere. IMPACT folosește în acest scop metoda nivelării exponențiale. Această metodă a fost dezvoltată de Robert Brown și este cunoscută sub numele de exponential smoothing.
Valoarea medie a cererii se corectează cu eroarea de previziune și se stabilește introducând o anumită parte a erorii în noua valoare a estimației.
Fie V1 estimarea cererii pentru prima perioadă și r1 cererea reală a primei perioade. Estimarea cererii pentru următoarele perioade se obține din relațiile:
Vi = Vi-1 + C (ri-1 – Vi-1),
unde: C – reprezintă constanta de nivelare și determină măsura în care valorile din trecut sunt cuprinse în estimarea cererii. Constanta de nivelare trebuie astfel aleasă încât să țină seama suficient de influențele conjuncturale și sezoniere, eliminând totuși influența întregului.
0 < C < 1
C= 0 înseamnă că erorile de prevedere care apar nu sunt luate în considerare
C = 1 înseamnă că estimarea corespunde exact cererii din perioada anterioară; toate influențele întâmplătoare sunt introduse în estimare.
Abaterea absolută de la medie (MAD) poate fi folosită după aceleași principii: abaterea medie a perioadei i va fi dată de relația :
MADi = MADi-1 + C(C ri-1 – Vi-1 C – MADi-1).
În acest caz C ri-1 – Vi-1 C este valoarea abaterii precedente față de valoarea reală.
Cererea medie (necesarul mediu) și abaterea absolută de la medie (MAD) vor fi apreciate în prealabil prin metoda nivelării exponențială, urmând ca abia după aceea să se determine nivelul stocului de siguranță (NS).
I.2.8 Indicatori ai eficienței gestiunii stocurilor
În lucrările de specialitate se regăsesc numereși indicatori prin care se poate determina eficiența politicii organizației relativă la stocuri și aprovizionare.
A. Nivelul serviciilor oferite de furnizor
1. Disponibilitatea comenzilor DC(%)
2. Disponibilitatea cantităților DQ(%)
B. Mărimea stocurilor
1. Valoarea stocului mediu VSm
2. Valoarea stocului de siguranță VSs
VSs = Valoarea stocului – Valoarea stocului curent
3. Valoarea bunurilor în stocuri
C. Performanțele gestiunii stocurilor
1. Eficiența stocurilor
2. Acuratețea înregistrărilor Aî
3. Rata de utilizare a stocurilor
D. Costurile de gestiune a stocurilor
1. Costul anual cu emiterea comenzilor Caec
sau (Costul fiecărei comenzi) · (Numărul de comenzi)
După cum se observă indicatorii A. măsoară nivelul de satisfacere a comenzilor de către furnizori, indicatorii B. relevă mărimea stocului și costul anual aferent emiterii comenzilor și indicatorii C. evaluează managementul stocurilor.
Capitolul II : Proiectarea programului de gestiune a stocurilor unei farmacii
II.1 Noțiuni de proiectare a bazelor de date
Bazele de date reprezintă colecții de date organizate într-un mod riguros, bine stabilit. Ele nu conțin date care nu sunt necesare în vederea prelucrării sistemelor de gestiune( informații nesemnificative cum ar fi în cazul cărții de telefon, tipul sau culoarea acestuia).
De regulă, bazele de date sunt organizate pe patru niveluri, și anume:
nivelul conceptual
nivelul extern
nivelul logic
nivelul intern(fizic)
Nivelul conceptual se referă la programatorii care cunosc datele referitoare la problema care este studiată, sau care obțin aceste date de la specialiștii implicați în domeniul respectiv.
Nivelul extern reprezintă designul pe care îl are baza de date, modul în care datele vor fi organizate în vederea utilizării și prelucrării. Tot nivelul extern realizează și operațiile de acces secvențial la informațiile conținute de baza de date. Astfel, un utilizator va avea acces numai la anumite date, existând situații când accesul îi este interzis, sau permis numai pe bază de parolă. De asemenea, la acest nivel informația poate fi prezentată sub diferite forme, pentru a se face o distincție, sau o individualizare.
Nivelul logic reprezintă modul în care vor fi organizate datele din punct de vedere logic. Există mai multe tipuri de modele:
modelul ierarhic: este de tip arbore, în care nivelul cel mai de sus se numește rădăcină, care poate avea oricât de mulți descendenți. Relațiile dintre date sunt de tip părinte-copil. Este modelul cel mai puțin folosit în realizarea nivelului logic
modelul rețea: este asemănător modelului ierarhic, cu diferența că un copil poate avea mai mulți părinți. Este un model care poate prelucra date complexe, dar care are o structură destul de complicată. Este puțin folosit în gestionarea bazelor de date.
modelul relațional: este modelul cu cea mai largă răspândire, fiind ușor de utilizat și având o flexibilitate deosebită, care face ca manipularea datelor să se facă ușor, fără a altera integritatea datelor existente. Datele sunt stocate în tabele, tabelele fiind formate din înregistrări, acestea fiind la rândul lor formate din câmpuri. Între tabele se pot realiza legături, care ușurează cu mult operațiile de prelucrare a informațiilor. Sistemele de gestiune a bazelor de date care folosesc modelul relațional sunt Oracle, Access, Iformix etc.
modelul orientat pe obiect: cel mai nou tip folosit de sistemele de gestiune al bazelor de date. A apărut ca urmare a diversificării tipului de informații care trebuie gestionate de către bazele de date(este vorba de hărți, programe orientate pe obiect, programe dinamice, simulatoare, animație etc.).
Nivelul intern(fizic) în cadrul căruia se vor utiliza și prelucra informațiile din schema conceptuală, în funcție de sistemul de gestiune al bazei de date. Ca sistem de gestiune al bazei de date putem folosi: Oracle, Access, DB2, Ifromix, Fox. Sistemul de gestiune al bazei de date este răspunzător de stocarea datelor, prelucrarea lor, asigurarea securității informațiilor, asigurarea accesului concurențial (astfel încât baza de date să fie utilizată în rețea de mai multe persoane în același timp).
II.2 Analiza principalilor indicatori și operatori relaționali
II.2.1 Caracteristici ale bazelor de date relaționale
Modelul de stocare a datelor sub forma bazelor de date relaționale s-a dezvoltat pornind de la articololul "A relational Model of Data for Large Shared Data Banks" (Un model relațional al datelor pentru bănci mari de date folosite în comun), scris de Dr. E. F. Codd în 1970. Dr. Codd a definit 12 reguli, referite ca cele 12 reguli ale lui Codd, reguli de definesc modelul relațional și care sunt următoarele:
[1] Regula capacității sistemului: un sistem relațional de administrare a bazelor de date trebuie să poată administra bazele de date în întregime prin funcțiile sale relaționale;
[2] Regula informației: toate informațiile dintr-o bază de date relațională, inclusiv numele de tabel și de coloană, trebuie reprezentate explicit ca valori în tabele;
[3] Regula suportului sistematic al valorii nule: SGBD trebuie să asigure un suport sistematic pentru tratamentul valorii nule, date necunoscute sau neaplicabile, diferit de valorile prestabilite și independent de orice domeniu;
[4] Regula catalogului relațional activ on-line: descrierea bazei de date și a componentelor sale trebuie reprezentată la nivel logic sub formă de tabele, iar ca urmare poate fi interogată folosind limbajul bazei de date;
[5] Regula sub-limbajului multilateral al datelor: trebuie să existe cel puțin un limbaj acceptat care să aibă o sintaxă bine definită și să fie multilateral, care să suporte definirea și manipularea datelor, reguli de integritate, autorizare și tranzacții;
[6] Regula actualizării vederilor: toate vederile care pot fi actualizate trebuie să fie actualizate în cadrul sistemului;
[7] Regula de inserare, actualizare și ștergere la nivel de mulțimi: SGBD trebuie să suporte nu numai regăsirea datelor la nivel de mulțimi, ci și inserări, actualizări și ștergeri;
[8] Regula de independență fizică a datelor: programele de aplicații și cele create pe moment nu trebuie să fie afectate din punct de vedere logic la deteriorarea metodelor de acces fizic sau a structurilor de memorare;
[9] Regula de independență logică a datelor: programele de aplicații și cele create pe moment nu trebuie să fie afectate din punct de vedere logic când sunt făcute modificări în structura tabelelor;
[10] Regula independenței integrității: limbajul bazei de date trebuie să poată defini regulile de integritate, care trebuie să fie memorate în catalogul on-line și care nu pot fi încălcate;
[11] Regula independenței distribuției: programele de aplicații și cererile momentane nu trebuie să fie afectate din punct de vedere logic la prima distribuire a datelor sau la o distribuire ulterioară;
[12] Regula de nesubversiune: nu trebuie să fie posibilă încălcarea regulilor de integritate, definite prin limbajul bazei de date, prin folosirea limbajelor de nivel inferior.
Matematicianul F.E. Codd a construit un model riguros, cu concepte matematice, pentru baza de date relațională, însă aceasta este percepută de utilizatorii ca o colecție de tabele (tablouri bidimensionale de date, numite și relații), noțiune care nu necesită definiții suplimentare, în care sunt prezente patru concepte:
tabelele
coloanele tabelului
rândurile tabelului
câmpurile din tabel, de pe o anumită coloană și linie.
Bazele de date au, din punct de vedere istoric, un set de relații de tip "părinte-fiu". Aceasta înseamnă că un nod părinte poate conține pointeri de tip fișier către fiii săi.
Această metodă are câteva avantaje și mai multe dezavantaje. Ca un avantaj, structura fizică a datelor pe disc nu este importantă. Programatorul memorează doar pointerii către locația următoare, astfel încât datele pot fi accesate în această manieră. De asemenea, datele pot fi accesate cu ușurință. Totuși, grupuri diferite de informații nu pot fi joncționate pentru a forma o nouă informație. Formatul datelor pe disc nu poate fi modificat oricând după crearea bazei de date.
În cadrul modelului relațional, datele sunt separate în mulțimi care seamănă cu structura unui tabel. Această structură de tabel constă din elemente informaționale individuale numite coloane sau câmpuri. Un singur set al unui grup de câmpuri este cunoscut ca o înregistrare sau linie.
O relație, în cazul discret, poate fi privită și înțeleasă ca o tabelă. Modificarea datelor se realizează prin operații relaționale aplicate asupra tabelelor. Spre exemplu, restricția unei relații, a unui tabel, va fi un nou tabel în care se păstrează doar anumite linii. Iar proiecția unei relații – unui tabel – va fi un nou tabel în care se păstrează doar anumite coloane.
O bază de date relațională apare ca o colecție de relații (tabele). Există o mulțime de operatori pentru transformarea și combinarea relațiilor: selecția, proiecția, produsul, join-ul, reuniunea, intersecția, diferența.
II.2.2 Operatorii relaționali ai bazelor de date relaționale
Operatorii relaționali ai bazelor de date relaționale sunt definiți în tabelul următor:
Proprietățile bazelor de date relaționale sunt:
• inexistența pointerilor;
• conexiunile făcute numai pe baza datelor;
• independența totală a datelor.
Proprietățile relațiilor tabelare sunt:
• nu există rânduri duplicate;
• nu există nume de coloane identice (duplicate);
• ordinea rândurilor este neimportantă;
• ordinea coloanelor este neimportantă;
• valorile (câmpurile) sunt atomice (nedecompozabile).
II.2.3 Noțiunile și conceptele bazelor de date relaționale, modelul entitate-relație
Data elementară reprezintă cea mai mică unitate de date, identificată prin nume.
Entitatea este un obiect distinct ce trebuie reprezentat în baza de date.
Grupul de date (data agregata) este un ansamblu de câmpuri, identificate prin nume.
Tipul sau structura grupului, reprezintă ansamblul identificatorilor, al descrierilor grupurilor și al câmpurilor componente.
Tipul câmpului este ansamblul format din identificator, menținerea valorilor și formatul de memorare.
Atributul este o proprietate a unui tip de entitate sau relație, ce descrie un anumit aspect al obiectului ce se înregistrează în baza de date.
Înregistrarea logică reprezintă o colecție de date elementare și/sau grupuri de date, identificata prin nume.
Setul de date este alcătuit dintr-o mulțime de înregistrări.
Tipul înregistrării constă din ansamblul tipurilor câmpurilor și al grupurilor împreună cu ordinea și numărul de apariții.
Fișierul reprezintă ansamblul tuturor aparițiilor fizice ale unui tip de înregistrare logică.
Cheia simplă, respectiv compusă, din 1 până la n campuri, ale căror valori identifică în mod unic fiecare înregistrare.
Cheia candidat este un atribut sau set de atribute ce identifică în mod unic aparițiile individuale ale unui tip de entitate.
Cheia primară este una din cheile atribut.
Cheia alternativă este una din celelalte chei candidat.
Cheia compusă este o cheie candidat formată din două sau mai multe atribute.
Indexul constă în totalitatea valorilor cheilor și a adreselor de memorare a înregistrărilor respective.
Zona reprezintă o porțiune a memoriei externe în care se pot memora înregistrări, identificată prin nume.
Colecția de date reprezintă un ansamblu de date organizat după anumite criterii.
Baza de date reprezintă una sau mai multe colecții de date aflate în interdependență împreună cu descrierea datelor și a relațiilor dintre ele.
Baza de date fizică sau modelul fizic este ansamblul datelor din baza de date, sub forma memorărilor de fișiere, indexuri, etc. Este formată din totalitatea exemplarelor înregistrărilor, seturilor de înregistrări și a zonelor, organizate după o anumită schemă.
Schema sau modelul logic reprezintă descrierea organizării logice a înregistrărilor bazei de date.
Subschema sau modelul extern este o substructură (perspectivă, view) a schemei bazei de date, relevantă pentru o aplicație.
Relațiile logice reprezintă asociațiile dintre mai multe entități.
Catalogul de sistem sau dicționarul de date sau meta-date reprezintă descrierea datelor, adică date despre date, mulțimea descrierilor obiectelor bazei de date, structurată și administrată ca bază de date.
Sistemul de gestiune a bazelor de date (SGBD) este un sistem de programe care permite construirea unor baze de date, introducerea informațiilor în bazele de date și dezvoltarea de aplicații privind bazele de date.
Administratorul bazei de date este o persoană sau un grup de persoane responsabile cu analiza, proiectarea, implementarea și gestionarea bazei de date.
Conceptele de bază ale modelului entitate-relație includ:
a) Tipuri de entități
Entitățile sunt obiecte sau concepte identificate ca având o existență independentă. Ele reprezintă un set de obiecte ce au aceleași proprietăți.
Entitatea, în funcție de dependența față de altă entitate, poate fi:
– slabă, atunci când depinde de existența altei entități (copil, dependentă, subordonată);
– tare, atunci când nu depinde de existența altei entități (părinte, dominantă).
b) Tipurile de relații
Relațiile sunt seturi de asocieri între două sau mai multe tipuri de entități.Relația este o instanță a unui tip de relație care e unic identificabilă.
Gradul unei relații reprezintă numărul de entități participante într-o relație.
Clasificarea relațiilor în funcție de grad este următoarea:
1) de gradul întâi sau unară, caz în care relația este recursivă
2) de gradul doi sau binară, relație cel mai des întâlnită
3) de gradul trei sau ternară
4) de gradul patru sau cvadruplă.
Relația recursivă este o entitate care participă de două sau mai multe ori într-o relație; fiecare participare are un nume de rol.
Raportul de cardinalitate al relațiilor descrie numărul de relații posibile pentru fiecare entitate participantă. Se disting următoarele tipuri de relații:
• relația unu-la-unu, cu un raport de cardinalitate 1:1, este relația în care o entitate este asociată unei singure entități;
• relația unu-la-mulți, cu un raport de cardinalitate 1:M, este relația în care o entitate asociată la una sau mai multe entități;
• relația mulți-la-mulți, cu un raport de cardinalitate M:N, este relația în care mai multor entități le sunt asociate mai multe entități, situație care implică descompunerea în două entități unu-la-mulți.
c) Atribute
Clasificarea atributelor în funcție de numărul de componente este următoarea:
– simple atunci când au o singură componentă ce are o existență independentă
– compuse atunci când au mai multe componente, fiecare având existență independentă.
Domeniul atributului reprezintă mulțimea de valori pe care le poate lua un atribut.
Clasificare domeniilor atributelor în funcție de numărul de valori este următoarea:
– cu o singură valoare, atunci când au o singură valoare pe care o pot lua;
– cu valori multiple;
– derivate, ale căror valori depind de valoarea altui atribut.
II.2.4 Modelarea grafică a bazelor de date relaționale
O tehnică de modelare verificată pentru reprezentarea grafică a activităților este modelul ERD (Entity Relationship Diagram – diagrama relației dintre entități). Diagrama ERD documentează cerințele informaționale ale companiei într-un format clar și precis.
Fiecare entitate e reprezentată sub forma unui dreptunghi. Entitatea slabă se reprezintă sub forma unui dreptunghi cu laturi duble.Cheia primară se subliniază.Reprezentarea relației se face printr-un romb. Conexiunea dintre o entitate slabă și una tare se reprezintă printr-un romb cu linii duble.
Fiecare atribut se reprezintă printr-un oval. Pentru simplificarea diagramei sunt afișate numai atributele cheie primară, iar uneori nici măcar acestea.
Această abordare grafică a modelării o face ușor de înțeles, iar simplificarea modelului îl face ușor de utilizat.
II.3 Analiza detaliată a proiectării bazei de date relaționale care va gestiona stocurile unei farmacii
Proiectarea unei baze de date relațională reprezintă procesul parcurs în vederea pregătirii creării fizice a unei baze de date. Etapele acestui proces necesită identificarea operațiunilor comerciale pe care le va gestiona baza de date, precum și crearea proiectului fizic al bazei de date. Proiectarea corespunzătoare a bazei de date este vitală pentru buna funcționare a bazei de date și a oricărei aplicații care utilizează baza de date.
În lipsa unei proiectări corecte a bazei de date, aceasta poate prezenta următoarele deficiențe:
integritatea datelor este compromisă deoarece restricțiile de integritate nu pot fi proiectate sau implementate corect;
datele devin redundante, iar aplicațiile individuale se aglomerează în încercarea de a se asigura sincronizarea datelor;
performanțele sunt afectate deoarece este posibil ca pentru finalizarea unei instrucțiuni select să fie necesare interogări suplimentare.
Condițiile impuse la proiectarea unei baze de date relaționale sunt următoarele:
reducerea redundanțelor prin identificarea informațiilor comune și alcătuirea corespunzătoare a aplicațiilor;
eliminarea inconsistențelor ce rezultă din reducerea redundanțelor;
utilizarea simultană a datelor de mai mulți utilizatori;
standardizarea informațiilor;
asigurarea securității bazelor de date, în sensul acordării și urmăririi modului de acces al utilizatorilor la diferite părți componente ale bazelor de date;
asigurarea integrității bazelor de date, în sensul păstrării corectitudinii informațiilor conținute în baza de date prin testele aplicate datelor introduse în aceasta;
asigurarea sincronizării în cazul utilizării bazei de date simultan de mai mulți utilizatori sau a distribuirii informației pe mai multe sisteme.
La proiectarea unei baze de date se procedează la următoarele:
identificarea datelor (entități și atribute);
identificarea relațiilor dintre date;
identificarea constrângerilor;
identificarea regulilor ce descriu principalele caracteristici ale datelor;
implicarea utilizatorilor în realizarea modelului de date.
Astfel, proiectarea de baze de date relaționale implică transpunerea modelului logic într-un set de tabele și constrângeri, selectarea structurilor de stocare și a metodelor de acces specifice, asigurarea securității datelor.
Pentru a crea o bază de date relațională este necesară parcurgerea următoarelor etape:
Etapa I – crearea unui model al activității farmaciei
Această primă etapă presupune strângerea de informații despre mișcarea medicamentelor care fac obiectul stocurilor unei farmacii și procesele aferente pe care le va susține baza de date. Scopul este stabilirea modului curent de derulare a activității farmaciei, iar dacă există deficiențe, stabilirea posibilităților de îmbunătățire sau de extindere a activității. Pentru a dodândi o bună cunoaștere a activității farmaciei și a proceselor aferente, se întreprind următoarele:
• Intervievarea următoarelor persoane:
(a) Manageri și supervizori ai activităților farmaciei;
(b) Potențiali utilizatori finali ai programului de gestiune de stocuri ale farmaciei;
(c) Potențiali beneficiari finali ai programului de gestiune de stocuri. Aceștia sunt persoanele care s-ar putea să nu utilizeze direct baza de date, însă urmează să primească informații și să beneficieze de existența bazei de date.
• Stabilirea obiectivului declarat al activității. Este utilă cunoașterea gestiunii stocurilor farmaciei astfel încât baza de date și aplicația să fie concepute în vederea deservirii acesteia.
• Definirea obiectivul aplicației. Este obligatorie stabilirea pretențiilor farmaciei referitoare la ceea ce urmează să facă baza de date și aplicația.
• Analizarea specificațiilor de sistem curente.
• Identificarea viitoarelor specificații de sistem pentru baza de date.
Programul va avea ca scop înregistrarea întregii activități a unei farmacii, fără a se ocupa însă și de partea financiară, care este în general gestionată de aplicații dedicate, punând însă la dispoziția acestora toate datele necesare pentru contabilitate.
După ce au fost stabilite datele de proiectare, informațiile culese vor determina modul de prezentarea al formularelor, manualelor, rapoartelor, însemnărilor, precum și a altor informații conexe activității de proiectare.
Etapa II – crearea unui model al datelor
După ce au fost strânse informațiile precedente, trebuie să construim un model sau o reprezentare grafică a necesităților și regulilor farmaciei.
De exemplu, presupunem că s-au aflat următoarele informații despre activitatea farmaciei în timpul interviurilor anterioare:
farmacia are nevoie să știe ce furnizor oferă fiecare tip de medicament;
trebuie cunoscute datele de identificare ale furnizorului;
vor să aibă posibilitatea găsirii informației despre un anumit furnizor sau medicament.
Diagrama entitate-relație a programului de gestiune a stocurilor este arătată în Fig.2.
Etapa III – crearea unui proiect de baze de date de gestiune a stocurilor
La acest pas se pun bazele tabelelor din programul de gestiune a stocurilor. Baza de date, pentru a satisface cerințele farmaciei, va avea cinci tabele și anume:
furnizori: cod_furnizor, denumire, adresa, nr_telefon;
intrari: cod_furnizor, nr_intrare, data_intrarii,;
medicamente: nr_intrare, data_intrarii, denumire, cantitate, pret_unitar, valoare, valoare_TVA, valoare_totala, valabilitate, pret_vanzare, cod_medicament;
arhiva vanzari: cod_medicament, numar_v, denumire, cantitate, pret_unitar_v, valoare_v, valoare_TVA_v, valoare_totala_v, valoare_compensare, pret_facturat, factura, data_facturii;
vanzari: factura, data_facturii.
Tabelele au fost trecute în ordinea în care sunt și legate, așa cum se vede și din diagrama entitate-relație arătată în Fig.1, câmpurile scrise cu litere îngroșate reprezentând cheile primare, iar cele scrise cu litere cursive reprezentând simple atribute. În tabelele intrari și vanzari cheile primare sunt formate din câte două câmpuri, astfel încât să nu fie obținute înregistrări ne-individualizate, dar și pentru ca datele completate în formulare să fie completate automat și în sub-formulare, deci și în tabelele medicamente, respectiv arhiva vanzari, pentru că în felul acesta utilizatorul nu este obligat să introducă de la tastatură de fiecare dată aceleași informații, cum ar fi data facturii sau numărul acesteia.
După ce toate tabelele au fost create, s-a trecut la construirea interogărilor și a rapoartelor și abia după aceea a formularelor, avându-se în vedere scopul ca baza de date să poată fi utilizată în întregime numai prin intermediul acestora.
Etapa IV – crearea definiției tabelelor relaționale și a bazei de date de gestiune de stocuri
Pentru crearea tabelelor fizice, este folosită instrucțiunea create table. Mulțimea acestor tabele, împreună cu considerațiile privind securitatea reprezintă fundamentul bazei de date relaționale. Pentru crearea și utilizarea unei baze de date relaționale se folosește un limbaj de programare. Comenzile pentru implementarea, selecția, modificarea sau ștergerea datelor, cât și acelea pentru realizarea schimbărilor în baza de date, sunt incluse într-un singur limbaj, standardizat, de exemplu SQL.
SQL este un limbaj standard pentru bazele de date, utilizat pentru a accesa o bază de date relațională și poate fi folosit, atunci când este necesar, de fiecare instrument de gestiune a bazelor de date (Access, Oracle, SQL-Server, MySQL, etc.).
Fig.2. Diagrama entitate-relație a programului de gestiune a stocurilor unei farmacii
Capitolul III : Realizarea programului de gestiune a stocurilor unei farmacii în Microsoft Access 2000
III.1 Prezentare Access
Programul Microsoft Access 2000 face parte din pachetul de programe Microsoft Office 2000 și este destinat proiectării și gestiunii bazelor de date, fiind bazat pe modelul logic relațional.
Sistemul de gestiune al bazelor de date Access permite realizarea mai multor operații specializate, cum ar fi:
proiectarea structurii bazei de date;
încărcarea datelor, regăsirea ulterioară, modificarea datelor, ștergerea datelor;
generarea de rapoarte în scopul tipăririi la imprimantă a datelor introduse în baza de date;
crearea de formulare, ca modalitate de manevrare a datelor prin intermediul unei interfețe mai prietenoase pentru operator;
relaționarea bazelor de date și lucrul cu combinații de baze de date;
programare pentru crearea de sisteme de gestiune de uz particularizat;
controlul integrității și securității datelor.
Microsoft Office Access 2000 are următoarele tipuri de obiecte de bază de date:
• tabela este un obiect definit de utilizator în care sunt stocate datele primare;
• formularul este un obiect care permite introducerea datelor, afișarea acestora sau controlul întregii aplicații;
• cererea de interogare este un obiect care permite formatarea și tipărirea informațiilor obținute prin prelucrarea datelor din una sau mai multe tabele;
• pagina web de accesare a datelor reprezintă un obiect care include un fișier HTML și alte fișiere suport în vederea furnizării accesului la date prin intermediul browser-elor internet;
• comanda Macro reprezintă un obiect care conține o definiție structurală a uneia sau mai multor acțiuni pe care Access le realizează ca răspuns la un anumit evenimet;
• modulul este un obiect care conține proceduri definite de utilizator, scrise în limbajul de programare Visual Basic.
Tipurile de date specifice programului Microsoft Access sunt următoarele:
Text – în celulele unui câmp de acest tip se vor putea introduce texte, deci orice înșiruire de caractere, numărul maxim admis fiind de 255 de caractere. Lungimea implicită este de 50 de caractere.
Memo – în celulele unui câmp de acest tip se vor putea introduce orice șir de caractere, însă cantitatea de text este limitată la 65535 de caractere. Acest tip de date este asemănător cu cel text.
Number – datele introduse pot fi numai valori numerice, ele fiind utilizabile în calcule matematice. În cazul în care se dorește introducerea de valori reale care să nu fie rotunjite automat, trebuie ales de la rubrica Field size, tabul General, varianta Double.
Autonumber – în câmpul de acest timp se produce o completare automată cu valori numerice incrementate cu 1. Incrementarea se produce de fiecare dată când o nouă înregistrare este introdusă în tabel.
Yes/No – în acest câmp pot fi introduse date care au doar două stări posibile: adevarat/fals, da/nu, pornit/oprit, etc.
Ole Object – prin câmpurile de acest tip se permite accesul la obiecte de diverse naturi, ca de exemplu foi de calcul tabelar Excel, reprezentări grafice, fișiere imagine și documente Word
Hyperlink – în câmp pot fi introduse șiruri de caractere care reprezintă adrese de pagini web
Lookup Wizard – în acest câmp pot fi introduse valori care sunt alese dintr-o listă aflată în altă tabelă.
Date/Time – în câmp nu pot fi introduse decât informații care constau în dată calendaristică sau oră.
III.2 Crearea bazei de date de gestiune a stocurilor unei farmacii
Pentru a crea o nouă bază de date se va deschide aplicația Microsoft Access și se selectează Balnk Access database din fereastra de start, de unde îi dăm un nume și alegem locul unde va fi stocată așa cum se vede și în Fig. 3.
Fig. 3. Fereastra File New Database- precizarea locului și numelui bazei de date
O dată creată, baza de date este pregătită pentru crearea tabelelor, iar tabul care apare implicit primul este cel al tabelelor. Există trei posibilități pentru a crea un tabel: prin introducerea datelor, obținându-se un tabel oarecum asemănător cu cele din Excel, prin intermediul unui Wizard, sau direct în Design view, unde putem decide pentru fiecare câmp în parte cum se va numi și pentru ce tip de date este definit (Fig. 4).
După ce sunt completate toate rubricile planificate, unul din câmpuri trebuie să fie marcat drept cheie primară, care are rolul de individualiza înregistrările. Cheia primară poate fi însă formată și din mai multe câmpuri, pentru a fi stabilită trebuind selectate toate câmpurile dorite, după care se efectuează clic dreapta pe unul dintre ele și se selectează opțiunea primary key, sau se apasă pe butonul de pe bara de comandă care are aceeași funcție (fig. 5).
Pentru a adăuga sau șterge înregistrări este necesară deschiderea tabelului în Design view, fie prin clic dreapta și selectarea opțiunii, fie normal, după care se selectează Design view prin butonul de pe bara de comandă. Pentru a adăuga un câmp în tabel, trebuie selectat câmpul care trebuie să-l urmeze pe cel nou, apoi se selectează Insert Rows de pe bara de comandă, sau din meniul ce apare după un clic dreapta (fig. 6).
Fig. 4. Crearea unui tabel în modul Design view
Fig. 5. Stabilirea cheii primare pentru Fig. 6. Introducerea unui nou rând deasupra
un anumit câmp câmpului valoare_totală
Ștergerea unui anumit câmp al unui tabel se poate face asemănător cu introducerea unui nou rând, sau se apasă butonul delete de pe tastatură. Prin ștergerea câmpului din tabel sunt șterse și toate datele care au fost memorate în acest câmp în tabel până în momentul ștergerii. Câmpurile cheie primară nu pot fi șterse atâta timp cât există relații cu alte tabele prin intermediul lor. Tipul de date care este stocat într-un anumit câmp poate fi modificat prin selectarea câmpului respectiv și selectarea din listă a unui alt tip. Pe de altă parte, dacă deja au fot introduse date în tabel, anumite schimbări nu vor mai putea fi făcute și în majoritatea cazurilor schimbarea tipului de date nu este indicată. De exemplu, dacă tipul număr va fi transformat în text, atunci numerele memorate în respectivul câmp vor fi tratate ca simple șiruri de caractere, deci nu vor mai putea fi implicate în calcule matematice.
Tot în modul Design view atributele anumitor câmpuri pot fi stabilite cu rigurozitate pentru a proteja integritatea datelor sau pentru a face baza de date compatibilă cu scopul pentru care a fost creată. În fig. 7 este prezentat modul în care valoarea introdusă în câmpul cantitate al tabelului medicamente este restricționată la valori pozitive, atât pentru a se evita erorile de tastare care ar putea duce la valori negative, cât și pentru a evita vânzarea mai multor medicamente decât se află în stoc la un moment dat. Ca regulă de validare pentru acest câmp valorile trebuie să fie mai mari sau egale cu 0.
Fig. 7. Atributele câmpului cantitate
Pentru gestionarea unei farmacii sunt însă necesare mai multe date decât cele strict legate de medicamentele aflate în stoc la un moment dat. Astfel, în mod asemănător cu tabelul medicamente, sunt create tabelele furnizori, intrări, vânzări (care înregistrează numai data și numărul facturii, de intrare, sau ieșire, precum și furnizorul, în cazul tabelului intrări) și tabelul arhivă vanzari, care înregistrează toate tranzacțiile dintre farmacie și cumpărători (fig 8-10).
Odată ce toate tabelele necesare au fost create, trebuie stabilite relațiile dintre tabele. Între tabele pot exista relații de unul la mai mulți, relații de unu la unu și relații de mai mulți la mai mulți, care reprezintă de fapt două relații de unu la mai mulți conjugate, combinate prin intermediul unul tabel secundar. Aceste relații împreună cu integritatea referențială care este asigurată de Access, fac din întreținerea bazei de date un lucru mult mai simplu. Este suficientă modificarea datelor într-un tabel pentru ca datele care se află în legătură cu cele modificate să se schimbe și ele, iar ștergerea unei înregistrări dintr-un tabel va duce la ștergerea datelor direct legate de aceasta din tabelele care se află în legătură cu acesta.
Fig. 8. Tabelul furnizori (Design view) Fig. 9. Tabelul intrări (Design view)
Fig. 10. Tabelul vânzări (Design view)
Fig. 11. Tabelul arhiva vanzari (Design view) Fig. 12. Relație unu la mai mulți între tabelul furnizori și tabelul intrari
Fig. 13. Relațiile dintre tabelele bazei de date de gestiune a stocurilor
Între tabelele medicamente și arhiva vanzari integritatea referențială nu este selectată pentru ca datele stocate cu privire la vânzări să nu fie șterse atunci când medicamentele la care fac referire sunt scoase din stoc. Relațiile între tabele se fac selectând câmpul dintr-un tabel și executând drag-and-drop pe câmpul pereche din celălalt tabel. Relațiile pot fi șterse prin selectarea liniilor care leagă tabelele și apăsare pe delete și pot fi modificate prin selectarea relațiilor cu clic dreapta și intrarea în editare.
După ce au fost stabilite relațiile dintre tabele, trecem la introducerea datelor în baza de date. Prima metodă pe care o putem folosi este introducerea directă a datelor în tabele, însă această metodă se poate dovedi ceva mai greoaie, mai ales că în acest caz anumite facilități ale Access nu pot fi folosite.
O soluție mult mai eficientă o reprezintă formularele. Formularele sunt soluții de introducere și extragere a datelor pe ecran, înregistrările fiind prezentate sub formă de cartele index, câte una o dată. De asemenea, formularele pot să aibă în componență sub-formulare, care să conțină informații suplimentare referitoare la înregistrarea din formular, pot căpăta o interfață personalizată în funcție de dorințele utilizatorului prin adăugarea de imagini și text și pot conține butoane, care să întreprindă anumite acțiuni prestabilite, sau să ruleze un macro sau un modul de cod Visual Basic.
Formularele pot fi create tot în două moduri, prin proiectare directă (Design view), sau prin intermediul unui Wizard. Formularele prezintă numeroase atribute, ceea ce face din ele cele mai flexibile obiecte Access și pot avea numeroase destinații.
Pentru a crea un formular cu ajutorul programului Wizard, se selectează tabul Forms în fereastra principală a bazei de date și se face dublu clic pe opțiunea create form by using wizard. În fereastra care apare este ales din listă tabelul pe baza căruia dorim să creăm formularul și apoi trecem din fereastra stângă în cea dreaptă câmpurile care trebuie să facă parte din formular (fig. 14).
Fig. 14. Selectarea câmpurilor care trebuie să apară în formular
În continuare alegem modul în care dorim să fie organizat formularul (după coloane, după linii, tip foaie de calcul, sau pe rubrici) și apoi alegem stilul de grafică pe care îl preferăm, dintre cele predefinite. În final, alegem numele formularului (implicit va fi numele tabelului pe care este bazat) și dacă dorim să îl deschidem pentru a vizualiza și introduce date, sau pentru a-i modifica atributele.
Fig. 15. Alegerea numelui și a modului în care va fi Fig. 16. Formular creat cu ajutorul Wizard
deschis automat formularul
Pentru a crea un formular care să aibă un sub-formular în componență, la primul pas al creării unui formular, în loc să alegem câmpuri numai dintr-un tabel, alegem câmpuri din două. La următorul pas suntem întrebați dacă dorim să creăm un formular cu sub-formular, sau două formulare legate între ele. În cazul în care alegem prima variantă, trebuie să alegem care dintre cele două tabele va fi bază pentru formular și care pentru sub-formular.
Următorii pași sunt aceeași cu cei necesari creării unui formular simplu, cu singura diferență că la ultimul pas este cerut și un nume pentru sub-formularul component. Numele implicit pentru acesta va fi dat de numele tabelului pe care se bazează urmat de cuvântul „subform”. Sub-formularele sunt văzute în tabul Forms ca orice formular normal.
Avantajele sub-formularelor pot fi observate și din chiar exemplul formularului intrări , care are în componență sub-formularul medicamente (fig. 18).
Fig. 17. Pregătirea unui formular pe baza tabelului intrări, care să aibă în componență
un sub-formular bazat pe tabelul medicamente
Fig. 18. Formularul intrări și sub-formularul medicamente, sub aspect de tabel
Folosind aceleași metode este creat și formularul vânzări, numai că legătura dintre acesta și medicamente este făcută indirect, prin intermediul tabelului arhiva vanzari. Datorită acestui lucru și al faptului că integritatea referențială nu este activată între tabelul medicamente și tabelul arhiva vanzari, în acesta din urmă rămân nealterate toate înregistrările care sunt introduse de-a lungul timpului în facturile de vânzare, ceea ce permite ținerea evidenței vânzărilor pe o perioadă teoretic nelimitată. Astfel, prin intermediul a numai trei formulare, utilizatorul nu mai trebuie să deschidă direct tabele niciodată, lucrând tot timpul cu o interfață mult mai prietenoasă și ușor de folosit.
III.3 Crearea de filtre, interogări și rapoarte
Cea mai simplă operație de întreținere a unei baze de date este aceea de a organiza datele dintr-un anumit câmp într-o anumită ordine, crescătoare sau descrescătoare, ordine alfabetică, etc.
Fig. 19. Sortarea în ordine alfabetică a denumirilor medicamentelor aflate în stoc.
După cum se observă și din fig. 19, pentru a sorta ascendent sau descendent informațiile stocate în baza de date, unul din câmpurile după care trebuie sortată baza de date trebuie să fie selectat și apoi în meniul records se selectează sort și tipul de sortare pe care o dorim.
Pe lângă metodele de sortare, tot în meniul records avem filtre, care pot îndeplini mai multe acțiuni, cum ar fi obținerea unui tabel secundar care să conțină numai înregistrările care au câmpurile identice cu câmpul selectat (filter by selection). Putem obține un tabel secundar care să conțină numai înregistrările care au câmpurile diferite de câmpul selectat (filter excluding selection), informațiile pot fi filtrate într-un mod asemănător cu modul filter by selection, dar alegând dintr-o listă câmpul după care se dorește făcută filtrarea sau poate fi creată o interogare de selecție (advanced filter/sort).
Fig. 20. Meniul filter cu metodele de filtrare predefinite
Pentru o sortare în funcție de mai multe variabile sau condiții și dacă sunt necesare operații complexe de menținere a bazelor de date, cum ar fi ștergerea automată a unor înregistrări învechite, sau actualizarea tuturor în funcție de necesități, precum și organizarea lor în moduri care să facă ușoară vizualizarea lor, vom folosi interogările.
Interogările sunt de mai multe tipuri, în funcție de destinația lor și ca și formularele, sunt bazate pe tabele, dar și pe alte interogări. Interogarea „de bază”, este interogarea de selecție, care are rolul de a filtra datele din tabelele pe care le are la bază în funcție de criteriul ales, de a le combina, afișând în final numai câmpurile care sunt dorite. Interogările de selecție sunt utile atunci când datele trebuie organizate în funcție de unul sau mai mulți parametri. Parametrii sunt variabile care, trecute în tabul de criterii țin locul acestora, utilizatorul fiind întrebat înainte de a rula interogarea care este valoarea parametrului, pentru a selecta din tabel numai înregistrările dorite. Parametrii trebuie scriși între paranteze pătrate, având ca denumire un alt nume decât numele câmpului pentru care servesc drept criteriu de sortare (fig. 21).
Alt tip de interogare este interogarea de ștergere, care șterge automat toate înregistrările din tabelele asociate ei, în cazul în care anumite criterii sunt îndeplinite. Pentru a crea o interogare de ștergere trebuie creată mai întâi o interogare simplă, după care în meniul Query se selectează opțiunea delete query. În acest moment anumite câmpuri ale interogării de selecție dispar și apare unul nou și anume delete unde este specificat modul de ștergere, adică acolo unde este îndeplinită condiția, sau începând de acolo de unde este îndeplinită condiția. La criterii este trecută condiția care trebuie îndeplinită pentru ca ștergerea să aibă loc, pentru câmpul dorit. În momentul în care interogarea este rulată, utilizatorul este atenționat că dacă va continua acțiunea, datele vor fi șterse definitiv din baza de date. De asemenea, în fereastra de atenționare este specificat și numărul de înregistrări care urmează să fie șterse.
O interogare care are un mecanism de funcționare asemănător cu cel al interogării de ștergere este interogarea de actualizare sau update query. Această interogare are rolul de a modifica datele din toate tabelele asociate, în câmpurile specificate, acestea fiind înlocuite cu datele care sunt introduse în câmpul update to, sau rezultatul unei expresii care este introdusă în același câmp (fig. 24).
Fig. 21. Interogare de selecție care afișează numai înregistrările care au în câmpul denumire valoarea pe care o introduce utilizatorul de la tastatură
Fig. 22. Căsuța unde este cerut parametrul
după care va fi efectuată sortarea
Fig. 23. Tabelul query, disponibil la deschiderea
unei interogări în Design view
Fig. 24. Interogare de ștergere a înregistră-rilor din tabelul medicamente, care au completată în câmpul cantitate valoarea 0, ceea ce înseamnă că nu mai există medicamente de tipul respectiv în stoc
Pentru a crea o interogare de actualizare se procedează ca în cazul interogării de ștergere, în meniul Query selectându-se varianta update Query. Ca și în cazul interogării de ștergere utilizatorul este atenționat înainte să o ruleze că datele din tabel vor fi modificate definitiv și este specificat și numărul de înregistrări care vor fi afectate. Din valoarea care este stocată în acest câmp este scăzută valoarea care se referă la medicamentul respectiv, din arhiva vanzari, adică din factura de ieșire. Legătura cu aceasta este făcută prin intermediul parametrului [nr_factura], care face ca datele care vor fi modificate să fie cele care se regăsesc și pe factura dorită, numărul acesteia fiind introdus de utilizator precum valoarea oricărui parametru. Pentru a scrie expresia, numele tabelelor și câmpurilor sunt trecute în paranteze drepte, ceea ce justifică faptul că un parametru, care este scris după aceeași sintaxă, trebuie să fie denumit altfel decât numele câmpului la care face referire, în special și altfel decât numele oricărui câmp din tabelul la care face referire, în general.
Fig. 25. Interogare de actualizare din tabelul medicamente, la nivelul câmpului cantitate
Alte trei tipuri de interogări ce pot fi utilizate sunt interogarea de adăugare (append query), interogarea crosstab și interogarea cu ajutorul căreia poate fi construit un nou tabel pe baza unuia sau mai multor tabele deja existente. Interogarea de adăugare are un rol asemănător cu cea de actualizare, numai că prin intermediul acesteia pot fi adăugate înregistrări în continuarea tabelului pe care îl specifică utilizatorul, sau pot fi adăugate date în câmpurile dorite. Interogarea tip crosstab combină două sau mai multe tabele pentru a obține o foaie tip tabel, unde câmpurile de intersecție dintre liniile și coloanele specificate conțin informația dorită, sau doar sunt bifate.
Fig. 26. Căsuța care solicită introducerea numelui tabelului la care să fie adăugate date
în cazul unei interogării de adăugare (append query)
Opțiunea totals poate fi găsită sub meniul View în timp ce interogarea se află în Design view, ajutorul căreia avem acces la funcții uzuale, cum ar fi cele de însumare a valorilor numerice din toate câmpurile unei înregistrări și afișarea rezultatului într-un câmp separat, găsirea automată a valorii minime și maxime dintr-o înregistrare, afișarea primului sau ultimului câmp care îndeplinește condiția trecută în tabul de criterii, sau numărarea elementelor specificate, care se regăsesc într-o înregistrare. Opțiunea totals poate crea câmpuri adiționale în interogare, care să conțină valori ce sunt rezultatul unor expresii. Expresiile pot fi utilizate și în cazul celorlalte tipuri de interogări (fig. 27), dar sunt utile în cazul interogărilor care au selectată opțiunea totals.
Fig. 27. Exemplu de interogare care utilizează o expresie
Expresia DateDiff("m",[data_intrarii],Now()) are rolul de a calcula diferența dintre data calendaristică actuală și data care corespunde intrării în stoc a medicamentului respectiv, rezultatul fiind afișat în luni. În combinație cu condiția >[valabilitate]-1 interogarea filtrează medicamentele și le afișează numai pe cele care mai au o lună până când expiră.
În cazul farmaciei, datele care sunt stocate în tabelele de intrări și vânzări trebuie imprimate pentru a elibera facturi, pentru care vom folosi rapoarte, care reprezintă pagini tipizate. Rapoartele se bazează pe unul sau mai multe tabele, dar și pe una sau mai multe interogări, astfel încât datele imprimate să fie rezultatul unei filtrări (de exemplu, în cazul unei facturi, trebuie afișate numai datele referitoare la acestea, pe când, dacă raportul ar fi construit pe baza tabelului, el ar conține toate datele de pe toate facturile). De asemenea, rapoartele prezintă un număr de funcții predefinite. De exemplu, pe un raport utilizatorul poate alege ca valorile memorate să fie însumate, sau ca valoarea maximă dintre acestea să fie afișată, ca și în cazul funcțiilor totals din cazul interogărilor.
Pentru a crea un raport recurgem la Design view sau la programul Wizard, care va conduce, ca și în cazul formularelor și interogărilor, prin pași simpli la raportul dorit. Primul pas presupune alegerea tabelelor sau interogărilor pe care se bazează raportul și selectarea câmpurilor care trebuie să apară în raport (fig. 28). Următorul pas presupune alegerea modului în care va fi organizat raportul, funcție foarte importantă în cazul în care acesta se bazează pe mai multe tabele sau interogări. În cadrul acestei etape se stabilește ce nivel ierarhic ocupă fiecare tabel în parte, fiind posibilă setarea a maxim patru de nivele (fig. 29).
Fig. 28. Primul pas care trebuie urmat pentru a crea un raport
Fig. 29. Fereastra unde este stabilită ierarhia tabelelor în formular
Microsoft Access permite și o ierarhizare mai minuțioasă, care ține de organizarea câmpurilor în pagină și care poate duce de exemplu la crearea unui parametru, pe baza căruia va fi construit raportul (fig. 30). Câmpul nr_intrare din tabelul intrări are prioritate și cum același câmp este prezent și în tabelul medicamente, raportul la deschidere va cere introducerea numărului facturii de intrare pe care utilizatorul o dorește imprimată.
Fig. 30. Pasul trei al programului Wizard pentru crearea unui raport
În cadrul pasului următor utilizatorul decide dacă pe raport va fi prezentă de exemplu suma tuturor prețurilor medicamentelor sau informații de altă natură care pot fi adăugate în mod automat (fig. 31 și 32). De asemenea, în cadrul aceluiași pas, poate fi stabilit un filtru de sortare al datelor, numărul maxim de sortări concomitente fiind de patru. Fereastra summary options, permite utilizatorului să decidă dacă raportul său va conține și valori calculate automat de baza de date. În cazul exemplificat, raportul va afișa suma valorilor memorate în câmpurile valoare și pret_facturat.
În continuare alegem stilul în care va fi organizat raportul din punct de vedere grafic, dacă acesta va fi creat pe o pagină tip vedere sau tip portret și apoi numele și modul în care va fi deschis raportul, adică pentru a previzualiza pagina înainte de imprimare, sau pentru a-i modifica setările și elementele componente.
Fig. 31. Metode de sortare Fig. 32. Fereastra summary options
Fig. 33. Modul de organizare al elementelor în pagina de tip vedere sau de tip portret
Fig. 34. Numele raportului și modul de afișare Fig. 35. Căsuța care solicită parametrul
III.4 Crearea unei interogări crosstab
O interogare crosstab este folosită în cazul în care vrem să reprezentăm o interogare de tip agregat, cu două coloane de grupare, la rezultat având una dintre coloane reprezentată în stânga, iar cea de-a doua coloană în partea de sus.
Vrem să obținem cantitățile zilnice ale unor medicamete care se comercializează în farmacie. Trebuie să apelăm la o interogare agregat, care să calculeze cantitățile de medicamente necesare după două câmpuri: după cantitatea vândută pentru fiecare tip de mediacament și după zile. Creăm tabela stocuri, cu cheia primară codul medicamentului, în care sunt contorizate în mod automat la intrarea și ieșirea din gestiune mișcările de stoc, pe zile, cantitățile intrate și ieșite din fiecare medicament, prezentată în Fig. 36, care arată în modul Design view ca în Fig. 38.
Fig.36. Înregistrările din tabela stocuri
Cu ajutorul interogării crosstab vom obține un rezultat mai elegant și mai clar asupra mișcării stocurilor de medicamente, datele putând fi vizualizate ca în Fig. 37.:
Fig. 37. Tabela stocuri după o interogare crosstab
Fig. 38. Tabela stocuri văzută în modul Design view
Observăm cum una din coloanele de grupare cantitate medicament conține tipurile de medicamente, în timp ce cealaltă coloană zile din tabelul inițial este folosită pentru definirea coloanelor din noua interogare. La convergența dintre cele două coloane de grupare va apare cantitatea rămasă în stoc obținută prin scăderea cantității vândute din cantitatea aflată în stoc, pentru fiecare medicament în parte.
Acest tip de interogări pot fi create în modul design view, dar prin intermediul Wizard le putem crea mult mai ușor.
Pentru a folosi crosstab query wizard trebuie să intrăm în fereastra Database, în obiectul Queries. Apăsăm click pe butonul New din fereastra Database, după care selectăm opțiunea Crosstab Query Wizard din căsuța de dialog care va apăre, așa cum se vede și în Fig..39.
Fig.39. Crearea unei interogări crosstab folosind modul Wizard
Prima fereastră care va apăre, din acest tip de wizard, este Fig. 40.:
Fig.40. Fereastra Crosstab query
În acest moment, sistemul ne cere să alegem sursa interogării, adică tabelul sau interogarea de unde vom extrage datele.
În secțiunea View putem selecta obiectele pe care vrem să le vizualizăm, fie ele tabele, fie interogări, sau ambele tipuri de obiecte.
Dacă interogarea pe care dorim să o definim trebuie să extragă date din toate înregistrările unui tabel , vom folosi acest tabel ca sursă, iar în cazul în care va trebui să definim o interogare normală, pentru a combina anumite date din tabele, vom folosi această nouă interogare ca sursă pentru interoparea crosstab.
Pasul următor ar fi să selectăm sursa dorită și să apăsăm pe butonul Next>, pentru a merge la următoarea ferestră.
Fig. 41. Alegerea câmpurilor linie
În ferestra de mai sus, Fig. 41., wizard-ul ne va cere să alegem cîmpurile linie (adică denumirile care permite identificarea valorilor pe linie). Una dintre coloanele unui tabel poate fi folosită ca nume de linie, iar alta ca și cap de tabel. Dacă una dintre aceste două coloane conține mult mai multe date diferite decât cea de-a doua, vom selecta prima coloană ca nume de linie, iar a doua ca nume de coloană(cap de tabel).
Pentru a alege un nume de linie, trebuie să acționăm cu un click asupra butonului . Astfel, câmpul selectat se va transfera în secțiunea Selected fields. În acelaș timp apare, în partea de jos a ferestrei, un mic model, care ne va arăta o parte din schema rezultatului interogării.
Dacă am selectat câmpul greșit, cu ajutorul butonului putem repara această greșeală.
Putem selecta până la trei câmpuri. Dacă selectăm mai mult de un câmp, pentru a fi nume de linie, valorile pe care le vom avea în liniile rezultat, vor apărea în funcție de combinațiile dintre acele câmpuri.
Butonul cu două săgeți ne permite transferul tuturor câmpurilor, dintr-un singur click, dintr-o secțiune în alta.
În cazul în care dorim să continuăm, după ce am introdus toate datele, apăsăm pe butonul Next>. Următoarea ferestră care va apărea este arătată în Fig.42.
Fig. 42. Selecatarea câmpurilor în Crosstab query
În această nouă fereastră, wizardul ne va cere să introducem capul de tabel. În acest moment putem alege doar un singur câmp ți pentru fiecare valoare diferită din sursă se va genera câte un cap de tabel.
În partea de jos a ferestrei se poate vedea rezultatul. În cazul figurii de mai sus se observă că în urma alegerii unui câmp din tabel, s-a generat automat capul de tabel.
În cazul în care selectăm, pentru cap de tabel, un câmp de tip dată-timp, acest wizard ne permite să redefinim capurile de tabel în felul următor, după se observă și din Fig.43.
Fig.43. Definirea capului de tabel în cazul câmpului de tip dată
În cazul în care tipul de dată pe care îl are câmpul ales la capul de tabel este de tip dată, vrem de cele mai multe ori să obținem niște rezultate grupate pe zile. Această facilitate ne este oferită de vrăjitorul crosstab. Se observă apariția unor cinci coloane care descriu datele necesare interogării, așa cum sunt ilustrate și în Fig.44. După definirile capurilor de linie și coloană trecem la pasul următor cu ajutorul butonului Next>:
Fig. 44. Definirea afișării cantității rămase în stoc prin Crosstab query wizard
Această nouă fereastră care apare ne cere să stabilim ce rezultat se va afișa la intersecția dintre linie și coloană.
În lista Functions vom selecta funcția de agregare pe care o vom folosi pentru a calcula valoare pe care o vom afișa, iar în lista Field vom selecta câmpul asupra căruia vom acționa. De exemplu, vrem să afișăm cantitătea rămasă în stoc dintr-un anumit medicament, ca în Fig. 44.
După aceasta, printr-un click pe butonul Next>,vom ajunge la ultima fereastră a acestui wizard, , fereastră în care vom introduce numele interogării, rămasă în cazul nostru implicit Query 3, după cum se vede și din Fig. 45.
Fig.45. Denumirea interogării crosstab
.
Înainte de a da un click pe butonul Finish putem alege, caz în care vom vizualiza rezultatele interogării, ca în Fig. 46., sau putem alege Modify the design, caz în care va apăre fereastra Query design, Fig. 47, care ne va oferi posibilitatea de a modifica definiția interogării.
Fig. 46. Vizualizarea rezultatelor interogării crosstab în cazul View the query
Fig. 47. Vizualizarea rezultatelor interogării crosstab în cazul Query design
Modul design view al acestui tip de interogare este similar modului design view aferent interogărilor crosstab. Astfel, pentru a defini o interogare de acest tip, avem nevoie de o nouă linie introdusă în grid: linia Crosstab.
Această nouă linie servește la definirea conceptelor pe care le-am întâlnit în cazul wizard-ului.
Pentru a interpreta mai ușor rezultatele vom apela la modul de afișare grafic PivotChart View din meniul View al Microsoft Access 2000., așa cum se vede și din Fig.48.
Fig. 48. Vizualizarea rezultatelor unei interogări crosstab în modul PivotChart View
În funcție de opțiunile de afișare, putem avea o imagine de ansamblu asupra ponderii mișcării medicamentelor din stoc, după cum se observă și din Fig. 49 și Fig. 50.
Fig. 49. Vizualizarea rezultatelor unei interogări crosstab în modul PivotChart View, folosind diferite moduri grafice de afișare
Fig. 50. Vizualizarea rezultatelor unei interogări crosstab în modul PivotChart View, folosind diferite moduri grafice de afișare
III.5 Utilizarea programului de gestiune a stocurilor unei farmacii realizat în Microsoft Access 2000
Un program de gestiune a stocurilor are ca scop înregistrarea întregii activități a intreprinderii, inclusiv din punct de vedere al contabilității primare de gestiune. Programul realizat și prezentat în proiectul de față nu se ocupa însă și de partea financiară, care este în general gestionată de aplicații dedicate, dar are posibilitatea de a pune la dispoziția acestora toate datele necesare pentru o bună contabilitate. S-a avut în vedere nu numai înregistrarea „traficului” de medicamente din farmacie, ci și fluidizarea acestuia și înregistrarea tuturor pașilor, după facturile de intrare și de ieșire.
Interogărilor utilizate de baza de date, tipul lor și funcția pe care o au sunt următoarele:
cautare_medicament (select query): afișează toate datele referitoare la medicamentul a cărui denumire este introdusă de la tastatură, având parametru în câmpul denumire. Se bazează pe tabelul medicamente;
factura intrare (select query): afișează toate datele referitoare la medicamentele aflate pe o anumită factură de intrare, al cărei număr este introdus de la tastatură, cerut de un parametru din câmpul nr_intrare. Se bazează pe tabelele medicamente și intrari;
eliminare intrari goale (delete query): șterge din tabelul medicamente înregistrările care au în câmpul cantitate valoarea zero. Se bazează pe tabelul medicamente;
cautare vanzari (select query): afișează toate datele referitoare la medicamentele aflate pe o anumită factură de ieșire, al cărei număr este introdus de la tastatură, cerut de un parametru din câmpul factura. Se bazează pe tabelele arhiva vanzari și vanzari;
intrari goale (select query): afișează toate înregistrările din tabelul medicamente, care au în câmpul cantitate valoarea zero. Se bazează pe tabelul medicamente;
pericol expirare (select query): afișează toate înregistrările din tabelul medicamente care au proprietatea că se referă la medicamente care mai au o lună până când expiră. Se bazează pe tabelul medicamente;
pret (select query): afișează prețul de vânzare, codul și cantitatea disponibilă dintr-un medicament a cărui denumire este introdusă de la tastatură, cerută de un parametru în câmpul denumire. Se bazează pe tabelul medicamente;
stergere (delete query): șterge înregistrările din tabelul medicamente care au proprietatea că se referă la medicamente care deja au expirat. Se bazează pe tabelul medicamente;
test_valabilitate (select query): afișează înregistrările din tabelul medicamente care au proprietatea că fac referire la medicamente care deja au expirat. Se bazează pe tabelul medicamente.
update (update query): scoate din stoc cantitatea de medicamente vândute scăzând din câmpul cantitate aflat în tabelul medicamente valoarea care se află în câmpul cantitate din tabelul arhiva vanzari. Se bazează pe tabelele arhiva vanzari și medicamente.
Rapoartele care se regăsesc în program au atât rolul de a pregăti datele pentru imprimare într-un format adecvat, cât și rolul de a servi drept mijloace de informare pentru a calcula valorile facturilor de intrare și de ieșire.
Rapoartele utilizate sunt:
factura intrare: strânge datele de pe factura de intrare cu numărul specificat de la tastatură înainte de deschidere și calculează valoarea sa totală. Se bazează pe interogarea factura intrare;
cautare_vanzari: strânge datele de pe factura de ieșire cu numărul specificat de la tastatură înainte de deschidere și calculează valoarea sa totală. Se bazează pe interogarea cautare vanzari;
medicamente: afișează toate medicamentele care se află la momentul apelării în stoc. Se bazează pe tabelul medicamente.
Fig. 51. Interogarea test_valabilitate în Design view.
Fig. 52. Tabul Reports și rapoartele utilizate de baza de date de gestiune de stocuri
Fig. 53. Capul raportului medicamente, cu rubricile organizate în funcție de data de intrare
în primul rând și de numărul facturii de intrare în al doilea rând
În momentul în care toate interogările și rapoartele au fost create, s-a trecut la creearea formularelor. În primul rând au fost create formularele principale: furnizori, intrari (împreună cu sub-formularul medicamente), medicamente și vanzari (împreuna cu sub-formularul arhiva vanzari.
Formularul furnizori
Formularul furnizori are rolul de a facilita înregistrarea furnizorilor cu care are contracte farmacia și operațiile de întreținere care trebuie făcute la acest nivel.
Formularul intrari
Formularul intrari reprezintă modalitatea de a introduce medicamente în stoc, prin cumpărare. Prin intermediul sub-formularului medicamente, medicamentelele sunt adăugate automat în stoc, iar rubricile nr_intrare și data_intrarii nu mai necesită completare.
Formularul medicamente
Formularul medicamente este locul unde pot fi efectuate toate operațiile de întreținere a bazei de date în ceea ce privește stocul de medicamente. O parte din facilitățile acestui formular presupun operații de ștergere, ceea ce înseamnă că lucrul cu el necesită un spor de atenție.
Este posibil ca intrările care fac referire la medicamente care nu mai există în stoc să fie necesare mai târziu, deci intrările goale nu ar trebui șterse imediat ce un medicament a fost epuizat din stoc. Pe de altă parte, după o anumită perioadă de timp (o dată pe zi, o dată pe săptămână, sau chiar mai rar în funție de spațiul de memorare de pe hard disk) acestea trebuie șterse pentru a nu îngreuna funcționarea bazei de date în mod inutil.
Formularul vanzari
Formularul vanzari reprezintă modalitatea de a scoate medicamentele din stoc, prin vânzare. Prin intermediul sub-formularului medicamente, medicamentele vândute sunt adăugate automat în tabelul arhiva vanzari, iar rubricile nr_intrare și data_intrarii nu mai necesită completare. Medicamentele nu sunt scoase direct din stoc, ci prin intermediul tabelului arhiva vanzari.
La scoaterea medicamentelor din stoc utilizatorul trebuie să fie foarte atent ca datele din factură să fie corecte. În cazul în care se încearcă scoaterea din stoc a mai multor medicamente decât există, atunci procedura de scoatere va fi întreruptă. De asemenea, scoaterea medicamentelor din stoc trebuie efectuată o singură dată pentru fiecare factură în parte.
Prin intermediul sub-formularului medicamente, medicamentele sunt introduse automat în stoc, timp în care sunt introduse și în formularul intrari, ceea ce duce la îndeplinirea a două funcții în același timp: completarea stocului și organizarea medicamentelor în funcție de numărul de intrare și dată la care acestea sunt cumpărate de la furnizori. De asemenea, numărul de intrare și data sunt completate automat, utilizatorul nefiind obligat să le introducă de fiecare dată când adaugă un nou medicament pe factură.
Interogarea crosstab are rolul de a putea urmări mai ușor mișcările de stocuri pentru fiecare medicament în parte și se va folosi în momentul în care se dorește emiterea unei comenzi către un furnizor de medicamente. Se lansează din Queries, prin deschiderea interogării Query 3 .
Concluzii
Din cele prezentate mai sus rezultă că proiectul a realizat o prezentare teoretică și ilustrează o modalitatea practică de creare pe fundamente știițifice contabile a unei baze de date simplă, care să beneficieze de filtre și funcțiile contabile în desfășurarea unei activități curente de gestiune reală a stocurilor unei farmacii. Prin intermediul unui Macro pot fi executate acțiuni complexe, cum ar fi deschiderea unui formular, deschiderea unei interogări, salvarea datelor din interogare, închiderea acesteia și închiderea formularului, toate prin apăsarea unui singur buton sau prin selectarea unui anumit câmp. De asemenea, din cele prezentate mai sus rezultă că programul de gestiune a stocurilor unei farmacii respectă cerințele de proiectare prezentate în capitolul dedicat proiectării bazei de date.
Utilizarea programului de gestiune a stocurilor unei farmacii are în concluzie următoarele avantaje față de gestiunea neținută pe un supor informatic, avantaje care sunt de fapt funcții ale sistemului informatic, materializate prin următoarele facilități:
Facilități ale formularului furnizori:
– adăugarea unei noi înregistrări sau unui nou furnizor;
– căutarea unui furnizor pe bază de parametri multipli;
– ștergerea înregistrării care este selectată.
Facilități ale formularului intrari:
– calcularea automată a valorilor din câmpurile valoare, valoare_TVA și valoare_totală;
– pregătirea facturii de intrare pentru tipărire, atunci când este deschis raportul factura intrare1;
– tipărirea raportului pregătit;
– adăugarea unei noi înregistrări:
– un link către tabelul medicamente pentru a avea acces direct la facilitățile de acolo;
– posibilitatea de a salva factura de intrare în format extern, astfel încât să existe copii de siguranță.
Facilități ale formularului medicamente:
– afișarea tuturor medicamentelor care se găsesc în stoc, prin utilizarea raportului medicamente;
– afișarea tuturor medicamentelor din stoc care au denumirea introdusă de utilizator de la tastatură, caz în care se folosește interogarea cautare medicament;
– căutarea unui anumit medicament în funcție de mai mulți parametri
– găsirea medicamentelor care au expirat, prin folosirea interogării test_valabilitate
– găsirea medicamentelor care mai au o lună până când expiră, utilizând interogarea pericol_expirare
– eliminarea din baza de date a intrărilor care fac referire la medicamente care nu mai există în stoc, rulând interogarea eliminare intrari goale
– eliminarea din baza de date a intrărilor care fac referire la medicamente care nu mai sunt valabile, folosind interogarea stergere
– afișarea înregistrărilor din baza de date care fac referire la medicamente care nu mai există în stoc, utilizând interogarea intrari goale
– posibilitatea de a schimba prețul de vânzare al unui medicament în funcție de fluctuațiile pieței.
Facilități ale formularului vanzari:
– calcularea automată a valorilor din câmpurile valoare_v, valoare_TVA_v, valoare_totala_v, pret_facturat;
– afișarea datelor necesare în vederea vânzării despre medicamentele solicitate, atunci când se folosește interogarea pret;
– pregătirea facturii de ieșire pentru tipărire, prin deschiderea raportului cautare_vanzari;
– afișarea tuturor intrărilor care au în câmpul denumire valoarea introdusă de la tastatură, atunci când este folosită interogarea cautare_medicament;
– existența unui link către formularul medicamente, pentru a avea acces direct la anumite funcții de întreținere (de exemplu verificarea stării de valabilitate a unui medicament);
-adăugarea unei noi înregistrări.
Prin utilizarea interogării crosstab și interpretarea rezultatelor furnizate de ea, fie sub exprimare valorică cât fie sub exprimare grafică, se poate estima necesarul de stoc pentru fiecare medicament în parte, astfel încât farmacia să-și poată deservi clienții fără riscul unei supradimensionări a stocurilor ,care ar însemna un efort financiar mai mare dar și creșterea riscului de a depăși termenele de valabilitate a medicamentelor nevândute.
BIBLIOGRAFIE
1. Claudia Cârstea – Sisteme informatice de gestiune, Ed. Omnia UNI S.A.S.T., Brașov 2007
2. Claudia Cârstea – Proiectarea bazelor de date. Mediul de programare Microsoft Access, Ed. Omnia UNI S.A.S.T., Brașov 2007
3. Pleșea Doru – Bazele contabilității, vol. II, Ed. Omnia Uni SAST, Brașov, 2005
4. Petre Brezeanu – Gestiunea financiară a intreprinderii, Ed. Cavallioti, 2002
5. Gheorghe Basanu – Managementul aprovizionării și desfaceri, Ed. Economica, 1996 Mihai Pricop
6. Radu Emilian – Managementul operațiunilor în intreprinderile de servicii Gabriela Tigu
7. Eugen Țigănescu – Bazele cercetării operaționale Dorin Mitruț
8. www.trendix.ro
9. http://www.market-mentor.ro
10. http://www.biblioteca.ase.ro/eresurse/reviste/contabilitate
11. http://www.asecib.ase.ro/MitruDorin/Curs/bazeCO
12. http://www.ea.upm.ro/cip/elearning
BIBLIOGRAFIE
1. Claudia Cârstea – Sisteme informatice de gestiune, Ed. Omnia UNI S.A.S.T., Brașov 2007
2. Claudia Cârstea – Proiectarea bazelor de date. Mediul de programare Microsoft Access, Ed. Omnia UNI S.A.S.T., Brașov 2007
3. Pleșea Doru – Bazele contabilității, vol. II, Ed. Omnia Uni SAST, Brașov, 2005
4. Petre Brezeanu – Gestiunea financiară a intreprinderii, Ed. Cavallioti, 2002
5. Gheorghe Basanu – Managementul aprovizionării și desfaceri, Ed. Economica, 1996 Mihai Pricop
6. Radu Emilian – Managementul operațiunilor în intreprinderile de servicii Gabriela Tigu
7. Eugen Țigănescu – Bazele cercetării operaționale Dorin Mitruț
8. www.trendix.ro
9. http://www.market-mentor.ro
10. http://www.biblioteca.ase.ro/eresurse/reviste/contabilitate
11. http://www.asecib.ase.ro/MitruDorin/Curs/bazeCO
12. http://www.ea.upm.ro/cip/elearning
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 (ID: 150285)
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.
