Izveštaj sa dva nivoa podataka (Master-Detail)
Izveštaj sa dva nivoa podataka (Master-Detail)
Do sada su naši primeri izveštaja koristili samo jedan podatkovni band (“Prvi nivo podataka” ili ”MasterData”) za kontrolu izlaza podataka. Ovo je bilo adekvatno za izlaz podataka iz jedne baze podataka. Pantheon takođe omogućava dizajniranje izveštaja sa do šest nivoa podataka, sve na jednoj stranici dizajna. Pored toga, neograničen broj nivoa podataka u izveštajima može se postići korišćenjem objekta “Subreport” - ovaj objekat će biti objašnjen kasnije. Većina izveštaja uopšte zahteva samo jedan, dva ili tri nivoa podataka, veći brojevi nivoa podataka su retki.
Pogledajmo kako da dizajniramo izveštaj sa dva nivoa podataka. Izveštaj će izlaziti podatke iz tabela: “tHE_SetSubj” i “tHE_Order”. Prva tabela je lista predmeta, a druga je lista narudžbina koje su postavili ti predmeti (kupci).
Druga tabela sadrži listu svih narudžbina koje su postavili svi kupci. Da bismo videli narudžbine iz tHE_Order tabele koje su postavili jedan kupac u tabeli Kupci, dve tabele su povezane na polju “acSubject” iz kupaca i "acConsignee" polju iz tabele narudžbina.
Hajde da dizajniramo izveštaj. Kreirajte novi izveštaj i stavite dva “TfrxDlDBTable” komponente na formu. Postavite svojstva komponenata kao što je ovde prikazano:
Tabela1:
TableName = 'tHE_SetSubj'
UserName = 'Predmeti'
Tabela2:
TableName = 'tHE_Order'
UserName = 'Narudžbine'
Sada dodajte “MasterData” i “DetailData” band na stranicu:

Napomena da “MasterData” band mora biti postavljen iznad “DetailData” banda! Prevucite ga tamo ako je potrebno. Ako je Master postavljen ispod Detail, Pantheon će generisati poruku o grešci kada pregledate izveštaj.
Ako biste sada pregledali izveštaj, videli biste da lista narudžbina ostaje ista za svakog kupca i sadrži sve zapise iz tabele “Narudžbine”. U kodu na izveštaju dodajte dve linije kao što možete videti na slici

Sada smo postavili 'Master-Detail' odnos i vezu između polja u dva izvora.
Kada se kreira pregled, FastReport radi sledeće. Nakon što se zapis iz glavne tabele (Kupac) izlazi, postavlja filter na detaljnu tabelu (Narudžbine). Samo oni zapisi koji ispunjavaju uslov 'Orders.acConsignee = Subjects.acSubject' će ostati u tabeli. To znači da će za svakog kupca biti prikazane samo one narudžbine koje pripadaju trenutnom kupcu u detaljnom bandu. Ovo je važan koncept za shvatanje. Iako podatkovni bandovi mogu biti tipa master ili detalj, oni samo kontrolišu pozicioniranje podataka na izlaznoj stranici (redosled i broj prikazivanja). Podaci prikazani od strane objekata u bandovima zavise od toga na koja polja su objekti povezani i na spoljašnjem povezivanju dve tabele.
Ovo je konačni izlaz:

Izveštaji koji sadrže do 6 nivoa podataka mogu se konstruisati na sličan način.
U mnogim slučajevima Master-Detail odnos se postavlja u programskom kodu.
Pogledajmo primer izveštaja '3C0 - Izveštaj o upravljanju putovanjima' koji se nalazi u programskom meniju 'Osoblje | Upravljanje putovanjima | Izveštaji'.
U ovom izveštaju glavna tabela je 'glavna' tabela putnih narudžbina, detaljna tabela je tabela sa pozicijama putne narudžbine. U ovom slučaju imamo još jedan nivo (subdetaljna tabela) a to su troškovi na poziciji putne narudžbine.

U ovom izveštaju imamo takođe dva banda sa svojstvom "RowCount" postavljenim na vrednost 1 i subizveštaje koje ćemo sresti kasnije.