Raporti me dy nivele të dhënash (Master-Detail)
Raporti me Dy Nivele të Dhënash (Master-Detail)
Derisa raportet tona shembuj kanë përdorur vetëm një grup të dhënash (“Të dhënat e nivelit të parë” ose ”MasterData”) për të kontrolluar daljen e të dhënave. Kjo ishte e mjaftueshme për daljen e të dhënave nga një bazë të dhënash. Pantheon gjithashtu lejon që raportet të dizajnohen duke pasur deri në gjashtë nivele të dhënash, të gjitha në një faqe dizajni. Për më tepër, një numër i pakufizuar i niveleve të dhënash në raportet mund të arrihet përmes përdorimit të objektit “Subreport” - ky objekt do të trajtohet më vonë. Shumica e raporteve në përgjithësi kanë nevojë vetëm për një, dy ose tre nivele të dhënash, numra më të mëdhenj të niveleve të dhënash janë të rralla.
Le të shohim se si të dizajnojmë një raport me dy nivele të dhënash. Raporti do të nxjerrë të dhëna nga tabelat: “tHE_SetSubj” dhe “tHE_Order”. Tabela e parë është një listë e subjekteve dhe e dyta është një listë e porosive të vendosura nga këto subjekte (klientët).
Tabela e dytë përmban listën e të gjitha porosive të vendosura nga të gjithë klientët. Për të parë porositë nga tHE_Order tabela që janë vendosur nga një klient në tabelën e Klientëve, dy tabelat janë të lidhura në fushën “acSubject” nga klientët dhe fushën "acConsignee" nga tabela e porosive.
Le të dizajnojmë raportin. Krijoni një raport të ri dhe vendosni dy komponentë “TfrxDlDBTable” në formular. Caktoni pronat e komponentëve siç tregohet këtu:
Tabela1:
TableName = 'tHE_SetSubj'
UserName = 'Subjektet'
Tabela2:
TableName = 'tHE_Order'
UserName = 'Porositë'
Tani shtoni një grup “MasterData” dhe një grup “DetailData” në faqe:

Vini re se grupi “MasterData” duhet të vendoset mbi grupin “DetailData”! Tërhiqeni atje nëse është e nevojshme. Nëse Master është vendosur nën Detajet, Pantheon do të gjenerojë një mesazh gabimi kur të parashikoni raportin.
Nëse do të parashikonit raportin tani, do të shihnit se lista e porosive mbetet e njëjtë për çdo klient dhe përmban të gjitha rekordet nga tabela “Porositë”. Në kodin e raportit shtoni dy rreshta siç mund ta shihni gjithashtu në imazh

Tani kemi vendosur një marrëdhënie 'Master-Detail' dhe lidhje midis fushave në dy burime.
Kur krijoni parashikimin, FastReport bën të mëposhtmen. Pasi një rekord të nxirret nga tabela master (Klienti), ai vendos filtrin në tabelën e detajeve (Porositë). Vetëm ato rekorde që përmbushin kushtin 'Orders.acConsignee = Subjects.acSubject' do të mbeten në tabelë. Kjo do të thotë se për çdo klient vetëm ato porosi që i përkasin klientit aktual do të shfaqen në grupin e detajeve. Ky është një koncept i rëndësishëm për t'u kuptuar. Edhe pse grupet e të dhënave mund të jenë të tipit master ose të detajit, ato vetëm kontrollojnë pozicionimin e të dhënave në faqen e daljes (renditja dhe numri i herëve të shfaqura). Të dhënat e shfaqura nga objektet në grupet varen nga cilat fusha janë të lidhura objektet dhe nga lidhja e jashtme e dy tabelave.
Kjo është dalja përfundimtare:

Raportet që përmbajnë deri në 6 nivele të dhënash mund të ndërtohen në një mënyrë të ngjashme.
Në shumë raste marrëdhënia Master-Detail është e vendosur në kodin e programit.
Le të shohim një shembull të raportit '3C0 - Raporti i Menaxhimit të Udhëtimit' që është në menunë e programit 'Personeli | Menaxhimi i Udhëtimit | Raportet'.
Në raport tabela master është tabela 'kryesore' e porosive të udhëtimit, tabela e detajeve është tabela me pozitat e porosisë së udhëtimit. Në këtë rast kemi gjithashtu një nivel tjetër (tabela subdetaj) domethënë kostot në pozitat e porosisë së udhëtimit.

Në këtë raport kemi gjithashtu dy grupe me pronën "RowCount" të vendosur në vlerën 1 dhe subraporte që do të takojmë më vonë.