Specializarea: Matematică -informatică [607017]

UNIVERSITATEA „LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE ȘTIINȚE

Specializarea: Matematică -informatică

LUCRARE DE LICENȚĂ

Coordonator științific
Conf.dr. Adrian Branga Absolvent: [anonimizat] 2018

UNIVERSITATEA „LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE ȘTIINȚE

Specializarea: Matematică -informatică

Aplicații software pentru
contabilitate

Coordonator științific
Conf.dr. Adrian Branga Absolvent: [anonimizat] 2018

Declarație pentru conformitate asupra originalității operei științifice

Cuprins
INTRODUCERE ………………………….. ………………………….. ………………………….. …………………… 6
CAPITOLUL 1 PROGRAMAREA OBIECTUALĂ ÎN LIMBAJUL C# ………………………….. . 7
1.1. Introducere în limbajul C# ………………………….. ………………………….. …………………………. 7
1.2. Despre limbajul C# ………………………….. ………………………….. ………………………….. ………. 7
1.3. A rhitectura .NET ………………………….. ………………………….. ………………………….. …………. 8
1.4. Principiile programării obiectuale. ………………………….. ………………………….. ……………… 8
1.5. Despre clase și obiecte ………………………….. ………………………….. ………………………….. ….. 9
1.6. Constructori ………………………….. ………………………….. ………………………….. ………………. 13
1.7. Destructori ………………………….. ………………………….. ………………………….. ………………… 14
CAPITOLUL 2 BAZE DE DATE RELAȚIONALE ÎN MICROSOFT SQL SERVER …….. 15
2.1. Introducere în baza de date relațională ………………………….. ………………………….. ………. 15
2.2. Organizarea tabelelor unei baze de date ………………………….. ………………………….. …….. 15
2.3. Legarea tabelelor într -o bază de date relațio nală ………………………….. ……………………… 16
2.4. Definirea coloanelor într -un tabel ………………………….. ………………………….. ……………… 17
2.5. Setul de comenzi SQL ………………………….. ………………………….. ………………………….. … 18
2.6. Definirea constrângerilor în SQL ………………………….. ………………………….. ……………… 21
2.7. Arhitectura ADO.NET ………………………….. ………………………….. ………………………….. … 22
2.8. Proiectare interfețelor cu utilizatorul folosind date ………………………….. ………………….. 23
CAPITOLUL 3 APLICAȚII DE TIP WINDOWS FORMS ………………………….. ………………. 24
3.1. Introducere în Windows Forms ………………………….. ………………………….. ………………… 24
3.2. Crearea unui form ………………………….. ………………………….. ………………………….. ………. 25
3.3. Editarea unui form ………………………….. ………………………….. ………………………….. ……… 26
3.4. Adăugarea de componente și controlere ………………………….. ………………………….. …….. 28
3.5. Controlere. Proprietăți și evenimente ………………………….. ………………………….. ………… 31
3.6. Adăugarea meniurilor ………………………….. ………………………….. ………………………….. …. 32
CAPITOLUL 4 ELEMENTE DE CONTABILITATE ………………………….. ……………………… 35

4.1. Dispoziții generale ………………………….. ………………………….. ………………………….. ……… 35
4.2. Principalele forme de organizare a contabilității ………………………….. ……………………… 35
4.3. Contabilitatea stocurilor ………………………….. ………………………….. ………………………….. 36
4.4. Evaluarea stocurilor. ………………………….. ………………………….. ………………………….. …… 37
4.5. Documente privind evidența operativă a stocurilor. ………………………….. …………………. 39
CAPITOLUL 5 REALIZAREA UNOR MODULE SOFTWARE PENTRU
CONTABILITATE ………………………….. ………………………….. ………………………….. ……………… 42
5.1. Prezentarea generală a ap licației ContARC ………………………….. ………………………….. … 42
5.2. Module disponibile ………………………….. ………………………….. ………………………….. …….. 43
5.2.1. Autentificarea în aplicație ………………………….. ………………………….. ………………….. 44
5.2.2. Administrare ………………………….. ………………………….. ………………………….. ……….. 45
5.2.3. Parteneri ………………………….. ………………………….. ………………………….. ……………… 48
5.2.4. Nomenclator produse ………………………….. ………………………….. ………………………… 49
5.2.5. Intrări ………………………….. ………………………….. ………………………….. ………………….. 50
5.2.6. Ieșiri ………………………….. ………………………….. ………………………….. …………………… 54
5.2.7. Liste ………………………….. ………………………….. ………………………….. ……………………. 55
5.2.8. Urmărire ………………………….. ………………………….. ………………………….. ……………… 56
5.2.9. Diverse ………………………….. ………………………….. ………………………….. ……………….. 57
CONCLUZII ………………………….. ………………………….. ………………………….. ………………………. 59
Bibliografie ………………………….. ………………………….. ………………………….. …………………………. 60

6

INTRODUCERE
Lucrarea urmărește să ușureze munca unui contabil cu ajutorul unor module software
pentru contabilite . Lucrarea conține o aplicație software numită ContARC. Numele aplicației
provine de la contabilitate, fiind și domeniul de activitate pentru care a fost creat, și de la
numele meu de familie, Arcaș . Am ales această t emă deoarece în ziua de astăzi este mul t mai
simplu să utilizezi o aplicație în care introduci datele din documente, iar aceasta iți oferă cele
mai bune soluții pentru rezultate corecte . Astfel aplicația are rolul de a prelua aceste date
introduse de contabil , le prelucrează , iar apoi oferă soluții finale. Toate datele din aplicația
ContARC sunt stocate într -o bază de date. Prin urmare acestea rămân salvate după finalizarea
unei acțiuni . Aplicaț ia permite contabilului adăugarea societăților la care lucrează, furnizorii
și clienții specifici fiecărei societăți, produsele, bonurile de consum, facturile primite, etc.
Aceste date sunt calculate automat iar apoi sunt stocate în baza de date în diferite tabele
specifice în funcție de modulul utilizat. Între tabele există relații, astfel se pot face calcule
preluând date din alte tabele.
De asemenea, aplicația ContARC conține și design personalizat. Aceasta dispune de
imagine de fundal a aplicației personalizat, logo, și iconiță a programalui. Toate aceste
elemente de design sunt specifice domeniului de activitate pentru care este creat.
În primele trei capitole am discutat despre resursele necesare pentru a crea aplicația.
De asemenea, în fiecare capitol sunt ev idențiate exemple din aplicație pentru a ajuta cititorul
să înțeleagă exact despre ce est e vorba și cum se aplică acele noțiuni.
Primul capitol prezintă noțiuni despre programarea obiectuală în limbajul C#, fiind și
limbajul principal al aplicației.
Cel de -al doilea capitol prezintă sursa bazei de date folosită, și resursele necesare
pentru a realiza o bază de date relațională.
Interfețele care interacționează cu utilizatorul, precum și cele mai importante
caracterstici se regăsesc în capitolul trei.
Capitolul patru prezintă câtev a elemente de contabilitate pe baza căror a a fost
construită aplicația. Astfel datorită noțiunilor introductive am reușit să fac aplicația să
corespundă exact cerinței unui contabil.
În ultimul capitol sunt prezentate toate modulele software care se regăsesc în aplicația
ContARC. Aici se pot găsi toate informațiile necesare: mo dul de lucru, scopul , relația cu alte
module, salvarea și exportarea bazei de date, etc.

7

CAPITOLUL 1 PROGRAMAR EA OBIECTUALĂ ÎN LIMBAJUL C#
1.1. Introducere în limbajul C#
Limbajul C# a fost lansat oficial în anul 2002. C# este un limbaj de programare care
combină facilități testate de -a lungul timpului cu inovații de ultim moment. Limbajul a fost
creat de o echipă de la firma Microsoft condusă de Anders Hejlsberg. C ontrar faptului că
acest limbaj este creat de Microsoft, acesta nu este destinat doar platformelor Microsoft.
Compilatoarele C# există și pentru alte sisteme precum Linux sau Macintosh. Acest limbaj
este creat ca instrument de dezvoltare pentru arhitectura .NET, și oferă o modalitate facilă și
eficientă de a scrie programe pentru sisteme Windows, internet, componente software etc.1
1.2. Despre limba jul C#
Datorită urmatoarelor motive, limbajul C# este un limbaj profesional folosit pe scară
largă:
 Este un limbaj de programare modern, de utilitate generală, structurat, și ușor de
invățaț.
 Este un limbaj orientat pe obiecte, dar și spre componente.
 Produc e programe eficiente.
 Se poate comp ila pe mai multe platforme.
 Face parte din arhitectura .NET.
O altă c aracteristică foarte importantă: limbajul C# oferă posibilitatea de a crea
aplicații care pot fi adaptate cu ușurință pentru a fi utilizate și în alte regiuni ale lumii unde se
vorbesc l imbi diferite, fără a aduce schimbări în arhitectura software.
Fiind o parte a arhitecturii .NET, limbajul C# iși gestionează în mod automat memoria
utilizată. Eliberarea memorie ocupate (garbage collection) a obiectelor care nu mai sunt
necesare aplicaț iei, este o facilitate foarte importantă a limbajului. În acest fel, programatorii
nu mai trebuie să decidă ca în alte limbaje (spre exemplu: C++), care este locul și momentul
în care obiectele trebuie distruse.2
Cu toate că acest limbaj este rezultat din două dintre cele mai de succes limbaje de
programare: C și C++, acesta de asemenea are o strânsă legătură și cu limbajul Java.

1 Cătălin Galeș , Programare C# , http://www.math.uaic.ro/~cgales/csharp/course.htm , p.3
2 Constantin Gălățan, Susana Gălățan, Curs de C# – Programare în Visual C# 2008 Express Edition , Editura L&S Info -mat,
2008, p. 7

8

1.3. Arhitectura .NET
Arhitectura .NET reprezinta o componentă software care le oferă aplicatiilor pentru
sistemele de operare Microsoft un mediu de programare si de executie. Mai exact, permite
programarea în limbaj mixt și asigură securitatea și portabilitatea programelor.
Revenind la limbajul C#, arhitectura .NET defineste doua entitati foarte importante,
mai exact: arhitectu ra de clase .NET și motorul comun de programare, altfel spus Common
Language Runtime (CLR).
Deci limbajul c# nu are o bibliotecă de clase proprie. Limbajul utilizează biblioteca de
clase .NET, iar atunci când se rulează un program care conține operații de intrare -ieșire, se
utlizeaza biblioteca de clase .NET. Ca și exemplu este cazul în care dorim să afișăm un mesaj
text pe ecran.
Definind conceptul de motor comun de programare (CLR), pute m spune despre acesta
că se ocu pă de execuția programelor C#. Astfe l el asigură securitatea și portabilitatea
programelor.
Atunci când compilăm un program scris în limbaj C# sau într -un limbaj mixt ,
rezultatul compilării nu este un cod executabil, dar în locul acestuia, se produce un fișier care
conține un cod special , atlfel spus un limba j intermediar, sau pe scurt IL (Intermediate
Language). Acest fișier se poate copia în orice calculator care conține .NET CLR. Folosind
compilatorul JIT (Just In Time), CLR (motorul comun de programare) transformă efectiv
codul intermed iar în cod executabil. Con versia se face astfel: atunci câ nd un program .NET
este executat, CLR apelează la compilatorul JIT. Acest compilator JIT convertește IL în cod
executabil. Deci orice program aflat în format IL poate rula în orice mediu care are
implementat CLR, asigurându -se astfel portabilitatea arhitecturii .NET 3.
1.4. Principiile programării obiectuale.
Programarea obiectuală, sau programarea orientată pe obiecte, pe scurt numită POO,
este o importantă paradigmă de programare dintotdeauna. Altfel spus, POO a preluat cele mai
bune și mai organizate idei de la programarea structurată. Un program poate fi organizat în
jurul codului, atunci când codul ef ectiv actionează asupra datelor ( cum este în cazul
programării structurate ), sau în jurul dat elor, atunci când datele acti onează efectiv asupra
codului (c um este în cazul programării obiectuale ).
Toate limbajele care folosesc programarea obiectuală au patru caractersitici foarte
importante și comune, acestea sunt: încapsularea, polimorfismul, mo ștenirea, reutilizarea.

3 Cătălin Galeș , Programare C# , http://www.math.uaic.ro/~cgales/csharp/course.htm , Cursul 1, p.6

9

Încapsularea reprezintă mecanismul care combină codul și datele pe care le
controlează, păstrând astfel integritatea acestora atunci când interactionează cu mediul
exterior. Astfel se poate ascunde funcționalitatea proceselor, iar atunci când codul și datele
sunt încapsulate, se creează un obiect. Codul și datele pot fi publice sau private. Atunci când
acestea sunt publice, pot fi utilizate și din părți ale programului existente în afara acelui
obiect, iar când codul și datele sunt private, pot fi accesibile doar în cadrul aceluiași obiect.
Clasa reprezintă unitatea fundamentală de încapsulare. Altfel spus, o clasa este cea care
definește forma unui obiect .
Încapsularea este implementată prin folosirea specificatorilor de acces. Un specificator
de acces definește domeniul de aplicare și viz ibilitatea unui membru al clasei. C# folosește
următorii specificatori de acces:
 Public (permite clasei să iși expună variabilele și funcțiile membre, altor funcții
sau obiecte. Orice membru public poate să fie accesat din afara clasei).
 Private (permite clasei să iși ascundă variabilele și funcțiile membre, altor funcții
sau obiecte. Nu se poate acces a din afara clasei).
 Protected (permite unei clase derivate să acceseze variabilele și funcți ile membre
ale clasei de bază. Acest caz favorizează implementarea moștenirii).
 Internel (permite unei clase să iși expună variabilele și funcțiile membre, altor
funcții și obiecte din ansamblarea curentă).
 Protected internal (permite unei clase să iși asc undă variabilele și funcțiile
membre, pentru alte funcții sau obiecte. Excepție cazul în care este vorba despre o
clasă derivată) .
Polimorfismul este proprietatea unei interfețe de a fi folosită de un grup generic de
acțiuni. Deci putem afirma faptul că o singură interfață poate să conțină mai multe metode.
Prin moștenire întelegem procesul prin care un obiect poate să primească
caracteristicile altui obiect.
Reutilizarea se folosește atunci când am creat o nouă clasă, iar aceasta poate fi
utilizată pen tru a crea o mulțime de obiecte. Prin folosirea moștenirii și încapsulării, clasa
discutată anterior poate să fie reutilizată4.
1.5. Despre clase și obiecte
În ceea ce privește platforma .NET, cea mai fundamentală construcție de programare
este nouțiunea de clasă.

4 Cătălin Galeș , Programare C# , http://www.math.uaic.ro/~cgales/csharp/course.htm , Cursul 1, p.7

10

Formal, o clasă este un tip definit de utilizator care este compus din tr-un set uniform
de date (numite variabile membre) și membrii care acționează pe aceste date (cum ar fi
constructori, proprietăți, metode, evenimente și așa mai departe).
Alfel spus, setul uniform de date reprezintă "starea" unei instanțe a clasei ( cunoscut
sub numele de obiect).
O clasă este definită în C # utilizând cuvântul cheie class . Cea mai simplă declarație:

class Factura
{
}
Să presupunem că dorim să luăm câteva variabile membre, ca și exemplu pentru clasa
Factură. Definim două tipuri de date: int și string. Tipul de date int îl folosim pentru variabila
numarFactură, iar tipul de date string pentru varbiabila serieFactura.

class Factura
{
public string serieFactura ;
public int numarFactura ;
}

Cele două variabile membre prezintă starea clasei. Pentru a le folosi, adăugăm și
folosim două metode. Prima metodă este de a incrementa numărul facturii de câteva ori, un
exemplu specific aplicației din licență. A doua metodă este folosită pentru a afișa seria
facturii. Metodele sunt numite IncrementareNumarFactura() și PrinteazaStarea(). Codul
devine

class Factura
{
public string serieFactura ;
public int numarFactura ;
// Funcționalitatea facturii
public void PrinteazaStarea ()
{
Console .WriteLine ("{0}/{1}/2018 ", serieFactura , numarFactura );
}

public void IncrementareNumarFactura (int facturaIncrementata )

11

{
numarFactura += facturaIncrementata ;
}
}
Metoda PrinteazaStarea() ne afișează în linia de comandă, seria facturii și numărul
facturii incrementat pentru obiectul serieFactura. Folosind metoda
IncrementareNumarFactura() putem să incrementăm numarul facturii prin adunarea valorii
inițiale, cu o altă variabilă int, numită facturaIncrementata. Pen tru a face codul funcționabil,
adăugam la metoda Main():

static void Main (string [] args)
{
Console .WriteLine ("!!!!! Notiunea de clase !!!!\n");
Factura facturaFiscala = new Factura ();
facturaFiscala.serieFactura = "FF";
facturaFiscala.numarFactura = 1;
for (int i = 0; i <= 10; i++)
{
facturaFiscala .IncrementareNumarFactura (1);
facturaFiscala .PrinteazaStarea ();
}
Console .ReadLine ();
}
După executarea programului, variabila facturaFiscala (serieFactura) iși păstrează
aceeași serie a facturii pe întreaga durată a aplicației, acest lucru îl puteți vedea în următoarea
figură atașată.

12

Figura 1.1. Exemplul afișat în consolă.

Făcând parte din același capitol, pot exista și clase parțiale. Este un subiect scurt de
discutat, dar cu o importanță destul de mare. Practic, limbajul C# ne permite să definim clase
parțiale, adică anumite porțiuni ale unei clase, pe care le prezentăm se parat. Altfel spus,
permite programatorului să creeze o clasă parțială într -un fișier numerotat cu cifra unu, iar
apoi cealaltă parte în alt fișier numerotat cu cifra doi. Aceste fișiere sunt adăugate împreună
într-un proiect, astfel fiind posibilă accesar ea datelor din ambele porțiuni, chiar dacă a fost
impărțită în cele două fișiere.
Folosim cuvântul cheie partial , pentru a specifica despre clasa respectivă că este o
clasă parțială. În următorul exemplu o să putem vedea funcționalitatea programului, și
apelarea clasei parțiale.

using System ;
namespace ContARC
{
partial class Facturi
{
public void FacturiPrimite ()
{
Console .WriteLine ("Am apelat metoda specifica facturilor primite" );
}
}

13

partial class Facturi
{
public void FacturiEmise ()
{
Console .WriteLine ("Am apelat metoda specifica facturilor emise" );
}
}

class Testing
{
public static void Main ()
{
Facturi obiectFactura = new Facturi ();
obiectFactura .FacturiPrimite ();
obiectFactura .FacturiEmise ();
Console .WriteLine ("Cele 2 metode au fost apelate cu succes!" );
Console .ReadKey ();
}
}
}

Spațiul de nume ( namespace ) este prin definiție, o regiune care conține declarații și
care oferă posibilitatea de a separa un spațiu de nume, de un altul. În practică, programele
mari sunt dezvoltate și impărțite pe module separate pentru mai multe persoane. Deci aceste
spații de nume ne permit astfel o mai bună organiza a programului. Partea bună este că dacă
declarăm spre exemplu o variabilă într -un spați u de nume, aceasta nu intră în conflict cu
același nume al variabilei din alt spațiu de nume.
1.6. Constructori
Variabilele se pot iniț ializa manual, dar făcând acest lucru poate genera ero ri atunci
când inițializăm un câ mp. În acest caz, folosim constructorii.
Altfel spus, un anumit constructor inițializează un obiect în momentul în care acesta
este creat, având același nume cu clasa din care face parte.
Forma generală:
acces NumeClasa (parametrii )

{
// codul constructorului

14

}

Utilizăm ace st lucru pentru a atribui valorile inițiale pentru variabilele pe care le -am
definit deja în cadrul clasei sau pentru alte operații necesar pentru crearea unui obiect
complet, fiind și inițializat.
Astfel în cazul limbajului C#, operatorul new alocă dinamic memoria liberă pentru a
memora obiectele create. Această memorie nu este infinită, iar în cazul în care memoria este
epuizată, este posibil ca operatorul new să eșueze. În limbajul C++ acest lucru era posibil prin
utilizarea operatorului delet e, fiind singura soluție prin care se poate elibera memoria.
Altfel spus, în cazul limbajului C# colectarea spatilui neutilizat este facută automat. În
cazul în care nu există o referință la un obiect atunci putem spune că acel obiect nu mai este
necesar, și se poate elibera memoria ocupată de el.
Colectarea automată se declanșează doar atunci când avem o mare nevoie de memorie
și există posibilitatea de a recicla obiectele nefolositoare. Acest proces necesi tă un timp destul
de mare, fiind imposibil de determinat cu exactitate momentul cand se colectează spatiul
considerat neutilizat.
1.7. Destructori
Un destructor se poate declara similar cu un constructor, dar spre deosebire de acesta,
un destrcutor trebu ie sa fie precedat de caracterul ~ (tildă).
Destructorii sunt inclusi într -o clasa ca orice alt membru, și se apelează înainte ca un
obiect din clasă să fie distrus (reciclat). În interiorul acestuia o să specificăm și acțiunile pe
care le executăm înainte ca obiectul să fie reciclat.
Așadar destructorul trebuie apelat imediat înaintea colectării automate deoarece nu va
fi apelat daca obiectul iși incheie durata de viață. În cazul limbajului C++, destructorii sunt
apelați doar atunci când durata de viață a obiectului se încheie. Nu putem determina exact
cand este executat un destructor. Exista posibilitatea ca programul să se termine înainte de a
începe colectarea automată, în acest caz destructorul nu va fi apelat5.
Forma generală a destructilor:
~NumeClasa ()
{
// codul destructorului
}

5 Cătălin Galeș, Programare C# , http://www.math.uaic.ro/~cgales/csharp/course.htm, Cursul 3, p. 11-14

15

CAPITOLUL 2 BAZE DE DATE RELAȚIONALE ÎN MICROSOFT
SQL SERVER
2.1. Introducere în baza de date relațională
În anul 1970, Dr. E. F. Codd a dezvoltat un model pentru un nou tip de baze de date
numite baze de date relaționale. Acest tip de bază de date a eliminat alte probleme care erau
asociate cu fișierele standard și alte designuri ale bazei de date. Folosind modelul relațional,
putem reduce redundanța datelor, salvând astfel spațiu pe disc și conducând la o efi cientă
recuperare de date. De asmenea, oferă posibilitatea de a vedea și manipula datele într -un mod
eficient și intuitiv. În zilele noastre, bazele de date relaționale sunt factorul principal în
aplicații.6
2.2. Organizarea tabelelor unei baze de date
Bazele de date relaționale sunt stocate în una sau mai multe tabele. De asemenea,
fiecare tabel poate să fie vizualizat ca o matrice bidimensională, compusă din rânduri și
coloane. Aceste lucruri o să le evidențiem în cele de urmează. Fiecare rând din tabel conține
informațiile unui singur furnizor.
În practică, rândurile și coloanele dintr -o bază de date relațională sunt reprezentat prin
termeni tradiționali: records (înregistrări) și fields (câmpuri). Câteva pachete software
folosesc anumiți termeni, cât eva folosesc alți termeni, iar restul o combinație între cele două.
De obicei, fiecare tabel este modelat după o entitate din viața reală, cel mai bun
exemplu pe care îl putem da este cazul aplicației ContARC. Această aplicație conține
societăți, partener i, facturi emise/primite, etc. Iar coloanele reprezintă atributele unei entități.
Să presupunem că discutăm despre societăți. Acest tabel numit societăți conține mai multe
atribute, mai exact: denumire, adresa, nr. de telefon, etc. La intersecția între un rand și o
coloană, o valoare este stocată. Această este numită cell (celulă).
Dacă un tabel conține una sau mai multe coloane care sunt unice și poate să reprezinte
fiecare rând din tabel, atunci se poate defini ca o cheie primară ( Primary key ) în acel ta bel.
Spre exemplu, tabelul Societăți are ca și cheie primară, coloana societati_id. În acest caz,
cheia primară este o singură coloană. Desigur o cheie primară poate să conțină două sau mai
multe coloane, în acest caz se numește cheie primară compuă ( compo site primary key ).
În plus, unele programe de manipulare a bazelor de date ne permit să definim chei
adiționale care sunt indicatori unici într -un tabel. De exemplu, coloana Denumire din tabelul

6 Bryan Syverson, Joel Murach, Murach's SQL SERVER 2012 for Developers (Training & Reference) , Mike Murach &
Associate, August 2012, p.3 -14.

16

Societăți conține date unice, care nu sunt chei primare. În SQL Server , acestea sunt numite
unique key (chei unice).
Indicii (numiți Indexes ) oferă o modalitate eficientă pentru accesul la rândurile unui
table bazat pe valori în una sau mai multe coloane. De obicei aplicațiile accesează rândurile
într-un tabel pri n referirea la valoarea unei chei, dar se poate folosi și un indice care este creat
automat pentru fiecare cheie pe care o definim.
În exemplele ce urmează, o să discutăm despre un exemplu al unei baze de date create
pentru lucrarea de licență. Coloana ID din fiecare tabelă este un identificator unic
(uniqueidentfier ). Este un GUID de 16 octeți. Acest ID generat automat, nu poate să existe
decât pentru o singură înregistrare. De aici rezultă că este unic.

Figura 2.1. Tabelul Societăți din baza de date
2.3. Legarea tabelelor într -o bază de date relațională
Tabelele într -o bază de date relațională se pot lega cu alte tabele prin valori în
coloanele specifice. Despre acest lucru o să discutăm în exemplul următor, care ilustrează
acest concept. Dacă fieca re rând din tabelul Societăți era legat la unul sau mai multe rânduri
din tabelul Furnizori, această relație era numită: one-to-many relationship .
De obicei, relațiile există între cheia primară dintr -un tabel și cheia straină (numită
foreign key ) din al t tabel. Cheia străină este formată din una sau mai multe coloane dintr -un
tabel, care face referire la o cheie primară din alt tabel. În SQL Server, relațiile pot de
asemenea există și între o cheie unică într -un tabel și o cheie straină în alt tabel.
Cu toate că relațiile one-to-many sunt cele mai des întâlnite, doua tabele pot avea
relații one-to-one sau many -to-many . Dacă un tabel are o relație one-to-one cu un alt tabel,
datele dintre doua tabele se pot stoca într -un singur tabel. Această particularit ate este
folositoare în cazul în care avem nevoie de obiecte mari, ca de exemplu: videoclipuri, sunete,
imagini, etc, într -o bază de date. Apoi, putem stoca aceste obiecte într -un tabel separat, și

17

putem să ne conectăm la acest tabel cu un alt tabel care c onține o relație one-to-one doar
atunci când avem nevoie de obiecte.
Relația many -to-many se implementează de obicei folosind un tabel intermediar care
are o relație one -to-many și doua tabele cu relația many -to-many . Altfel spus, o relație many –
to-many de obicei se poate impărți în doua relații one-to-many .

Figura 2.2. Diagrama unei baze de date.
2.4. Definirea coloanelor într -un tabel
Atunci când definim o coloană într -un tabel, îi alocăm proprietăți astfel încât coloana
respectivă să poată primi informațiile pe care dorim să le stocăm. Este foarte important de ales
tipul de date specific pentru o coloană, astfel putem stabili exact ce informație dorim să
stocăm în respectiva coloană. De obicei se folosește un singur tip de date, despre care o să
discutăm în cele ce urmează. Pentru a imbunătăți performanța codului, este foarte important
să definim fiecare coloană din tabel cu un anumit tip de date care să reducă utilizarea spațiului
de stocare pe disc.
De asmenea, este foarte important să știm exac t unde putem stoca o valoare nulă ( null
value ). O valoare nulă înseamnă ca nu este cunoscută, nu este valabilă, sau nu se aplică. Dacă
nu dorim să avem valori nule, atunci trebuie neaparăt să atribuim o valoare coloanei
respective. În caz contrar nu putem stoca acel rând în tabel.

18

Se poate să atribuim o valoare implicită ( default value ) fiecărei coloane. Această
valoare este atribuită doar dacă nu există o altă valoare.
Fiecare tabel poate să conțină și o coloană numerică a cărei valoare este generată
automat. O astfel de coloană în SQL Server este numită și identity column . Pentru aceasta
putem stabili valoarea care se poate genera automat, cu cât să crească la o înregis trare nouă,
etc.
Cele mai întâlnite tipuri de date sunt următoarele:
 bit (o valoare 1 sau 0 care reprezintă o valoare Adevărată sau Falsă).
 int, bigint, smallint, tinyint (o valoare întreagă de diferite mărimi).
 uniqueidentifier (reprezintă un număr unic de identificare).
 money, smallmoney (valori monetare care sunt exacte cu patru zicimale).
 decimal, numeric (valori zecimale. Valorile pot să conțină o porțiune întreagă și una
zecimală).
 float, real (o valoarea aflată în virgulă flotantă și precizie simplă care conține
aproximarea unei valori zecimale).
 datetime, smalldatetime (datele și orele).
 char, varchar (un șir de litere, simboluri, și numere în setul de caractere ASCII).
 nchar, nvarchar (un șir de litere, simboluri, și numere în setul de caractere Un icode).7

Figura 2.3. Tipuri de date într -un tabel.
2.5. Setul de comenzi SQL
Putem folosi unele seturi de comenzi pentru a manipula datele într -o bază de date, iar
altele le putem folosi pentru a lucra cu obiectele dintr -o baza de date. Aceste seturi de
comenzi sunt impărțite în doua categorii. Comenzile care lucreaza cu datele dintr -o bază de

7 Bryan Syverson, Joel Murach, Murach's SQL SERVER 2012 for Developers (Training & Reference) , Mike Murach &
Associate, August 2012 , p.15 -16.

19

date fac parte din limbajul de manipulare a datelor, notate cu (DML). Aceste patru comenzi
sunt cele mai folosite de către un programator.
Comenzile care lucrea za cu obiectele dintr -o baza de date fac parte din limbajul de
definire a datelor. Aceste comenzi sunt folosite de către administratorii bazelor de date, sau
DBA. Aceștia se ocupă cu menținerea bazelor de date, imbunătățirea și crearea de noi baze de
date. Chiar și în sistemele mici, programatorii SQL pot sa fie DBA.
Comenzile folosite pentru a lucra cu datele (DML)
 SELECT (Selectează datele de la unul sau mai multe tabele).
 INSERT (Adaugă unul sau mai multe rânduri într -un tabel).
 UPDATE (Schimbă unul sa u mai multe rânduri într -un tabel).
 DELETE (Sterge unul sau mai multe rânduri într -un tabel.
Comenzile folosit pentru a lucra cu obiectele dintr -o bază de date (DDL)
 CREATE DATABASE (Creează o nouă bază de date).
 CREATE TABLE (Creează un nou table într -o bază de date).
 CREATE INDEX (Creează un nou index într -o bază de date).
 ALTER TABLE (Schimbă structura unui tabel existent).
 ALTER INDEX (Schimbă structura unui index existent).
 DROP DATABASE (Șterge o bază de date existentă).
 DROP TABLE (Șterge un tabel existent).
 DROP INDEX (Șterge un index existent).8
Să considerăm exemplul de mai sus, privind crearea unui tabel numit Societăți, cu
coloanele de care avem nevoie, într -o bază de date numită ContARC. Setul de comenzi pentru
a face acest lucru este prezenetat în cele ce urmează.

CREATE TABLE [dbo].[Societati ](
[societati_id ] [uniqueidentifier ] NOT NULL
default Newid (),
[Denumire ] [varchar ](150) NOT NULL ,

8 Bryan Syverson, Joel Murach, Murach's SQL SERVER 2012 for Developers (Training & Reference) , Mike Murach &
Associate, August 2012, p. 22 -24.

20

[Adresa ] [varchar ](150) NOT NULL ,
[Oras ] [varchar ](150) NOT NULL ,
[Judet ] [varchar ](150) NOT NULL ,
primary key (societati_id )
)

Se pot folosi restul comenzi din setul de comenzi de mai sus pentru a controla baza de
date. Mai exact pentru a șterge o coloană/index, pentru a modifica, pentru a introduce și așa
mai departe.
Cel mai întâlnit mod de împreuna datele, este operația inner join . Această operație este
numită join deoarece datele din două tabele sunt împreunate într -un singur set de rezultate. De
exemplu, comanda SELECT poate să primeas că datele din împreunarea tabelelor Facturi și
Furnizori, spre exemplu. Cand folosim inner join , randurile din doua tabele sunt incluse ca
rezultat într -un tabel doar dacă acele coloane corespund. Aceste coloane sunt specificate într -o
clauză FROM, al come nzii SELECT. În comanda SELECT, daca am face referire la ce am
exemplificat anterior legat de facturi și furnizori, rândurile din tabelele Facturi și Furnizori
sunt incluse în valoarea coloanei furnizori_id din tabelul Furnizori iar aceasta valoare
coresp unde cu valaorea coloanei furnizori_id în unul sau mai multe rânduri ale tabelului
Facturi. Daca nu sunt facturi pentru acel furnizor, nu o să fie inclus în setul de rezultate.

FROM Furnizori
INNER JOIN INVOICES
ON Furnizori .furnizori_id = Facturi .furnizori_id
INNER JOIN ProduseFacturi
ON Facturi .facturi_id = ProduseFacturi .facturi_id

Apoi, într -o clauză SELECT; putem include orice coloană în ProduseFacturi.
Mai pe scurt, această operație ne permite să combinăm datele din unul sau mai multe
tabele într -un singur set de rezultate.
Cel mai întalnit mod de a îmrpeuna datele, la fel cum am spus mai sus, este inner join.
Aceasta returnează rânduri din ambele tabele doar daca coloane respective corespund.
O altă ope rație pe care o putem întalni, este outer join . Aceasta returnează rânduri de
la un tabel chiar daca celălalt tabel nu conțne un rând corespunzator.

21

2.6. Definirea constrângerilor în SQL
Impunerea de constrângeri reprezintă un proces foarte important deo arece previne
introducerea unor date invalide în tabele. Mai exact, aceste constrângeri fortează unele reguli
la nivelul unui tabel atunci când inserăm, actualizăm sau ștergem o linie. Dacă constrângerea
este satisfăcută, atunci operația are loc cu succes. De asemenea, constrângerea previne și
stergerea unui tabel în cazul în care există alte tabele dependente de aceasta.
Există cinci tipuri de constrângeri:
 NOT NULL (discutată anterior în acest capitol, nu permite o coloană să conțină o
valoare nulă).
 UNIQUE (reprezintă o coloană a cărei valoare este unică pentru toate înregistrările
făcute în tabel).
 PRIMARY KEY (este cheia primară, care este unică pentru fiecare înregistrare).
 FOREIGN KEY (realizează o legătură cu ajutorul unei chei externe între o colo ană
dintr -un tabel, și o coloană din alt tabel).
 CHECK (reprezintă o condiție care trebuie neapărat să fie satisfăcută de toate
înregistrările dintr -un tabel)9.
Pentru a întelege cum folosim o constrângere, să luăm ca și exemplu, o constrângere
folosită în aplicația ContARC. Să presupunem că dorim să înregistrăm în tabelul Stoc, doar
cantități de produse mai mari sau egale cu 0. Stim că într -un stoc nu pot există cantități pe
minus. Altfel spus, să nu putem face operații de ieșire fără a produce bunul/a -l cumpăra de la
un furnizor.
Acest lucru se poate face foarte ușor din baza de date adăugând constrangerea CHECK .
USE [Contab ]
GO

ALTER TABLE [dbo].[Stoc] WITH CHECK ADD CONSTRAINT [CK_Stoc_Cantitate ] CHECK
(([Cantitate ]>=(0)))
GO

ALTER TABLE [dbo].[Stoc] CHECK CONSTRAINT [CK_Stoc_Cantitate ]
GO

Așadar, în tabelul Stoc nu putem avea în coloana: Cantitate, valori negative. În cazul
în care efectuăm operații de ieșire, și nu avem cantitate suficientă în stoc, primim eroare de

9 Patrick LeBlanc, Microsoft SQL Server 2012 Step by Step , O'Reilly Media, 2013, p.64 -65

22

înregistrare în tabel dato rită faptului că această condiție a constrângerii CHECK nu a fost
satisfăcută.
2.7. Arhitectura ADO.NET
Pentru a lucra cu datele dintr -o bază de date SQL Server prin intermediul unei aplicații
.NET, putem folosi obiectele arhitecturii ADO.NET pe care o să le prezentăm în cele ce
urmează.
Furnizorii de date (numiți .NET data provider) reprezintă unele obiecte ale arhitecturii
ADO.NET. Arhitectura .NET inlcude acești furnizori pentru înteracțiunea lor cu Microsoft
SQL Server. Mai exact, furnizorul de date îi oferă permisiunea unei aplicații create să se
conecteze la sursa de date, execută comenzi și salvează rezultatele. Furnizorii conțin
următoarele componente.
 Connection (este folosită pentru conexiunea la sursa de date SQL).
 Command (reprezintă datele c omenzilor SQL: SELECT, INSERT,
DELETE,UPDATE , dar și pentru executarea unor proceduri stocate sau comenzi).
 DataReader (folosită pentru a prelua datele de la sursa conectată și pentru a le
include în aplicația curentă)
 DataAdapter (folosirea obiectelor Dat aAdapter și DataSource, ne permit operații
de ștergere, modificare, adăugare, selectare la baza de date.
DataSource reprezintă restul de obiecte ale arhitecturii ADO.NET. Aceasta conține
mai multe tabele care conțin date, grupate și care pot avea relații între ele. Altfel spus, sunt
seturi de tabele relaționate. Aceste date sunt păstrate local, și nu este obligatoriu să fie o copie
identică a bazei de date, ci poate să conțină doar rezultatele interogărilor. DataReader ne preia
înregistrările din baza de d ate linie cu linie. Un obiect DataAdapter este folosit pentru a -și
modifica datele și pentru a trimite modificările făcute către baza de date. Aceste date se
salvează într -un format XML, fiind același format folosit și pentru transferul datelor10.
Procedur ile stocate sunt acele instrucțiuni SQL stocate permanent pe un server și care
sunt compilate atunci când sunt utilizate. Aceste proceduri rulează doar pe acele server care
au calculatoare avansate, numite și puternice. Pot avea acces direct și rapid la ba za de date
care permite prelucrarea imediată a informațiilor. Promovează și simplifică interogările
parametrizate, permițând să ruleze înterogările folosite cu diferite seturi. De asemenea,

10 .NET Framework Data Providers , https://docs.microsoft.com/en -us/dotnet/framewo rk/data/adonet/data -providers

23

procedurile stocate reprezintă instrumente de securitate pentru ba za de date și previn
injectarea SQL (accesul neautorizat la baza de date)11.
2.8. Proiectare interfețelor cu utilizatorul folosind date
Pentru a exemplifica arhitectura ADO.NET, o să folosim din aplicația ContARC,
codul de adăugare a unei societatăți. O să folosim proceduri stocate, pentru securitatea bazei
de date, o să declarăm o conexiune și o să deschide/inchidem conexiunile. De asemenea, un
lucru foarte important când deschideți o conexiune, neapărat să o închideți.
ContARC folosește proceduri stoca te create direct în baza de date.
Codul de crearea a unei proceduri stocate pentru adăugarea unei societăți în baza de
date este următorul:

CREATE PROC [dbo].[AgentAdd ]
@Denumire varchar (50),
@Tip varchar (150),
@Adresa varchar (150)
@Localitate varchar (150),
@Judet varchar (150)
AS
INSERT INTO AgentEconomic (Denumire ,Tip,Adresa ,Localitate ,Judet )
VALUES (@Denumire ,@Tip ,@Adresa ,@Localitate ,@Judet )

Am luat ca și exemplu, doar câteva coloane din tabelul AgentEconomic. După ce am
creat procedura stoc ată, care conține parametrii și comanda de adăugarea a unei înregistrări,
trebuie să programăm fiecare controler din interfață. Spre exemplu, la butonul adăugare dorim
să adăugăm o nouă înregistrare în tabel, care conține anumite controlere de tipul textBo x.
Informații despre controlerele textbox și button se pot regăsi în capitolul următor.
Codul pentru a face acest lucru, folosind limbajul de programare C#, este prezentat în
cele ce urmează.

11 Claudiu Ionuț Popirlan, Proceduri stocate , http://id.inf.ucv.ro/~popirlan/bd/laborator8.pdf

24

private void button1_Click (object sender , EventArgs e )
{
string connectionString = @"Data Source = Home -PC\SQLEXPRESS; Initial Catalog = Contt; Integrated
Security = True;" ;
else
{
try
{
using (SqlConnection sqlCon = new SqlConnection (connectionString ))
{
sqlCon .Open ();
SqlCommand sqlCmd = new SqlCommand ("AgentAdd" , sqlCon );
sqlCmd .CommandType = CommandType .StoredProcedure ;
sqlCmd .Parameters .AddWithValue ("@Denumire" , txtDenumire .Text.Trim ());
sqlCmd .Parameters .AddWithValue ("@Tip" , cmbTip .Text.Trim ());
sqlCmd .Parameters .AddWithValue ("@Adresa" , txtAdresa .Text.Trim ());
sqlCmd .Parameters .AddWithValue ("@Localitate" , txtLocalitate .Text.Trim ());
sqlCmd .Parameters .AddWithValue ("@Judet" , txtJudet .Text.Trim ());
sqlCmd .ExecuteNonQuery ();
MessageBox .Show ("Societatea a fost adaugata cu succes!" );
DialogResult = DialogResult .OK;
}
}
catch (Exception exceptie )
{
MessageBox .Show (exceptie .Message );
}
}
}

CAPITOLUL 3 APLICAȚII DE TIP WINDOWS FORMS

3.1. Introducere în Windows Forms
În zilele noastre, majoritatea sistemelor de operare creaza evenimente si folosesc așa
numitele ferestre pentru a interacționa în mod direct cu utilizatorul, astfel utlizându -se
biblioteca Win32.

25

Arhitectura .NET, despre care am discutat în capitolul 1, este formată dintr -un numar
mare de clase, structuri, interfețe, metode, și așa mai depa rte. Librariile claselor principale
(Base Class Libraries) sunt cele mai utile pentru a crea o aplicație, dar unele dintre acestea
sunt folosite pentru a crea ferestre. Mai mult de atât, în programarea Windows acestea sunt
numite ferestre, dar în programar ea arhitecturii .NET acestea se găsesc sub denumirea de
forms. Un form este caracterizat de un meniu, un titlu, bară de navigare, toolbars, iar restul fac
parte din zona client12.
Discutând anterior despre clase și obiecte, prin crearea unui form întelegem crearea
unui obiect de tipul unei clase, care automat moștenește clasa Form , specific unui namespace
(numit și spațiu de nume) System.Windows.Forms . Ceea ce este interesant și de adus in
discuție, este faptul că există un asa spus lanț moștenitor între clasa Form , și restul
componentelor, iar acest lanț este prezentat în lista de mai jos:
 ObjectMarshalByRefObject ,
 Component ,
 Control ,
 ScrollableControl ,
 ContainerControl ,
 Form13.
Deci form -urile sunt acele obiecte care prezintă proprietăți ale modului de afișare și
metode specifice evenimentelor prin care răspund interacțiunii cu utilizatorul. Făcând acest
lucru, prin setarea proprietăților unui form, si prin codul care tratează e venimentele, realizăm
obiecte care răspund pe măsura așteptărilor aplicației. Altfel spus, form -urile sunt și ele
instanțe ale clasei Form , sau a claselor derivate din aceasta.

3.2. Crearea unui form
Aceasta clasă numită Form este formată dintr -un numa r mare de metode, proprietăți,
și evenimente. Echipa Microsoft a pus la dispoziție tutoriale și ghiduri foarte utile care se pot
consulta pentru a studia mai amănunțit aceste lucruri.
Bara de titlu (control box) este o componentă foarte importantă. Aceast a conține
informațiile programului, și asigură aparența itemilor de Minimize , Maximize , și Close , care
sunt controlați prin intermediul proprietăților. Proprietatea ControlBox asigură afișarea
control box -ului. HelpButton este proprietatea care asigură afi șarea ghidului de ajutor, în

12 Cătălin Galeș, Programare C# cursul 11 , http://www.math.uaic.ro/~cgales/csharp/course.htm, p.2
13 Form Class , https://msdn.microsof t.com/en -us/library/system.windows.forms.form(v=vs.110).aspx

26

cazul în care aveți nevoie de informații suplimentare ale aplicatiei. Pentru includerea itemilor
discutați anterior, avem proprietățile MinimizeBox , MaximizeBox . Aceste proprietăți trebuie
setate pe True , dacă dorim să le folosim

3.3. Editarea unui form
De asemenea există și o gamă largă de proprietăți pentru a controla dimensiunea form –
ului. Aceste proprietăți se pot folosi pentru a ajusta form -ul după nevoile noastre.
Acestea sunt următoarele:
 AutoSize (form -ul se ajustează automat, in funcție de font și controlere).
 AutoSizeMode (oferă form -ului dimensiunea de bază).
 AutoScroll (oferă posibilitatea defilării pe form).
 AutoScrollMargin (dimensiunea marginilor pentru defilare).
 AutoScrollMinSize (dimensi unea minimă a defilării).
 AutoScrollPosition (locația unde are loc defilarea).
 ClientSize (dimensiunea zonei client).
 DefaultSize (setează mărimea de bază a form -ului, păstrând proprietatea acestuia).
 DesktopBounds (dimensiunea și locația form -ului).
 Deskt opLocation (locația form -ului).
 Height (înălțimea form -ului).
 MaximizeSize (dimensiunea maximă a form -ului).
 MinimizeSize (dimensiunea minimă a form -ului).
 Size (dimensiunea form -ului. Sunt valori de tipul x, y, pentru a seta dimensiunea
acestuia).
 SizeGri pStyle (stilul mânerului de dimensiune utilizat de form. Poate să fie Auto ,
Hide , sau Show . Auto – foloșește ambele proprietăți).
 StartPosition (poziția de start al unui form. Acesta conține mai multe proprietăți).
 Width (lătimea form -ului).
De asemenea, se pot schimba și culorile, dar și fundalul unui form. În cele ce urmează
o să discutăm despre aceste lucruri.
Culoarea de fundal este prima pe care o putem schimba foarte ușor. Putem face acest
lucru modificând proprietatea BackColor . Spațiul de nume System.Drawing ne oferă structura
Color . Așadar putem folosi culorile acestei structuri.

27

După ce am ales o culoare de fundal, putem de asemenea să ne personalizăm aplicația
și să ne setăm o imagine de fundal. Pentru asta există proprietatea BackgroundImage care
primește ca și proprietate chiar și o imagine. Aceasta clasă Image face parte tot din același
spațiu de nume System.Drawing . Folosind metoda FromFile() ne returnează un obiect de tipul
Image. Acest obiect poate să conțină și proprietățile Width și Height, aceste valori fiind setate
să corespundă cu dimensiunea imaginii încărcate.
Folosind proprietatea BackgroundImageLayout , putem seta ca imaginea încărcată de
noi, să iși seteze automat dimensiunea, în functie de form -ul nostru. Pentru asta setăm ca și
proprietate, Stretch .
Mai mult de atât, modificând proprietatea Icon, putem încărca de asemenea și o iconiță
specifică pentru aplicația noastră. Imaginile sunt acceptate doar în format .ico, deci sunt
numite: "Icon files".
Modificarea frontierei (numită și border) unui form este o altă caracterstică foarte
importantă din punct de vedere estetic al aplicației pe care o creăm. Ne ajută să stabilim exact
dacă utilizatorul poate să redimensioneze singur un form. Pentru asta exis ta proprietatea
FormBorderStyle , iar aceasta conține următoarele:
 Fixed3D (form -ul este fixat. Nu se poate redimensiona. Conține o frontieră 3D).
 FixedDialog (form -ul este fixat. Nu se poate redimensiona. Dar frontiera este
groasă).
 FixedSingle (form -ul este fixat. Nu se poate redimensiona. Frontiera este o singura
linie).
 FixedToolWindow (form -ul este fixat. Nu se poate redimensiona, dar conține
câteva proprietăți ale frontierei).
 None (form -ul nu conține frontieră).
 Sizeable (form -ul poate sa fie redimensionat).
 SizeableToolWindow (form -ul poate să fie redimensionat, dar conține câteva
proprietăți ale frontierei).
Să presupunem că vrem să creăm o aplicație personalizată, care să conțină o imagine
de fundal, să se deschidă automat pe mijlocul e cranului, și care să conțină și iconița
personalizată.
Folosind proprietățile discutate anterior, aplicația a ieșit astfel:

28

Figura 3.1. Imagine de fundal într -o aplicație Windows Forms.

3.4. Adăugarea de componente și controlere
Butoanele (buttons), bările de defilare (numite și scroll bars), câmpurile de editare
(labels), dialog colorat (ColorDialog), etc, sunt obiectele de interfața ce oferă posibilitatea de
a controla form -ul.
Asa numita clasă Control este cea care oferă form -ului, aspectul vizua l. Iar restul
obiectelor de interfață implementează particularitățile lor specifice și oferă posibilitatea de a
răspunde la mesajele adresate direct sau indirect.
Aceste obiecte ale clasei Control fac referire la orice obiect .NET care favorizează
acest l ucru. De obicei acest cuvant Control face referire la orice obiect vizual, aflat pe un
form. Acesta poate să fie și în contrast cu o altă componentă foarte importantă și care conține
mai multe caracterstici asemănătoare cu un control, dar nu dispune și de o interfață pe care o
putem vede. Exact cum este cazul în care avem un button, și un timer, butonul este un
controler, iar un timer este o componentă.
În mediul de programare discutat în primul capitol, mai exact in Visual Studio .NET,
aceste controlere, componente, containere, se pot găsi în Toolbox.
Să presupunem că vrem să creăm un nou form, care să conțină un mesaj când apeși un
button, sau un buton ce ne oferă posibilitatea de a ieși din program. Pentru asta trebuie să

29

facem un nou proiect în Visual Studio, iar de acolo selectăm Visual C#, iar apoi alegem
Windows Forms App (.NET Framework).
Prima dată trebuie să ne aranjăm form -ul așa cum dorim. Prin alinierea lui la stânga, la
dreaptă sau in mijloc. De asemenea, înainte de a începe să programăm fie care membru din
toolbox, trebuie să ne gândim exact pentru ce dorim să facem aplicația respectivă. În cazul
nostru, o să facem ce ne -am propus.

Figura 3.2. Interacțiunea cu utilizatorul.

Așadar din toolbox am ales pentru realizarea aplicației, un mem bru numit label, și
două butoane, denumite și buttons.
După ce am creat aceste obiecte, putem seta proprietățile lor. Implicit ele conțin
numele lor. Din proprietăți putem să le schimbăm numele, textul, deci practic să le ajustăm
exact pentru ce ne trebui e.
Un pas foarte important este acela de a crea evenimente. În cazul nostru am folosit la
apasarea acelor butoane, aplicația să ne răspundă pe măsura așteptărilor noastre. Așadar
amintim ce am discutat mai sus, și am programat cele două butoane astfel: primul buton, cel
de afisare mesaj, o să ne afișeze un mesaj pe ecran, iar celălalt ne oferă posibilitatea de a
părăsi programul.

Figura 3.3. Dialog afișat prin apăsarea butonului Afișare mesaj .

30

Programul funcționează corect, la apasarea butonului ne este afișat un mesaj, la care i –
am introdus și o iconiță specifică unui mesaj informativ, și de asemenea posibilitatea de a
închide mesajul.
Prin apasarea butonului ieșire, aplicația automat se închide și devină inactivă.
În continuare o să afișăm codul folosit pentru mica aplicație prezentată mai sus.
Aplicație pe care am decis să o alegem și ca un scurt exemplu.

using System ;
using System .Collections .Generic ;
using System .ComponentModel ;
using System .Data ;
using System .Drawing ;
using System .Linq ;
using System .Text;
using System .Threading .Tasks ;
using System .Windows .Forms ;

namespace LicentaScrisa
{
public partial class ContARC : Form
{
public ContARC ()
{
InitializeComponent ();
}

private void btnAfisare_Click (object sender , EventArgs e )
{
// butonul de afișare al mesajului.
MessageBox .Show ("Mesajul a fost afisat!" , "Informatie" , MessageBoxButtons .OK,
MessageBoxIcon .Information );
}

private void label1_Click (object sender , EventArgs e )
{

}

private void button1_Click (object sender , EventArgs e )

31

{
// butonul de părăsire al programului.
this.Close ();
}
}
}

3.5. Controlere. Proprietăți și evenimente
Controlerele conțin un număr foarte mare de proprietăți care pot să fie folosite pentru
a controla comportamentul acestora. Clasa lor de baza este System.Windows.Forms.Control ,
numită și clasa Control , care conține un numar mare de proprietăți ce pot fi moștenite direct,
sau redefinite pentru comportări specifice.
Mai jos o să prezint câteva proprietăți importante ale acestora:
 BackColor (setează culoarea de fundal al unui controler).
 BackgroundImage (setează imaginea de fundal al unui controler).
 Enabled (permite interacțiunea cu utilizatorul).
 Name (numele controlerului. Acest nume îl folosim atunci când facem referința la
acesta în cod).
 TabIndex (setează numărul de ordine când apeși tasta tab).
 Text (posibilitatea de a seta un text pentru a -l afișa).
 Visible (ne oferă posibilitatea de a alege dacă controlerul este vizibil pe interfață
sau nu).
Am selectat cele mai utilizate proprietăți de către mine. Pe lângă acestea mai sunt și
alte proprietăți i mportante.
Evenimentele controlerelor sunt de obicei folosite de către utilizator. Atunci când
aplicația este deschisă, și se apasă pe un button , îi este generat un eveniment setat de către
programator. Cum am discutat mai sus în acest capitol, este valab il exemplul în care am setat
într-o aplicație, ca prin apasarea unui buton, să ne afișeze un mesaj informativ. Tratarea
acestor evenimente este asigurată de către programator care la rândul lui, oferă posibilitatea ca
acel buton să funcționeze.
Mai jos su nt prezentate doar câteva evenimente importante, pe care le -am folosit:
 Click (eveniment care are loc atunci când controlerul este apasat).
 DoubleClick (se întamplă atunci când controlerul este apasat de doua ori).

32

Fiind vorba tot despre evenimente, avem trei posibilități de a seta codul de tratare
pentru un eveniment ales.
Prima posibilitate este atunci când apăsăm dublu -click pe un controler. Dacă acesta
este un Button , evenimentul implicit este Click . În cazul în care este TextBox , ne generează un
eveniment TextChanged . Pentru a completa aceste evenimente, completăm codul în blocul
metodei care se ocupă de acel eveniment.
Dacă dorim o altă posibilitate decât cea implicită, trebuie să selectăm evenimentul
dorit din fereastra Properties. Această fereast ră ne prezintă o listă de evenimente. Întotdeauna
evenimentul cu fondul gri este cel implicit. Pentru a adauga un nou eveniment, dorit de noi
din lista respectivă, folosim dublu -click pe acel eveniment. Metoda este generată automat, iar
numele acestei meto de de obicei ne arată și ce face mai exact acel eveniment. În cazul în care
avem un label1 , și considerăm că avem nevoie de un eveniment Click, metoda care tratează
evenimentul o sa fie numită label1_Click . Însa nu este obligatoriu. De asemenea puteți pune
un nume în caseta respectivă, pentru a denumi evenimentul așa cum doriți. Dar de preferat
este să lasați acel nume sugestiv, generat automat. Astfel puteți să găsiți mai ușor informații
despre acestea.
O altă posibilitate este de a crea evenimentul în bl ocul constructorului, atunci cand a
fost apelată metoda de inițializare a componentelor, numită InitializeComponent(). După ce
am creat evenimentul trebuie neaparăt să creăm și metoda prin care îl tratăm, dar acesta poate
să fie în afara blocului construct orului.
Luăm ca și exemplu de cod, o metodă folosită într -un exemplu de mai sus.

private void btnAfisare_Click (object sender , EventArgs e )
{
MessageBox .Show ("Mesaj!!!!!" , "Informatie" , MessageBoxButtons .OK, MessageBoxIcon .Information );
}

În acest cod avem un buton numit btnAfisare, care conține un eveniment Click, și la
care am creat o metoda de tratare a evenimentului. În cazul nostru, un mesaj într -o casuță ce
conține informații.

3.6. Adăugarea meniurilor
Arhitectura .NET ne oferă posibilitatea de a crea rapid și simplu meniurile. Astăzi,
majoritatea aplicațiilor Windows sunt compuse din meniuri.

33

Pentru asta avem nevoie din toolbox , de controlerele MenuStrip și ContextMenuStrip .
Aceste controlere ne oferă posibilitatea de a crea meniuri într -o aplicație pe care vrem
să o dezvoltăm. Au apărut începând cu versiunea .NET 2.0, și sunt inlocuitoarele controlerelor
MainMenu și ContextMenu , care erau compuse din obiecte de tipul MenuItem . În cazul
nostru, itemii controlerelor MenuStrip și ContextMenuStrip sunt obiecte care fac parte din
unele clase derivate ale clasei ToolStripItem , și anume:
 ToolStripMenuItem
 ToolStripComboBox
 ToolStripTextBox
 ToolStripSeparator
Un obiect poate să fie la rândul lui părinte pentru un anume submeniu.
Meniul de tipul MenuStrip este situat de obicei, in partea de sus a form -ului. Pe cand
ContextMenuStrip , este acel meniu de context care apare atunci când folosim click dreapta pe
un anumit controler, dacă a fost legat de acesta. Se folosește pentru accesul rapid la itemii din
meniul de bază al aplicației.
Să presupunem că la aplicația discutată anterior, cea în care am ales un fundal și o
iconiță, dorim să adăugăm și un meniu care să ne conțină câteva subm eniuri importante.
De asmenea, după ce adăugăm un meniu, putem să selectăm din proprietățile acestuia
fontul acestuia. Asta pentru a face meniul mai ușor vizibil, și pentru a -l diversifica.

34

Figura 3.4. Meniul într -o aplicație Windows Forms.

Așadar meniul nostru, numit MenuStrip, a fost realizat cu succes. Acesta conține
meniurile Administrare, Gestiune, Mijloace fixe și Diverse. Meniul Administrare este compus
din următoarele submeniuri: întreținere bază de date și schimbare utilizator.
Fontul ales de mine este Arial, iar dimensiunea este de 11.
Pentru a face legătura la un alt form, folosim din proiect dublu -click pe Intretinere
baza de date (spre exemplu), și acolo o să introducem codul pentru a deschide un nou form.
Apelăm form -ul respectiv, și îl deschidem sub formă de dialog, de obicei. Dacă îl deschidem
sub formă de dialog, atunci nu avem acces la meniul principal până când acel form nu este
închis.
Codul pentru a face legătura cu un alt form, atunci când selectăm un submeniu
(exemplu Întreți nere bază de date) este următorul:

private void intretinereBazaDeDateToolStripMenuItem_Click (object sender , EventArgs e )
{
IntretinereBD ibd = new IntretinereBD ();
ibd.ShowDialog ();
}

35

CAPITOLUL 4 ELEMENTE DE CONTABILITATE

4.1. Dispoziții generale
În conformitate cu reglementările legale în vigoare, toate persoanele juridice și
persoanele fizice care au fost autorizate să desfășoare activități pe cont propriu, precum și
subunitățiile, fără personalitate juri dică, ce au sediul în străinătate, dar care aparțin de
persoane fizice sau juridice cu sediul social sau domiciliu în România, inclusiv subunitățiile
fără personalitate juridică din România care aparțin de persoane fizice sau juridice cu sediul
social sau domiciliu în străinătate, au obligația să o organizeze și să conducă contabilitatea
proprie.
Conform Legii contabilității 82/1991 art. 2 , contabilitatea, este o activitate
specializată în măsurarea, evaluarea, cunoașterea, gestiunea, și controlul activelo r, datoriilor și
capitalurilor proprii, precum și a rezultatelor obținute din activitatea persoanelor fizice sau
juridice menționate anterior. Aceasta trebuie să asigure înregistrarea cronologică și
sistematică, prelucrarea, publicarea, și păstrarea inform ațiilor cu privire la poziția financiară,
performanța financiară, și fluxurile de trezorerie, atât pentru cerințele interne ale persoanelor
fizice sau juridice, cât și în relațiile lor cu investitorii prezenți și potențiali, creditorii
financiari și comerc iali, clienții, instituțiile publice și alți utilizatori.
Contabilitatea se ține în limba română, și în moneda națională, iar în cazul
operațiunilor efectuate în valută, se ține atât în moneda națională, cât și în valută14.
4.2. Principalele forme de organizare a contabilității
Potrivit legii rolul contabilității este " Instrument principal de cunoaștere, gestiune și
control al patrimoniului și al rezultatelor obținute" patrimoniul reprezintă totalitea drepturilor
și obligațiilor care pot să fie exprim ate în bani. Existența lui este condiționată de existența
unei persoane fizice sau juridice ca subiect de patrimoniu, care să aibe posesia și gestiunea
bunurilor materiale, drepturilor și obligațiilor, cu condiția de a exercita liber acte de dispoziție
și administrație asupra sa. Contabilitatea patrimoniului are ca obiect reflectarea în expresie
bănească a:
 bunurilor mobile și imobile, inclusiv solul, bogațiile naturale, zăcămintele și alte
bunuri cu potențial economic;
 disponibilităților bănești;

14 Legea contabilității 82/1991 republicată și actualizată

36

 titluril or de valoarea;
 drepturilor și obligațiilor agenților economici și instuțiilor publice;
 miscărilor și modificărilor intervenite în urma operațiunilor patrimoniale efectuate;
 cheltuielilor veniturilor și rezultatelor obținute de către unitățile patrimoniale .15
Contabilitatea modernă este organizată pe două paliere:
1) Contabilitatea generală (denumită și contabilitate financiară).
2) Contabilitatea de gestiune (sau contabilitatea managerială).
Contabilitatea generală care este organizată pe baza unor norme unitare, cu caracter
obligatoriu și furnizează informațiile necesare atât pentru necesități proprii cât și pentru
organele financiare, bancare, asociați sau acționari, clienți, furnizori, etc.
Contabilitatea de gestiune este organizată de către fiecare un itate în functie de
specificul activității și necesitățile proprii privind calcularea costurilor, stabilirea rezultatelor,
și a rentabilității produselor, lucrărilor, și serviciilor, urmărirea și controlul realizării bugetului
de venituri și cheltuieli, fu rnizarea altor informații necesare fundamentării deciziilor în cadrul
unității.
Un loc important în contabilitatea de gestiune îl dețin stocurile. Aplicația ContARC
lucrează în mare parte cu stocurile. Așadar în cele ce urmează o să discutăm despre
contab ilitatea stocurilor.
4.3. Contabilitatea stocurilor
Stocurile sunt active circulante:
 sub formă de materii prime, materiale și alte consumabile ce urmează să fie
folosite în procesul de producție sau pentru prestarea de servicii;
 în curs de producție în vederea vânzării în procesul desfășurării normale a
activității;
 deținute pentru a fi vândute pe parcursul desfășurării normale a activității;
Stocurile, și producția în curs de execuție, sunt destinate pentru a se consuma la prima
utilizare, pot fi vându te după încheierea procesului de prelucrare sau pot fi vândute în starea
în care s -au cumpărat.
În categoria stocurilor se cuprind:
 materii prime;
 materiale consumabile;
 materiale de natura obiectelor de inventar;

15 Vasile Darie și alții, Manualul expertului contabil și al contabilului autorizat, ediția a 4 -a, Editura Agora, 1998, p.20 -21

37

 produse;
 animale și păsări;
 mărfuri;
 ambalaje;
 producția în curs de execuție;
 bunurile aflate în custodie, pentru prelucrare sau în consignație la terți16.
După apartenența la patrimoniul societății, stocurile se împart în:
 stocuri ce aparțin unității și care se găsesc fie în incinta ei, fie se află temporar la
terți în custodie, în consignație, sau pentru a fi prelucrate sau reparate;
 stocuri ce nu aparțin unității, dar care se gasesc în depozitele acesteia, fiind aduse
de terți pentru vânzare, prelucrare sau reparare.
O altă clasificare a s tocurilor este după proveniență. Din acest punct de vedere
stocurile se împart în:
 stocuri cumpărate, adică provenită din achiziție de la terți;
 stocuri fabricate, adică provenită din producția proprie17;

4.4. Evaluarea stocurilor.
Evaluarea stocurilor reprezintă procesul de exprimare a acestora în etalon valoric
(bănesc). Conform OMFP nr. 1752/2005 , sunt patru momente importante de evaluare a
stocurilor, și anume:
 la intrarea în patrimoniu;
 la ieșirea din patrimoniu;
 la inventariere;
 la întocmirea bila nțului contabil;
Evaluarea la intrarea în patrimoniu se face astfel:
 bunurile achiziționate contra plată se evaluează la costul de achiziție;
 bunurile obținute din producția proprie la costul de producție;
 bunurile obținute gratuit la valoarea justă;
 bunurile aduse ca aport în natură la capitalul social la valoarea de aport (stabilită în
urma evaluării);

16 Ordinul MFP 1802/29 Decembrie 2014, Monitorul oficial al României nr.63, 30 Decembrie 2014.
17 Bazele contabilității, http://www.conta -conta.ro/miscellaneous/887_miscellaneous_contabilitate_files%20887_.pdf, p.119 –
120.

38

În ceea ce privește evaluarea stocurilor la bilanț aceasta se face la cea mai mică
valoare dintre cost și valoarea realizabilă netă.
Evaluarea la ie șirea din patrimoniu în vederea vânzării, consumului, donațiilor,
distrugerii, etc, evaluarea stocurilor se poate face prin mai multe metode.
 Metoda identificării individuale care reprezintă evaluarea bunurilor la costul de
intrare și se aplică în cazul pr oduselor de folosință îndelungată ce pot fi identificate
prin serie, data de intrare, costul de achiziție sau de producție.
 Metoda costului ponderat care presupune calcularea unui cost mediu după fiecare
recepție sau la sfârșitul lunii în funcție de cantit ățile existente și cele intrate,
precum și prețurile corespunzătoare acestora.
 Metoda prima intrare -ieșire înseamnă că primele bunuri cumpărate sunt primele
care se dau în consum sau sunt vândute.
 Metoda ultima intrare, ultima ieșire, adică ultimele loturi intrate sunt vândute sau
date spre consum iar apoi primele.
Alegerea metodei de evaluare a ieșirilor din stoc se stabilește prin politica contabilă a
firmei.
Deoarece inventarierea patrimoniului se face, de regulă, la inchiderea exercițiului
financiar, evaluarea la inventariere coincide cu evaluarea la data bilanțului. La inventarierea
patrimoniului evaluarea stocurilor se face la valoarea actuală sau de utilitate denumită și
valoare de inventar.
În funcție de specificul activității, ca metodă de evalu are a stocului, mai pot fi folosite
metoda costului standard, în activitatea de producție, sau metoda prețului cu amănuntul, în
comerțul cu amănuntul.
Metoda prețului cu amănuntul este specifică unităților de comerț cu amănuntul pentru
determinarea costu lui stocurilor numeroase și cu mișcare rapidă și care au marje de adaos
comercial similare18.

18 Bazele contabilității,http://www.co ntaconta.ro/miscellaneous/887_miscellaneous_contabilitate_files%20887_.pdf , p.121 –
125.

39

4.5. Documente privind evidența operativă a stocurilor.
Toate operațiunile ocazionate de existența și mișcarea stocurilor se consemnează în
anumite documente de evidență operativă care au calitatea de documente justificative.
În afara funcției informaționale a documentelor justificative care constă în suportul
material al înregistrării fenomenelor economice și financiare în contabilitate, documentele
justifica tive fac dovada înfăptuirii operațiilor și angajează răspunderi, drepturi și obligații cu
privire la existența și mișcarea elementelor patrimoniale, cu alte cuvinte, îndeplinesc și o
funcție gestionară.
Din multitudinea de documente prevăzute în nomenclat orul privind modelele
registrelor și formularelor tipizate, comune, pe economie, pentru activitatea financiară și
contabilă, aplicația ContARC folosește documente pentru intrări in gestiune și ieșiri din
gestiune.
Documentele care se folosesc pentru intră ri în gestiune sunt:
 Factura
 Note de recepție/constatare de diferențe.
 Bonul de predare -transfer -restituire.
 Fișa de magazie.
La ieșirea din gestiune a stocurilor se folosesc următoarele documente:
 Bon de consum.
 Fișa de magazie.
 Bonul de casa.
 Factura.
 Aviz de insoțire.
Factura se intocmește la livrarea produselor și a mărfurilor, la executarea lucrărilor și
la prestarea serviciilor de către compartimentul.
Servește ca:
 document de bază pentru întocmirea instrumentului de decontare a produselor și
mărfurilor livrate, a lucrărilor executate sau a serviciilor prestate;
 document de însoțire a mărfii pe timpul transportului;
 document de încărcare în gestiunea primitorului;
 document justificativ de înregistrare în contabilitatea furnizorului și a
cumpără torului.

40

Avizul de însoțire al mărfii care se întocmește în mod special atunci când unitățiile nu
au posibilitatea întocmirii facturii în momentul livrării produselor, mărfurilor sau altor valori
materiale.
Servește ca:
 document de însoțire a mărfii pe t impul transportului;
 document ce stă la baza intocmirii facturii;
 dispoziție de transfer a bunurilor materiale de la o gestiune la alta ale aceleași
unități;
 document de primite în gestiunea cumărătorului sau în gestiunea primitoare din
cadrul aceleași uni tăți în cazul transferului.
Nota de recepție și constatare de diferență este documentul ce se întocmește de către
comisia de recepție și gestionar pe măsura efectuării recepției bunurilor achiziționate, la locul
de depozitare, sau în unitatea cu amănuntul .
Servește ca:
 document pentru recepția bunurilor aprovizionate;
 document justificativ pentru încărcarea în gestiune;
 document justificativ de înregistrare în contabilitate;
 act de probă în litigiile cu cărăușii și furnizorii, pentru diferențele constatat e la
recepție.
Bonul de predare -transfer -restituire se folosește ca bon de predare în situația predării
la magazie a produselor finite, semifabricatelor, materialelor refolosibile, etc, iar ca bon de
transfer se întocmește în momentul transferării de bunu ri materiale între două gestiuni
aparținând aceleași entități economice și nedispersate teritorial. Ca bon de restituire se
folosește în cazul restituirii la magazie a unor valori materiale nefolosite.
Bonul de consum se întocmește pe măsura eliberării în consum a bunurilor materiale
din magazie.
Servește ca:
 document de eliberare din magazie pentru consumul materiilor prime, materialelor
consumabile, combustibililor, pieselor de schimb, etc.
 document justificativ de scădere din gestiune;
 document justificativ de înregistrare în evidența magaziei și în contabilitate.
Fișa de magazie este documentul care se întocmește separat pentru fiecare fel de
material în parte.

41

Fișele de magazie se țin la fiecare loc de depozitare a valorilor materiale, pe fel uri de
materiale ordonate pe grupe, subgrupe, sau în ordine alfabetică.
În comerțul cu amănuntul fișa de magazie se folosește pentru evidența materialelor
consumabile și a obiectelor de inventar necesare pentru desfășurarea activității magazinului19.

19 Mihai Tănase, Contabilitatea mărfurilor , Brașov, 2011, p. 13-16

42

CAPITOLUL 5 REALIZAREA UNOR MODULE SOFTWARE PENTRU
CONTABILITATE

5.1. Prezentarea generală a aplicației ContARC
ContARC este un software care conține aplicații pentru contabilitate. Plecând de la
motto -ul "Soluții finale pentru situații complicate!" , ContARC urmărește să gasească acele
soluții necesare atunci când totul devine mult prea complicat și pare imposibil de rezolvat.
Astfel aplicația vine în ajutorul contabilului, îi preia datele acestuia, le prelucrează, și le
salvează automat în baza de date.
Aplicația se poate folosi foarte ușor, fiind disponibilă în special acelor persoane care
sunt la început de carieră, dar și pentru cei care deja au experiență în domeniu și doresc să se
foloseasca de modulele disponibile ale aces tuia.
ContARC oferă:
 securitatea și integritatea bazelor de date prin metode specifice.
 salvarea și recuperarea bazei de date într -un mod eficient și ușor.
 posibilitatea de a schimba utilizatorul direct din meniul principal.
 înregistrarea mai multor socie tăți.
 crearea de relații între societăți și furnizori sau clienți.
 adăugarea unui nomenclator de produs, care face calculele automat.
 evidența stocurilor, cu ajutorul operațiilor de intrări și ieșiri.
 prelucrarea facturilor primite, a notelor de predare, ș i a bonurilor de consum.
 înregistrarea unor facturi emise.
 calcularea automată a tuturor operațiilor necesare pentru un produs, o factură
emisă/primită, un bon de consum etc.
 informații despre facturie primite/emise scadente până la o dată.
 posibilitatea de a instala Teamviewer, un program ce oferă accesul la distanță între
doi sau mai mulți utilizatori pentru verificarea și oferirea de soluții între ei.
 posibilitatea de a deschide calculatorul, pentru a efectua calculele necesare.
 adăugarea de notițe pent ru a păstra intacte informațiile.
 vizualizarea stocurilor pentru o anumită grupă de produse.
 imposibilitatea de a trece un produs în stoc pe minus.
 interfață cu un design bine ales și o interacțiune plăcută cu utilizatorul.

43

 confirmarea înainte de ștergerea finală a unei înregistrări.
 rapiditatea acțiunilor în fiecare dintre modulele disponibile.
 rezolvarea imediată a problemelor apărute precum și actualizarea perioadică a
acestuia.
 alte caracterstici esențiale, care urmează să le cunoșteți prin utilizarea a plicației.
5.2. Module disponibile
Aplicația ContARC vine în ajutorul contabilului prin mai multe module disponibile.
Modulele disponibile sunt următoarele:
 Autentificarea în aplicație.
 Administrare.
 Parteneri.
 Nomenclator produse.
 Intrări .
 Ieșiri.
 Liste.
 Urmărire.
 Diverse.

Figura 5.1. Meniul aplicației ContARC.

44

Despre fiecare modul o să discutăm în cele ce urmează. Fiecare modul, este impărțit în
mai multe aplicații de tip software pentru a fi pe întelesul tuturor. Aplicația cum am discutat
deja, urmărește să ofere soluții finale pentru toate situațiile complicate.
5.2.1. Autentificarea în aplicație
Autentificarea în aplicația ContARC este posibilă doar dacă aveți un cont înregistrat.
Un cont se poate crea din panoul de administrare la care are acces doar administratorul
aplicației.
Există doua posibilități de a te autentifica în aplicație. Prima posibilitate este
disponibilă doar pentru utilizatorii înregistrați. Aceasta după autentificare, vă oferă accesul la
programul. A doua posibilitate este autentificarea imediată ca și administrator al aplicației. În
acest caz, se deschide panoul cu utilizatorii înregistrați, pentru a vedea perioada de valabilitate
a contului, dar și datele fiecărui utilizator. Din respectivul panou, administratorul po ate alege
să deschidă direct programul, fără să mai fie necesar încă un cont și de utilizator.

Figura 5.2. Autentificarea în aplicație.

45

Figura 5.3. Panoul de administrare al aplicației.

5.2.2. Administrare
Modulul administrare reprezintă cea mai impor tantă parte a programului. Aici
contabilul iși poate înregistra societățile pentru care lucreză, iși poate monitoriza și edita
societățile deja introduse, dar și să iși întrețină în mod eficient baza de date. Oferă și
posibilitatea de a părăsi imediat apli cația.
Acest modul este împărțit în alte patru module:
 Adăugare societate (oferă posibilitatea contabilului de a -și înregistra toate
societățile la care acesta lucrează).
 Configurare societăți (asigură monitorizarea, editarea, și ștergerea societăților).
 Întreținere bază de date (permite contabilului să iși salveze baza de date în locația
dorită de acesta, și să iși recupereze baza de date deja salvată).
 Schimbă utilizator.
 Ieșire (inchiderea după confirmare a programului).
Modulul de adăugare a unei societăți permite înregistrarea unei societăți, în functie de
ce este aceasta: persoană fizică sau juridică. De asemenea, are câmpuri disponibile pentru
toate informațiile necesare necesare înregistrării unei societăți.

46

Figura 5.4. Adăugarea unei societă ți.

Configurare societăți este acel modul în care putem vedea societățile înregistrare deja
în modulul anterior. De asemenea, aici șterge o societate, pentru a face acest lucru selectăm o
înregistrare și folosim butonul Șterge, iar apoi apăsăm butonul Sa lvează, pentru a salva
modificările făcute. Confirmarea ștergerii se face prin salvarea modificării. Asta pentru a evita
ștergerea nedorită a unei înregistrări. Editarea se poate face direct din tabel, iar la sfârșit, se
confirmă tot prin apasarea butonulu i Salvează.

47

Figura 5.5. Configurarea societăților.

Salvarea și recuperarea bazei de date este posibilă în modulul Întreținere bază de date.
Este un modul destul de important deoarece se mai întâmplă uneori să avem probleme tehnice
cu calculatorul, iar acest modul ne permite să ne salvăm înregistrările făcute în baza de date,
pentru a nu face totul de la capăt. Și în cazul în care se dorește o reinstalare a sistemului de
operare, acest modul este o mână de ajutor din partea aplicației ContARC. De aici se alege
locația la care se dorește salvarea, fisierul este salvat cu numele ContARC, data, ora și
minutul. Iar apoi apasând butonul Caută de la Recuperare, baza de date este recuperată
automat.

48

Figura 5.6. Întreținere bază de date.

Schimbarea utilizato rului este utilă pentru cei care dețin mai multe conturi de
utilizatori. Astfel schimbarea utilizatorului se poate face direct din interfața aplicației.
Ultimul modul este cel care ne permite să părăsim aplicația. Acest lucru este posibil
după confirmarea din căsuța de dialog.

5.2.3. Parteneri
Modulul parteneri permite contabilului să iși gestioneze toți parteneri pe care îi are,
corespunzători unei societăți. Prin parteneri întelegem atât furnizorii cât și clienții unei
societăți. În acest modul se adă uga fiecare, completând spațiile necesare.
Pentru a adăuga un nou partener, se folosește butonul Adăugare, iar apoi se
completează cu datele reale ale partenerului. La sfârșit acesta rămâne salvata în baza de date.
De menționat aici, atunci când introduce ți un nou partener, apăsați butonul F1 de la tastatura,
pentru a scrie codul corect al unei societăți pentru care dorim să îi setăm un partener.

49

Pentru a sterge un partener, se selectează rândul unei înregistrări din tabel, și se apasă
butonul Șterge. În acel moment, înregistrarea din tabel a dispărut, dar pentru a confirma
această acțiuni, trebuie să apăsăm butonul Salvează. Același lucru și când dorim să modificăm
un câmp al unui partener din tabel. Editarea se poate face direct din tabel.
Butonul salve ază, confirmă toate modificările aduse în tabel, și actualizează
înregistrările.

Figura 5.7. Configurarea și adăugarea partenerilor în aplicație.

5.2.4. Nomenclator produse
În acest modul, contabilul iși înregistrează toate produsele de care are nevoie pentru a
face atât operații de intrări, cât și operații de ieșiri. Modulul afisează toate produsele deja
înregistrare, cu toate specificațiile pe care le -am introdus atunci când am adăugat un produs.
Pentru adăugarea unui produs, apăsăm butonul Adă ugare produs, iar apoi o alta
fereastră ne este deschisă. Aici completăm cu atentie denumirea produsului, selectăm (daca nu
sunt deja, putem adăuga de pe butonul +) unitatea de măsura și grupa de produse, iar apoi
introducem prețul furnizorului fără TVA. D e asemenea, alegem neapărat cota TVA, și în
cazul în care avem adaos comercial, modificăm valoarea 0. În acel moment suntem pregătiți

50

să folosim butonul Calculează. Acel buton calculează automat prețul de vanzare cu și fără
TVA în functie de pretul furnizo rului, cota tva, și daca este cazul, în functie de adaosul
comercial.
Finalizarea se poate face prin butonul Adăuga, după ce avem toate câmpurile
completate corect.
Adăugarea este imediată, precum și actualizarea în tabelul produselor. Pentru a șterge
un produs avem butonul Șterge, iar apoi folosim butonul Salvează pentru a confirma
ștergerea.
În acest modul nu este permisă modificarea direct din tabel pentru a evita modificarea
incorectă a valorilor. Pentru a face acest lucru, trebuie șters un produs și apoi adăugate din
nou

Figura 5.8. Nomenclator produse.

5.2.5. Intrări
Toate operațiile de intrări se fac în acest modul. Intrările sunt operațiile specifice
încărcarii în gestiune. Pentru fiecare intrare a unui produs, este generată automat și o
înreg istrare în modulul Stoc. Despre modulul stoc o să discutăm în cele ce urmează.
Modulul intrări este impărțit în alte trei module:
 Facturi primite.
 Note de intrare -recepție.

51

 Note de predare.
Facturi primite este modulul pe care îl folosim atunci când primim de la un furnizor, o
factură. Pentru a genera nota de intrare -recepție, trebuie să înregistrăm prima data, factura
primită de la furnizor, cu produsele primite etc. În acest modul, se selectează din listă
furnizorul, iar codul furnizorului este auto mat completat. Se alege data și scadența facturii.
Tot în acest modul, putem vizualiza și adăuga o factura. Implicit ne sunt afișate în tabel toate
facturile pe care le avem deja introduse. Se completează Nr. fact., pentru a vizualiza o factura,
spre exemp lu: factura nr.1. Introducem în câmpul Nr. fact., numărul 1, iar apoi toate
produsele și totalurile ne sunt afișate în tabel. Derulăm în jos dacă dorim să vedem până la ce
număr avem o factura. Dacă nu avem o factură cu numarul 5, atunci introducem în camp
numărul 5 și suntem pregătiți să înregistrăm o nouă factura.
Mai jos avem de selectat codul produsului deja introdus în Nomenclator produse.
Atunci ne sunt preluate automat produsele, cu prețurile deja calculate. Introducem cantitatea,
și daca este cazul , cota de discount, iar apoi calculele sunt actualizate automat.
După ce toate câmpurile sunt completate putem folosi Adăugare produs, pentru a
adăuga un produs în factura cu nr 5, luată ca și exemplu anterior. Pentru a șterge și salva
modificările avem b utoanele de lânga cel de adăugare.
Dacă factura a fost completată cu toate produsele, și totalul este cel corespunzator
facturii primite, putem cu încredere să folosim butonul Generază NIR. În acel moment nota de
intrare -recepție a fost generată automat.

52

Figura 5.9. Facturi primite.

Modulul Note de intrare -recepție este alcătuit din toate facturile primite pe care le -am
introdus în baza de date, după ce am generat un NIR. Acestea conțin totalurile dintr -o factură
primită, iar conform unui ID, se poate prelua produsele facturii. Relația între note de intrare –
recepție și facturi primite este făcută prin o coloană separată, care conține numărul facturii.

53

Figura 5.10. Note de intrare -recepție.

În ultimul modul, numit și Note de predare, ne este prezentat un document prin care
predăm produsele finite la magazie. Astfel putem efectua o așa numită, încărcare în gestiune.
Și aici se preiau, și se prelucrează, detaliile unui produse adăugat în nomenclator
produse. În funcție de cantitate ne sunt făc ute calculele automat și se poate genera la sfârșit, o
notă de predare.

Figura 5.11. Note de predare.

54

5.2.6. Ieșiri
Ieșirile sunt operațiile specifice descărcării din gestiune. În acest modul, atunci când
folosim un produs din stoc, cantitatea este scăz ută automat. Modulul ne permite să emitem
facturi, și să adăugam bonuri de consum.
Modulul este impărțit în alte doua module: Facturi emise și bonuri de consum.
Facturi emise este un modul asemănător cu modulul Facturi primite. În cazul facturilor
emise, societatea emite o factură pentru clienți. Un alt aspect diferit față de facturile primite,
pentru fiecare produs adăugat aici, se scade cantitatea introdusă din stoc. În cazul facturilor
primite, în stoc era adăugată cantitatea de produs.
De asmenea, în cazul facturilor emise, trebuie completate niște spații suplimentare.
Altfel spus, se introduc informații despre emitent, tipul de plată, și dacă este cazul, să tipărim
o chitanță. Iar apoi se validează factura, după ce am completat toate câmpurile din ta bel
necesare pentru a calcula totalul produselor.

Figura 5.12. Facturi emise.

55

Bonurile de consum se folosesc atunci când eliberăm materiale din magazie, pentru a
intra într -un proces de producție.
Se preiau produsele necesare din Nomenclator produse, se introduce cantitatea, iar
aplicația face calculele automat. În final, se validează bonul de consum.

Figura 5.13. Bonurile de consum.
5.2.7. Liste
Modulul liste oferă posibilitatea de a vedea listele actuale, pentru a efectua operații de
ieșire sau intrare. În acest modul avem stocul. Stocul este calculat automat. Adăugarea în stoc
este automat prin operațiile de intrare din modulul Intrări. Atunci când adăugam un produs,
spre exemplu, într -o factură primită sau într -o notă de predare, în sto c este creată o nouă
înregistrare cu cantatitatea introdusă. Dacă acel produs există deja în stoc, daca efectuăm o
operație de intrare, ne este adăugată noua cantitate. Daca este o operație de ieșire din modulul
Ieșiri, cantitatea este scăzută. Dacă stocul este pe 0, sau se dorește să se scadă din stoc o
cantitatea mai mare decât ce avem, primim automat eroare. Stocul nu poate să fie negativ!

56

De asemenea, produsele în stoc sunt ordonate după grupa de produse. Se poate
introduce numele unei grupe de produse , pentru a vizualiza strict doar produsele din grupa
respectivă. Astfel oferă un control mai bun contabilului de a vedea strict ce produse dorește.
Nu se pot efectua operații de adăugare, șterger sau modificare în acest modul, fiind un
modul disponibil do ar pentru vizualizare.

Figura 5.14. Lista stoc.
5.2.8. Urmărire
Acest modul oferă posibilitatea de a urmări perioada de scadență a facturilor primite
sau emise. Modulul este impărțit în alte două module:
 Facturi emise scadente.
 Facturi primite scadente.
În cazul în care avem o factură în care perioada de scadență a trecut, informațiile
acelei facturi sunt colorate cu roșu. Dacă se află în ultima săptămână de scadență, informațiile
acelei facturi sunt colorate cu galben.
Astfel contabilul poat e să iși urmărească scadența facturilor. Astfel acesta poate să fie
la curent cu toate informațiile. În tabel, facturile sunt ordonate în funcție de data scadenței.

57

Figura 5.15. Facturi emise scadente.
5.2.9. Diverse
Modulul diverse este conținut de di ferite unelte ce vin în ajutorul unui contabil. Scopul
acestui modul este de a permite contabilului să iși noteze lucrurile importante, să iși calculeze
sau să verifice anumit calcule ale programului, dar și să permită controlul la distanță altor
persoane în cazul în care solicită ajutorul cuiva. De asmenea, îi oferă informații despre
aplicația ContARC, și cum poate să raporteze o problemă apărută sau anumite sugestii legate
de program.
Modulul este impărțit în alte patru module:
 Calculator.
 Notițe.
 Acces la distanță.
 Despre.
Modulul calculator ne deschide automat calculatorul din sistemul de operare, pentru a
putea verifica sau face calcule.
În modulul notițe, putem nota toate ideile de care avem nevoie mai târziu. Acest
modul ne este deschisă automat a plicația notepad din sistemul de operare.

58

Dacă avem posibilitatea de a ne conecta la internet, modulul acces la distanță ne
descarcă automat Teamviewer. Teamviewer este deci un program ce oferă posibilitatea de a
ne conecta la un alt calculator al unei pe rsoane care dispune de internet, sau accesul altor
persoane la calculatorul nostru, atunci cand există conexiune la internet.
Acest acces este dat de către un ID și o parolă, formate din cifre și litere. Mare atenție
să nu oferim oricui aceste informații!
În ultimul modul se pot vedea informații despre program și modul prin care putem
contacta administratorul programului.

Figura 5.16. Legătura cu diverse aplicații din Windows.

Figura 5.17. Despre aplicația ContARC.

59

CONCLUZII
În zilele noastre tehnologia a progresat foarte mult. Aplicațiile software sunt din ce în
ce mai bine optimizate, și adaptate pe întelesul fiecărui utilizator. Acestea au și rolul de a
prelucra informațiile, de a le păstra și monitoriza în permanență. În t recut, diferite acțiuni pe
care le oferă astăzi o aplicație, erau făcute manual de către utilizator dar necesitau o gramadă
de timp pentru calcularea, verificarea sau aranjarea informațiilor. O aplicație complexă poate
duce la scurtarea acestor acțiuni.
Există aplicații pentru orice domeniu. Programatorii sunt din ce în ce mai avansați,
utilizând la rândul lor metode noi pentru satisfacerea clienților. Înterfețele care interactionează
cu utilizator sunt cele mai căutate astăzi. Acestea se pot crea atât pe o pagină web, cât și pe o
aplicație Windows cum este ContARC. Prin interacțiunea cu utilizatorul, poate să preia
informațiile necesare pentru a -l ajuta. Dacă o aplicație software are în dotare și o bază de date
(cum sunt majoritatea aplicațiilor astăzi), atunci datele utilizatorului sunt păstrate în aceasta.
Securitatea aplicațiilor este foarte importantă. Baza de date poate să fie atacată destul
de ușor, dacă nu sunt folosite spre exemplu, procedurile stocate. ContARC folosește pentru
fiecare operație de adăugare, ștergere sau modificare, proceduri stocate. De asemenea,
criptarea parolei atunci când este vorba de un cont al unui utilizator reprezintă o importantă
caracteristică a securității.
Prin aplicația ContARC am reușit să creez și interacțiunea per manentă cu utilizatorul.
Utilizatorul este un contabil. Contabilul poate să iși folosească datele societății la care
lucrează, și poate face diferite operații de intrări -ieșiri cu furnizorii și clienții. Asigură
utilizatorilor toate resursele necesare și d iferiți algoritmi.
Aplicațiile software pentru contabilitate au evoluat din ce în ce mai mult datorită
interesului celor din domeniul contabilității, și colaborării acestora cu programatorii. Astfel
programatorii sunt căutați în orice domeniu, pentru a of eri aplicații necesare unor instituții,
companii, etc.

60

Bibliografie

1. Andrew Troelsen, Pro C# 5.0 and the .NET 4.5 Framework, Sixth Edition , Appress,
August 2012
2. Bryan Syverson, Joel Murach, Murach's SQL SERVER 2012 for Developers (Training
& Reference), Mike Murach & Associate, August 2012
3. Cătălin Galeș, Programare C# , http://www.math.uaic.ro/~cgales/csharp/course.htm,
14.04.2018
4. Claudiu I. Popirlan, Proceduri stocate , http://id.inf.ucv.ro/~p opirlan/bd/laborator8.pdf
5. Constantin Gălățan, Susana Gălățan , Curs de C# – Programare în Visual C# 2008
Express Edition , Editura L&S Info -mat, 2008
6. Mihai Tănase, Contabilitatea mărfurilor , Brașov, 2011
7. Patrick LeBlanc, Microsoft SQL Server 2012 Step by St ep, O'Reilly Media, 2013
8. Vasile Darie, și alții, Manualul expertului contabil și al contabilului autorizat , ediția a
4-a, Editura Agora, 1998.
9. XXX, .NET Framework Data Providers , https://docs.microsoft.com/en –
us/dotnet/framework/data/adonet/data -providers
10. XXX, Form Class , https://msdn.microsoft.com/en –
us/library/system.windows.forms.form(v=vs.110).aspx
11. XXX, Legea contabilității 82/1991 republicată și actualizată
12. XXX, Ordinul MFP 1802/29 Decembrie 2014, Monitorul oficial al României nr.63,
30 Decembrie 2014.
13. XXX, Bazele contabilității , http://www.conta –
conta.ro/miscellaneous/887_miscellaneous_contabilitate_files%20887_.pdf

Similar Posts