Invatare Atomica

Rapoarte in Access: grupare, totaluri si tiparire

De la un tabel cu date pana la o hartie gata de pus la dosar

Progres lectie:
0%
🎯

De ce conteaza aceasta lectie

Un tabel plin de date nu e de folos nimanui pana nu il transformi intr-o hartie clara, cu totaluri pe categorii si gata de tiparit. In aceasta lectie inveti sa construiesti in Access un raport — obiectul facut special pentru asta — folosind Expertul de rapoarte, gruparea inregistrarilor, campurile de total (sume, medii) si pregatirea paginii pentru imprimanta. La final parcurgi o aplicatie completa: de la doua tabele simple, la interogarea care le leaga, pana la raportul tiparit, exact cum ai avea nevoie intr-un atelier scolar care tine evidenta materialelor consumate.

Dupa aceasta lectie vei putea:

  • Sa explici diferenta dintre un raport si un formular in Access
  • Sa construiesti un raport cu Expertul de rapoarte (Report Wizard), pornind de la un tabel sau o interogare
  • Sa grupezi inregistrarile unui raport dupa un camp si sa recunosti sectiunile Group Header/Group Footer
  • Sa adaugi campuri de total (Sum) pe grup si pe intregul raport, cu formula corecta in Control Source
  • Sa pregatesti un raport pentru tiparire: Print Preview, orientarea paginii, exportul in PDF
  • Sa recunosti si sa repari cea mai frecventa greseala: un camp calculat care lipseste din interogarea sursa

Incearca singur!

Provocare — inainte sa citesti:

Ai completat luna aceasta, intr-un tabel Access, tot ce s-a consumat din depozitul atelierului: cine a luat ce material, cat si cand. Seful de atelier iti cere: "Da-mi o hartie, gata de pus la dosar, cu cat s-a consumat pe fiecare categorie de materiale si cu un total general la sfarsit." Deschizi tabelul, il privesti pe ecran... si observi ca nu seamana deloc cu ce ti-a cerut. Scrie mai jos: ce crezi ca ii lipseste tabelului simplu ca sa devina hartia ceruta, si ce obiect din Access crezi ca ar trebui sa folosesti?

💡 Ai nevoie de un indiciu?

Un tabel arata toate randurile la fel, unul dupa altul, fara sume si fara sa se opreasca la marginea unei pagini de tiparit. Ce ai nevoie e un obiect care sa grupeze randurile pe categorie, sa adune valorile fiecarei categorii si sa se asaze frumos pe pagina de hartie. In Access, acel obiect se numeste raport — subiectul lectiei de azi.

1

Ce este un raport si cand il folosesti

Un raport este obiectul din Access facut special pentru a afisa si a tipari date intr-o forma clara, aranjata pe pagini. Spre deosebire de formular (care serveste la introdus si editat date, un rand pe ecran), raportul aduna mai multe inregistrari, le poate grupa dupa un camp, le poate insuma si le aseaza automat pe pagini de hartie de dimensiune fixa.
De unde ia raportul datele:

Un raport se construieste intotdeauna pe baza unui tabel sau a unei interogari — niciodata pe date "libere". Daca ai nevoie de un camp calculat (de exemplu o valoare = cantitate x pret), acel camp trebuie sa existe deja in interogarea sursa, inainte sa construiesti raportul. Retine acest lucru — revenim la el la finalul lectiei, la cea mai frecventa greseala.

Exemple de rapoarte utile intr-un atelier:

O lista de materiale consumate intr-o luna, grupata pe categorii, cu total pe fiecare categorie si total general.
Un catalog de produse in stoc, sortat alfabetic, gata de printat si pus pe raft.
O fisa de comenzi pe client, grupata pe client, cu valoarea fiecarei comenzi si totalul platit de acel client.

2

Aplicatia noastra: doua tabele si o interogare cu camp calculat

Pentru tot restul lectiei folosim un exemplu complet, pe care il poti reface identic. Este o mica baza de date pentru evidenta materialelor consumate intr-un atelier scolar, cu doua tabele legate printr-o relatie unu-la-multi: un material din Materiale poate aparea in mai multe randuri din Consumuri (de exemplu Sarma electrica e consumata de doua ori, in doua zile diferite), dar un rand din Consumuri se refera la un singur material. Sensul practic: nu copiezi de fiecare data pretul si categoria materialului in tabelul de consumuri — le pastrezi o singura data in Materiale si le "imprumuti" prin legatura.
Ce inseamna termenii de mai jos (daca ai sarit lectiile 1-2):

Cheie primara — campul care identifica unic fiecare rand dintr-un tabel (nu se repeta niciodata); Access il marcheaza cu o iconita de cheie.
AutoNumber — tip de camp pe care Access il completeaza singur, cu un numar care creste automat (1, 2, 3...) — de obicei asa se face cheia primara, ca sa nu o completezi tu manual.
Cheie externa — un camp dintr-un tabel care contine valoarea cheii primare din alt tabel, ca sa lege cele doua randuri intre ele (aici: ID_Material din Consumuri arata spre ID_Material din Materiale).
Text scurt — tip de camp pentru text de cel mult 255 de caractere (nume, denumiri, coduri).
Currency — tip de camp pentru sume de bani, afisat automat cu simbolul monedei si doua zecimale.

Tabelul Materiale (informatia despre fiecare material):

ID_Material — AutoNumber, cheie primara
Denumire — Text scurt
Categorie — Text scurt (Electric / Lemn / Mecanic / Intretinere)
Pret_Unitar — Currency

Trei randuri de exemplu: Sarma electrica (Electric, 3,50 lei), Placaj lemn (Lemn, 45,00 lei), Surub M6 (Mecanic, 0,20 lei).

Cum creezi efectiv tabelul Materiale:

1. Fila Create, grupul Tables, butonul Table Design (iti da control pe tipul fiecarui camp, spre deosebire de Table simplu).
2. Scrii pe primul rand numele campului ID_Material si alegi tipul AutoNumber; dai clic dreapta pe randul lui si alegi Primary Key (sau apesi iconita de cheie din panglica) — asa devine cheie primara.
3. Adaugi randurile urmatoare: Denumire (Text scurt), Categorie (Text scurt), Pret_Unitar (Currency).
4. Salvezi tabelul cu numele Materiale (Ctrl+S), apoi treci in Datasheet View si tastezi cele trei randuri de exemplu de mai sus — ID_Material se completeaza singur.

Tabelul Consumuri (cine a luat cat, cand):

ID_Consum — AutoNumber, cheie primara
ID_Material — Number, cheie externa spre Materiale.ID_Material
Data — Date/Time
Cantitate — Number
Clasa — Text scurt (clasa care a consumat materialul)

Patru randuri de exemplu: Sarma electrica — 10.03.2026, 15 m, XI A · Sarma electrica — 12.03.2026, 8 m, XI B · Placaj lemn — 11.03.2026, 2 buc, X C · Surub M6 — 10.03.2026, 50 buc, XI A.

Cum creezi tabelul Consumuri, la fel, prin Table Design:

Aceiasi pasi ca la Materiale: ID_Consum AutoNumber marcat Primary Key, apoi ID_Material (Number), Data (Date/Time), Cantitate (Number), Clasa (Text scurt). Salvezi cu numele Consumuri si introduci in Datasheet View cele patru randuri de exemplu — pe coloana ID_Material scrii direct 1, 2 sau 3, dupa ordinea in care ai introdus materialele in celalalt tabel (1 = Sarma electrica, 2 = Placaj lemn, 3 = Surub M6).

Cum definesti relatia dintre cele doua tabele:

Inchizi ambele tabele, apoi fila Database Tools, grupul Relationships, butonul Relationships. Adaugi in fereastra ambele tabele (Show Table). Tragi cu mouse-ul campul ID_Material din Materiale peste campul ID_Material din Consumuri; se deschide fereastra Edit Relationships — bifezi Enforce Referential Integrity (ca sa nu poti introduce un consum pentru un material inexistent) si apesi Create. Access deseneaza o linie intre cele doua tabele: asta e relatia unu-la-multi de care vorbeste interogarea de mai jos.

Interogarea Consum_cu_valoare (sursa raportului):

In fereastra de proiectare a interogarii (Design View) adaugi ambele tabele, legate automat prin relatia dintre ID_Material din Consumuri si ID_Material din Materiale (cea creata mai sus in Relationships). Aduci in grila campurile Categorie, Denumire, Data, Cantitate, Pret_Unitar, iar intr-o coloana noua, goala, scrii in randul Field un camp calculat:

Valoare: [Cantitate]*[Pret_Unitar]

Numele dinaintea celor doua puncte (Valoare) devine titlul coloanei calculate; formula de dupa foloseste numele campurilor din tabele, intre paranteze drepte. Salvezi interogarea cu numele Consum_cu_valoare — pe ea o vom folosi la raport.

3

Expertul de rapoarte (Report Wizard), pas cu pas

Cel mai simplu mod de a construi un raport este Expertul de rapoarte — o succesiune de ferestre care te intreaba, pas cu pas, ce vrei sa apara pe raport. Construim raportul pornind de la interogarea Consum_cu_valoare creata mai sus.
Pasii concreti:

1. In panglica (ribbon), deschide fila Create, apoi in grupul Reports apasa butonul Report Wizard.
2. In lista Tables/Queries, alege Query: Consum_cu_valoare. Din lista Available Fields muta in Selected Fields campurile Categorie, Denumire, Data, Cantitate, Pret_Unitar, Valoare, folosind butonul cu sageata simpla (un camp) sau dubla (toate campurile). Apasa Next.
3. Fereastra de grupare te intreaba daca vrei niveluri de grupare. Selectezi Categorie si apesi sageata pentru a o adauga ca nivel de grupare. Apasa Next.
4. Fereastra de sortare iti permite pana la patru campuri de sortare in interiorul fiecarui grup — alegi Data, crescator. Aici apare si butonul Summary Options, unde poti bifa Sum (suma) pentru campul Valoare direct din expert. Apasa Next.
5. Alegi aspectul paginii (Layout: Stepped/Block/Outline) si orientarea (Portrait/Landscape — pentru multe coloane alegi Landscape). Apasa Next.
6. Dai un titlu raportului, de exemplu Raport consum materiale, si alegi Finish pentru a-l vedea in Print Preview, gata format.

De ce plecam de la o interogare, nu de la tabel:

Daca am fi ales direct tabelul Consumuri, nu am fi avut coloana Categorie (ea sta in tabelul Materiale) si nici coloana Valoare (nu exista in niciun tabel, e calculata). Interogarea aduna informatia din ambele tabele si adauga calculul — abia dupa aceea raportul are ce arata.

4

Sectiunile unui raport si gruparea in Design View

Daca deschizi raportul in Design View (clic dreapta pe raport, in Panoul de navigare, apoi Design View), il vezi impartit in benzi orizontale numite sectiuni. Fiecare sectiune spune Access-ului cand si de cate ori sa afiseze ce contine.
Sectiunile, de sus in jos:

Report Header — apare o singura data, la inceputul raportului (ex. titlul raportului).
Page Header — se repeta in capul fiecarei pagini (ex. numele coloanelor).
Group Header — se repeta la inceputul fiecarui grup (ex. numele categoriei: "Electric").
Detail — se repeta o data pentru fiecare inregistrare (fiecare rand de consum).
Group Footer — se repeta la sfarsitul fiecarui grup (aici pui subtotalul grupului).
Page Footer — se repeta la baza fiecarei pagini (ex. numarul paginii).
Report Footer — apare o singura data, la sfarsitul raportului (aici pui totalul general).

Cum adaugi sau modifici o grupare manual:

In fila Design a raportului, in grupul Grouping & Totals, apesi butonul Group & Sort. Se deschide, jos, panoul "Group, Sort, and Total". Apesi Add a group, alegi campul Categorie; apoi apesi More pe randul grupului si bifezi with a footer section, ca sa apara sectiunea Group Footer in care vei pune totalul.

5

Campuri de total: Sum, Avg si formula exacta

Un camp de total intr-un raport este o casuta de text neasociata (unbound text box) — adica o casuta care NU e legata direct de niciun camp din tabel (spre deosebire de casutele "Denumire" sau "Cantitate", care afiseaza pur si simplu continutul acelui camp). In loc de un nume de camp, in proprietatea Control Source a casetei neasociate scrii o formula cu o functie de agregare, iar Access calculeaza rezultatul cand afiseaza raportul.
Cum adaugi manual un total de grup, in Design View:

1. In fila Design, grupul Controls, alege unealta Text Box.
2. Deseneaza-l in sectiunea Categorie Footer (Group Footer), sub coloana Valoare.
3. Deschide Property Sheet (F4), fila Data, si in proprietatea Control Source scrie exact:
=Sum([Valoare])
4. Pentru totalul general, adaugi un alt Text Box in sectiunea Report Footer, cu aceeasi formula =Sum([Valoare]) — Access stie sa insumeze pe toata plaja potrivita sectiunii in care se afla caseta.

Exemplul nostru dus pana la rezultat:

Categoria Electric: 15 m x 3,50 + 8 m x 3,50 = 52,50 + 28,00 = 80,50 lei
Categoria Lemn: 2 buc x 45,00 = 90,00 lei
Categoria Mecanic: 50 buc x 0,20 = 10,00 lei
Total general (Report Footer): 80,50 + 90,00 + 10,00 = 180,50 lei

Alte functii de agregare utile:

=Avg([Valoare]) — media valorilor din grup.
=Count(*) — numarul de inregistrari din grup (cate consumuri); * inseamna "toate randurile", nu un camp anume — folosesti asta pentru ca interogarea noastra nu aduce niciun camp de tip ID in grila (vezi campurile din atomul 2: Categorie, Denumire, Data, Cantitate, Pret_Unitar, Valoare).
=Max([Cantitate]) / =Min([Cantitate]) — cea mai mare, respectiv cea mai mica cantitate consumata.

6

Pregatirea pentru tiparire — si greseala tipica

Inainte sa apesi Print, verifici raportul in Print Preview — singura vedere care arata exact cum va iesi pe hartie, cu paginile deja despartite.
Pasii pentru verificare si tiparire:

1. Clic dreapta pe raport in Panoul de navigare -> Print Preview (sau deschizi raportul si comuti vederea din butonul View).
2. In fila Print Preview, grupul Page Layout: butonul Margins pentru marginile paginii, butonul Portrait/Landscape pentru orientare (Landscape cand ai multe coloane, ca la raportul nostru cu sase campuri).
3. Daca vrei un fisier de trimis pe e-mail sau de arhivat fara sa mai poata fi modificat, fila External Data, grupul Export, butonul PDF or XPS — alegi locul de salvare si Access creeaza un fisier .pdf identic cu ce ai vazut in Print Preview.
4. Abia dupa ce arata bine in Print Preview apesi efectiv Print.

Greseala tipica

Construiesti raportul direct pe un tabel (nu pe o interogare) sau uiti sa adaugi campul calculat in interogare inainte de a rula expertul. Rezultat: in coloana Valoare apare #Name? in loc de o suma, pentru ca formula =Sum([Valoare]) cauta un camp care, de fapt, nu exista acolo unde raportul se uita dupa el.

Cum se recunoaste: textul #Name? in locul unei valori numerice, in orice caseta calculata.
Cum se repara: deschizi interogarea sursa in Design View, verifici ca formula Valoare: [Cantitate]*[Pret_Unitar] exista si scrisa corect, salvezi interogarea, apoi redeschizi raportul — Access va recalcula automat.

7

Recapitulare — drumul complet de la tabel la raport tiparit

Am parcurs, cu un singur exemplu, drumul intreg pe care il face o baza de date pana devine o hartie folositoare: tabele cu date brute, o interogare care le leaga si calculeaza, si un raport care grupeaza, insumeaza si aseaza totul pe pagina.
Traseul complet, rezumat:

Tabele Materiale + Consumuri, legate prin ID_Material
  ↓
Interogare Consum_cu_valoare — aduna campurile din ambele tabele + camp calculat Valoare: [Cantitate]*[Pret_Unitar]
  ↓
Raport, construit cu Expertul, pe interogare — grupat dupa Categorie, sortat dupa Data
  ↓
Totaluri=Sum([Valoare]) in Group Footer (80,50 / 90,00 / 10,00 lei) si in Report Footer (180,50 lei)
  ↓
Print Preview + orientare Landscape + export PDF — hartia gata de pus la dosar

De retinut pentru orice raport nou:

Raportul afiseaza, nu editeaza — pentru introdus date foloseste formularul.
Orice camp calculat trebuie sa existe deja in interogarea sursa, nu se inventeaza in raport.
Group Header/Group Footer apar o data pe grup; Report Header/Report Footer o singura data pe tot raportul.
Formula unui total: =Sum([NumeCamp]), scrisa in Control Source al unei casete Text Box neasociate.
Print Preview e verificarea finala inainte de tiparire sau export PDF.

Conexiune cu restul modulului:

Aceasta a fost ultima lectie a modulului Baze de Date (Access). Ai parcurs deja tabelele si cheile, formularele, interogarile si filtrele — iar acum rapoartele inchid cercul, aratand cum ajunge informatia dintr-o baza de date pe o hartie clara, gata pentru seful de atelier, pentru profesor sau pentru dosarul de arhiva.

Exercitii practice

Exercitiul 1 (Nivel minim) — Sectiunile unui raport

Ai un raport Access construit cu Expertul de rapoarte, grupat dupa campul Categorie. Din lista Report Header, Group Header, Group Footer, Report Footer, Detail — precizeaza: (a) ce sectiune apare o singura data, la inceputul raportului; (b) ce sectiune se repeta pentru fiecare categorie si contine subtotalul acelei categorii; (c) ce sectiune contine totalul general al raportului; (d) ce sectiune afiseaza fiecare inregistrare in parte. Justifica fiecare raspuns intr-o propozitie.

Vezi rezolvarea

a) Report Header — apare o singura data, la inceputul raportului (ex. titlul raportului).

b) Group Footer — se repeta la sfarsitul fiecarui grup (fiecare Categorie) si contine subtotalul acelui grup.

c) Report Footer — apare o singura data, la sfarsitul raportului, si contine totalul general.

d) Detail — se repeta o data pentru fiecare inregistrare in parte, aici apar valorile fiecarui rand de date.

Exercitiul 2 (Nivel standard) — Calculeaza si descrie pasii

Ai urmatoarele consumuri, deja calculate cu formula Valoare = Cantitate x Pret_Unitar: Piulita M6 (Categorie Mecanic) — 200 buc x 0,15 lei; Rulment 6204 (Categorie Mecanic) — 4 buc x 12,00 lei; Vopsea spray (Categorie Intretinere) — 3 buc x 18,00 lei. (a) Calculeaza valoarea fiecarei inregistrari, subtotalul pe fiecare categorie si totalul general. (b) Descrie, in ordine, pasii Expertului de rapoarte pentru a obtine un raport grupat dupa Categorie, cu subtotal Sum pe fiecare grup, pornind de la o interogare care contine deja aceste date.

Vezi rezolvarea

a) Valorile: Piulita M6 = 200 × 0,15 = 30 lei; Rulment 6204 = 4 × 12,00 = 48 lei; Vopsea spray = 3 × 18,00 = 54 lei. Subtotal Mecanic (Piulita + Rulment) = 30 + 48 = 78 lei. Subtotal Intretinere (Vopsea) = 54 lei. Total general = 78 + 54 = 132 lei.

b) Pasii Expertului de rapoarte: Create → Reports → Report Wizard; alegi interogarea sursa cu campurile deja calculate; muti campurile dorite (inclusiv Categorie si Valoare) in Selected Fields; la fereastra de grupare alegi Categorie ca nivel de grupare; la fereastra de sortare/totaluri apesi Summary Options si bifezi Sum pentru campul Valoare; alegi aspectul si orientarea paginii; Finish.

Exercitiul 3 (Nivel performanta) — Proiecteaza propriul raport

Alege specificul calificarii tale (electric, mecanica sau prelucrarea lemnului) si proiecteaza pe hartie o mica baza de date pentru evidenta materialelor: (a) numele si tipul de date pentru fiecare camp din doua tabele legate printr-o relatie unu-la-multi; (b) formula exacta a unui camp calculat intr-o interogare care leaga cele doua tabele; (c) campul dupa care ai grupa raportul si formula exacta (Control Source) a totalului de grup; (d) ce orientare de pagina (Portrait sau Landscape) ai alege si de ce, tinand cont de numarul de coloane din raportul tau.

Vezi rezolvarea

Schita de rezolvare — proiecteaza singur detaliile pe calificarea ta:

  1. Doua tabele legate 1-la-N: de exemplu Materiale (ID_Material — cheie primara, Denumire, Categorie, Pret_Unitar) si Consumuri (ID_Consum — cheie primara, ID_Material — cheie externa, Data, Cantitate).
  2. Camp calculat intr-o interogare care leaga cele doua tabele: Valoare: [Cantitate]*[Pret_Unitar] — foloseste numele exacte ale campurilor tale.
  3. Grupare dupa Categorie; totalul de grup, ca Text Box neasociat in Group Footer, cu Control Source =Sum([Valoare]); totalul general, la fel, in Report Footer.
  4. Orientare: Landscape daca raportul are multe coloane (peste 5-6), altfel Portrait.

Criterii de evaluare: campul calculat exista in interogarea sursa (nu direct in raport), formula Sum e scrisa corect intre paranteze drepte, iar orientarea e justificata prin numarul de coloane.

Ce ai invatat astazi

  • Raportul afiseaza si tipareste date existente; formularul introduce si editeaza date — sunt obiecte diferite
  • Un raport se construieste pe un tabel sau, mai des, pe o interogare care aduna campurile si calculele necesare
  • Expertul de rapoarte (Create -> Reports -> Report Wizard) cere, in ordine: sursa si campuri, grupare, sortare si totaluri, aspect si orientare, titlu
  • Sectiunile raportului: Report Header/Footer (o singura data), Page Header/Footer (pe fiecare pagina), Group Header/Footer (pe fiecare grup), Detail (pe fiecare inregistrare)
  • Formula unui total: =Sum([NumeCamp]) intr-un Text Box neasociat, in Control Source, pus in Group Footer sau Report Footer
  • Print Preview arata exact cum iese pe hartie; External Data -> PDF or XPS exporta raportul ca fisier PDF
  • Greseala tipica: camp calculat lipsa din interogarea sursa -> #Name? in raport; se repara verificand interogarea

Vrei mai mult?

Provocare: Pe raportul Consum_cu_valoare, adauga in Group Footer, langa totalul Sum([Valoare]), o a doua casuta neasociata cu formula =Avg([Valoare]) pentru media pe categorie. Apoi, in Report Footer, adauga o casuta cu =Count([Denumire]) ca sa numeri cate randuri de consum are raportul in total. Verifica in Print Preview ca cele trei cifre (suma pe categorie, media pe categorie, numarul total de randuri) au sens unele fata de altele.

  • De ce crezi: Formula =Sum([Valoare]) pusa in Group Footer insumeaza doar randurile grupului curent, dar aceeasi formula pusa in Report Footer insumeaza toate randurile raportului, fara sa schimbi nimic altceva in formula. Ce anume face ca aceeasi formula sa stie pe ce plaja de randuri sa calculeze — sectiunea in care e pusa, sau altceva?
  • Deschidere: Functiile Sum, Avg si Count dintr-un raport Access sunt aceleasi trei functii de agregare pe care le folosesti in Excel (SUM, AVERAGE, COUNT) si in SQL (GROUP BY). Orice raport financiar sau statistic real — bilantul unei firme, statisticile de vanzari dintr-un magazin — se construieste pe exact acest tipar: date brute, grupate, insumate.

Ai incheiat modulul Baze de Date

Cu aceasta lectie inchei modulul Baze de Date (Access): tabele si chei, formulare, interogari si filtre, iar acum rapoarte. Continua explorarea din pagina modulului pentru recapitulare sau treci la urmatorul modul din programa.

Inapoi la modul →