Sunteți pe pagina 1din 35

CUPRINS

Introducere............................................................................................3
Analiza şi proiectarea aplicaţiei...............................................................4
I.1. Principalele etape în realizarea unei aplicaţii .........................................................................................4
I.2. Elemente de analiză.................................................................................................................................5
I.3. Alegerea SGBD-ului adecvat..................................................................................................................6
I.4. Proiectarea tabelelor şi stabilirea relaţiilor între tabele...........................................................................6
I.5.Introducerea datelor................................................................................................................................10
I.6. Adăugarea datelor..................................................................................................................................12
I.7. Modificarea datelor................................................................................................................................14
I.8. Ştergerea datelor....................................................................................................................................19
I.9. Situaţii finale - Proiectarea listelor .......................................................................................................21
I.10. Alcătuirea meniurilor...........................................................................................................................31
I.11. Utilizarea aplicaţiei..............................................................................................................................35

2
Introducere

Necesitatea colectării, organizării sub formă de tabele şi stocării datelor a crescut


dramatic în ultima sută de ani. Actuala „eră a informaţiei” este cu adevărat o eră a datelor.
Bombardaţi mai mult ca oricând cu date, scopul nostru este să procesăm şi să organizăm
aceste date într-un mod cât mai inteligent, folosind metode care permit accesul rapid şi
simplu la informaţiile prelucrate. Programele de baze de date precum Microsoft Access sunt
destinate acestui scop.
Pornind de la această idee am realizat această aplicaţie, care are ca scop evidenţa
aprovizionării cu materiale, de la diverşi furnizori, a unei unităţi economice. Înregistrarea pe
gestiuni a materialelor aprovizionate pe bază de facturi, se face conform notelor de recepţie
şi constatare de diferenţe. Documentele de plată prin care se achită furnizorii pot conţine
contravaloarea uneia sau mai multor facturi emise de acelaşi furnizor. O factură poate fi
achitată cu mai multe documente de plată.

Se cere:
1. definirea unei interfeţe utilizator ce permite încărcarea cu date şi actualizarea
bazei de date;
2. să se determine valoarea materialelor aprovizionate, grupate după mai multe
criterii: data la care s-a confirmat aprovizionarea prin Nota de Recepţie şi Constatare de
Diferenţe, furnizor, gestiune, furnizor şi data livrării;
3. proiectarea unor rapoarte care să furnizeze informaţiile pe care dorim să le
vizualizăm, organizate într-o manieră utilă;
4. aplicaţia va conţine şi un sistem minimal de help.

3
Analiza şi proiectarea aplicaţiei

Etapele parcurse în fazele de analiză şi proiectare conduc la realizarea unui produs


soft care ţine o evidenţă a aprovizionării cu materiale (de la diverşi furnizori), din cadrul
unei unităţi economice.

I.1. Principalele etape în realizarea unei aplicaţii


A) Analiza problemei şi proiectarea aplicaţiei - constă în:
 formularea problemei prin: studierea activităţii vizate de aplicaţie, precizarea
funcţiilor compartimetului în care se încadrează problema, identificarea
informaţională a compartimentului şi a modului de conectare din punct de vedere
informaţional cu celelalte compartimente, etc;
 analiza şi inventarierea documentelor care participă la fluxul informaţional;
 precizarea situaţiilor de ieşire (listelor);
 stabilirea datelor de intrare necesare;
 construirea unui model matematic sau a unei scheme privind structura funcţională
a sistemului informatic (prefigurarea obiectelor din baza de date);
 proiectarea datelor şi a tabelelor;
 stabilirea datelor de intrare/ieşire;
 stabilirea relaţiilor între tabele;
 stabilirea metodelor de prelucrare necesare;
 stabilirea drepturilor de acces şi a proiectarea sistemului de parole pentru
securitatea informaţiei;
 stabilirea algoritmului de rezolvare pentru fiecare sarcină în parte, eventual cu
reprezentare grafică printr-o organigramă.
B). Realizarea aplicaţiei - constă în:
 construirea obiectelor şi a modulelor de program corespunzătoare;
 testarea morfologică şi sintactică a fiecărui modul de program în parte;

4
 întocmirea unui meniu prin intermediul căruia se pot lansa în execuţie sarcinile
specifice ale aplicaţiei;
 verificarea schimbului de informaţie între obiecte:
 validarea funcţionării aplicaţiei prin urmărirea rezultatelor obţinute şi compararea lor
cu rezultatele obţinute pe altă cale;
 întocmirea documentaţiei de utilizare.
C). Exploatarea aplicaţiei - constă în:
 utilizarea aplicaţiei folosind date reale;
 actualizarea permanentă a bazei de date;
 eventuale modificări şi/sau îmbunătăţiri aduse aplicaţiei.

I.2. Elemente de analiză


Pentru desfăşurarea activităţii curente, o unitate economică se aprovizionează cu
materiale de la furnizori. Materialele aprovizionate pe bază de facturi sunt înregistrate pe
gestiuni conform notelor de recepţie şi constatare de diferenţe.
Documentele de plată prin care se achită furnizorii pot conţine contravaloarea uneia
sau mai multor facturi emise de acelaşi furnizor. Aceeaşi factură poate fi achitată cu mai
multe documente de plată.
Se cere:
 să se definească interfaţa utilizator ce permite încărcarea cu date şi actualizarea bazei
de date;
 să se determine valoarea materialelor aprovizionate, grupate după următoarele
criterii:
o data la care s-a confirmat aprovizionarea prin Nota de Recepţie şi Constatare
de Diferenţe
o furnizor
o gestiune
o furnizor şi data livrării;
 să se afişeze un raport care să ofere informaţii privind valoarea materialelor
recepţionate la nivelul fiecărui document de recepţie (NRCD), conţinând datele de
identificare a materialelor, cantitatea şi preţul de aprovizionare; în finalul acestuia se

5
va proiecta suma totală a valorilor recepţionate de societatea comercială, pentru
perioada presupusă;
 să se afişeze lista materialelor aprovizionate, cantitativ şi valoric;
 să se afişeze lista intrărilor de materialelor exprimate în $;
 să se afişeze pentru toţi furnizorii valoarea datorată pentru materialele livrate;
 să se afişeze situaţia totalurilor valorice pe fiecare magazie;
 să se calculeze suma totală cuvenită, suma totală achitată şi restul de plată pentru un
furnizor.

I.3. Alegerea SGBD-ului adecvat


SGBD-ul ales pentru realizarea aplicaţiei trebuie să îndeplinească următoarele
condiţii:
 să permită actualizări complexe şi repetate ale datelor;
 să permită interogarea avansată a bazei de date;
 să permită realizarea unei interfeţe prietenoase;
 să permită dezvoltări ulterioare;
 să permită manipularea datelor în condiţii de securitate ridicată;
 să poată fi folosit cu uşurinţă atât de utilizator cât şi de programator;
 să fie un SGBD de uz general, pentru care majoritatea societăţilor dispun de licenţă.
Având în vedere cele de mai sus am optat pentru Microsoft Access.

I.4. Proiectarea tabelelor şi stabilirea relaţiilor între tabele


Se defineşte o bază de date care conţine tabelele:
1) tblfurnizor (Fig. 1.1.a. şi Fig. 1.1.b.) conţine datele despre furnizori, necesare pentru a
obţine informaţii de identificare a acestora. Câmpurile tabelului sunt: codfurnizor,
denfurnizor, localitate, adresa, codfiscal.

Fig. 1.1.a. Modul Datasheet View

6
Fig. 1.1.b Modul Design View

Câmpul codfurnizor (Number, Integer) este cheia primară a tabelului; pe baza


informaţiei din acest câmp se identifică univoc articolele tabelului. Pentru câmpul localitate,
de tip text (dimensiune 20), se foloseşte utliltarul Lookup Wizard. Lista de valori se
introduce la crearea câmpului şi se poate modifica în modul proiectare. Tipul câmpului este
determinat de tipul datelor stabilit înainte de lansarea utilitarului Lookup Wizard. Pentru a
introduce o nouă valoare (localitate) proprietatea LimitToList trebuie să aibă valoarea No
(valorea nouă se introduce în câmp, dar nu se adaugă automat listei şi nu va fi disponibilă
pentru articolele următoare). Câmpurile denfurnizor şi adresă sunt de tip Text, ambele de
dimensiune 30, iar câmpul codfiscal este de tip Text, dimensiune 15.
2) tblnrcd (Fig. 1.2.a şi 3.2.b) – necesar pentru a obţine informaţii de identificare a
documentelor privind recepţionarea materialelor de la furnizori. (nrnrcd, datanrcd,
codfurnizor, codgestiune, codfactură, datafactură ). Cheia primară a tabelului este
nrnrcd (număr nota de recepţie şi constatare de diferenţe), de tip Number (Long Integer).
Câmpurile datanrcd şi datafactură sunt de tip Date/Time (Medium date). Câmpurile
codfurnizor, codgestiune şi codfactură sunt de tip Number (Integer, Long Integer).
Tabelul a fost indexat (cu opţiunea No Duplicates) pe câmpul nrnrcd.

Fig. 1.2.b Modul Design View

7
Fig. 1.2.b Modul Design View

3) tblmataprovizionat (Fig. 1.3.) - pentru a avea informaţii privind cantităţile primite şi


recepţionate precum şi preţurile corespunzătoare; (nrnrcd, codmaterial, cantaprov,
pretaprov). Cheia primară este compusă din câmpurile nrnrcd şi cod material, ambele
de tip Number şi dimensiune Long Integer. Tabela a fost indexată pe câmpurile nrnrcd şi
codmaterial, ambele cu opţiunea Duplicates OK. Tot de tip Number sunt şi câmpurile
cantaprov (Long Integer) respectiv pretaprov (Single).

Fig. 1.3. Modul Design View

Tabelele tblnrcd şi tblmataprovizionat au ca sursă de date documentul „Nota de


Recepţie şi de Constatare de Diferenţe”. Tabela tblnrcd cuprinde partea comună a
documentului cu cheia primară nrnrcd, iar tabela tblmataprovizionat cuprinde datele din
partea în care sunt consemnate materialele care au intrat (acestea pot fi mai multe),
identificarea acestora realizându-se prin câmpul cheie primară compus din nrnrcd şi cod
material.
4) tblmaterial (Fig. 1.4.)- pentru a obţine numele şi unitatea de măsură a materialelor;
conţine câmpurile codmaterial (cheia primară, de tip Number), denmaterial (Text, având
Field Size=30) şi um (Text, având Field Size=5). Tabelul a fost indexat pe câmpul
codmaterial, cu opţiunea No Duplicates.

8
Fig. 1.4. Tabelul tblmaterial

5) tblplati (Fig. 1.5.) - din care rezultă plăţile


efectuate către furnizori conţine câmpurile
coddocument, sumădocument, datadocument,
codfurnizor. Cheia primară este coddocument de
tip Number, cu Field Size de tip Integer. Tot de
acelaşi tip sunt şi câmpurile sumădocument (Field
Size=Long Integer) şi codfurnizor (Field
Size=Integer). Câmpul datadocument este de tip
Date/Time (Medium Date).

Fig. 1.5. Tabelul tblplati


Fereastra Relationships prezentată în figura de mai jos ilustrează structura datelor ce
corespunde modului de funcţionare descris mai sus. Relaţiile dintre tabele sunt controlate
logic prin impunerea integrităţii referenţiale.

Fig. 1.6. Relaţiile dintre tabelele bazei de date


Relaţiile între tabele sunt stabilite în urma analizei efectuate astfel:

9
 unu-la-mai-mulţi, între tblfurnizor şi tblplati, astfel unui articol din tblfurnizor
îi pot corespund mai multe articole din tblplati. Câmpul de legătură este
codfurnizor, cheie primară în tabelul tblfurnizor şi cheie străină în tabelul
tblplati.
 unu-la-mai-mulţi, între tblfurnizor şi tblnrcd, astfel unui articol din tblfurnizor
îi pot corespunde mai multe articole din tblnrcd. Câmpul de legătură este
codfurnizor, cheie primară în tabelul tblfurnizor şi cheie străină în tabelul
tblnrcd.
 mai-mulţi-la-mai-mulţi, între tblmaterial şi tblnrcd, astfel mai multor articole
din tblmaterial le corespund mai multe articole din tblnrcd şi invers. Prin
tabelul intermediar (de joncţiune) tblmataprovizionat relatia mai-mulţi-la-mai-
mulţi se descompune în două relaţii unu-la-unu.

I.5.Introducerea datelor
Formularele prin care se încarcă şi actualizează datele din aceste tabele sunt:
 fFurnizori pentru încărcarea cu date sau actualizarea datelor din tabela tblfurnizor ;

Fig. 1.7 Formularul fFurnizori

 fPlăţi pentru încărcarea cu date sau actualizarea datelor din tabela tblplăţi;

10
Fig. 1.8. Formularul fPlati
- fMaterial care permite încărcarea cu date sau actualizarea datelor din tabela
tblmaterial;

Fig. 1.9. Formularul fMaterial


- fNRCD care permite încărcarea cu date sau actualizarea datelor din tabela
tblnrcd;

Fig. 1.10. Formularul fNRCD

11
- fMatAprovizionat care permite încărcarea cu date sau actualizarea datelor
din tabela tblmataprovizionat.

Fig. 1.11. Formularul fMatAprovizionat

În fiecare din aceste formulare sunt inserate:


- casete de text corespunzătoare câmpurilor tabelei sursă de date;
- un buton de comandă al cărui eveniment Click permite revenirea la meniul
principal
- un buton de închidere a formularului.

I.6. Adăugarea datelor


Pentru tratarea evenimentelor legate de butoanele de comandă din cadrul
formularului pentru adăugarea datelor se pot folosi module de clasă legate de formulare.
Modulul formularului pentru adăugare este:

Option Compare Database

Private Sub Comanda1_Click()


On Error GoTo Err_Comanda1_Click

Dim stDocName As String


Dim stLinkCriteria As String

stDocName = "fFurnizor"

12
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Comanda1_Click:
Exit Sub
Err_Comanda1_Click:
MsgBox Err.Description
Resume Exit_Comanda1_Click
End Sub

Private Sub Comanda10_Click()


DoCmd.Close
DoCmd.OpenForm "fPlati", , , , acFormAdd
End Sub

Private Sub Comanda4_Click()


DoCmd.Close
DoCmd.OpenForm "fMaterial", , , , acFormAdd
End Sub

Private Sub Comanda5_Click()


DoCmd.Close
DoCmd.OpenForm "fMatAprovizionat", , , , acFormAdd
End Sub

Private Sub Comanda7_Click()


DoCmd.Close
DoCmd.OpenForm ("fACTUALIZARE")
End Sub

Private Sub Comanda8_Click()


DoCmd.Close
DoCmd.OpenForm "fNRCD", , , , acFormAdd
End Sub

13
Private Sub Comanda9_Click()
DoCmd.Close
DoCmd.OpenForm "fFurnizor", , , , acFormAdd
End Sub
Private Sub Comanda11_Click()
On Error GoTo Err_Comanda11_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "fMeniuPrincipal"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Comanda11_Click:
Exit Sub
Err_Comanda11_Click:
MsgBox Err.Description
Resume Exit_Comanda11_Click
End Sub

I.7. Modificarea datelor


În cazul modificării datelor se definesc formulare noi, ce conţin date din mai multe
tabele, grupate în funcţie de contextul concret în care are loc modificarea. Astfel pentru
modificarea datelor privind achitarea furnizorilor se defineşte formular fPF, iar pentru
modificarea datelor referitoare la aprovizionarea cu materiale se defineşte formularul
fAprovizionare.
Dacă dorim să modificăm informaţiile legate de plăţi se va deschide caseta de dialog
din Fig. 1. 12., în care se cere codul documentului.

Fig. 1. 12 Caseta de dialog


După completarea acestui cod se va deschide formularul fPF (Fig.3.13).

14
În Form Header pentru formularul fPF sunt inserate casete de text pentru câmpurile
tabelei tblfurnizor, astfel că în timpul modificării datelor despre plăţile efectuate
furnizorilor, utilizatorul să aibă pe ecran şi datele de identificare ale furnizorilor.

Fig.3.13. Formularul fPF

Sursa pentru acest formular este tabelul tblpf, creat prin interogarea de tip make table
qPF (Fig.3.14.) a cărei fereastră Design are următorul aspect:

Fig.3.14.Interogarea de tip make table qPF (DesignView)

Codul SQL este al acestei interogări este:


SELECT tblfurnizor.codfurnizor, tblfurnizor.denfurnizor, tblfurnizor.localitate,
tblfurnizor.adresa, tblfurnizor.codfiscal, tblplati.coddocument, tblplati.sumadocument,
tblplati.datadocument INTO tblpf
FROM tblfurnizor INNER JOIN tblplati ON tblfurnizor.codfurnizor =
tblplati.codfurnizor;

15
Dacă dorim să modificăm informaţiile legate de aprovizionare se va deschide caseta
de dialog în care se cere numărul notei de recepţie şi constatare de diferenţe.
Formularul fAprovizionare are ca sursă de date tabela tnrcd şi conţine
subformularul fMateriale ce are ca sursă de date interogarea qMateriale.

Fig. 1.15. Formularul fAprovizonare

Codul SQL este al interogării qMateriale este:


SELECT tblmataprovizionat.nrnrcd, tblmataprovizionat.codmaterial,
tblmaterial.denmaterial, tblmaterial.um, tblmataprovizionat.cantaprov,
tblmataprovizionat.pretaprov, [cantaprov]*[pretaprov] AS Valoare
FROM tblmaterial INNER JOIN tblmataprovizionat ON tblmaterial.codmaterial =
tblmataprovizionat.codmaterial;
Dacă dorim să modificăm informaţiile legate de furnizor se va deschide o casetă de
dialog în care se cere codul furnizorului.
După completarea acestui cod se va deschide formularul fFurnizori (Fig.3.16.).

16
Fig. 1.16. Formularul fFurnizori

Modulul formularului pentru modificarea datelor:


Option Compare Database
Private Sub Comanda1_Click()
On Error GoTo Err_Comanda1_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "fFurnizor"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Comanda1_Click:
Exit Sub
Err_Comanda1_Click:
MsgBox Err.Description
Resume Exit_Comanda1_Click
End Sub

Private Sub Comanda10_Click()


DoCmd.Close
DoCmd.OpenForm "fPlati", , , , acFormAdd
End Sub

Private Sub Comanda4_Click()

17
DoCmd.Close
DoCmd.OpenForm "fMaterial", , , , acFormAdd
End Sub
Private Sub Comanda5_Click()
DoCmd.Close
DoCmd.OpenForm "fMatAprovizionat", , , , acFormAdd
End Sub

Private Sub Comanda7_Click()


DoCmd.Close
DoCmd.OpenForm ("fACTUALIZARE")
End Sub

Private Sub Comanda8_Click()


DoCmd.Close
DoCmd.OpenForm "fNRCD", , , , acFormAdd
End Sub
Private Sub Comanda9_Click()
DoCmd.Close
DoCmd.OpenForm "fFurnizor", , , , acFormAdd
End Sub
Private Sub Comanda11_Click()
On Error GoTo Err_Comanda11_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "fMeniuPrincipal"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Comanda11_Click:
Exit Sub
Err_Comanda11_Click:
MsgBox Err.Description
Resume Exit_Comanda11_Click
End Sub

18
I.8. Ştergerea datelor
Interogările pentru ştergerea datelor sunt interogări acţiune (DeleteQuery). Preluarea
valorii câmpului cheie cu care se accesează tabelele se precizează la momentul execuţiei.
Pentru ştergerea unei înregistrări din tabela tblfurnizor se defineşte interogarea
qStergFurnizori (Fig. 1.17.).
Codul SQL al acestei interogări este:
DELETE [tblfurnizor].[codfurnizor], [tblfurnizor].[denfurnizor], [tblfurnizor].
[localitate], [tblfurnizor].[adresa], [tblfurnizor].[codfiscal]
FROM tblfurnizor
WHERE ((([tblfurnizor].[codfurnizor])=[Codul furnizorului]));

Fig. 1.17. Interogarea qStergFurnizori

Pentru ştergerea unei înregistrări din tabela tblmataprovizionat se defineşte


interogarea qStergMatAprov (Fig. 1.18).

Fig. 1.18. Interogarea qStergMatAprov

19
Codul SQL al acestei interogări este:
DELETE tblmataprovizionat.nrnrcd, tblmataprovizionat.codmaterial,
tblmataprovizionat.cantaprov, tblmataprovizionat.pretaprov
FROM tblmataprovizionat
WHERE (((tblmataprovizionat.nrnrcd)=[NRCD]));

Pentru ştergerea unei înregistrări din tabela tblmaterial se defineşte interogarea


qStergMateriale (Fig. 1.19.).

Fig. 1.19. Interogarea qStergMateriale

Codul SQL al acestei interogări este:


DELETE tblmaterial.codmaterial, tblmaterial.denmaterial, tblmaterial.um
FROM tblmaterial
WHERE (((tblmaterial.codmaterial)=[Cod material]));
Pentru ştergerea unei înregistrări din tabela tblnrcd se defineşte interogarea
qStergNRCD (Fig. 1.20.).

Fig. 1.20. Interogarea qStergNRCD

20
Codul SQL al acestei interogări este:
DELETE tblnrcd.nrnrcd, tblnrcd.datanrcd, tblnrcd.codfurnizor, tblnrcd.codgestiune,
tblnrcd.codfactura, tblnrcd.datafactura
FROM tblnrcd
WHERE (((tblnrcd.nrnrcd)=[NRCD]));

Pentru ştergerea unei înregistrări din tabela tblplati se defineşte interogarea


qStergPlati (Fig. 1.21.).

Fig. 1.21. Interogarea qStergPlati

Codul SQL al acestei interogări este:


DELETE tblplati.coddocument, tblplati.sumadocument, tblplati.datadocument,
tblplati.codfurnizor
FROM tblplati
WHERE (((tblplati.coddocument)=[Cod document]));
I.9. Situaţii finale - Proiectarea listelor
Determinarea valorii materialelor aprovizionate se realizează cu ajutorul unor
interogări în care gruparea se face conform următoarelor criterii:
 data la care s-a confirmat aprovizionarea prin Nota de Recepţie şi
Constatare de Diferenţe
 furnizor
 gestiune
 furnizor şi data livrării.
Valoarea materialelor aprovizionate, grupate după data la care a fost confirmată
aprovizionarea prin Nota de Recepţie şi Consultare de Diferenţe se determină cu interogarea
qValoareData (Fig. 1.22.).

21
Fig. 1.22. Interogarea qValoareData

Codul SQL al acestei interogări este:


SELECT tblnrcd.datanrcd, Sum([cantaprov]*[pretaprov]) AS ValData
FROM tblnrcd INNER JOIN (tblmaterial INNER JOIN tblmataprovizionat ON
tblmaterial.codmaterial=tblmataprovizionat.codmaterial) ON tblnrcd.nrnrcd=
tblmataprovizionat.nrnrcd
GROUP BY tblnrcd.datanrcd;

Pentru a calcula valoarea materialelor aprovizionate, grupate după furnizorul care a


livrat materialul se defineşte interogarea qValoareFurnizor (Fig. 1.23.) al cărui cod SQL
este:
SELECT [tblfurnizor].[denfurnizor], Sum([cantaprov]*[pretaprov]*1.19) AS
ValFurnizor
FROM (tblfurnizor INNER JOIN tblnrcd ON [tblfurnizor].[codfurnizor]=[tblnrcd].
[codfurnizor]) INNER JOIN tblmataprovizionat ON [tblnrcd].[nrnrcd]=[tblmataprovizionat].
[nrnrcd]
GROUP BY [tblfurnizor].[denfurnizor]
ORDER BY [tblfurnizor].[denfurnizor];

22
Fig. 1.23. Interogarea qValoareFurnizor

Pentru a calcula valoarea materialelor aprovizionate, grupate pe gestiuni se defineşte


interogarea qValoareGestiuni (Fig. 1.24). Codul SQL al acestei interogări este:
SELECT [tblnrcd].[codgestiune], Sum([cantaprov]*[pretaprov]) AS ValGestiune
FROM tblnrcd INNER JOIN tblmataprovizionat ON [tblnrcd].
[nrnrcd]=[tblmataprovizionat].[nrnrcd]
GROUP BY [tblnrcd].[codgestiune];

Fig. 1.24. Interogarea qValoareGestiuni


Valoarea materialelor aprovizionate, grupate după furnizor şi după data la care a fost
confirmată aprovizionarea prin Nota de Recepţie şi Consultare de Diferenţe se calculează cu
ajutorul unei interogări acţiune, de tip Crosstab (tabel încrucişat) , qValFD (Fig. 1.25), al
cărei cod SQL este:
TRANSFORM Sum([cantaprov]*[pretaprov]) AS ValFurnizorData
SELECT [tblnrcd].[codfurnizor]

23
FROM tblnrcd INNER JOIN tblmataprovizionat ON [tblnrcd].
[nrnrcd]=[tblmataprovizionat].[nrnrcd]
GROUP BY [tblnrcd].[codfurnizor]
PIVOT [tblnrcd].[datanrcd];

Fig. 1.25. Interogarea de tip Crosstab qValFD

Corespunzător criteriilor din enunţ, în fereastra de interfaţă definită de formularul


fValoare (Fig.3.26) se inserează:
 4 butoane de opţiune care permit selectarea criteriului de grupare (DATA,
FURNIZOR, GESTIUNE, FURNIZOR/DATA) cărora li s-au asociat următoarele
macrocomenzi:
macqValoareData, macqValoareFurnizor, macqValoareGestiuni, macqValFD

Fig. 1.26 Formularul fValoare

24
 un buton de comandă al cărui eveniment Click permite revenirea la meniul situaţiilor
finale (acestuia i s-a asociat macrocomanda macMaxValoare, Fig. 1.27);

Fig. 1.27 Macrocomanda macMaxValoare

O formă de interogare mai apropiată de „stilul raport” o constituie interogarea


încrucişată. În cazul datelor de evidenţă a aprovizionărilor, am proiectat o astfel de
interogare qrycross (Fig.3.28.), solicitându-se valoarea materialelor recepţionate pentru
fiecare factură, astfel: fiecare cod de factură să constituie un titlu de coloană, având pe
rânduri denumirea materialului şi data facturii, iar la intersecţii – valoarea recepţionată din
materialul respectiv la nivelul fiecărei facturi.

Fig. 1.28. a.Interogarea qrycross

25
Fig. 1.28.b. Interogarea qrycross

Pentru a calcula suma totală cuvenită, suma totală achitată şi restul de plată pentru un
furnizor am creat interogările qrycalcul1 (Fig.3.29) şi qrycalcul2 (Fig.3.30.), iar apoi pe
baza acestora formularul frmDiferente (Fig. 1.31.).

Fig. 1.29. Interogarea qrycalcul1

Fig. 1.30. Interogarea qrycalcul2

26
În cadrul frmDiferente am introdus apoi două controale TextBox pentru care am
precizat în fereastra Proprietăţi ca Sursa control următoarele expresii:
=IIf([Valoare]>[plati],"mai trebuie platit ","furnizor achitat")
=[Valoare]-[plati].

Fig. 1.31. Formularul frmDiferente (Design View)

Pentru obţinerea listei materialelor aprovizionate se defineşte raportul


rptValoareMateriale (Fig. 1.33.) a cărui sursă de date este interogarea qryMateriale (Fig.
1.32).
Codul sursă al interogării qryMateriale:
SELECT tblmaterial.denmaterial, tblmaterial.um, tblmataprovizionat.cantaprov,
tblmataprovizionat.pretaprov, [cantaprov]*[pretaprov] AS ValMat, [ValMat]*0.19 AS tva,
[ValMat]+[tva] AS TotVal
FROM tblmaterial INNER JOIN tblmataprovizionat ON tblmaterial.codmaterial =
tblmataprovizionat.codmaterial
GROUP BY tblmaterial.denmaterial, tblmaterial.um, tblmataprovizionat.cantaprov,
tblmataprovizionat.pretaprov, [cantaprov]*[pretaprov]
ORDER BY tblmaterial.denmaterial;

27
Fig. 1.32. Interogarea qryMateriale

Pentru fiecare material, lista materialelor aprovizionate cuprinde: denumirea


materialului, unitatea de măsură, cantitatea aprovizionată, preţul corespunzător, valoarea
pentru materialul aprovizionat, taxa pe valoarea adăugată precum şi valoarea totală.

Fig. 1.33. Raportul rptValoareMateriale

Pentru a obţine lista cu preţurile maxim, minim şi mediu pentru intrările de materiale
pe coduri am creat interogarea qtotal2 (Fig. 1.34.), ce va extrage datele din
tblmataprovizionat, iar apoi pe baza acesteia a rezultat rptstatistica (Fig. 1.35.).

28
Fig. 1.34. Interogarea qtotal2

Fig. 1.35. Raportul rptstatistica

Lista totalurilor valorice, inclusivTVA, pentru materialele intrate pe fiecare magazie


este furnizată de rptgestiune (Fig. 1.36), a cărui sursă va fi interogarea de tip total qrytotal1
(Fig. 1.37).

Fig. 1.36 Raportul rptgestiune

Fig. 1.37. Interogarea qrytotal1


Codul sursă al
interogării qrytotal1:
SELECT
tblnrcd.codgestiune,

Sum(([cantaprov]*[pretaprov])+([cantaprov]*[pretaprov]*19/100)) AS Valoare

29
FROM tblnrcd INNER JOIN tblmataprovizionat ON tblnrcd.nrnrcd =
tblmataprovizionat.nrnrcd
GROUP BY tblnrcd.codgestiune;
Sursa acestei interogări o reprezintă tabelele tblnrcd şi tblmataprovizionat.
În vederea obţinerii unei liste a intrărilor de materiale exprimate în dolari am creat
interogarea qryValuta (Fig. 1.38.), bazată pe tblmataporvizionat, iar apoi rptValuta (Fig.
1.39.).Codul sursă al interogării qryValuta:
SELECT tblmataprovizionat.codmaterial, tblmataprovizionat.cantaprov,
tblmataprovizionat.pretaprov, [cantaprov]*[pretaprov]/[Tastati cursul] AS Valoare
FROM tblmataprovizionat;

Fig. 1.38 Caseta de dialog pentru qryValuta Fig. 1.39 Raportul rptValuta

Pentru lista ce conţine valoarea datorată furnizorilor pentru materialele aprovizionate


se defineşte raportul rptValoareFurnizori (Fig. 4.41.) care are ca sursă de date
qValoareFurnizor (Fig. 4.40.).

Fig. 1.40 Interogarea qValoareFurnizor

30
Fig. 1.41 Raportul rptValuta

Raportul rptAprovizionareMaterial (Fig. 1.42.) are la bază interogarea


qrysursarpt (Fig. 1.43.). Acesta oferă informaţii privind valoarea materialelor recepţionate
la nivelul fiecărui document de recepţie (N.R.C.D.), conţinând datele de identificarea
materialelor, cantitatea şi preţul de aprovizionare. În finalul raportului se face suma totală a
valorilor recepţionate de societatea comercială

Fig. 1.42 Raportul rptAprovizionareMaterial

I.10. Alcătuirea meniurilor


Interfaţa aplicaţiei se realizează prin intermediul unor formulare- meniuri din care
utilizatorul selectează obiecte ale căror evenimente declanşează execuţia secvenţelor de cod.
Formularele meniu au fost creeate în modul Design. Majoritatea butoanelor de comandă au
fost creeate cu utilitarul de tip interactiv de tip Wizard. Acţiunile asociate butoanelor de
comandă au fost precizate:
- folosind utilitarul Control Wizard, ce se lansează automat dacă
instrumentul corespunzător de pe Toolbox este activ în momentul
desemnării controlului. Rezultatul este o procedură VBA, scrisă automat
de mediul Access.

31
- scriind explicit o procedură adecvată, corespunzător unuia dintre
evenimentele legate de controlul creat în prealabil. Toate procedurile
asociate evenimentelor specifice unui formular şi controalelor aflate pe
acesta sunt reunite într-o secvenţă de cod asociată formularului
(CodeBehindForms).
Pentru ca formularul să aibă un aspect profesional, se utilizează proprietăţile de
formatare astfel: RecordSelector=No, NavigationButtons=No, DividingLines=No,
ScrollBars=Neither, MinMaxButtons=None, iar proprietăţii Caption i se atribuie o valoare
corespunzătoare.
Meniul principal (Fig.3.43.) conţine:
• un buton de comandă (PRELUARE DATE) pentru apelarea meniului de încărcare
cu date a tabelelor din baza de date;
• un buton de comandă (ACTUALIZARE DATE) pentru apelarea meniului ce
permite actualizarea datelor din tabelele bazei de date;
• un buton de comandă (SITUAŢII FINALE) pentru deschiderea unei ferestre de
interfaţă prin intermediul căreia utilizatorul poate obţine situaţiile finale cerute;

Fig.3. 43. Meniul principal


Preluarea datelor
Meniul pentru preluarea datelor (Fig. 1.44.) conţine 5 butone de comandă
(FURNIZORI, PLĂŢI, Nota de Receptie si de Constatare de Diferente, MATERIALE,
MATERIALE APROVIZIONATE) care asigură accesul la formularele ce permit
încărcarea cu date a tabelelor corespunzătoare şi un buton de comandă (căreia i s-a asociat
macrocomanda macPreluareDate ce permite revenirea la meniul principal, maximizarea
acestuia şi închiderea formularului fPreluareDate).

Actualizarea datelor

32
Meniul pentru actualizarea de date (Fig. 1.45.) conţine 3 butoane de comandă
(ADĂUGARE, MODIFICARE, ŞTERGERE) care determină deschiderea formularelor ce
constituie interfaţa pentru operaţiile de adăugare, modificare, şi respectiv ştergere, precum şi
un buton de comandă ce permite revenirea la meniul principal (căreia i s-a asociat
macrocomanda macActualizare ce permite revenirea la meniul principal maximizarea
acestuia şi închiderea formularului fACTUALIZARE).

Fig.3. 44 Formularul fPreluareDate Fig.3. 45 Formularul fACTUALIZARE

Meniul ADĂUGARE (Fig. 1.46.) conţine cinci butoane de comandă FURNIZORI,


PLĂŢI; Nota de Recepţie şi Constatare de Diferenţe, MATERIALE, MATERIALE
APROVIZIONATE) care asigură accesul la formularele pentru adăugarea de noi
înregistrări tabelelor corespunzătoare şi 2 butoane de comandă ce permit revenirea la meniul
de actualizare (MENIU ACTUALIZARE) sau la meniul principal (căreia i s-a asociat
macrocomanda macMaxAdaug ce permite revenirea la meniul principal, maximizarea
acestuia şi închiderea formularului fADAUGARE).
Meniul MODIFICARE (Fig. 1.47.) conţine 3 butoane de comandă care asigură
accesul la formularele pentru modificarea datelor din tabelele bazei de date (FURNIZORI,
PLĂŢI, APROVIZIONARE) şi 2 butoane de comandă care permit revenirea la meniul de
actualizare sau la meniul principal (căreia i s-a asociat macrocomanda macfMODIFICARE
ce permite revenirea la meniul principal, maximizarea acestuia şi închiderea formularului
fMODIFICARE).

33
Fig.3. 46 Formularul fADAUGARE Fig.3. 47 Formularul fMODIFICARE

Meniul STERGERE (Fig. 1.48.) conţine 5 butoane de comandă (FURNIZORI,


PLĂŢI, NRCD, MATERIALE, MATERIALE APROVIZIONATE) care asigură accesul
la formularele pentru ştergerea înregistrărilor din tabelele corespunzătoare şi 2 butoane de
comandă ce permit revenirea la meniul de actualizare sau la meniul principal (căreia i s-a
asociat macrocomanda macMaxSterg, ce permite revenirea la meniul principal,
maximizarea acestuia şi închiderea formularului fSTERGERE). La executarea unui clic pe
unul din cele 5 butoane va apare o casetă de dialog în care suntem avertizaţi că vom şterge
anumite înregistrări.
Meniul SITUAŢII FINALE (Fig. 1.49) permite utilizatorului să obţină informaţii
din consultarea bazei de date.

Fig.3. 48 Formularul fSTERGERE Fig.3. 49 Formularul fSITUATII FINALE

Fereastra de interfaţă a formularului fSITUATIIFINALE conţine:


 un buton de comandă Valori receptionate la nivel de factura ce va deschide
interogarea qrycross;

34
 un buton de comandă Valoare aprovizionare al cărui eveniment Click va deschide
formularul fValoare ce permite determinarea valorii materialelor aprovizionate;
 un buton de comandă Datorii furnizori ce va deschide frmDiferenţe;
 un buton de comandă Liste finale al cărui eveniment Click va deschide formularul
fListe;
 un buton de comandă ce permite revenirea la meniul principal (căreia i s-a asociat
macrocomanda macSituatiiFinale).

I.11. Utilizarea aplicaţiei


Din punct de vedere al utilizatorului aplicaţia este simplă, ea poate fi folosită de
operatori ce au cunoştinţe minime în domeniul informatic. În formă finală, aplicaţia va putea
fi lansată prin click pe o icoană aflată pe Desktop-ul calculatorului. Utilizatorul va avea
acces numai meniul aplicaţiei. Dintre opţiunile meniului sistem, rămân active numai cele
necesare pentru utilizarea programului: vizualizare şi tipărire.
Astfel, se deschide formularul frmIntrare (Fig.3.50), pe care s-au plasat două
butoane, unul pentru deschiderea formularului fMeniuPrincipal şi unul pentru ieşirea din
aplicaţie.

Fig.3. 50. Formularul frmIntrare

Apoi, în funcţie de opţiunea utilizatorului se pot face introduceri, adăugări,


modificări, ştergeri de date sau se pot vizualiza diverse situaţii finale.

35
36