Përdorimi i Objektit "Motor"
Përdorimi i Objektit "Motor"
Ne kemi thënë tashmë se objekti “Motor” përfaqëson motorin e raportit, i cili menaxhon ndërtimin e raportit. Procesi i rregullimit të bandave në një faqe mund të menaxhohet duke përdorur pronat dhe metodat e motorit. Së pari disa teori.
Diagrami më poshtë tregon dimensionet e ndryshme të faqes së raportit.

Dimensionet fizike të faqes janë pronat “Gjerësia e Paper” dhe “Lartësia e Paper”, të dukshme në inspektorin e objektit kur faqja është e zgjedhur. Pra, madhësia e një faqe A4 është 210 x 297mm.
“Gjerësia e Faqes” dhe “Lartësia e Faqes” janë dimensionet e rajonit të printueshëm, i cili zakonisht është më i vogël se dimensionet fizike të faqes. Madhësia e rajonit të printueshëm varet nga pronat e faqes së raportit “Margjina e Majtë”, “Margjina e Sipërme”, “Margjina e Djathtë” dhe “Margjina e Poshtme”. Madhësia e rajonit të printueshëm në piksel kthehet nga funksionet “Motor.Gjerësia e Faqes” dhe “Motor.Lartësia e Faqes”.
Finalmente, “Hapësira e Lirë” është lartësia e hapësirës së lirë në një faqe. Nëse ka një bandë "Këmbë Faqe" në faqen, lartësia e saj merret parasysh kur llogaritet “Hapësira e Lirë”. Kjo lartësi kthehet në piksel nga funksioni “Motor.Hapësira e Lirë”. Vini re se pas shfaqjes së bandës së ardhshme, hapësira e lirë zvogëlohet në faqe, kjo merret parasysh kur llogaritet “Hapësira e Lirë”.
Si ndërtohen faqet e raportit? Baza e FastReport shfaq bandat në një faqe sa herë që ka mjaft hapësirë të lirë. Kur nuk ka më hapësirë të lirë, banda “Këmbë Faqe” printohet (nëse kërkohet) dhe krijohet një faqe e re bosh. Siç është thënë tashmë, pas shfaqjes së bandës së ardhshme, lartësia e hapësirës së lirë zvogëlohet. Për më tepër, shfaqja e bandës së ardhshme fillon nga pozita aktuale, e cila përcaktohet nga koordinatat në boshtin X dhe boshtin Y. Pozita aktuale kthehet nga “Motor.CurX” dhe “Motor.CurY” përkatësisht. Pas printimit të bandës së ardhshme, CurY automatikisht rritet me lartësinë e bandës së printuar. Pas krijimit të një faqe të re, “CurY” barazohet me “0.” “CurX” ndryshohet kur printohen raportet me shumë kolona.
“Motor.CurX” dhe “Motor.CurY” janë të disponueshme jo vetëm për lexim, por edhe për shkrim. Kjo do të thotë se bandat mund të zhvendosen duke rritur ose zvogëluar këto vlera. Për shembull, në një raport që ngjan kështu:

Ai mund të printohet në mënyrën e mëposhtme:

Kjo arrihet duke shkruar një menaxher për ngjarjen “OnBeforePrint” të bandës:
procedura MasterData1OnBeforePrint(Sender: TfrxComponent);
fillo
Motor.CurX := Motor.CurX + 5;
mbaro;
Ndryshimi i “CurY” mund të bëjë që bandat të mbivendosen, për shembull:

Arrihet nga ky skript:
procedura MasterData1OnBeforePrint(Sender: TfrxComponent);
fillo
Motor.CurY := Motor.CurY - 15;
mbaro;
Metoda “Motor.NewPage” fut një ndarje faqeje në çdo pikë të kërkuar në një raport, pas së cilës printimi vazhdon nga maja e faqes së re të daljes. Në shembullin tonë, një ndarje mund të futet pas printimit të regjistrit të dytë:
procedura MasterData1OnPasPrint(Sender: TfrxComponent);
fillo
nëse <Line> = 2 atëherë
Motor.NewPage;
mbaro;
Vini re se ne përdorëm ngjarjen “OnAfterPrint” (do të thotë, pas printimit të bandës). Gjithashtu vini re se variabli sistemik “Line” kthen numrin rendor të regjistrit.
Metoda “Motor.NewColumn” fut një ndarje kolone në raportet me shumë kolona. Nëse nuk ka më kolona të lira në faqe, atëherë krijohet një faqe e re.
Faturë me Urdhra Pagesash
Shembulli në vazhdim paraqitet në printimin e urdhrave dhe faturave me urdhra pagesash. Ato janë të disponueshme vetëm për legjislacionin slloven dhe kroat. Raportet e tilla janë '2U2 - Faturë - UPN - Formë' për slloven dhe '2U7 - Faturë - HUB 3A - Formë' për kroat legjislacionin. Ju mund të shihni dizajnin e këtyre raporteve duke hapur dizajnerin e raporteve nga regjistri i raporteve.
Ne duam të printojmë urdhrin e pagesës gjithmonë saktësisht në fund të faqes. Për të detyruar këtë sjellje, ne vendosim pozitat aktuale vertikale (Motor.CurY) të bandës përmbledhëse të raportit në mënyrë që të ketë hapësirë të mjaftueshme për ta shfaqur atë në këtë faqe. Ne e bëjmë këtë me kodin e mëposhtëm:
procedura UPNOnBeforePrint(Sender: TfrxComponent);
fillo
...
Motor.CurY := Motor.CurY + Motor.Hapësira e Lirë - UPN.Lartësia - 1;
mbaro;
Kur krijohet raporti, urdhri i pagesës do të mbivendoset mbi tekstin ekzistues nëse është shumë i lartë. Pra, ne duhet të korrigjojmë kodin tonë për të printuar urdhrin e pagesës në faqen e ardhshme në këtë rast.
procedura UPNOnBeforePrint(Sender: TfrxComponent);
fillo
...
nëse Motor.CurY > Motor.CurY + Motor.Hapësira e Lirë - UPN.Lartësia - 1 atëherë
Motor.NewPage;
Motor.CurY := Motor.CurY + Motor.Hapësira e Lirë - UPN.Lartësia - 1;
mbaro;