Raport cu două niveluri de date (Master-Detail)
Raport cu două niveluri de date (Master-Detail)
Până acum, rapoartele noastre de exemplu au folosit doar un singur band de date (“Date de nivel întâi” sau ”MasterData”) pentru a controla ieșirea datelor. Acest lucru a fost adecvat pentru ieșirea datelor dintr-o bază de date. Pantheon permite, de asemenea, proiectarea rapoartelor având până la șase niveluri de date, toate pe o singură pagină de design. În plus, un număr nelimitat de niveluri de date în rapoarte poate fi realizat prin utilizarea obiectului “Subreport” - acest obiect va fi acoperit mai târziu. Cele mai multe rapoarte în general au nevoie doar de unul, două sau trei niveluri de date, numere mai mari de niveluri de date sunt rare.
Să vedem cum să proiectăm un raport cu două niveluri de date. Raportul va ieși date din tabelele: “tHE_SetSubj” și “tHE_Order”. Primul tabel este o listă de subiecte și al doilea este o listă de comenzi plasate de acești subiecți (clienți).
Al doilea tabel conține lista tuturor comenzilor plasate de toți clienții. Pentru a vizualiza comenzile din tHE_Order tabel care sunt plasate de un client în tabelul Clienți, cele două tabele sunt legate pe câmpul “acSubject” din clienți și câmpul "acConsignee" din tabelul comenzilor.
Să proiectăm raportul. Creați un raport nou și plasați două componente “TfrxDlDBTable” pe formular. Setați proprietățile componentelor așa cum este arătat aici:
Tabel1:
NumeTabel = 'tHE_SetSubj'
NumeUtilizator = 'Subiecte'
Tabel2:
NumeTabel = 'tHE_Order'
NumeUtilizator = 'Comenzi'
Acum adăugați un band “MasterData” și un band “DetailData” pe pagină:

Rețineți că band-ul “MasterData” trebuie plasat deasupra band-ului “DetailData”! Trageți-l acolo dacă este necesar. Dacă Master este plasat sub Detail, Pantheon va genera un mesaj de eroare când previzualizați raportul.
Dacă ați previzualizat raportul acum, ați vedea că lista comenzilor rămâne aceeași pentru fiecare client și conține toate înregistrările din tabelul “Comenzi”. În codul raportului adăugați două linii așa cum puteți vedea și în imagine

Acum am stabilit o relație 'Master-Detail' și o legătură între câmpuri în două surse.
Când se creează previzualizarea, FastReport face următoarele. După ce o înregistrare este ieșită din tabelul master (Client), setează filtrul pe tabelul detaliu (Comenzi). Numai acele înregistrări care îndeplinesc condiția 'Orders.acConsignee = Subjects.acSubject' vor rămâne în tabel. Aceasta înseamnă că pentru fiecare client, doar comenzile care aparțin clientului curent vor fi afișate în band-ul detaliu. Acesta este un concept important de înțeles. Chiar dacă band-urile de date pot fi de tip master sau detaliu, ele controlează doar poziționarea datelor pe pagina de ieșire (comanda și numărul de ori afișate). Datele afișate de obiectele din band-uri depind de câmpurile la care sunt legate obiectele și de legătura externă a celor două tabele.
Aceasta este ieșirea finală:

Rapoartele care pot conține până la 6 niveluri de date pot fi construite într-un mod similar.
În multe cazuri, relația Master-Detail este configurată în codul programului.
Să vedem un exemplu de raport '3C0 - Raport de Management al Călătoriilor' care se află în meniul programului 'Personal | Managementul Călătoriilor | Rapoarte'.
În raport, tabelul master este tabelul 'principal' al comenzilor de călătorie, tabelul detaliu este tabelul cu pozițiile comenzii de călătorie. În acest caz, avem de asemenea un nivel suplimentar (tabel subdetaliu) anume costurile pe poziția comenzii de călătorie.

În acest raport avem de asemenea două band-uri cu proprietatea "RowCount" setată la valoarea 1 și subrapoarte pe care le vom întâlni mai târziu.