UNIVERSITATEA ECOLOGICĂ din BUCUREŞTIFACULTATEA DE INGINERIE MANAGERIALĂ ŞI A
MEDIULUI
PROIECT de DIPLOMĂ
Sistem informatic pentru gestiune Şi facturare
-Information System for products management and invoicing-
Coordonator:
Prof. univ. dr. ing. Cristin BIGAN
Absolvent: BÂTCĂ (Anghel) Mirela
- 2013 -CUPRINS
INTRODUCERE 2
CAPITOLUL 1 CONTABILITEA DE GESTIUNE 31.1. Definiţia şi structura stocurilor de gestiune 31.2. Evaluarea stocurilor 7
1.3.Contabilitatea analitică 16
CAPITOLUL 2 BAZE DE DATE Microsoft ACCESS PENTRU APLICATII DE
GESTIUNE
22
2.1. Noţiuni teoretice generale de baze de date si particularizarea in Access 22
2.2. Utilizarea limbajului SQL 27
2.3. Limbajul de programare Microsoft Visual Basic 30
2.3.1 Interfeţe Visual Basic 32
2.3.2 Formulare 33
2.3.3 Fereastra de cod 33
2.3.4. Caseta cu instrumente 34
2.3.5. Controale 34
2.3.6. Metode 37
2.3.7. Evenimente 38
CAPITOLUL 3 PROGRAM DE GESTIUNE INTRARI, IESIRI, INTOCMIRE SI
EMITERE FACTURI
40
3.1. Cerințele informaționale generale ale temei proiectului 40
3.2. Proiectarea si realizarea structurii BAZEI DE DATE pentru aplicaţia de
gestiune
41
3.2.1 Tabele 42
3.2.2 Legăturile dintre tabele 46
3.3. Utilizarea programării in Visual Basic pentru realizarea interfeţei grafice 48
3.3.1. Module de cod Visual Basic 48
3.3.2. Formulare 50
1
CAPITOLUL 4. CALCULE TEHNICO – ECONOMICE PENTRU EVALUAREA
EFICIENŢEI SISTEMULUI INFORMATIC PROIECTAT SI REALIZAT
65
CAPITOLUL 5 CONCLUZII ASUPRA IMPLEMENTARII SISTEMULUI
INFORMATIC
72
BIBLIOGRAFIE 74
INTRODUCERE
Informaţia şi îndeosebi, informaţia economică este astăzi prezentă în toate
domeniile de activitate, fiind un element indispensabil al progresului.
Realităţile societăţii moderne ne arată că odată cu dezvoltarea economiei de
piaţă şi sporirea gradului de complexitate a acesteia, trebuie să se dezvolte
corespunzător - ca arie, conţinut şi operativitate, şi informaţia economică, pentru ca ea
să poată furniza elementele necesare luării deciziilor, să poată reflecta exact situaţia
patrimonială a unităţilor şi rezultatele activităţii economico-financiară.
Informaţia economică ne ajută să observăm modul de utilizare a resurselor
materiale şi umane, să sesizăm şi să examinăm critic aspectele pozitive, dar şi
deficienţele existente, în vederea măsurilor ce se impun.
Valorificarea deplină a informaţiei economice se poate realiza numai în cadrul
unui sistem informaţional economic, conceput ca un ansamblu a mijloacelor şi a
metodelor de obţinere, stocare şi utilizare a informaţiilor într-un anumit domeniu al
activităţii social-economice.
Programul realizat de mine vine în întâmpinarea dorinţei de valorificare a
informaţiei economice, fiind accesibil unei largi categorii de utilizatori, şi pentru prima
dată aceştia nu mai trebuie să fie contabili, sau să aibă largi cunoştinţe de contabilitate
pentru a ţine o evidentă. Programul este conceput ca un modul, cel de stocuri, în
cadrul unui program mult mai complex care va acoperi în final toate aspectele legate de
capitaluri, imobilizări, datorii şi creanţe, trezoreria, cheltuieli şi venituri.
Ţinând seama de faptul că instrumentul principal de cunoaştere, gestiune şi
control al patrimoniului şi al rezultatelor obţinute de către agenţii economici, este
contabilitatea, acest program vine întrutotul în întâmpinarea tuturor acestor doleanţe.
2
CAPITOLUL 1
CONTABILITEA DE GESTIUNE
1.1 Definiţia şi structura stocurilor de gestiune
Pentru buna desfăşurare a activităţii unei întreprinderi aceasta are nevoie de un
ansamblu de bunuri şi servicii angrenate în procesul de exploatare pentru realizarea şi
asigurarea continuităţii relaţiei: BANI – VALORI sau UTILITĂŢI – BANI. Termenul
median al acestei relaţii este reprezentat de stocurile de valori materiale şi de produse de
care dispune o entitate economică sau pe care le produce.
Stocurile sunt reprezentate de activele circulante aflate în una din următoarele situaţii:
1. sunt deţinute pentru a fi vândute pe parcursul desfăşurării normale a activităţii;
2. sau sunt în curs de producţie în vederea unei vânzări în aceleaşi condiţii ca mai
sus;
3. sau sunt sub formă de materii prime, materiale şi alte consumabile ce urmează a
fi folosite în procesul de producţie sau prestarea de servicii.
O altă abordare consideră stocurile şi producţia în curs de execuţie ca fiind
ansamblul bunurilor şi serviciilor din cadrul unităţii patrimoniale destinate:
- fie a fi vândute în aceeaşi stare sau după prelucrarea lor în procesul
de producţie
3
- fie a fi consumate la prima lor utilizare.
Spre deosebire de imobilizări, stocurile şi producţia în curs de execuţie se
consumă la prima lor utilizare în procesul de producţie, participând la un singur ciclu de
exploatare care, în general, nu poate fi mai mare de un an. Ciclul de exploatare în care
apar stocurile şi producţia în curs de execuţie se referă la fazele circuitului economic al
unităţii productive: aprovizionare – producţie – desfacere. Pe acest traseu stocurile se
modifică îmbrăcând diferite forme, servind anumite scopuri, având anumite proprietăţi şi
particularităţi.
În funcţie de aceste aspecte şi nu numai stocurile pot fi clasificate astfel:
1) După destinaţia lor:
rezerve pentru producţie: materii prime, materiale consumabile producţia,
lucrările şi serviciile în curs de execuţie. Aceste rezerve mai sunt denumite
şi stocuri sau mijloace circulante din sfera producţiei;
rezerve pentru circulaţie: care cuprind: semifabricatele destinate livrării:
produsele finite, mărfurile etc.
2) Sub aspectul gestionării:
stocuri propriu-zise;
producţie în curs de execuţie.
În cadrul stocurilor propriu-zise se disting:
a) materiile prime, care participă direct la fabricarea produselor şi se regăsesc în
produsul finit integral sau parţial, fie în starea lor iniţială, fie transformată.
b) materialele consumabile, care participă sau ajută la procesul de fabricaţie sau de
exploatare fără a se regăsi, de regulă în produsul finit. Cuprind materialele
auxiliare, combustibili, materiale pentru ambalat, piese de schimb, seminţe şi
materiale de plantat, furaje şi alte materiale consumabile.
c) materiale de natura obiectelor de inventar reprezentând bunuri cu o valoare
mai mică decât valoarea prevăzută de lege pentru a fi considerate mijloace fixe
indiferent de durata lor de serviciu, sau au o durata mai mică de un an indiferent de
4
valoarea lor. Sunt asimilate acestora echipamentul de protecţie de lucru,
îmbrăcămintea specială, mecanismele, dispozitivele, verificatoarele (S.D.V.-urile),
aparatele de măsură şi control, matriţele folosite la executarea anumitor produse şi
alte obiecte similare.
d) produse obţinute din procesul de exploatare, destinate în principal livrărilor
către terţi. Ele sunt reprezentate de:
•semifabricate , prin care se înţeleg produsele al căror proces tehnologic a fost
terminat într-o secţie (fază de fabricaţie) şi care trec în continuare în procesul
tehnologic a altei secţii ( faze de fabricaţie ) sau se livrează terţilor;
•produsele finite , adică produsele care au parcurs în întregime fazele
procesului de fabricaţie şi nu mai au nevoie de prelucrări ulterioare în cadrul
unităţii patrimoniale, putând fi depozitate în vederea livrării sau expediate
direct clienţilor;
•produsele reziduale , reprezentând rebuturile, materialele recuperabile sau
deşeurile. Ele sunt valorificate de regulă la preţuri inferioare.
e) mărfurile, respectiv bunurile cumpărate de unitatea patrimonială cu
scopul revânzării lor în aceeaşi stare.
f) ambalajele, cuprind bunurile necesare pentru protecţia produselor şi
mărfurilor pe timpul transportului şi depozitării sau pentru prezentarea lor
comercială. Aici sunt incluse ambalajele refolosibile achiziţionate goale sau o dată
cu materialele şi mărfurile aprovizionate, cele confecţionate în unitate şi cele
restituite de clienţi, etc.
În ceea ce priveşte producţia în curs de execuţie, aceasta cuprinde acele produse
care nu au trecut prin toate fazele de prelucrare prevăzute în procesul tehnologic, precum
şi producţia terminată dar nesupusă probelor şi recepţiei tehnice sau incomplete. Tot în
această categorie sunt evidenţiate lucrările, serviciile şi studiile în curs de execuţie sau
neterminate.
3) După apartenenţa la patrimoniu:
• stocuri aflate în gestiune care fac parte din patrimoniul propriu al unităţii:
5
Ele se găsesc fie în depozitele sau spaţiile proprii (depozite, magazine, magazii,
locuri de producţie) fie se află la terţi (materii şi materiale aflate la terţi, produse
aflate la terţi, mărfuri aflate în custodie sau în consignaţie, etc.)
• stocuri aflate în gestiune, dar care nu fac parte din patrimoniul propriu:
Acestea sunt stocurile primite spre prelucrare sau custodie şi consignaţie. Ele
se înregistrează în conturi extrapatrimoniale deoarece nu sunt considerate valori
proprii. Acest caz este o expresie a influenţei a exprimării pe criterii juridice a
valorilor deţinute.
4) După locul unde se află la un moment dat:
a) stocuri aflate în depozitele întreprinderii,
b) stocuri în curs de aprovizionare,
c) stocuri aflate la terţi pentru prelucrare sau păstrare.
5) Din punctul de vedere al fazelor de exploatare:
• stocuri ce ţin de sfera aprovizionării: materii prime, materiale,
combustibili;
• stocuri ce ţin de sfera producţiei: producţia neterminată, semifabricatele;
• stocuri ce ţin de sfera comercializării: produsele finite, mărfurile.
Activele circulante materiale, sub forma stocurilor şi al producţiei în curs de
execuţie, se află succesiv şi neîntrerupt în diferitele faze ale procesului de producţie şi
comercializare. Această caracteristică a stocurilor, de a participa continuu la stadiile
circuitului economic de a descrie în cadrul exerciţiului mai multe rotaţii, relevă aportul
lor la realizarea cifrei de afaceri şi la valorificarea capitalului.
Astfel, în cazul întreprinderilor productive în faza de aprovizionare, activele
circulante sub forma disponibilităţilor băneşti se transformă în active circulante sub
forma stocurilor de materii prime şi materiale consumabile, în faza de producţie
stocurile de materii prime şi materiale consumabile se transformă în stocuri de
semifabricate şi produse finite şi în faza de desfacere stocurile de semifabricate şi de
6
produse finite sunt vândute clienţilor, în urma decontărilor cu clienţii se transformă în
active circulante sub forma disponibilităţilor băneşti.
1.2 Evaluarea stocurilor
Evaluarea stocurilor are în vedere patru momente principale corespunzătoare
stării lor în patrimoniu:
1) Evaluarea la intrarea în patrimoniul întreprinderii;
2) Evaluarea la inventariere;
3) Evaluarea la bilanţ;
4) Evaluarea la ieşirea din patrimoniul întreprinderii.
1) Evaluarea la intrarea în patrimoniu
La intrarea în patrimoniu, stocurile sunt evaluate în funcţie de modalitatea de
dobândire:
pentru stocurile din cumpărări (materii prime, materiale consumabile,
mărfuri, ambalaje şi alte produse cu titlu oneros), evaluarea se face la cost
de achiziţie, cost standard sau preţ de facturare.
pentru stocurile din producţie proprie (produse finite, semifabricate,
ambalaje, producţia în curs de execuţie şi alte stocuri produse în unitate),
evaluarea se face la costul de producţie efectiv sau standard;
pentru stocurile aduse ca aport înregistrarea se face la valoarea de aport;
pentru stocurile primite cu titlu gratuit evaluarea se va face la valoarea de
utilitate;
pentru stocurile procurate prin schimb evaluarea se face la valoarea justă.
Evaluarea la intrarea în patrimoniu are ca rezultat obţinerea valorilor contabile
aferente stocurilor care reprezintă de asemenea şi costul istoric al acestora.
7
Costul de achiziţie este format din preţul de cumpărare, taxele nerecuperabile
(taxe vamale, accize), cheltuielile de transport-aprovizionare şi alte cheltuieli necesare
pentru punerea în starea de utilitate sau intrarea în gestiune a bunului respectiv. Din acest
cost sunt deduse reducerile comerciale şi alte elemente similare ( ORDIN nr. 94 din 29
ianuarie 2001, cap TRATAMENTE CONTABILE, art. 5.13 alin. a ).
Standardele Internaţionale de Contabilitate (prin IAS 2) consideră această valoare
de intrare ca tratament de bază pentru evidenţa stocurilor procurate cu titlu oneros. În
această situaţie conturile de diferenţe de preţ privind stocurile de această natură nu sunt
utilizate deoarece toate elementele de cost sunt incluse direct în contul de evidenţă a
stocurilor sau în conturile de cheltuieli dacă se foloseşte inventarul intermitent.
Costul sau preţul standard este un preţ prestabilit ce constă în evaluarea şi
înregistrarea stocurilor la preţuri fixe, stabilite anterior pe baza preţurilor medii ale
stocurilor respective realizate în perioada precedentă. Se foloseşte ca şi preţ de
înregistrare în contabilitate cu condiţia evidenţierii distincte a diferenţelor de preţ faţă de
costul de achiziţie.
Diferenţele de preţ pot fi:
favorabile , când preţul standard este mai mare decât costul efectiv şi se înscriu în
roşu
nefavorabile , când preţul standard este mai mic decât costul efectiv şi se înscriu în
negru.
Aceste diferenţe pot cuprinde următoarele :
diferenţa între preţul standard şi preţul propriu-zis de facturare privind
cheltuielile de transport, încărcare, descărcare, recepţie, manipulare,
s.a.m.d., aferente stocurilor cumpărate de la furnizorii interni;
cheltuielile de transport pe parcurs extern, comisioanele, asigurarea,
cheltuielile de tranzit etc. aferente bunurilor provenite din import;
8
taxele vamale şi alte taxe nerecuperabile referitoare la stocurile
importate.
La sfârşitul fiecărei perioade de gestiune este necesar să se efectueze
repartizarea diferențelor de preţ analizate atât asupra bunurilor ieşite din patrimoniu,
cât şi asupra celor aflate în stoc, pe baza de coeficient de repartizare care se determină
cu date cumulate de la începutul anului.Coeficientul de repartizare se calculează prin raportarea soldului iniţial al
diferenţelor de preţ cumulat cu diferenţele aferente intrărilor, înregistrate de la
începutul anului şi până la sfârşitul perioadei de referinţă, la valoarea stocului iniţial,
stabilită în preţuri standard, cumulată cu valoarea intrărilor de bunuri din cadrul
aceleiaşi perioade, de asemenea la prețuri standard. Coeficientul de repartizare astfel
determinat se înmulţeşte cu valoarea bunurilor ieşite din gestiune la preţ de
înregistrare, iar suma rezultată se repartizează şi se înregistrează în contul de
cheltuieli în care s-au reflectat bunurile ieşite din gestiune.
La sfârşitul fiecărei perioade de gestiune sau atunci când este necesar se poate
determina valoarea de intrare a stocului la cost de achiziţie sau de producţie, prin
însumarea algebrică a soldului final al contului de diferenţe de preţ cu soldul final existent
în contul de stoc.
Preţul de facturare al furnizorului este preţul indicat în factura furnizorului.
Când acesta este modificat, la livrările ulterioare, cumpărătorul va considera stocurile
aprovizionate ca sortimente diferite, chiar dacă în esenţă ele sunt aceleaşi. Preţurile
de facturare devin preţuri de înregistrare în contabilitate cu condiţia evidenţierii
distincte a cheltuielilor de transport-aprovizionare, acestea repartizându-se asupra
bunurilor ieşite şi asupra stocurilor cu ajutorul unui coeficient asemănător cu cel folosit
la preţurile standard. Diferenţele de preţ vor fi în toate cazurile nefavorabile şi
reprezintă diferenţa dintre costul de achiziţie şi preţul de facturare al furnizorului
La sfârşitul perioadei, soldul conturilor de diferenţe se cumulează cu soldul
conturilor de stocuri astfel încât aceste conturi să reflecte valoarea stocurilor la costul
de achiziţie.
9
Utilizarea acestui preţ pentru înregistrarea stocurilor cumpărate aduce atingere
definiţiei costului de achiziţie dat de Standardele Internaţionale de Contabilitate, preluată
şi în Ordinul 94 din 29 ianuarie 2001 ( articolul 5.13 alineatul a). Această definiţie cere
includerea cheltuielilor de transport-aprovizionare pe seama conturilor de stocuri pentru
care se efectuează. Conturile de diferenţe de preţ trebuie utilizate numai pentru
consemnarea diferenţelor dintre costul standard şi cel efectiv.
Costul de producţie efectiv aferent stocurilor produse de unitate include:
1. costurile cumpărării sau achiziţiei;
2. costurile de prelucrare;
3. alte costuri;
Costurile cumpărării cuprind preţul de cumpărare, taxe de import şi alte taxe (cu
excepţia acelora pe care întreprinderea le poate recupera de la autorităţile fiscale), costuri
de transport, manipulare şi alte costuri care pot fi atribuite direct achiziţiei de produse
finite, materiale şi servicii. Reducerile comerciale, rabaturile şi alte elemente similare
sunt deduse pentru a determina o valoare cât mai reală;
Costurile de prelucrare includ costurile direct aferente unităţilor produse, cum ar
fi costurile cu manopera directă. De asemenea, ele includ şi alocarea sistematică a regiei
de producţie, fixă şi variabilă, generată de transformarea materialelor în produse finite.
Regia fixă de producţie constă în acele costuri indirecte de producţie care rămân relativ
constante, indiferent de volumul producţiei, cum sunt: amortizarea, întreţinerea
secţiilor şi utilajelor, precum şi costurile cu conducerea şi administrarea secţiilor. Regia
variabilă de producţie constă în acele costuri indirecte de producţie care variază direct
proporţional sau aproape direct proporţional cu volumul producţiei, cum sunt costurile
indirecte cu materiile prime şi materialele şi cu forţa de muncă.
Alocarea regiei fixe de producţie asupra costurilor de prelucrare se face pe baza
capacităţii normale de producţie. Capacitatea normală de producţie este producţia
estimată a fi obţinută, în medie, de-a lungul unui anumit număr de perioade sau sezoane,
în condiţii normale, având în vedere şi pierderea de capacitate rezultată din întreţinerea
planificată a echipamentului. Nivelul actual de producţie poate fi folosit dacă se
10
consideră că acesta aproximează capacitatea normală. Valoarea regiei fixe alocate
fiecărei unităţi produse nu se majorează ca urmare a obţinerii unei producţii scăzute sau a
neutilizării unor active. Regia nealocată este recunoscută drept cheltuială în perioada în
care a apărut, în exerciţiile în care se înregistrează o producţie neobişnuit (anormal) de
mare, valoarea regiei fixe alocate fiecărei unităţi produse este diminuată, astfel încât
stocurile să nu fie evaluate la o valoare mai mare decât costul lor. Regia variabilă este
alocată fiecărei unităţi produse pe baza folosirii reale a facilităţilor productive.
Alte costuri se includ în costul stocurilor numai în măsura în care reprezintă
costuri suportate pentru a aduce stocurile în forma şi în locul în care se găsesc în prezent.
De exemplu, poate fi adecvată includerea în costul stocurilor, a regiilor generale sau
costul proiectării produselor destinate anumitor clienţi.
Pe lângă aceste costuri care se regăsesc direct sau indirect în costurile de
producţie efective societatea mai efectuează şi alte cheltuieli cum ar fi cele legate de
sectorul administrativ sau de desfacere. Acestea nu pot fi incluse în costurile produselor
ci sunt considerate costuri ale perioadei şi vor fi acoperite pe seama veniturilor obţinute
fără a putea fi imputate acestora.
În determinarea costurilor produselor nu îşi găsesc locul cheltuielile privind
consumurile supranormale de: materii prime şi materiale, manoperă sau utilităţi, precum
şi cheltuielile suplimentare privind stocarea produselor cu excepţia situaţiei în care
vizează depozitarea între fazele unui proces de fabricaţie. Acestea sunt excluse pe
considerentul că nu au fost angajate raţional pentru obţinerea produselor finite şi denotă o
slabă gestionare a resurselor şi utilităţilor întreprinderii. Prin urmare ele sunt suportate pe
seama costurilor perioadei.
Utilizarea costului de producţie efectiv prezintă dezavantajul că nu este cunoscut
decât la sfârşitul lunii deoarece numai în acel moment sunt colectate toate documentele
privind cheltuielile lunii care trebuiesc imputate asupra costurilor produselor realizate.
Acest cost poate fi utilizat cu uşurinţă la evaluarea producţiei în curs de execuţie
şi a semifabricatelor deoarece valoarea acestora se determină la sfârşitul lunii prin
inventariere.
11
Costul de producţie standard reprezintă o alternativă practică la dezavantajul
generat de costul de producţie efectiv. Acest cost de înregistrare presupune ca în timpul
lunii, producţia obţinută să fie înregistrată în contabilitate la un cost mediu stabilit în
funcţie de evoluţiile costurilor în perioadele anterioare. Costul standard se determină
având în vedere premisele unor consumuri normale de materii prime şi materiale,
manoperă şi alte utilităţi precum şi de capacitatea normală de producţie şi eficienţa
acesteia.
La sfârşitul lunii are loc regularizarea costului standard pe seama diferenţelor de
preţ calculate, obţinând astfel costul efectiv al produselor obţinute. Tot în acest moment
are loc şi alocarea diferenţelor de preţ aferente produselor vândute în cursul lunii.
Valoarea de aport a stocurilor aduse ca şi contribuţie la capital se determină în
funcţie de preţul pieţei utilităţii, generarea de beneficii economice viitoare , starea şi
locul unde se află.
Valoarea de utilitate pentru bunurile obţinute cu titlu gratuit este determinată pe
baza preţului pieţei, stării şi amplasării acestora. Această valoare exprimă dimensiunea
preţului pe care un potenţial client l-ar accepta în funcţie de utilitatea bunului pentru
unitatea respectivă.
Valoarea justă pentru bunurile obţinute prin schimb cu alte bunuri este suma la
care poate fi tranzacţionat un activ sau decontată o datorie, de bunăvoie, între părţi aflate
în cunoştinţă de cauză, preţul fiind determinat obiectiv.
2) Evaluarea stocurilor cu ocazia inventarierii
Inventarierea periodică a stocurilor se face pentru cel puţin două scopuri:
1. verificarea realităţii stocurilor scriptice, reflectate de contabilitate, cu
cele faptice, constatate la inventariere, ambele evaluate la preţurile de intrare
reflectate în contabilitate.
12
2. determinarea valorilor de inventar a stocurilor. Aceasta se mai
numeşte şi valoare actuală sau valoare de utilitate; determinată în funcţie de
preţul pieţei şi utilitatea bunului pentru întreprindere.
Valoarea de utilitate sau preţul pieţei, ca bază de evaluare a bunurilor la
inventariere, se identifică, în principal, în funcţie de destinaţia lor:
bunurile destinate vânzării sunt evaluate la valoarea netă de
realizare care se calculează ca diferenţă între preţul de vânzare estimat şi
eventualele cheltuieli rămase de efectuat pentru comercializarea lor
(transport, garanţii, etc.);
semifabricatele şi producţia în curs de execuţie se evaluează la
valoarea componentelor materiale încorporate la care se adaugă costurile
stadiilor de prelucrare tehnologică parcurse; materiile prime şi materialele consumabile destinate utilizării în
exploatare se evaluează la costul lor de înlocuire (reaprovizionare). La
stabilirea valorii de inventar se va aplica principiul prudenţei, potrivit căruia
nu este admisă supraevaluarea elementelor de activ şi a veniturilor, respectiv
subevaluarea elementelor de pasiv şi a cheltuielilor. În acest sens:
dacă valoarea de inventar este mai mare decât costul istoric; diferenţa
nu este consemnată în contabilitate;
dacă valoarea de inventar este mai mica decât costul istoric; diferenţa
este consemnată pe seama constituirii unui provizion, dacă deprecierea
este reversibilă, fără a produce modificări directe costului istoric.
3) Evaluarea cu ocazia întocmirii bilanţului
Aceasta se face la valoarea de intrare, respectiv valoarea contabilă pusă de acord
cu rezultatele evaluărilor la inventariere. În acest scop valoarea de intrare se compară cu
valoarea de utilitate, reţinându-se cea mai mică dintre cele două mărimi după regula de
prudenţă „lower of cost or market” – cea mai mică valoare dintre cost şi preţul pieţei.
13
Pot interveni următoarele cazuri:
1. diferenţe constatate în plus între valoarea de inventar şi valoarea de
intrare; acestea nu se înregistrează în contabilitate, stocurile menţinându-
se la valoarea lor de intrare;
2. diferenţe constatate în minus între valoarea de inventar şi valoarea de
intrare a stocurilor; acestea se înregistrează pe seama provizioanelor
pentru depreciere dacă aceasta este reversibilă. În urma acestei situaţii
stocurile îşi păstrează valorile de intrare dar sunt înscrise în situaţiile
financiare la valoarea realizabilă netă.
4) Evaluarea stocurilor la ieşirea din patrimoniu
La ieşirea din patrimoniu sau darea în consum, stocurile sunt evaluate şi se
înregistrează scăderea acestora din gestiune la valoarea lor de intrare. În condiţiile în
care pe parcursul desfăşurării activităţii, aceleaşi feluri de bunuri se procură la preţuri
diferite, pentru evaluarea cantităţii de stocuri ieşite sau consumate valoarea de intrare
prezintă o utilitate redusă şi necesită un volum de muncă foarte mare pentru identificarea
valorilor pentru diferitele loturi vândute sau consumate. Valoarea de intrare poate fi
folosită în bune condiţii pentru stocurile identificabile sau nefungibile.
Pentru stocurile fungibile există mai multe metode de evaluare la scoaterea din
gestiune:
o Metoda costului mediu ponderat (CMP);
o Metoda prima intrare – prima ieşire (FIFO);
o Metoda ultima intrare – prima ieşire (LIFO);
o Metoda proxima intrare – prima ieşire (NIFO);
o Metoda costului standard.
Aplicarea uneia dintre metodele de evaluare a ieşirilor din stoc trebuie analizată
în funcţie de fenomenul de mişcarea preţurilor şi politica contabilă a firmei deoarece
aceleaşi ieşiri, evaluate după metode diferite, conduc la valori diferite ale rezultatelor şi
mărimii stocurilor.
14
Metoda aleasă trebuie aplicată cu consecvenţă pentru elemente similare stocurilor
şi de la un exerciţiu financiar la altul. Daca în situaţii excepţionale administratorii decid
să schimbe metoda pentru un anumit element de stocuri sau active fungibile, trebuie să se
prezinte următoarele informaţii:
1. motivul schimbării metodei;
2. efectele noii situaţii asupra rezultatului exerciţiului.Reglementările naţionale permit utilizarea metodelor: CMP, FIFO şi LIFO.
Metoda costului mediu ponderat CMP
Costul mediu ponderat se calculează ca raport între valoarea totală a stocului
iniţial plus valoarea totală a intrărilor şi cantitatea iniţială plus cantităţile intrate. Preţul
mediu obţinut este înmulţit cu numărul de unităţi consumate sau vândute obţinându-se
valoarea de scoatere din gestiune a acestora.
Această metodă poate fi aplicată în două variante:
1. actualizarea costului mediu ponderat după fiecare intrare;
2. actualizarea periodică a costului mediu ponderat (lunar).
Metoda CMP este indicată a fi utilizată în condiţii de stabilitate a preţurilor
deoarece astfel se obţin preţuri medii apropiate de valorile de piaţă.
Metoda prima intrare – prima ieşire FIFO
Potrivit acestei metode, bunurile ieşite din gestiune se evaluează în funcţie de
costul de achiziţie al primului lot intrat, respectiv al articolului cel mai vechi în stoc. Pe
măsura epuizării lotului, bunurile ieşite din gestiune se evaluează la costul de achiziţie
sau de producţie al lotului următor, în ordine cronologică. În consecinţă, stocul final este
format din elemente evaluate la valorile cele mai recente.
Această metodă este indicată a fi utilizată în condiţiile creşterii preţurilor pentru
că evită stocarea loturilor ce au costuri de achiziţie mai mici în raport cu cele curente.
Astfel se poate evita capitalizarea inflaţiei prin înregistrarea unor cheltuieli mai mici cu
descărcarea gestiunii raportate la venituri actualizate.
Metoda ultima intrare – prima ieşire LIFO
Metoda presupune valorificarea ieşirilor de stocuri din gestiune la costul de
15
achiziţie sau producţie al ultimului lot. Pe măsura epuizării succesive a fiecărui lot,
bunurile se evaluează la costul de achiziţie al lotului anterior. Stocul final este format din
elemente evaluate la valorile cele mai vechi. În perioadele de creştere a preţurilor,
aplicarea acestei metode are drept consecinţă evaluarea consumurilor la valoarea
maximă, beneficiul şi stocul final fiind prezentate la valori minime. În situaţia inversă, a
reducerii preţurilor, efectele aplicării metodei LIFO sunt diminuarea valorii
consumurilor, stocul final şi beneficiile fiind prezentate la valori maxime.
1.3. Contabilitatea analitică
Asigurarea integrităţii stocurilor prin cunoaşterea în detaliu a evoluţiei
intrărilor, ieşirilor şi existenţelor la un moment dat impune organizarea, la unităţile
mari a unei contabilităţi analitice a stocurilor. Unităţile mici si mijlocii care folosesc
metoda inventarelor intermitente pentru contabilitatea sintetică a stocurilor nu au
nevoie de organizarea unei contabilităţi analitice a stocurilor.
Teoria şi practica financiar-contabilă ne oferă numeroase variante de
organizare a evidenţei analitice şi operative a stocurilor, cum ar fi:
metoda cantitativ - valorică (pe fişe de cont analitic)
metoda operativ-contabilă (pe solduri);
metoda global-valorică.
Alegerea metodei sau a combinaţiei acestora este o problemă de opţiune a
conducerii, o problemă de management contabil. Decizia trebuie să ţină cont de
mărimea unităţii, posibilităţi, personal, necesităţi etc. Se consideră că, organizarea
contabilităţii analitice a stocurilor trebuie să răspundă următoarelor probleme:
• îndeplinirea obligaţiilor contractuale de aprovizionare şi desfacere;
• existenţa în cantităţi suficiente a sortimentelor de materiale necesare
întreţinerii continuităţii producţiei, sau a mărfurilor solicitate de clienţi;
• depistarea imobilizărilor de stocuri fără mişcare, cu mişcare lentă,
excedentare, nesolicitate de clienţi, asezoniere, degradate sau cu termene de
garanţie expirate;
• respectarea legilor generale de consemnare în documente a intrărilor şi
16
ieşirilor, de gestionare a elementelor patrimoniale; inventarierea periodică şi
controlul faptic al stocurilor, asigurându-se astfel încadrarea într-o disciplină
economică strict necesară funcţionării agenţilor economici în condiţii de
rentabilitate si eficienţă.
Metoda cantitativ-valorică (pe fişe de cont analitic)
Pentru materii prime, materiale consumabile, obiecte de inventar în depozit,
baracamente, semifabricate, produse finite, produse reziduale, mărfuri, animale şi
ambalaje, constă în ţinerea evidenţei cantitative pe feluri de stocuri în cadrul fiecărei
gestiuni, iar în contabilitate a celei cantitativ-valorice. Conturile sintetice ce reflectă
stocurile de valori materiale se desfăşoară în analitic pe gestiuni. Verificarea exactităţii
înregistrărilor din evidenţa de la locurile de depozitare şi contabilitate se efectuează
prin punctajul periodic dintre cantităţile operate în fişele de magazie şi cele din
fişele de cont analitic din contabilitate.
În metoda cantitativ-valorică (pe fişe de cont analitic) se folosesc următoarele
formulare tipizate comune:
- Fişa de magazie;
- Fişa de cont analitic pentru valori materiale;
- Fişa de cont pentru operaţii diverse;
- Borderou de predare a documentelor;
- Balanţa analitică a valorilor materiale.
Evidenţa cantitativă a materialelor se ţine la gestiune cu ajutorul fişelor de
magazie care se aranjează în ordinea fişelor de cont analitic din contabilitate. În fişele
de magazie înregistrările se fac zilnic de gestionar sau persoana desemnată. În
contabilitate, documentele primite se înregistrează în fişele de cont analitic pentru
valori materiale şi se stabilesc soldurile şi stocurile, după ce în prealabil s-a verificat
modul de emitere şi completare a documentelor privind mişcarea materialelor. De
asemenea, pe baza aceloraşi documente se întocmesc situaţiile centralizatoare
privind intrările şi ieşirile de materiale pentru înregistrare în contabilitatea sintetică.
17
Controlul înregistrărilor din conturile sintetice şi cele analitice ale stocurilor se
asigură lunar, cu ajutorul balanţei de verificare analitice , întocmită separat pentru
fiecare cont de stoc.
În vederea întocmirii balanţei de verificare este necesar ca, lunar, să se efectueze
controlul asupra concordanţei stocurilor scriptice din fişele de magazie cu cele
faptice din fişele de cont analitic pentru valori materiale.
Metoda cantitativ-valorică de evidenţă analitică a produselor finite si produselor
reziduale se aplică în acelaşi mod ca şi pentru celelalte stocuri, cu următoarele
particularităţi:
atât intrările cât şi ieşirile valorice pot fi înregistrate în fişele de cont analitic
pentru stocuri numai lunar, prin înmulţirea cantităţilor totale de produse
finite şi produse reziduale cu preţurile unitare respective, fără a mai fi necesară
evaluarea cantităţilor de produse în documente;
pentru controlul înregistrărilor din contabilitatea sintetică şi cea analitică a
produselor finite, în locul balanţei de verificare se poate folosi registrul
stocurilor.
Metoda operativ-contabilă (pe solduri)
Presupune ţinerea în cadrul fiecărei gestiuni, a evidenţei cantitative a
valorilor materiale, pe feluri, cu ajutorul fişelor de magazie, iar în contabilitate a
evidentei valorice pe conturi de materiale, desfăşurate pe gestiuni, iar în cadrul
acestora, pe grupe sau subgrupe de materiale, după caz.
Controlul exactităţii înregistrărilor din evidenţa gestiunilor şi din contabilitate
se asigură lunar prin evaluarea stocurilor cantitative, transcrise din fişele de magazie în
registrul stocurilor.
În metoda operativ-contabilă (pe solduri) se folosesc următoarele formulare tipizate
comune:
- Fişă de magazie
- Fişă de cont pentru operaţii diverse
- Borderou de predare a documentelor
- Registrul stocurilor
18
Fişele de magazie servesc pentru evidenţa cantitativă, pe feluri de stocuri, la
locul de depozitare, iar în contabilitate, pentru controlul operaţiilor înregistrate de
gestionar sau persoana desemnată, pentru preluarea în registrul stocurilor a cantităţilor
aflate în stoc, precum şi pentru calculul valorii bunurilor existente în stoc la sfârşitul
lunii, în scopul confruntării cu datele din contabilitatea sintetică.
La gestiune, fişele de magazie se ţin în ordinea în care sunt înscrise materialele în
registrul stocurilor, în aceste fişe cantităţile se înregistrează zilnic de gestionar sau
persoana desemnată, pe baza documentelor de intrare (factură, aviz de însoţire a
mărfii, notă de recepţie şi constatare de diferenţe etc.) şi a documentelor de ieşire (bon
de consum-individual şi colectiv, fişa limită-individuală şi colectivă, aviz de însoţire a
mărfii, factură etc.), poziţie cu poziţie.
Documentele de intrare şi de ieşire a materialelor vor fi puse la dispoziţia
persoanei din compartimentul financiar-contabil desemnată pentru evidenţa
materialelor, care răspunde de verificarea documentelor şi controlul operaţiilor
efectuate în fişele de magazie.
Preluarea documentelor de către persoana desemnată se face după ce se verifică
emiterea şi completarea corectă a documentelor de intrare şi de ieşire a valorilor
materiale, înregistrarea corectă a acestora în fişele de magazie şi stabilirea exactă a
stocului scriptic în aceste fişe. Erorile constatate în evidenţa gestiunilor se corectează în
prezenţa persoanei care răspunde de înregistrările efectuate în fişele de magazie, iar
abaterile de la regulile de întocmire si utilizare a documentelor se aduc la cunoştinţa
conducătorului compartimentului financiar-contabil sau a persoanei desemnate să
conducă contabilitatea, după caz, pentru stabilirea măsurilor care se impun.
Semnătura persoanei desemnate pentru evidenţa stocurilor în fişele de magazie
constituie dovada verificării înregistrărilor efectuate şi preluării documentelor de
intrare şi de ieşire a materialelor.
Preluarea documentelor privind mişcarea stocurilor se face pe baza borderoului
de predare a documentelor.
În contabilitate, documentele privind mişcarea stocurilor se grupează pe
gestiuni, surse de aprovizionare ( de la furnizori, din prelucrare la terţi, consum intern
19
etc. ) şi în cadrul acestora, pe conturi de materiale şi gestiuni, iar în cadrul gestiunilor
pe grupe sau subgrupe de materiale, după caz.
Intrările sau ieşirile de bunuri de natura stocurilor se înregistrează în
contabilitatea sintetică şi analitică, fie direct pe baza acestor documente, fie cu ajutorul
unor situaţii întocmite zilnic sau la alte perioade stabilite de unitate prin centralizarea
datelor din documentele respective.
Verificarea înregistrărilor efectuate în conturile de stocuri şi fişele de magazie
se face cu ajutorul registrului stocurilor. În acest scop, în registrul stocurilor la sfârşitul
fiecărei luni se înscriu pe feluri de stocuri, grupate pe magazii ( depozite ), conturi
grupe, eventual subgrupe, stocurile cantitative din fişele de magazie, se calculează
valoarea cantităţilor aflate în stoc pe baza preţurilor de înregistrare şi se totalizează
valoarea acestora pe pagini ale registrului stocurilor , pe subgrupe de materiale, grupe
de stocuri, conturi şi magazii ( depozite ).
În măsura în care nu se constată diferenţe între valoarea cantităţilor în stoc din
fişele de magazie şi soldurile conturilor de materiale din contabilitate, registrul
stocurilor se poate întocmi trimestrial.
În cazul în care se constată că există frecvente diferenţe între soldurile
conturilor de stocuri din registrul stocurilor şi cele din contabilitate, provenind din
înregistrarea operaţiilor, evaluarea cantităţilor de stocuri din documentele de intrare şi
de ieşire, prelucrarea acestora, etc. diferenţele respective pot fi localizate printr-o nouă
centralizare a intrărilor şi ieşirilor valorice de materiale, pe grupe sau feluri de
materiale şi confruntarea totalurilor obţinute cu datele din registrul stocurilor.
Pentru produsele finite şi produsele reziduale, metoda operativ-contabilă (pe
solduri) se aplică în acelaşi mod ca şi pentru stocuri de materii prime şi materiale
consumabile, în acest caz evidenţa cantitativă pe feluri de produse se ţine la magazie
(depozit ) cu ajutorul fişelor de magazie, iar evidenţa valorică se ţine în contabilitate
cu ajutorul contului sintetic de produse finite, desfăşurat în analitic pe gestiuni, în care
înregistrările se fac pe baza datelor obţinute prin centralizarea zilnică a documentelor
de mişcare a produselor respective.
Verificarea înregistrărilor la sfârşitul lunii se face de asemenea, cu ajutorul
registrului stocurilor în care se stabilesc soldurile pe feluri de produse finite şi pe total
20
cont prin transcrierea cantităţilor în stoc din fişele de magazie şi evaluarea acestora pe
baza preţurilor de înregistrare.
După opinia unor specialişti în domeniu, metoda operativ-contabilă (pe
solduri) este mai eficientă în practică decât celelalte metode de conducere a
contabilităţii analitice a stocurilor, prezentând unele avantaje, cum ar fi:
1. registrul stocurilor scuteşte unităţile de a mai conduce fişele contabile
analitice pentru valorile materiale;
2. registrul stocurilor înlocuieşte balanţele analitice lunare de verificare care
se întocmesc în condiţiile aplicării metodei cantitativ-valorice (pe fişe
contabil-analitice);
3. contribuie la apărarea integrităţii valorilor din gestiune, prin urmărirea atentă,
de către contabilitate, a operaţiunilor înregistrate în fişele de magazie de
gestionar.
Metoda global - valorică se aplică pentru evidenţa mărfurilor şi
ambalajelor aflate în unităţile de desfacere cu amănuntul (magazine,
restaurante, bufete etc.). Potrivit acestei metode, contabilitatea analitică a
mărfurilor şi ambalajelor se ţine global-valoric, atât la gestiune, cât şi în
contabilitate, iar controlul concordanţei înregistrărilor din evidenţa gestiunii şi
din contabilitate se efectuează numai valoric la perioade stabilite de unitate.
Raportul de gestiune se completează pe baza documentelor de intrare şi de
ieşire a mărfurilor şi ambalajelor şi de depunere a numeralului din vânzare, iar în fişele
valorice (ţinute pe gestiuni în cadrul conturilor de mărfuri şi ambalaje din
contabilitate) înregistrările se fac pe baza aceloraşi documente.
Metoda global-valorică se foloseşte, de asemenea, pentru evidenţa rechizitelor
de birou, imprimatelor, materialelor destinate ambalării şi pentru evidenţa cărţilor
tehnice. În acest caz evidenţa cantitativă se ţine pe feluri de rechizite, imprimate,
materiale pentru ambalare şi cărţi tehnice, la locurile de gestionare, cu ajutorul fişelor
de magazie, care se completează de gestionar sau de persoana desemnată.
Evidenţa valorică a mişcărilor se ţine în contabilitate, pe gestiuni, în cadrul
contului de materiale consumabile, cu ajutorul fişelor de cont pentru operaţii diverse,
înregistrările în fişele de magazie se fac pe baza documentelor de intrare şi de ieşire a
21
materialelor consumabile respective şi se preiau de către contabilitatea stocurilor, în
prealabil făcându-se verificarea înregistrărilor din fişele de magazie. Prin centralizarea
datelor din documentele respective se asigură înregistrarea acestora, atât în fişele
valorice pe gestiuni, cât şi în conturile sintetice de stocuri.
CAPITOLUL 2
BAZE DE DATE
Microsoft ACCESS PENTRU APLICATII DE
GESTIUNE
2.1. Noţiuni teoretice generale de baze de date si
particularizarea in Access
O bază de date conţine toate informaţiile necesare despre obiectele ce intervin
într-o mulţime de aplicaţii, relaţiile logice între aceste informaţii şi tehnicile de prelucrare
corespunzătoare. În bazele de date are loc o integrarea a datelor, în sensul că mai multe
fişiere sunt privite în ansamblu, eliminându-se pe cât posibil informaţiile redundante. De
asemenea se permite accesul simultan la aceleaşi date, situate în acelaşi loc sau distribuite
spaţial, a mai multor persoane de pregătiri diferite, fiecare cu stilul personal de lucru.
Sistemul 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 se
numeşte sistem de gestiune a bazelor de date (SGBD). Un SGBD dă posibilitatea
utilizatorului să aibă acces la date folosind un limbaj de nivel înalt, apropiat de modul
obişnuit de exprimare, pentru a obţine informaţii, utilizatorul făcând abstracţie de
algoritmii aplicaţi pentru selecţionarea datelor implicate şi a modului de memorare a lor.
SGBD-ul este o interfaţă între utilizatori şi sistemul de operare.
22
Un model relaţional de baze de date cuprinde trei componente principale şi anume
structura datelor prin definirea unor domenii (valori atomice) şi a relaţiilor, integritatea
datelor prin impunerea unor restricţii sau a unor constrângeri, şi prelucrarea datelor prin
operaţii din algebra relaţională sau calculul relaţional.
Obiecte Access
Microsoft Access este un sistem interactiv computerizat pentru gestiunea bazelor
de date relaţionale, conceput să funcţioneze în mediul Microsoft Windows. La fel ca şi în
alte SGBD-uri, Access oferă posibilitatea de a organiza, memora, corela şi de a regăsi
datele de care dispune sistemul.
Baza de date Access este formată din tabele, interogări, formulare, rapoarte şi alte
obiecte, care se memorează în acelaşi fişier cu extensia MDB. Datorită faptului că toate
obiectele sunt stocate în acelaşi loc, se poate vorbi de o mare uşurinţă şi viteză în
căutarea, analiza, urmărirea şi protecţia datelor.
Realizarea unei baze de date Access
Etapele ce trebuie parcurse pentru realizarea aplicaţiei sunt:
Analiza problemei de rezolvat. Etapa se finalizează prin realizarea unui model al
sistemului studiat, de exemplu: modelul relaţional obţinut prin transformarea modelului
entitate-relaţie şi presupune:
-studierea scopului şi a domeniului de interes (tema);
-identificarea entităţilor sistemului şi precizarea legăturilor dintre acestea;
-precizarea datelor de intrare, a prelucrărilor necesare şi a prezentării rezultatelor.
Proiectarea , când se definesc proprietăţile obiectelor, evenimentele la care trebuie
să răspundă aplicaţia şi felul în care vor răspunde obiectele la diferitele
evenimente, cu subetapele:
-proiectarea obiectelor bazei de date;
-proiectarea interfeţei aplicaţie-utilizatori.
Tabele
23
Tabela este obiectul din baza de date destinat păstrării datelor privind un anumit
subiect. Tabelele sunt identificate printr-un nume; numele unei tabele este unic în cadrul
bazei de date, poate conţine spaţii, dar nu pot depăşi 64 de caractere alfanumerice.
Tabela este bidimensională, pe linii având informaţii despre fiecare exemplar al
subiectului respectiv, iar pe coloane atributele. O tabelă Access conţine două tipuri de
informaţii: structura şi datele.
Prin urmare a crea o tabelă înseamnă a-i defini structura şi a o încărca cu date.
Structura cuprinde informaţii despre numărul, tipul de date şi proprietăţile câmpurilor,
câmpurile cheii primare, câmpurile indexate şi tipul indexării.
Proprietăţile sunt stabilite în faza de proiectare a structurii şi pot fi vizualizate în
fereastra pentru proprietăţi. O tabelă poate fi creată prin definirea tabelelor de către
utilizator, prin definirea structurii, stabilirea câmpurilor, a tipurilor de date, a
proprietăţilor şi a cheii primare precum şi încărcarea cu date.
Descrierea structurii tabelelor presupune introducerea câmpurilor pentru fiecare
câmp introducându-se numele acestuia, tipul de dată şi opţional o descriere.
Câmpurile reprezintă obiecte din tabelă. Stabilirea proprietăţilor pentru fiecare
câmp diferă in funcţie de tipul datelor.
Crearea Relatiilor între tabele
Într-o bază de date relaţională tabelele sunt corelate. Aceasta înseamnă că datele
memorate în tabele diferite vor putea fi asociate corect atunci când din baza de date se
solicită anumite informaţii.
Access fiind un SGBD relaţional memorează datele în tabele diferite, dar permite
corelarea lor, realizând asocierea după criterii logice şi de înrudire a datelor. Această
asociere este posibilă dacă în faza de definire a structurii tabelelor sunt precizate tipurile
de legături permise.
Câmpurile comune prin care se face corelarea sunt cheia primară pentru o tabelă
şi respectiv cheie externă pentru tabela asociată.
Tipuri de legături
-relaţia “unu la unu” (1 1), numită şi relaţie biunivocă
24
Se caracterizează prin aceea că unei înregistrări dintr-o tabelă îi corespunde o
înregistrare din cealaltă tabelă. Acest tip de corelaţie se poate crea atunci când tabelele au
subiecte diferite cu chei primare diferite.
-relaţia “unu la mai mulţi” (1 n)
Se caracterizează prin aceea că unei înregistrări dintr-o tabelă îi corespund mai
multe înregistrări din cealaltă tabelă.
-relaţia “mai mulţi la mai mulţi” (m n)
Se caracterizează prin aceea că unei înregistrări din prima tabelă îi corespund 0, 1
sau mai multe înregistrări iar unei înregistrări din cea de a doua tabelă îi corespund 0, 1
sau mai multe înregistrări din prima tabelă. În cazul acestei legături se va adăuga o tabelă
suplimentară prin care se sparge corelaţia m la n în două legături 1 la n. Această tabelă
suplimentară va avea drept câmpuri, cheile primare ale tabelelor aflate în corelaţia m la n.
Sistemul permite precizarea tipului de legătură (join).Figura 2.1 – Fereastra Join Properties
Opţiunea 1 reprezintă INNER JOIN (asocieri interne) sau asocieri echivalente
(EQUI JOIN), sunt cele mai utilizate tipuri de asocieri şi combină asocierile din două
tabele când sunt identice valorile dintr-un câmp comun celor două tabele. De regulă,
asocierea este de tip “unu la mai mulţi”, bazându-se pe câmpul cheie principală dintr-un
tabel şi pe un câmp cheie externă din cealaltă tabelă. Asocierile interne afişează toate
înregistrările care au corespondente în cealaltă tabelă.
Opţiunea 2 reprezintă LEFT JOIN (asocieri externe la stânga ) şi afişează toate
înregistrările din tabelul din partea “unu” a relaţiei, care conţine, cheia principală unică,
25
indiferent dacă există înregistrări corespondente în tabela din partea “mai mulţi“ a
relaţiei.
Opţiunea 3 reprezintă RIGHT JOIN (asocieri externe la dreapta ) şi afişează toate
înregistrările din tabelul din partea “mai mulţi” a relaţiei şi numai acele înregistrări din
tabela din partea “unu” a relaţiei pentru care câmpurile comune sunt egale.
Asigurarea integrităţii referenţiale
Access poate să impună regulile de integritate reverențială atunci când sunt
îndeplinite următoarele condiţii:
-câmpul asociat din primul tabel este cheie primară sau are un index unic;
-câmpurile asociate au acelaşi tip de date.
Regulile impuse de Access pentru asigurarea integrităţii referenţiale pot fi
rezumate astfel:
-când adăugăm înregistrările într-un tabel corelat şi introducem o valoare în
câmpul pe care se face asocierea , trebuie să existe deja o înregistrare cu această valoare
în tabelul principal;
-nu se poate elimina o înregistrare din tabelul principal atâta timp cât mai există
înregistrări asociate acestuia în tabelul corelat.Figura 2.2 – Fereastra Relationships
Opţiunile posibile pentru stabilirea acestor reguli sunt:
-Cascade Update Related Fields (actualizare în cascadă a câmpurilor asociate).
Efectul este că ori de câte ori se modifică valoarea cheii primare a unei înregistrări din
26
tabelul principal, Access va modifica automat valorile din câmpurile asociate ale
înregistrărilor corespunzătoare din tabelul corelat.
-Cascade Delete Related Records (eliminarea în cascadă a înregistrărilor). Efectul
este că ori de câte ori vom elimina înregistrări din primul tabel, Access va elimina
automat înregistrările asociate din tabelul corelat.
Indexarea tabelelor
Indecşii sunt fişiere complementare tabelelor care ajută la identificarea directă a
uneia sau mai multor înregistrări dintr-o tabelă.
După creare, indecşii sunt salvaţi împreună cu tabelul şi sunt actualizaţi în mod
automat la introducerea datelor în tabele. Vizualizarea indecşilor nu este posibilă.
De exemplu când se stabileşte un câmp cheie primară, Access realizează automat
un index al câmpului respectiv. Acest index nu acceptă valori duplicate. Dacă se
construiesc indecşi pe alte câmpuri (care nu sunt chei primare), aceşti indecşi pot conţine
valori duplicate.
2.2. Utilizarea limbajului SQL
Prin utilizarea comenzilor, a predicatelor, a clauzelor, a operatorilor, a funcţiilor
globale şi a asocierilor, limbajul structurat de interogare SQL (Structured Query
Language) poate compune cu succes o interogare care înapoiază un anumit domeniu de
câmpuri.
SQL este un limbaj corelat îndeaproape de Microsoft Jet Engine şi Data Access
Object (DAO). Prin indicarea relaţiilor între tabele şi alte interogări dintr-o bază de date
prin intermediul SQL, înregistrările sunt create temporar şi transmise înapoi obiectului set
de înregistrări al obiectului bază de date în Visual Basic.
Clasificarea instrucţiunilor SQL
Instrucţiunile se împart în două categorii distincte. Prima categorie, limbajul de
definire a datelor (Data Definition Language - DDL) este folosit pentru crearea,
modificarea sau eliminarea definiţiilor existente într-o anumită bază de date. Cea de a
doua categorie, limbajul de manipulare a datelor (Data Manipulation Language - DML)
27
este folosită pentru crearea, modificarea, eliminarea sau adunarea informaţiilor rezidente
în structura bazei de date. Cu alte cuvinte, se va folosi DDL pentru crearea de tabele,
câmpuri şi indexuri, iar DML serveşte la popularea, modificarea şi obţinerea informaţiilor
rezidente în tabele şi câmpuri.
Sintaxa SQL
FROM este folosită pentru a indica tabelul sau interogarea folosite la adunarea
informaţiei pentru instrucţiunea SQL. Folosind clauza FROM este posibilă specificarea
mai multor tabele sau interogări în cadrul instrucţiunii.
WHERE prezintă condiţia sau condiţiile care trebuie satisfăcute pentru includerea
unei înregistrări în rezultatele interogării. Fiecare condiţie este evaluată folosind
operatorii condiţionali (>, >=, <, <=, =, <>, BETWEEN, LIKE) sau operatorii logici
(AND, OR, NOT).
GROUP BY este folosită pentru gruparea setului de rezultate al interogării.
Foloseşte minim un nume de câmp dintr-un tabel sau înregistrare prezentate în
clauza FROM pentru a evalua înregistrările şi valorile de tip grup. De asemenea se poate
folosi o funcţie globală într-o instrucţiune SQL pentru a crea sumare ale grupurilor din
setul de înregistrări. Funcţiile globale disponibile sunt: AVG – care calculează valoarea
minimă a unui câmp specificat, COUNT – calculează numărul de înregistrări dintr-o
interogare, SUM – calculează suma valorilor dintr-un câmp specificat, MAX – calculează
valoarea cea mai mare a unui câmp specificat, MIN – calculează valoarea cea mai mică a
unui câmp specificat.
HAVING specifică condiţii (de aceeaşi sintaxă folosită pentru clauza WHERE)
care trebuie satisfăcute de grupuri ca să fie incluse în setul de înregistrări rezultant.
ORDER BY foloseşte nume de câmpuri pentru a ordona setul de rezultate într-un
anumit mod.
Limbajul de manipulare a datelor
Comenzile DML creează o combinaţie de interogări de acţiune şi de selecţie.
Acestea sunt:
28
Comanda SELECT este o componentă a unei interogări de selecţie, nu a unei
interogări de acţiune. La utilizarea unei interogări de selecţie într-o aplicaţie Visual Basic,
aceasta este stabilită într-un obiect set de înregistrări al unei baze de date specificate.
Presupunând că rs este un set de înregistrări valid şi db este un obiect de bază de date deja
stabilit la un fişier de baze de date valid, se poate folosi următoarea instrucţiune pentru a
aduna toate înregistrările dintr-un tabel:
Set rs=db.OpenRecordset (“SELECT * FROM tabel”)
Aceasta este însă forma elementară cea mai generală, a unei instrucţiuni SELECT.
Programatorul poate folosi fiecare componentă pentru o sortare şi o filtrare eficientă a
înregistrărilor, în funcţie de necesităţi. Sintaxa instrucţiunii SELECT este următoarea:
SELECT [predicate] {* (table.*}
FROM tableexpression
[WHERE…]
[GROUP BY…]
[HAVING…]
[ORDER BY…]
Printre predicatele disponibile într-o instrucţiune SELECT se numără: ALL –
obţine toate înregistrările, chiar şi duplicatele, DISTINCT - obţine numai înregistrările
unice, bazate pe câmpurile specificate în instrucţiune. Clauza HAVING se comportă
similar cu clauza WHERE, cu excepţia testării condiţiei specificate după efectuarea
grupării, spre deosebire de clauza WHERE, care testează condiţiile pentru includerea
înregistrărilor în grupuri.
Unirile reprezintă o funcţie foarte frecvent folosită a instrucţiunii SELECT şi
servesc la crearea de relaţii temporare între tabele la evaluarea unei interogări de selecţie.
Sintaxa de utilizare a unirilor într-o instrucţiune SELECT este:
SELECT …
FROM table1 [LEFTRIGHT] JOIN table2 ON (table1.field1 CompOp
table2.field2)
CompOp este un operator de comparaţie. O unire de stânga (denumită şi unire
exterioară de stânga) include toate înregistrările din tabelul table1, chiar dacă în tabelul
table2 nu există înregistrări corelate. O unire de dreapta (denumită şi unire exterioară de
29
dreapta) include toate înregistrările din tabelul table2, chiar dacă în tabelul table1 nu
există înregistrări corelate. Pentru a crea o unire care obţine numai înregistrările incluse
în ambele tabele (unire interioară) se va folosi clauza INNER JOIN.
Comanda UPDATE este folosită pentru stabilirea informaţiei dintr-un tabel curent
la o valoare nouă. Sintaxa comenzii UPDATE este următoarea:
UPDATE table
SET value
WHERE criteria
Valoarea specificată în clauza SET a instrucţiunii UPDATE este o expresie de
atribuire, care va modifica valoarea curentă a înregistrărilor selectate din tabelul
specificat. Dacă nu este specificată nici o clauză WHERE, interogarea UPDATE
efectuează modificările necesare pentru toate înregistrările din tabelul specificat.
Comanda DELETE este folosită pentru efectuarea de ştergeri masive de
înregistrări dintr-un tabel specificat, dintr-o singură operaţie. Se pot menţiona condiţii de
selecţie a înregistrărilor de şters dintr-un tabel. La folosirea comenzii DELETE, sunt
şterse înregistrări întregi, nu numai câmpuri individuale. Sintaxa comenzii DELETE este:
DELETE table.*
FROM table
WHERE…
2.3. Limbajul de programare Microsoft Visual Basic
Microsoft Visual Basic este un mediu interactiv de programare vizuală a
aplicaţiilor informatice. Microsoft specifică termenul “Visual” deoarece este posibilă
proiectarea de programe cu ajutorul unor formulare care conţin elemente vizuale, precum
butoane şi casete de afişare şi diferite componente vizuale numite controale. Visual Basic
oferă mai multe controale (obiecte care se folosesc pentru implementarea unui mod
simplu de interacţiune între utilizatori şi aplicaţii) care permit utilizatorilor să obţină, să
afişeze sau să înscrie date, să afişeze imagini şi aşa mai departe. Controalele pun la
dispoziţia programatorului diferite proprietăţi (caracteristici ale controlului), metode
30
(acţiuni asupra controlului) şi evenimente (proceduri în care se specifică răspunsuri la
acţiunile asupra controlului).
Facilităţi Microsoft Visual Basic:
Visual Basic pune la dispoziţie controale, utilizate pentru proiectarea unei
interfeţe ce vă permite interacţiunea dintre utilizator şi aplicaţie.
Un control este un obiect care se utilizează în programe pentru a le face mai
accesibile utilizatorilor şi pentru a înlesni modul în care ele vor răspunde la acţiunile
utilizatorilor. Un control este el însuşi un program folosit în cadrul programelor Visual
Basic în vederea simplificării codului acestora.
Visual Basic pune la dispoziţie formulare, folosite pentru plasarea de controale.
Visual Basic pune la dispoziţie controale utilizator şi documente utilizator,
folosite în scopul proiectării componentelor ActiveX pentru proiectele şi programele
Visual Basic care vor rula pe World Wide Web.
Visual Basic pune la dispoziţie module, utilizate pentru organizarea codului,
separarea codului de o anumită componentă vizuală şi, eventual, punerea la dispoziţie a
codului pentru unul sau mai multe formulare.
Visual Basic permite dezvoltarea proiectelor în grupuri, ceea ce oferă posibilitatea
de a include controalele proprii, mai multe fişiere executabile şi biblioteci cu legare
dinamică în cadrul unui singur proiect Visual Basic.
Programarea orientată pe obiect reprezintă un stil de programare care presupune
împărţirea programelor în componente obiectuale şi apoi dezvoltarea programelor pentru
gestionarea componentelor obiectuale respective şi a interacţiunilor dintre ele. Pentru a
stabili dacă un limbaj de programare este orientat pe obiect, programatorii iau în
consideraţie, de regula, trei caracteristici - moştenirea, polimorfismul si încapsularea.
Programarea orientată pe eveniment reprezintă un mod de programare în care
accentul cade pe răspunsul programului la acţiunile şi operaţiile efectuate de utilizator.
Visual Basic combină elementele de programare orientată pe obiect cu elementele
de programare orientată pe eveniment.
O interfaţă de programare a aplicaţiilor (API - Application Programming
Interface) permite programelor accesul la facilităţile oferite de programul API. Spre
exemplu biblioteca API din Windows permite programelor accesul direct la funcţiile
31
sistemului de operare Windows şi utilizarea acestora în cadrul operaţiilor din programe.
O biblioteca API constă într-o serie de funcţii, proceduri, tipuri de date şi constante
simbolice ce pot fi accesate de către programe. În Visual Basic se pot folosi mai multe
astfel de biblioteci API, puse la dispoziţie de către sistemul de operare Windows, pentru a
spori puterea programelor dezvoltate.
Lansarea mediului Microsoft Visual Basic înseamnă şi începerea unui nou
proiect. Un proiect poate conţine unul sau mai multe formulare, module, controale
utilizator sau documente utilizator. Pentru dezvoltarea interfeţei unui proiect se pot folosi
formulare, controale utilizator sau documente utilizator. Majoritatea interfeţelor vor
conţine, de altfel, unul sau mai multe controale utilizate pentru a îmbunătăţi răspunsul
interfeţei la operaţiile şi acţiunile efectuate de către utilizatorul aplicaţiei.
Un proiect Visual Basic poate conţine, de asemenea, unul sau mai multe module.
Modulele sunt folosite în cadrul proiectelor pentru plasarea de cod. Există posibilitatea de
a preciza dacă programul poate accesa codul dintr-un modul numai în cadrul acelui
modul sau dacă respectivul cod va putea fi accesat din orice parte o programului. Un
modul conţine exclusiv cod de program. Într-un proiect pot fi adăugate mai multe
module. Inserarea în proiect a unui modul adiţional va presupune şi o organizare a
proiectului, deoarece se poate permite accesul tuturor formularelor la codul din module
sau se pot proteja anumite porţiuni de cod din fiecare modul în parte, astfel încât accesul
să fie permis numai funcţiilor şi procedurilor din modulul respectiv.
Din toată suita de medii de dezvoltare vizuale de la Microsoft (Visual Studio),
Visual Basic este cel mai eficient instrument (din punct de vedere al timpului de
dezvoltare) pentru dezvoltarea aplicaţiilor care lucrează cu baze de date.
2.3.1 Interfeţe Visual Basic
La crearea unui program pentru Windows trebuie să optăm pentru una dintre cele
două tipuri de interfeţe de bază din Windows: interfaţa document multiplu sau interfaţa
document singular. Aplicaţiile cu interfaţă document multiplu (MDI – Multiple-
Document Interface) sunt standard în Windows. Cuvintele document multiplu se referă la
capacitatea unui program de a întreţine mai multe reprezentări sau fişiere în interiorul
32
aceleaşi ferestre cadru. Aplicaţiile cu interfaţa document singular (SDI – Singular
Document Interface) sunt succesoare ale aplicaţiilor DOS prin aceea că toate
reprezentările sunt la acelaşi nivel. Atunci când se trece de la o reprezentare la alta în
cadrul unei aplicaţii cu interfaţa document singular, în mod normal programul va ascunde
sau închide prima reprezentare. Interfeţele document singular sunt cele mai simple
programe.
2.3.2 Formulare
Un formular reprezintă o suprafaţă rectangulară, similară unei ferestre, care poate
conţine controale. Un formular Visual Basic este el însuşi un control, putând conţine
totodată alte controale pe care le adăugam. Un control, altul decât un formular, este un
obiect auto-conţinut pe care programatorul îl poate adăuga într-un formular şi care
conţine, de regulă, o componentă vizuală. Controalele se folosesc în cadrul programelor
pentru a face ca interfaţa cu utilizatorul să fie mai sugestivă. După plasarea unui control
pe un formular, se poate scrie codul care permite interacţiunea dintre utilizator şi acel
control.
2.3.3 Fereastra de cod
La dezvoltarea proiectelor se va adăuga, mai devreme sau mai târziu, cod pentru
majoritatea obiectelor adăugate în proiect. Pentru scrierea codului de program asociat
unui obiect din proiect vom apela la fereastra de cod din Visual Basic. Fereastra de cod
este o fereastră distinctă cu două meniuri derulante în partea superioară. Cele două casete
derulante din partea superioară a ferestrei de cod ne permit selectarea procedurii sau a
funcţiei pe care dorim să o vizualizăm. Modul în care fereastra de cod organizează
procedurile şi funcţiile poate varia, în funcţie de obiectul cu care lucrăm. Această
secţiune ne dă posibilitatea să declarăm variabile pe care le va putea utiliza orice funcţie,
eveniment sau procedură. Toate variabilele declarate în secţiunea de declaraţii generale
vor fi disponibile în întreg formularul, ceea ce înseamnă că orice eveniment sau
procedură scrise în cadrul formularului vor putea accesa aceste variabile.
33
De fiecare dată când se scrie în fereastra de cod o procedură, un eveniment sau o
funcţie, codul în cauză se va afla în afara secţiunii de declaraţii generale. Fereastra de cod
afişează numele procedurii în câmpul din dreapta al părţii superioare a ferestrei. Atunci
când ne deplasăm în cadrul ferestrei de cod, Visual Basic afişează fiecare procedură,
eveniment şi funcţie din obiectul de program deschis curent (de exemplu, un control
buton de comanda sau casetă de editare) în cadrul celor două casete derulante aflate în
partea superioară a ferestrei de cod, aceasta pe măsură ce cursorul se deplasează în
procedura, evenimentul sau funcţia în cauză.
2.3.4. Caseta cu instrumente
Visual Basic pune la dispoziţie mai multe controale pe care le putem plasa pe un
formular. Un control este un obiect cu care utilizatorul interacţionează în cadrul
aplicaţiilor. Înainte de a putea plasa un control pe suprafaţa unui formular, va trebui să se
acceseze acel control în cadrul casetei cu instrumente. Visual Basic conţine o casetă cu
instrumente pe care sunt afişate mai multe pictograme. O pictogramă este o reprezentare
grafică de dimensiune mică a unui alt obiect. Spre exemplu, Windows foloseşte
pictograme pentru a reprezenta, printre altele, fişiere şi directoare. În cadrul casetei cu
instrumente, pictogramele reprezintă controalele care se pot folosi în cadrul proiectului.
Caseta cu instrumente este, de fapt, o simplă fereastră care afişează pictogramele ce
reprezintă controalele. Înainte ca interacţiunea dintre utilizator şi un control să fie
posibilă, controlul respectiv trebuie adăugat într-un formular. Un proiect poate conţine
mai multe formulare.
2.3.5. Controale
Deoarece un formular este tot un control, nu este necesară adăugarea unui control
la un formular pentru crearea unui proiect. Atunci când adăugăm un control într-un
formular, ceea ce rezultă are mai multă utilitate decât un simplu formular gol. Fiecare
control din Visual Basic are un scop bine definit. Se poate rezolva un proiect cu mai
multe controale. De exemplu, utilizatorul ar putea să efectueze un click pe un control
buton de comandă pentru a întrerupe un program, să selecteze o singură opţiune din două
34
sau mai multe controale buton de opţiune, să enumere mii de elemente într-un control
casetă cu listă şi tot aşa.
Deoarece un formular este tot un control şi, la bază, o reprezentare vizuală a unei
clase de obiecte, ne va fi de ajutor să înţelegem ce sunt obiectele. Putem considera un
control ca fiind un obiect. De exemplu, atunci când pornim calculatorul apăsăm, de
regulă, un buton de pe carcasa fizică a calculatorului. Butonul este un obiect. Dar cum
calculatorul va urma o serie de instrucţiuni pentru pornire după apăsarea butonului,
butonul este totodată un control. Putem vedea un control ca un obiect care face ceva
numai după ce efectuăm o acţiune asupra sa. Prin comparaţie, un creion este tot un obiect,
dar nu face nimic până nu îl luăm în mână şi scriem ceva cu el.
Controlul este un obiect pe care îl putem vedea pe un formular şi care are formă,
dimensiune, culoare şi, de obicei, un text sau o etichetă. În plus, un control dispune de
proprietăţi, metode şi evenimente. Fiecare control din Visual Basic are un scop bine
definit.
Visual Basic ne permite să scriem cod pentru proprietăţile, metodele şi
evenimentele unui control. Aceasta înseamnă că putem modifica modul în care un control
se comportă în cadrul programelor. Proprietăţile unui control descriu controlul respectiv;
exemple de proprietăţi sunt dimensiunea şi culoarea. Metodele unui control ne permit
efectuarea unor acţiuni asupra controlului, cum ar fi poziţionarea şi redimensionarea.
Evenimentele unui control ne permit scrierea de cod pentru a se răspunde la o acţiune,
precum efectuarea unui click sau apăsarea unei taste.
Atunci când dezvoltăm un proiect Visual Basic care conţine formulare, controale
utilizator sau documente utilizator, putem plasa unul sau mai multe controale pe unul sau
mai multe formulare, controale utilizator sau documente utilizator.
Fiecare control din Visual Basic dispune de proprietăţi, metode şi evenimente.
Proprietăţile unui control pot fi modificate atât în momentul proiectării, cât şi în
momentul execuției. Unele controale au proprietăţi ce sunt disponibile numai la
momentul execuţiei; altele au proprietăţi disponibile exclusiv în momentul proiectării.
Momentul proiectării se referă la dezvoltarea proiectului şi cele mai multe modificări ale
unui control la momentul proiectării vor fi relativ statice. Cu alte cuvinte, proprietăţile nu
se vor schimba semnificativ pe durata rulării programului. Fiecare control are una sau
35
mai multe proprietăţi. Proprietăţile unui control descriu controlul respectiv, așa cum sunt
dimensiunea, culoarea şi poziţia acestuia. De exemplu, controlul bara cu instrumente din
cadrul proiectului dispune de proprietăţi ce privesc alinierea, aspectul pictogramelor,
numărul pictogramelor, etc.
Visual Basic ne oferă flexibilitatea de a modifica proprietăţile unui control prin
cod sau prin fereastra de proprietăţi. Visual Basic conţine o fereastră de proprietăţi care
afişează proprietăţile unui control. Modificarea proprietăţilor unui control în cadrul
ferestrei de proprietăţi reprezintă o modificare a proprietăţilor în momentul proiectării.
Proprietăţile unui control sunt stabilite mai întâi pe baza valorilor din fereastra de
proprietăţi. Apoi, Visual Basic procesează codul pe care l-am scris, eventual pentru a
altera proprietăţile unui control.
Unul dintre cele mai uzuale controale din Visual Basic este controlul buton de
comandă, care apare pe un formular ca un buton rectangular. Printre proprietăţile unui
buton de comandă se află culoarea de fond (BackColor), eticheta (Caption), starea de
activare (Enabled), fontul (Font), înălţimea (Height), poziţia pe orizontală (Left), poziţia
pe verticală (Top) şi lăţimea (Width).
Atunci când modificăm proprietatea Caption a unui control buton de comandă,
Visual Basic înscrie pe suprafaţa controlului noua etichetă. La modificarea proprietăţii
Enabled a controlului, Visual Basic fie ne va permite utilizarea controlului la momentul
execuţiei (Enabled are valoarea True), fie va desena controlul cu gri şi îl va dezactiva
(Enabled are valoarea False). Schimbarea proprietăţii Font a unui control va determina
Visual Basic să afişeze eticheta curentă cu fontul indicat de valoarea selectată.
Controlul Tabel flexibil va afişa activităţile planificate pe linii şi coloane care pot
să fie fixe sau standard. Coloanele şi liniile fixe nu se deplasează odată cu derularea
celorlalte coloane sau linii. În mod implicit, controlul tabel flexibil afişează un rând fix şi
o linie fixă. Numărul de linii şi de coloane ce pot fi afişate de către controlul tabel flexibil
este limitat de memoria virtuală disponibilă pentru proiect.
Fiecare linie şi coloană dintr-un control tabel flexibil este specificat printr-o
valoare întreagă. Controlul asociază valoarea întreaga 0 pentru prima linie, valoarea 1
pentru a doua linie şi tot aşa. În mod similar, controlul tabel flexibil asociază valoarea
întreagă 0 pentru prima coloană, valoarea 1 pentru a doua coloană şi aşa mai departe.
36
Atunci când se efectuează un clic pe suprafaţa controlului tabel flexibil, Visual Basic
stabileşte valorile a două proprietăţi, Row şi Col. Aceste proprietăţi conţin valorile pentru
linia şi coloana selectate în cadrul controlului tabel flexibil. Perechea de proprietăţi Row
şi Col identifică o locaţie specifică în cadrul controlului tabel flexibil, locaţie numită
celulă. Spre exemplu, poziţia din controlul tabel flexibil pentru care Row=1 si Col=2 se
numeşte şi celula de la Row=1 şi Col=2.
Numărul total de linii şi de coloane ale unui control tabel flexibil poate fi stabilit
fie prin cod, într-o procedură sau într-o funcţie, fie prin intermediul ferestrei de
proprietăţi. Memoria virtuală disponibilă pe calculator este cea care determină numărul
maxim de linii şi coloane.
2.3.6. Metode
Fiecare control are proprietăţi şi orice control poate fi descris pe baza acestor
proprietăţi. Pe lângă proprietăţi, majoritatea controalelor oferă cel puţin o metodă. Putem
vedea o metodă ca o acţiune pe care programul o poate efectua asupra controlului (prin
contrast cu un eveniment, care este răspunsul unui control la acţiunea unui utilizator sau
la o acţiune a programului). Spre exemplu, să presupunem că pentru controlul bară cu
instrumente există o metodă Move (de fapt, chiar există). Metoda Move a unui control
bară cu instrumente permite deplasarea unui astfel de control din poziţia iniţială într-o
nouă poziţie. Putem scrie în codul programului o procedură care să apeleze la metoda
Move a controlului bară cu instrumente pentru a deplasa controlul din partea superioara a
formularului în partea sa inferioară. Putem scrie, apoi, o altă procedură care să folosească
metoda Move a controlului bară cu instrumente pentru a deplasa acest control din partea
dreapta a formularului în partea sa stângă.
Aproape fiecare control din Visual Basic oferă cel puţin o metodă. Înainte de a
apela la o metodă a unui control este întotdeauna recomandat să înțelegem ce anume face
acea metodă. Visual Basic include un fişier de asistenţă cuprinzător pe care îl putem
utiliza pentru a afla informaţii despre cele mai multe dintre controale. Atunci când apare
o nelămurire în ceea ce priveşte un control şi Visual Basic afişează informaţii de asistenţă
pentru acel control, putem studia fiecare metodă pe care o oferă controlul în cauză. Pe
lângă studierea metodelor de controale cu ajutorul sistemului de asistenţă din Visual
37
Basic, avem şi posibilitatea de a vedea descrieri ale metodelor unui control prin
intermediul bibliotecii de obiecte (Object Browser) din Visual Basic. Biblioteca de
obiecte consta într-o fereastră pe care Visual Basic o foloseşte pentru a afişa proprietăţile,
metodele şi evenimentele unui control. Biblioteca de obiecte afişează atât controale, cât şi
alte elemente.
Unul dintre controalele cele mai utilizate din Visual Basic este controlul buton de
comandă. Una dintre metodele controlului buton de comandă este Move. Metoda Move
permite deplasarea controlului care oferă această metodă (aşa cum este controlul buton de
comandă) dintr-o poziţie pe formular în alta. Metoda Move presupune cuvântul cheie
Move şi patru parametrii – Left, Top, Width si Height. Putem stabili câte o valoare pentru
fiecare parametru. Parametrii Left şi Top sunt folosiţi pentru a determina poziţia
controlului, şi anume distanţa dintre marginea stângă a formularului şi cea a controlului
şi, respectiv, distanţa dintre extremitatea superioară a formularului şi cea a controlului.
Parametrii Width şi Height sunt folosiţi pentru a determina dimensiunea controlului.
Putem apela la biblioteca de obiecte pentru a vedea proprietăţile, metodele şi
evenimentele controlului buton de comandă. Pentru a afişa biblioteca de obiecte,
selectăm comanda Object Browser din cadrul meniului View.
2.3.7. Evenimente
Majoritatea controalelor din Visual Basic dispun de proprietăţi şi de metode.
Putem descrie un control prin intermediul proprietăţilor sale şi putem utiliza metodele
unui control pentru a efectua acţiuni asupra acestuia. Pe lângă proprietăţi şi metode,
majoritatea controalelor dispun şi de cel puţin un eveniment. Un eveniment este ceva ce
s-ar putea sau nu să se producă pentru un control atunci când programul se află în
execuţie. Atunci când utilizatorul sau Visual Basic efectuează o acţiune asupra unui
control, Windows răspunde la acea acţiune. Acţiunea poate produce un eveniment, sau
evenimentul poate fi o consecinţă a acţiunii. De exemplu, atunci când efectuăm un click
cu mouse-ul pe un control buton de comandă la momentul execuţiei (adică atunci când
programul rulează), programul va invoca elementul Click al controlului. Pe de altă parte,
atunci când efectuăm un click pe butonul de închidere al unui formular, acesta va genera
două evenimente (Unload si QueryUnload), rezultate ale acţiunii de click cu mouse-ul,
38
chiar dacă acţiunea în sine nu invocă de fapt nici un eveniment (formularul este cel care o
face).
Pentru un eveniment putem să scriem un cod. De exemplu, după ce efectuăm un
click pe un control buton de comandă şi programul apelează evenimentul Click al
acestuia, el va executa totodată codul pe care l-am plasat în zona corespunzătoare
evenimentului Click. Această capacitate de a extinde procesarea unui eveniment
înseamnă că puteţi determina Visual Basic să răspundă la o acţiune în forme mai
complexe, fără a fi necesară crearea unui nou control. De exemplu, un singur click pe un
buton ar putea să creeze un nou formular, să completeze câmpurile acelui formular cu
informaţii, să actualizeze o înregistrare în cadrul unei baze de date asociate cu programul
şi să afişeze un mesaj pentru utilizator. Visual Basic pune la dispoziţie un sistem de
asistenţă cuprinzător prin intermediul căruia putem afla informaţii despre cele mai multe
controale. Atunci când avem o nelămurire în ceea ce priveşte un control şi Visual Basic
afişează informaţii de asistenţă pentru acel control, putem folosi acele informaţii pentru a
studia fiecare eveniment de care dispune controlul în cauză. Pe lângă studierea
controalelor cu ajutorul sistemului de asistenţă din Visual Basic, avem posibilitatea de a
obţine descrieri ale controalelor şi ale proprietăţilor, metodelor şi evenimentelor acestora
prin intermediul bibliotecii de obiecte din Visual Basic.
39
CAPITOLUL 3
PROGRAM DE GESTIUNE INTRARI, IESIRI,
INTOCMIRE SI EMITERE FACTURI
3.1. Cerințele informaționale generale ale temei
proiect ului
Acest proiect reprezintă un exemplu de aplicaţie a cărui interfaţă a fost realizată în
Microsoft Visual Basic ce utilizează o bază de date Access.
Tema aleasă se referă la activitatea de întocmire şi emitere a facturilor dintr-o
firmă oarecare. Efectuarea acestor operaţii se realizează cu ajutorul programului Calcul.
Operaţia de întocmire a facturilor se bazează pe definirea unei structuri
organizatorice a firmei, ce presupune o evidenţă a clienţilor şi a produselor de care
dispune firma.
Factura se va întocmi cu ajutorul programului Calcul, utilizatorul ţinând cont de
comanda clientului.
Evidenţa informatică a produselor este făcută pe categorii de produse. Fiecărei
categorii îi corespunde o valoare TVA.
Ca principiu general, prezentul program nu ţine o evidenţă şi a documentelor de
aprovizionare a firmei cu marfă, stocul fiind introdus de către utilizator şi actualizat
automat după fiecare vânzare a produsului. Se va ţine însă cont de preţul de achiziţionare
40
şi cel de vânzare al produselor. Preţul de vânzare reprezintă preţul unitar al unui produs la
care se va adăuga valoarea TVA-ului specifică categoriei din care face parte produsul
respectiv şi se va calcula în momentul vânzării produsului, ce corespunde cu adăugarea
lui pe factură .
În concluzie, o factură se consideră emisă în momentul în care cantitatea de
produse de pe aceasta va fi încărcată într-un mijloc de transport al unui client.
Programul Calcul , prin intermediul rapoartelor, va permite:
-evidenţa facturilor emise şi a valorii totale a acestora într-o perioadă stabilită de
utilizator;
-evidenţa facturilor emise pentru fiecare client;
-evidenţa zilnică a stocului de produse, pentru fiecare categorie în parte, precum şi
valoarea totală a acestuia
-evidenţa preţului unitar şi a preţului de vânzare al fiecărui produs.
Proiectarea si realizarea structurii BAZEI DE DATE pentru
aplicaţia de gestiune
Proiectul prezentat în această lucrare foloseşte o bază de date realizată în
Microsoft Access ce conţine cinci tabele. Figura 3.1 Structura bazei de date
41
Structura tabelelor bazei de date este prezentată în continuare.
3.2.1 Tabele
Tabelul Categorii
Figura 3.2 Structura tabelului Categorii
Tabelul Categorii ajută la stabilirea nomenclatoarelor de produse din cadrul unei
firme. Acest tabel cuprinde următoarele câmpuri:
-câmpul Cod_categorie este de tip AutoNumber (număr cu incrementare
automată) şi ajută la determinarea în mod unic a unei înregistrări din cadrul tabelului.
-câmpul Denumire este de tip Text ce are o lungime de maxim 25 de caractere.
câmpul TVA este de tip Number şi reprezintă TVA-ul stabilit pe fiecare categorie
de produse. Acest câmp v-a ajuta la calcularea prețului de vânzare al produselor.
42
Tabelul Clienţi
Figura 3.3. Structura tabelului Clienţi
Tabelul Clienţi a fost realizat pentru o structurare eficientă a activităţii firmei care
utilizează programul. Acest tabel cuprinde următoarele câmpuri:
-câmpul Cod_client este de tip AutoNumber (număr cu incrementare automată) şi
ajută la determinarea în mod unic a unei înregistrări din cadrul tabelului.
-câmpurile Denumire, Adresa şi Cod_fiscal sunt de tip Text cu o lungime de
maxim 25 de caractere.
-câmpul Nr_telefon este de tip Number.
43
Tabelul Facturi
Figura 3.4 Structura tabelului Facturi
Tabelul Facturi reflectă informatic desfăşurarea activităţii unei firme. Pentru
câmpurile din acest tabel s-au stabilit următoarele proprietăţi:
-câmpul Nr_factură este cheie primară, de tip AutoNumber (număr cu
incrementare automată).
-câmpul Data_factură este de tip Date/Time.
-câmpurile Cod_client, Cod_agent şi Nr_aviz au fost alese chei externe de tip
Number pentru a stabili legătura cu tabelul Clienţi, Şoferi respectiv Avize.
-câmpul Valoare_totală este de tip Currency şi reprezintă valoarea totală a unei
facturi. Acest câmp se va calcula în momentul în care se va genera de către utilizatorul
programului întocmirea unei facturi pe care s-au adăugat produse.
44
Tabelul Produse
Figura 3.5. Structura tabelului Produse
Tabelul Produse ajută la stabilirea nomenclatoarelor de produse din cadrul unei
firme. Acest tabel cuprinde următoarele câmpuri:
-câmpul Cod_produs este de tip AutoNumber (număr cu incrementare automată)
şi ajută la determinarea în mod unic a unei înregistrări din cadrul tabelului.
-câmpul Denumire este de tip Text ce are o lungime de maxim 30 de caractere.
-câmpul Preţ_fără_TVA este de tip Currency şi reprezintă preţul unitar fărăTVA
al produsului.
-câmpul Cod_categorie a fost ales cheie externă de tip Number pentru a stabili
legătura cu tabelul Categorii.
-câmpul Stoc este de tip Number şi asigură o evidenţă permanentă a stocului de
produse al firmei.
45
Tabelul Produse/Factură
Figura 3.6. Structura tabelului Produse/Factură
Tabelul Produse/Factură a fost creat pentru a descompune legătura “mulţi la
mulţi” ce exista între tabelele Produse şi Facturi, într-o succesiune de 2 legături de “unu
la mulţi”. Tabelul conţine:
-cheile primare ale celor două tabele menţionate mai sus, şi anume Nr_factură şi
Cod_produs de tip Number, denumite şi chei externe în acest tabel;
-câmpul Cantitate de tip Number, necesar specificării cantităţii de produse ce va fi
adăugată pe factură;
-câmpurile Valoare_fără_TVA şi Valoare_cu_TVA de tip Currency şi reprezintă
valoarea totală cu TVA şi fără TVA a cantităţii de produse ce se adaugă pe o factură.
3.2.2 Legăturile dintre tabele
Între tabelele Clienţi şi Facturi s-a creat o legătură “unu la mulţi” ceea ce justifică
faptul că unui client îi pot fi întocmite una sau mai multe facturi, iar o factură nu poate fi
întocmită decât unui singur client.
46
Legătura dintre tabelele Facturi şi Produse este “mulţi la mulţi”, adică un produs
poate exista pe mai multe facturi, iar o factura poate conţine mai multe produse. Pentru
descompunerea acesteia în două relaţii “unu la mulţi” s-a adăugat tabela suplimentară
Produse/Factură.
Între tabelele Categorii şi Produse s-a realizat o legătură “unu la mulţi” ceea ce
justifică că unei categorii îi corespund mai multe produse, iar un produs nu aparţine decât
unei singure categorii. În continuare este prezentată diagrama de legături a bazei de date
folosită în acest proiect. Relaţiile descrise mai sus sunt prezentate vizual şi sugestiv în
figura 3.7.
Figura 3.7. Diagrama de legături
47
3.3. Utilizarea programării in Visual Basic pentru
realizarea interfeţei grafice
Interfaţa grafică a programului Calcul a fost realizată în Visual Basic.
În diagrama următoare sunt prezentate toate componentele aplicaţiei: Formulare,
Module şi Rapoarte.
Figura 3.8 Componentele aplicaţiei
3.3.1. Module de cod Visual Basic
Startul aplicației se face prin procedura Main, din modulul modDeclaraţii, care
are ca sarcină validarea conexiunii şi afişarea ferestrei Login. Conexiunea la baza de date
Calcul s-a realizat cu ajutorul obiectelor metodei DAO în felul următor: se deschide baza
de date în spaţiul de lucru curent (g_WRK) cu ajutorul metodei OpenDatabase a
obiectului Workspace.După validarea conexiunii se încarcă forma Login. Option Explicit
Public g_WRK As DAO.Workspace
Public g_DB As DAO.Database
Sub Main()
48
On Error GoTo errHandler
Set g_WRK = DAO.Workspaces(0)
Set g_DB = g_WRK.OpenDatabase(App.Path & "\Calcul2004.mdb")
If g_DB Is Nothing Then
MsgBox ("Conexiunea la baza de date nu a reușit")
End
End If
Meniu.Show
Exit Sub
errHandler:
MsgBox "Eroare nr. " & Err.Number & Chr(13) & "Denumire eroare " &
Err.Description, vbCritical
End Sub
Public Sub ClearTexts(inObj As Form)
Dim ctrl As Control
If Not inObj Is Nothing Then
For Each ctrl In inObj.Controls
If TypeOf ctrl Is TextBox Then
If ctrl.Tag = "n" Then
ctrl.Text = "0"
ElseIf ctrl.Tag = "t" Then
If TypeOf ctrl Is TextBox Then ctrl.Text = Format(Now, "hh:mm:ss")
If TypeOf ctrl Is DTPicker Then ctrl.Value = Format(Now, "hh:mm:ss")
Else
ctrl.Text = ""
End If
End If
Next
End If
End Sub
Celelalte module de program sunt prezentate in anexa in format electronic.
49
3.3.2. Formulare
Meniul principal
Figura 3.9. Formularul Meniu
Formularul principal al aplicației conţine meniul principal, ce a fost creat cu
ajutorul meniului Visual Basic MenuEditor, o casetă text care va afişa numele
utilizatorului conectat la baza de date şi o bară de stare care prezintă numele programului
şi data de lucru curenta.
În momentul efectuării unui click pe o opţiune de meniu, selectată din bara de
meniu a acestei ferestre, va fi apelat evenimentul click al acesteia ce va executa apariţia
unei noi forme sau raport, în funcţie de ce se optează.
Meniurile aplicaţiei
Meniul Clienţi permite o evidenţă informatică a clienţilor firmei.
Acţiunea ce se execută asupra acestui meniu este asemănătoare ca în cazul
celorlalte meniuri.
Private Sub mnuClienti_Click()
Dim frm As Clienti
Set frm = New Clienti
frm.Show , Me
End Sub
Meniul Facturi permite înregistrarea informatică a desfăşurării activităţii firmei,
ce presupune intocmirea facturilor:
Acţiunea ce se va executa asupra meniului Facturi va determina apariţia formei
Facturi Netrimise.
Private Sub mnuFacturi_Click()
Dim frm As FacturiNetrimise
Set frm = New FacturiNetrimise
50
frm.Show , Me
End Sub
Formularul CLIENŢI
Formularul Clienţi a fost realizat pentru o structurare eficientă a activităţii firmei
care utilizează programul. Datele introduse în această secţiune vor fi utile pentru
reducerea timpului de întocmire a unei facturi prin realizarea unor căutări ce vor fi
efectuate după numele clientului.
Cu ajutorul acestui utilitar se pot întreţine datele despre clienţii cu care lucrează
firma. Oferă toate operaţiile de întreţinere a acestor date şi anume adăugare, modificare,
salvare şi ştergere. În acest proiect, datele despre şoferi sunt utilizate la întocmirea
avizelor, aceştia fiind cei care distribuie marfa de la firmă la clienţi.
Acest utilitar este reprezentat de forma Clienţi. Conţine un control de tipul
MSFlexGrid (tabel flexibil), casete text folosite pentru modificări şi adăugări de noi
înregistrări, meniuri de Adăugare, Salvare, Ştergere şi Anulare, un control de tip Image
folosit pentru revenirea la meniul principal al programului şi un control label ce va afişa
pentru fiecare meniu, în momentul acţiunii, o descriere specifică.
Apelul şi execuţia evenimentelor şi procedurilor se va face în mod asemănător ca în
cazurile precedente.
Figura 3.10. Formularul Clienţi
51
Codul pentru formularul Clienti este prezentat în anexa în format electronic.
Formularul PRODUSE
Cu ajutorul acestui utilitar se definesc categoriile şi produsele pe care firma le
pune la dispoziţia clienţilor săi.
Utilitarul este realizat cu ajutorul formei Produse, pe care s-au amplasat casete de
text, un control ListBox pentru afişarea categoriilor, butoane de comandă care permit
adăugarea de noi înregistrări sau modificarea înregistrărilor existente, un control
MSFlexGrid pentru afişarea produselor pentru fiecare categorie în parte, un contro Image
necesar revenirii la meniul principal al programului şi un control StatusBar care afişează
data şi ora curentă.
Figura 3.11. Formularul Produse
52
Apelul evenimentului Load al formei se va face în momentul în care forma este
încărcată prin acţiunea asupra submeniului Produse şi va executa secvenţa de cod
specifică:
Private Sub Form_Load()
On Error GoTo errHandler
cmdDelete.Enabled = False
Call ReincarcaDate
Exit Sub
Exit Sub
errHandler:
MsgBox "Description " & Err.Description
End Sub
Apelul funcţiei ReîncarcăDate execută deschiderea unui nou obiect Recordset ce
va conţine toate înregistrările din tabelul Categorii care vor fi adăugate în lista
lstCategorii cu ajutorul metodei AddItem al acesteia. Tot în momentul apelării
acestei funcţii se va executa şi crearea începutului de tabel.
Public Function ReincarcaDate() As Boolean
Dim rst As DAO.Recordset
Set rst = g_DB.OpenRecordset("SELECT * FROM Categorii",
dbOpenForwardOnly)
lstCategorii.Clear
Do While Not rst.EOF
lstCategorii.AddItem IIf(IsNull(rst.Fields(1).Value), "", rst.Fields(1).Value) & "
(" & IIf(IsNull(rst.Fields(2).Value), "", rst.Fields(2).Value) & ")"
lstCategorii.ItemData(lstCategorii.ListCount - 1) =
rst.Fields("Cod_categorie").Value
rst.MoveNext
Loop
53
rst.Close
Set rst = Nothing
With flxProduse
Cols = 5
Rows = 1
TextMatrix(0, 0) = "Cod produs"
ColWidth(0) = flxProduse.Width * 0.1
TextMatrix(0, 1) = "Produs"
ColWidth(1) = flxProduse.Width * 0.3
TextMatrix(0, 2) = "Pret"
ColWidth(2) = flxProduse.Width * 0.25
TextMatrix(0, 3) = "Stoc"
ColWidth(3) = flxProduse.Width * 0.25
ColWidth(4) = 0
End With
End Function
Adăugarea de noi categorii se va face prin efectuarea unui click pe butonul de
comandă Adaugă categorie nouă. La efectuarea acţiunii se va apela evenimentul
corespunzător acestei comenzi.
Private Sub cmdNewInreg_Click()
LblStatus.Caption = "Adauga o noua categorie!"
ifNew = True
Categ.CodCateg = 0
Categ.Den = ""
Categ.Adaos = 0#
txtCategorie.SetFocus
Call ClearTexts(Me)
cmdsterg.Enabled = False
cmdNewInreg.Enabled = False
54
cmdSave.Enabled = True
Casute True
cmdcancel.Enabled = True
lstCategorii.Enabled = False
End Sub
Salvarea înregistrării adăugate se realizează prin apelarea evenimentului Click
corespunzător butonului de comandă Salvează. În cadrul acestui eveniment se vor
verifica mai întâi datele introduse şi dacă acestea sunt corecte se va efectua salvarea
înregistrării în baza de date cu ajutorul metodei AddNew respectiv Update ale variabilei
obiect rst, dacă înregistrarea este nouă, sau cu ajutorul metodei Edit a obiectului
Recordset, dacă se realizează o modificare în cadrul setului de înregistrări. După
realizarea acestor modificări lista de categorii va fi şi ea actualizată.
Valoarea TVA-ului introdusă pentru fiecare categorie se va utiliza la calcularea
preţului de vânzare al produselor.
Afişarea produselor în tabelul flexibil flxProduse se va face în urma selectării unei
categorii din lista de categorii la apelarea următoarei secvenţe de cod:
Private Sub lstCategorii_Click()
cmdDelete.Enabled = True
If lstCategorii.ListIndex >= 0 Then
Call PutData
Dim rst As DAO.Recordset
Dim strline As String
Dim contor As Long
Set rst = g_DB.OpenRecordset("SELECT * FROM Produse WHERE
Cod_categorie = " & lstCategorii.ItemData(lstCategorii.ListIndex),
dbOpenForwardOnly)
flxProduse.Rows = 1
contor = 1
55
Do While Not rst.EOF
With flxProduse
strline = ""
strline = contor & vbTab
strline = strline & rst!Denumire & vbTab
strline = strline & rst!Pret_fara_TVA & vbTab
strline = strline & rst!Stoc! & vbTab
strline = strline & rst!Cod_produs & vbTab
AddItem strline
End With
flxProduse.Refresh
rst.MoveNext
contor = contor + 1
Loop
rst.Close
Set rst = Nothing
Else
Categ.CodCateg = 0
Categ.Den = ""
Categ.Adaos = 0#
Call ClearTexts(Me)
End If
cmdSave.Enabled = True
Casute True
cmdcancel.Enabled = True
cmdsterg.Enabled = True
cmdNewInreg.Enabled = False
End Sub
56
Funcţia PutData este apelată la execuţia evenimentului Click specific listei
lstCategorii şi execută afişarea în casetele de text de pe formă a categoriei şi a valoarii
TVA-ului specific înregistrării selectate de utilizator din listă.
Private Sub PutData()
If lstCategorii.ListIndex >= 0 Then
Categ.CodCateg = lstCategorii.ItemData(lstCategorii.ListIndex)
Dim l_poz As Integer
l_poz = InStr(1, lstCategorii.List(lstCategorii.ListIndex), "(", vbTextCompare)
Categ.Den = Trim(Mid(lstCategorii.List(lstCategorii.ListIndex), 1, l_poz - 1))
txtCategorie.Text = Categ.Den
Dim l_strTVA As String
l_strTVA = Trim(Mid(lstCategorii.List(lstCategorii.ListIndex), l_poz + 1,
Len(lstCategorii.List(lstCategorii.ListIndex)) - l_poz - 1))
If IsNumeric(l_strTVA) Then
Categ.Adaos = CSng(l_strTVA)
txtTVA.Text = Categ.Adaos
Else
Categ.Adaos = 0
End If
End If
End Sub
Adăugarea sau modificarea unui produs se face cu ajutorul formei
ModificăriProduse. Adăugarea produsului se face selectând mai întâi categoria în cadrul
căreia vrem să adăugăm produsul şi apoi apăsând butonul Adaugă produse. La apăsarea
acestui buton se acţionează evenimentul Click corespunzător acestuia ce va duce la
apariţia formei ModificăriProduse. Secvenţa de cod specifică acestui eveniment este
următoarea :
Private Sub cmdAdd_Click()
57
If lstCategorii.ListIndex >= 0 Then
Pretproduse.myCodcategorie = lstCategorii.ItemData(lstCategorii.ListIndex)
Pretproduse.Show 1, Me
Pretproduse.txtProdus.Enabled = True
Pretproduse.txtStoc.Enabled = True
Call ClearTexts(Me)
Call lstCategorii_Click
Else
MsgBox "Selectati mai intai categoria de produse!", vbInformation
End If
End Sub
Cum am specificat mai sus această formă este folosită pentru a adăuga sau a
modifica produsele selectate în tabelul existent pe forma Produse.
Salvarea înregistrărilor adăugate sau modificate se va face executând codul
specific evenimentului Click al butonului de comandă Salvează.
Pentru întocmirea unei facturi va fi nevoie de introducerea în casetele text a
clientului căruia i se întocmeşte factura. Casetele text de pe această formă au proprietatea
Enabled setată pe False. În cazul de faţă utilizatorul nu va avea acces direct la datele din
aceste casete. Afişarea datelor în aceste casete va fi generată în momentul apelării
evenimentul Click al butonului de comandă Adaugă de pe forma selecţie clienţi. Pentru
încărcarea acestei forme va fi necesară apelarea evenimentului Click al controlului Image
specific căutării clienţilor.
58
Figura 3.12. Formularul Selecţie clienţi
Afişarea clienţilor în lista lstClienţi va fi executată la apelul evenimentului Load
af formei Selecţie clienţi.
Private Sub Form_Load()
On Error GoTo errHandler
Call ReincarcaDate
Exit Sub
Exit Sub
errHandler:
MsgBox "Description " & Err.Description
End Sub
59
Public Function ReincarcaDate() As Boolean
Dim rst As DAO.Recordset
Set rst = g_DB.OpenRecordset("SELECT * FROM Clienti",
dbOpenForwardOnly)
lstClienti.Clear
Do While Not rst.EOF
lstClienti.AddItem IIf(IsNull(rst.Fields(1).Value), "", rst.Fields(1).Value) & " –
" & IIf(IsNull(rst.Fields(2).Value), "", rst.Fields(2).Value)
lstClienti.ItemData(lstClienti.ListCount - 1) = rst.Fields("Cod_client").Value
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
End Function
În cadrul acestei forme s-a făcut o căutare după numele clientului. La apelarea
evenimentului KeyUp al casetei de text txtcaută se va crea un nou obiect Recordset ce va
conţine toţi clienţii din tabelul Clienţi al bazei de date al căror nume începe cu litera
introdusă de utilizator în caseta txtcaută, în acelaşi timp actualizându-se şi lista lstClienţi.
Private Sub txtcauta_KeyUp(KeyCode As Integer, Shift As Integer)
Dim rst As DAO.Recordset
Set rst = g_DB.OpenRecordset("Select * From Clienti Where denumire like """ &
txtcauta.Text & "*""", dbOpenDynaset, dbForwardOnly)
If Not rst.EOF Then
lstClienti.Clear
Do While Not rst.EOF
lstClienti.AddItem (rst.Fields(1).Value & " - " & rst.Fields(2).Value)
rst.MoveNext
Loop
End If
60
End Sub
Adăugarea clientului selectat din listă se va face prin execuţia următoarei
secvenţe de program:
Private Sub mnuAdauga_Click()
ifNew = True
LblStatus.Caption = "Adauga o noua inregistrare"
txtDenumire.SetFocus
If FlxClienti.Row > 0 Then
If Not ifSaved Then
If MsgBox("Salvati modificarile facute?", vbQuestion Or vbYesNo) = vbYes
Then
'salvare inregistrare
If CulegDate Then
Call SaveData
Else
Exit Sub
End If
Else
'initiez o noua inregistrare
End If
End If
End If
Call ClearTexts(Me)
myReg.IDClient = 0
ifSaved = False
mnuSterge.Enabled = False
mnuAdauga.Enabled = False
mnuSave.Enabled = True
Casute True
mnuAnuleaza.Enabled = True
61
FlxClienti.Enabled = False
End Sub
După selectarea clientului căruia i se întocmeşte factura, a agentului care a adus
comanda de la client ce ajută la întocmirea facturii şi a datei curente se va putea apăsa
butonul de comandă Save.
Private Sub mnuSave_Click()
LblStatus.Caption = "Salveaza inregistrarea"
If CulegDate Then
If SaveData Then
ifSaved = True
End If
Call ClearTexts(Me)
End If
mnuAdauga.Enabled = True
Casute True
mnuSave.Enabled = True
mnuAnuleaza.Enabled = True
mnuSterge.Enabled = True
FlxClienti.Enabled = True
End Sub
Procedura SaveFactura apelată în cadrul evenimentului anterior execută
adăugarea unei noi înregistrări în tabelul Facturi al bazei de date şi afişarea valorilor
existente în controalele text, respectiv combobox de pe forma Facturi netrimise, în
casetele text existente pe forma Intocmire factură, casete ce nu sunt accesibile
utilizatorului, fiind folosite numai pentru afişarea datelor despre factură (date despre
client, despre agent şi numărul şi data întocmirii facturii).
62
Figura 3.13. Formular Întocmire factură
Pe această formă, pe lângă casetele text folosite pentru afişarea datelor despre
factură, mai sunt adăugate butoane de comandă folosite pentru adăugări de produse pe
factură, calculul valorii totale al facturii, controale etichete folosite pentru afişarea valorii
facturii şi un tabel flexibil pentru vizualizarea produselor ce sunt adăugate prin
intermediul formei Selecţie produse.
În momentul acţiunii asupra butonului Adaugă produs, va fi apelat evenimentul
Click corespunzător acestui produs.
63
Figura 3.14. Formular Selecţie produse
64
CAPITOLUL 4
CALCULE TEHNICO – ECONOMICE PENTRU
EVALUAREA EFICIENŢEI SISTEMULUI
INFORMATIC PROIECTAT SI REALIZAT
Volumul mare al activitãtii necesare pentru a dezvolta si întreține programele (si
deci implicit nivelul înalt al costurilor asociate), justificã interesul din ce în ce mai larg
pentru asigurarea unei calitãti corespunzãtoare aplicațiilor precum si minimizarea
costurilor de elaborare a acestora. Sunt utilizate metode si instrumente adecvate analizei
în detaliu a cerințelor software si de elaborare sau testare a programelor, ce asigurã un
minimum de erori admisibile si o productivitate cât mai mare.
Evaluarea de software
Factorii de evaluare pentru software:
- eficienţa: rezultatele oferite în urma prelucrării, viteza de prelucrare, performanţele;
- flexibilitatea: posibilitatea de a prelucra datele oferite de alte soft-uri sau de a folosi
rezultatele prelucrării altor programe;
- securitate: măsura în care datele nu sunt afectate de atacuri informatice, viruşi şi
posibilitatea de a asigura secretul acestora;
- limbaj: dacă soft-ul se găseşte în limba locală;
- hardware: existenţa de conflicte cu hardware;
- cost: preţul de achiziţie;
- disponibilitate: posibilităţile de livrare imediată sau data livrării;
- compatibilitate: cu alte soft-uri sau sisteme de operare existente sau în curs de
achiziţie;
65
- tehnologie: data fabricaţiei, versiunea programului sau generaţia din care face parte;
- documentaţia: dace este completă, forma în care se găseşte, limba în care este scrisă;
- ergonomie: dacă softul este uşor utilizabil în exploatare şi accesibil;
- suport: dacă există asistenţă on-line, perioada cât durează aceasta.
Ciclul de viatã al produsului software poate fi exprimat si prin procentul de timp alocat
fiecãrei etape din procesul de dezvoltare. Un exemplu tipic ar fi urmãtorul:
Analiza cerintelor: 7%
Elaborarea specificațiilor pentru programe: 12%
Proiectarea programelor: 21%
Implementarea programelor: 20%
Instalarea si testarea programelor: 40%
Pentru a învinge concurenta produsele trebuie sã coste cât mai puțin, sã fie de calitate si
sã aparã pe piatã cât mai repede. Acest obiectiv se poate atinge doar printr-o abordare
organizatã, planificatã, a procesului de dezvoltare. Unul din primii pași realizați atunci
când se ia decizia de elaborare a unui nou program este evaluarea calitativã si cantitativã
a acestuia pentru a stabili în mod corect necesarul de resurse umane, materiale si de timp.
Iatã în continuare o descriere a celor mai recente metode de evaluare, impuse pe scarã
largã. Atenția se va concentra în special asupra metodelor de evaluare dimensionalã si
functionalã, acestea fiind cel mai des utilizate datoritã performantelor lor.
Metode de evaluare a sistemelor informatice de către dezvoltatori
Sistemul informatic poate fi evaluat în mod direct fie indirect. Prin evaluarea directã a
procesului de inginerie software se înțelege determinarea costurilor si a eforturilor
asociate. Ea presupune calculul numãrului liniilor de cod (LOC - lines of code) scrise,
determinarea vitezei de execuție, a dimensiunii memoriei, precum si a numãrului de
defecte raportat într-un anumit interval de timp.
Evaluarea indirectã a produsului reprezintã în fapt o analizã a functionalitãtii, calitãtii,
complexitãtii, eficientei, fiabilitãtii, întreținerii si multor altor caracteristici.
66
Costul si efortul necesar pentru a dezvolta software, calculul numãrului de linii de cod
(LOC) precum si alte estimãri directe sunt relativ ușor de estimat inițial. Totuși, calitatea
si funcționalitatea sau eficienta si întreținerea sunt mult mai dificil de evaluat si pot fi
mãsurate doar în mod indirect. Metodele de evaluare ale produsului pot fi descrise dupã
cum urmeazã:
Evaluarea productivã se concentrează asupra rezultatelor finale ale procesului de
inginerie software;
Evaluarea calitativã oferã o indicație a cât de aproape este produsul software de
cerințele implicite si explicite ale clientului;
Evaluarea tehnicã evidențiazã mai degrabă caracteristicile produsului software (ex.:
complexitatea logicã, gradul de modularizare) decât procesul prin care acesta a
fost dezvoltat;
Evaluarea dimensionalã este utilizatã pentru a "colecta" evaluãrile directe ale
rezultatelor si calitãtii procesului de inginerie software;
Evaluarea functionalã oferã o evaluare indirectã;
Evaluarea orientatã pe resursele umane oferã informații asupra modului în care
programatorii dezvoltã un produs software precum si asupra percepției eficientei
instrumentelor si modelelor de dezvoltare.
În continuare vom face o abordare detaliatã a douã dintre metodele de evaluare expuse ce
sunt mai frecvent utilizate de cãtre casele de soft.
Metoda evaluãrii dimensionale
Evaluarea dimensionalã a produsului software reprezintã o estimare directã a acestuia
precum si a procesului prin care el este dezvoltat. Daca un manager de proiect menține
înregistrãri simple, poate fi creat un tabel cu datele ordonate după criteriul dimensiunii.
Pentru fiecare proiect, datele dimensionale uzuale sunt:
-efortul estimeazã necesarul de resurse umane si se mãsoarã în programatori-pe-lunã
sau programatori-pe-an;
KLOC (Kilo Lines of Code) - mii de linii de cod;
67
-valoarea este exprimarea bãnescã a efortului;
-pagini de documentație;
-numãrul de erori raportate de utilizatori într-o perioadã de timp (de pildã un an).
-numãrul de programatori care au lucrat la dezvoltarea produsului software.
Din datele primare conținute într-un astfel de tabel (vezi caseta "Evaluarea
dimensionalã")poate fi realizatã o evaluare a productivitãtii si una a calitãtii, orientate
dimensional, pentru fiecare proiect în parte:
Productivitatea = KLOC / Programatori-pe-lunã
Calitatea = Numãr de erori / KLOC
În completare, pot fi calculați alți parametri interesanți:
Cost = Valoare / KLOC
Documentație = Pagini de documentație / KLOC
Utilizarea parametrilor dimensionali (KLOC, efort, etc.) este controversatã si ei nu sunt
universal acceptați ca reprezentând cea mai bunã metodã de evaluare a procesului de
dezvoltare software. Controversa se învârte în jurul utilizãrii liniilor de cod LOC ca
mãrime principalã. Sustinãtorii variabilei LOC afirmã cã aceasta este un artefact al
tuturor proiectelor de dezvoltare software si poate fi ușor calculatã, ca multe modele de
estimare utilizeazã LOC sau KLOC ca date de intrare principale si cã existã deja o
literaturã imensã (plus date asociate) dedicatã LOC. Pe de altă parte, opozanții reclamã cã
variabila LOC este dependentã de limbajul de programare, cã LOC poate penaliza
programe bine proiectate dar scurte, cã nu se poate asocia usor limbajelor neprocedurale
si cã utilizarea ei în estimare necesitã un nivel de detaliere care poate fi dificil de obținut
(ex: managerul de proiect trebuie sã estimeze numãrul de linii de cod ce trebuie produse
cu mult înainte ca analiza si proiectul programului sã fi fost încheiate).
Evaluarea Functionalã
Parametrii ce caracterizeazã din punct de vedere funcțional produsul software reprezintã
o evaluare indirectã a acestuia si a procesului prin care el este dezvoltat. Evitând calculul
LOC, parametri funcționali se concentrează asupra "functionabilitãtii" sau "utilitãtii"
programului. Acest tip de evaluare a fost propus pentru o abordare prin mãsurarea
68
productivitãtii, numitã metoda scorului funcțional. Scorul funcțional (SF) este obținut
utilizând o relație empiricã bazatã pe estimãri calculabile ale domeniului de informație al
produsului precum si pe evaluãri ale complexitãtii aplicației.
Valorile domeniului de informație se definesc în urmãtorul mod:
Numãrul de intrări a utilizatorului: Fiecare intrare a utilizatorului care furnizeazã
aplicației date distincte orientate cãtre aceasta este luatã în calcul. Intrãrile vor
trebui distinse de interogãri, care sunt calculate separat.
Numãrul de ieșiri a utilizatorului: Fiecare ieșire cãtre utilizator, care furnizeazã
acestuia informații orientate cãtre aplicație, este luatã în calcul. În acest context
termenul "iesire" se referã la rapoarte, ecrane, mesaje de eroare, etc. Datele
individuale ale unui raport nu sunt calculate separat.
Numãrul de interogãri a utilizatorului: O interogare este definitã ca o intrare on-line
ce are drept rezultat generarea unui rãspuns imediat al aplicației sub forma unei
ieșiri on-line. Fiecare interogare distincta este luatã în calcul.
Numãrul de fișiere: Fiecare fișier logic de tip "master", cum ar fi o colecție logicã de
date care poate fi parte a unei baze de date largi sau a unui fișier individual, este
luat în calcul.
Numãrul de interfețe externe: Toate interfețele citibile de cãtre masinã (fișiere de date
pe bandã sau disc dur) care sunt utilizate pentru a transmite informații cãtre alt
sistem sunt luate în calcul.
Odatã ce datele de mai sus au fost colectate, un indice de complexitate este asociat
fiecãrui calcul. Organizațiile care utilizeazã metoda scorului funcțional dezvoltã criterii
pentru a stabili faptul dacã o anumitã intrare este simplã, medie sau complexã.
Bineînțeles, determinarea complexitãtii este un proces relativ subiectiv. Pentru a calcula
scorul funcțional, este utilizatã urmãtoarea relație:
SF = totalul-de-calcul * 0.65 + 0.01 * SUM (Fi);
unde totalul-de-calcul este suma rezultatelor parțiale obținute prin ponderarea valorilor
domeniului de informație . Valorile constante din ecuația de mai sus precum si factorii de
influentã care sunt aplicați calculului domeniului de informații sunt determinați empiric.
69
Valorile de ajustare a complexitãtii (Fi, i=1...14) se determinã evaluând 14 factori:
Necesitã sistemul back-up si recovery?
Sunt necesare facilitãti de comunicații de date?
Sunt necesare funcții de procesare distribuitã?
Este criteriul performantei critic?
Va rula sistemul într-un mediu operațional utilizat intens?
Necesitã sistemul intrãri de date în regim on-line?
Necesitã sistemul de intrãri de date în regim on-line, ca procesul de introducere al datelor
sã aibã loc pe ecrane sau prin operațiuni multiple?
Sunt fișierele actualizate on-line?
Sunt intrãrile, ieșirile si interogãrile complexe?
Este procesul intern complex?
Este codul proiectat astfel încât sã fie reutilizat?
Sunt conversia si instalarea programului incluse în design?
Este sistemul proiectat pentru instalãri multiple în organizații diferite?
Este aplicația proiectatã astfel încât sã faciliteze modificarea si ușurința în utilizare din
partea beneficiarului?
Fiecare factor este evaluat cu o notã de la 0 la 5, având semnificațiile:
0 - Nu influenteazã;
1 - Incidental;
2 - Moderat;
3 - Mediu;
4 - Semnificativ;
5 - Esențial;
Odatã ce scorul funcțional a fost calculat, el este utilizat într-o manierã asemãnatoare cu
metoda LOC ca o mãsurã a productivitãtii, a calitãtii si a altor atribute ce definesc
programul:
Productivitatea = SF / Programatori-pe-lunã
Calitatea = Numãr Defecte / SF
Costul =Valoare / SF
70
Documentația = Pagini de Documentație / SF
Evaluarea pe baza scorului funcțional a fost conceputã inițial pentru a putea fi utilizatã în
sistemele de informații pentru afaceri. Totuși, extinderea propusã ulterior, denumitã scor
caracteristic (SC), poate permite aplicarea acestei metode si în cazul programelor din
domeniul sistemelor inginerești. Scorul caracteristic este adecvat descrierii aplicațiilor în
care complexitatea algoritmilor este înaltã. Aplicațiile în timp real, de control al
proceselor precum si cele orientate spre obiecte au tendința de a avea o complexitate
algoritmicã mare si sunt prin urmare potrivite evaluãrii prin metoda scorului caracteristic.
Pentru a calcula acest scor valorile domeniului informațional sunt din nou contorizate si
ponderate. Spre deosebire de calculul scorului funcțional, scorul caracteristic ia în
considerare încã un domeniu de informație (algoritmi) iar valorile de ponderare sunt fixe.
Valoarea scorului caracteristic final se obține din ecuația:
SC = totalul-de-calcul * 0.65 + 0.01 * SUM (Fi);
REZULTATELE EVALUARII PROGRAMULUI REALIZAT COMPARATIV
TIP PARAMETRU
( in general adimensional)
APLICATIA
REALIZATA
DOMENIU VALORI PROGRAME SIMILARE
KLOC (Kilo Lines of Code) 7,8 N/A
SF (scorul funcțional) 6,4 5-8
Productivitatea 14 10-15
Calitatea 2 1-1,5
Costul 400 1000-1400
Documentația 1 2-3
SC (scorul caracteristic final) 1425 500-3000
71
CAPITOLUL 5
CONCLUZII ASUPRA IMPLEMENTARII
SISTEMULUI INFORMATIC
1. Realizarea programului a respectat fazele dezvoltării unui produs software
Faza de analiza
Faza de proiectare
Faza de implementare
Faza de testare
2. Din cadrul metodologiilor de dezvoltare a programelor, metodologii generice
abordate au fost: Metodologia secvențială si Metodologia ciclica iar din cadrul
metodologiilor concrete, Metodologia cascada si Prototipizarea.
3. S-au respectat etapele necesare pentru managementul unui proiect software:
Planificarea proiectului
Controlul proiectului
Managementul configuraţiei
Managementul echipei ( Managementul forţei de muncă si Organizarea echipei).
4. Estimarea costurilor programului s-a realizat prin Modele algoritmice clasice in
care s-a ținut cont si de Distribuirea forței de munca in timp.
5. Fiind un program puternic dependent de legislația financiara si din domeniul
contabil s-a ținut cont in dezvoltarea aplicației de posibilitatea de reutilizare a
resurselor.
Posibilitatea de Reutilizare a produselor intermediare, a unor Biblioteci si componente
software, Șabloane, Reutilizarea proiectării, Reutilizarea instrumentelor si a tehnicilor
precum si de unele Aspecte non-tehnice ale reutilizării software: Economia refolosirii
software si de aspecte psihologice ale refolosirii software .
72
De exemplu, programul trebuie să permită trecerea la oricare din metodele declarate că vor
fi utilizate in raportări către administrația financiară pentru gestiunea stocurilor:
o Folosind metoda Cost mediu unitar ponderat
o Folosind metoda FIFO (primul intrat primul ieşit)
o Folosind metoda LIFO (ultimul intrat primul ieşit)
6. Ingineria cerințelor
Pentru proiectare si realizare s-a ținut cont de: Metode pentru identificarea cerințelor
utilizatorilor, Metode pentru specificarea cerințelor utilizatorilor si crearea unui
Document al cerințelor utilizatorului.
73
BIBLIOGRAFIE
1. Burada, Corneliu. Contabilitatea stocurilor cumpărate in metodele cost standard sipreț cu amânuntul. In : Gestiunea si contabilitatea firmei, v.10, nr. 7, p. 15-20,2007;2. Ilie, Vasile. Gestiunea financiara a întreprinderii. București : Meteor Press, 2006;3. Moroșan, Ioan. Monografie contabila privind stocurile – partea I -. In : Contabilitatea, expertiza si auditul afacerilor, nr. 3, p. 25-33, 2007;4. Ristea, Mihai. Tratamente contabile si informaționale privind imobilizările corporale. In : Gestiunea si contabilitatea firmei, v. 10, nr. 8, p. 2-23, 2007;5. Ștefănescu, Aurelia ; Nisuleascu, Ileana. Practici contabile privind stocurile in entitățile sectorului public. In : Gestiunea si contabilitatea firmei, v. 9, nr. 5, p. 29-30, 35-37, 2006;6. Bigan Cristin Gestiunea Bazelor de date ed. Agerpress București 2007
7. Bigan Cristin, Sisteme informatice , Ed. Bren 2010
8. Microsoft Corporation – Microsoft Office Users Guide – www.microsoft.com
74