Izvještaj s dva nivoa podataka (Master-Detail)
Izvještaj s dva nivoa podataka (Master-Detail)
Do sada su naši primjer izvještaji koristili samo jedan podatkovni pojas (“Prvi nivo podataka” ili ”MasterData”) za kontrolu izlaza podataka. To je bilo adekvatno za izlaz podataka iz jedne baze podataka. Pantheon također omogućava dizajniranje izvještaja s do šest nivoa podataka, sve na jednoj stranici dizajna. Nadalje, neograničen broj nivoa podataka u izvještajima može se postići korištenjem objekta “Subreport” - ovaj objekt će biti obrađen kasnije. Većina izvještaja uopće treba samo jedan, dva ili tri nivoa podataka, veći brojevi nivoa podataka su rijetki.
Pogledajmo kako dizajnirati izvještaj s dva nivoa podataka. Izvještaj će izlaziti podatke iz tablica: “tHE_SetSubj” i “tHE_Order”. Prva tablica je popis subjekata, a druga je popis narudžbi koje su postavili ti subjekti (kupci).
Druga tablica sadrži popis svih narudžbi koje su postavili svi kupci. Da bismo vidjeli narudžbe iz tHE_Order tablice koje su postavili jedan kupac u tablici Kupci, dvije tablice su povezane na polju “acSubject” iz kupaca i "acConsignee" polju iz tablice narudžbi.
Dizajnirajmo izvještaj. Kreirajte novi izvještaj i stavite dva “TfrxDlDBTable” komponente na obrazac. Postavite svojstva komponente kao što je ovdje prikazano:
Tablica1:
TableName = 'tHE_SetSubj'
UserName = 'Subjekti'
Tablica2:
TableName = 'tHE_Order'
UserName = 'Narudžbe'
Sad dodajte “MasterData” i “DetailData” pojas na stranicu:

Napomena da “MasterData” pojas mora biti postavljen iznad “DetailData” pojasa! Povucite ga tamo ako je potrebno. Ako je Master postavljen ispod Detail, Pantheon će generirati poruku o grešci kada pregledate izvještaj.
Ako biste sada pregledali izvještaj, vidjeli biste da popis narudžbi ostaje isti za svakog kupca i sadrži sve zapise iz tablice “Narudžbe”. U kodu na izvještaju dodajte dvije linije kao što možete vidjeti na slici

Sad smo postavili 'Master-Detail' odnos i povezanost između polja u dva izvora.
Kada se stvara pregled, FastReport radi sljedeće. Nakon što se zapis iz glavne tablice (Kupac) izlazi, postavlja se filtar na detaljnu tablicu (Narudžbe). Samo oni zapisi koji ispunjavaju uvjet 'Orders.acConsignee = Subjects.acSubject' ostat će u tablici. To znači da će za svakog kupca biti prikazane samo one narudžbe koje pripadaju trenutnom kupcu u detaljnom pojasu. Ovo je važan koncept za razumjeti. Iako podatkovni pojasevi mogu biti tipa master ili detalj, oni samo kontroliraju pozicioniranje podataka na izlaznoj stranici (redoslijed i broj prikazivanja). Podaci prikazani od strane objekata u pojasevima ovise o tome na koja su polja objekti povezani i o vanjskoj povezanosti dviju tablica.
Ovo je konačni izlaz:

Izvještaji koji sadrže do 6 nivoa podataka mogu se konstruirati na sličan način.
U mnogim slučajevima Master-Detail odnos se postavlja u programskom kodu.
Pogledajmo primjer izvještaja '3C0 - Izvještaj o upravljanju putovanjima' koji se nalazi u programskom izborniku 'Osoblje | Upravljanje putovanjima | Izvještaji'.
Na izvještaju glavna tablica je 'glavna' tablica putnih narudžbi, detaljna tablica je tablica s pozicijama putne narudžbe. U ovom slučaju imamo također još jedan nivo (subdetaljna tablica) a to su troškovi na poziciji putne narudžbe.

Na ovom izvještaju imamo također dva pojasa s "RowCount" svojstvom postavljenim na vrijednost 1 i subizvještaje s kojima ćemo se susresti kasnije.