Користење на објектот "Двигател"
Користење на објектот "Двигател"
Веќе рековме дека објектот “Двигател” го претставува двигателот на извештајот, кој управува со конструкцијата на извештајот. Процесот на распоредување на бендовите на страницата може да се управува со користење на својствата и методите на двигателот. Прво малку теорија.
Дијаграмот подолу покажува различни димензии на страницата на извештајот.

Физичките димензии на страницата се својствата “PaperWidth” и “PaperHeight”, видливи во инспекторот на објекти кога страницата е избрана. Значи, големината на A4 страницата е 210 x 297mm.
“PageWidth” и “PageHeight” се димензиите на печатливата област, која обично е помала од физичките димензии на страницата. Големината на печатливата област зависи од својствата на страницата на извештајот “LeftMargin”, “TopMargin”, “RightMargin” и “BottomMargin”. Големината на печатливата област во пиксели се враќа со функциите “Engine.PageWidth” и “Engine.PageHeight”.
На крај, “FreeSpace” е висината на слободното место на страницата. Ако има бенд "Page Footer" на страницата, неговата висина се зема во предвид при пресметувањето на “FreeSpace”. Оваа висина се враќа во пиксели со функцијата “Engine.FreeSpace”. Имајте на ум дека по прикажувањето на следниот бенд слободното место се намалува на страницата, ова се зема во предвид при пресметувањето на “FreeSpace”.
Како се конструираат страниците на извештајот? Основата на FastReport прикажува бендови на страницата дотолку колку што има доволно слободно место. Кога нема повеќе слободно место, бендот “Page Footer" се печати (ако е потребно) и се создава нова празна страница. Како што веќе рековме, по прикажувањето на следниот бенд висината на слободното место се намалува. Понатаму, прикажувањето на следниот бенд започнува од тековната позиција, која е дефинирана со координати на X-оската и Y-оската. Тековната позиција се враќа со “Engine.CurX” и “Engine.CurY” соодветно. По печатењето на следниот бенд, CurY автоматски се зголемува за висината на печатениот бенд. По создавањето на нова страница “CurY” е еднакво на “0.” “CurX” се менува при печатење на мулти-колумни извештаи.
“Engine.CurX” и “Engine.CurY” се достапни не само за читање туку и за пишување. Ова значи дека бендовите можат да се помераат со инкрементирање или декрементирање на овие вредности. На пример, во извештај што изгледа вака:

Може да се печати на следниов начин:

Ова се постигнува со пишување на обработувач за настанот “OnBeforePrint” на бендот:
процедура MasterData1OnBeforePrint(Sender: TfrxComponent);
почеток
Engine.CurX := Engine.CurX + 5;
крај;
Промената на “CurY” може да направи бендовите да се преклопуваат, на пример:

Постигнато со овој скрипт:
процедура MasterData1OnBeforePrint(Sender: TfrxComponent);
почеток
Engine.CurY := Engine.CurY - 15;
крај;
Методот “Engine.NewPage” вметнува прекин на страницата на било кој потребен момент во извештајот, по што печатењето продолжува од врвот на новата излезна страница. Во нашиот пример, прекин може да се вметне по печатењето на вториот запис:
процедура MasterData1OnПоПечатење(Sender: TfrxComponent);
почеток
ако <Line> = 2 тогаш
Engine.NewPage;
крај;
Имајте на ум дека го користевме настанот “OnAfterPrint” (тоа значи, по печатењето на бендот). Исто така, забележете дека системската променлива “Line” ја враќа секвенцијалната бројка на записот.
Методот “Engine.NewColumn” вметнува прекин на колоната во мулти-колумни извештаи. Ако нема повеќе слободни колони на страницата, тогаш се создава нова страница.
Фактура со Платни Нарачки
Следниот пример е презентиран на печатот на нарачки и фактури со платни нарачки. Тие се достапни само за словенечкото и хрватското законодавство. Таквите извештаи се '2U2 - Фактура - УПН - Формулар' за словенечкото и '2U7 - Фактура - HUB 3A - Формулар' за хрватското законодавство. Можете да го видите дизајнот на овие извештаи отворајќи го дизајнерот на извештаи од регистарот на извештаи.
Сакаме да печатиме платна нарачка секогаш точно на дното на страницата. За да го принудиме ова однесување, ја поставуваме тековната вертикална позиција (Engine.CurY) на бендот за резиме на извештајот така што има точно доволно место за да се прикаже на оваа страница. Ова го правиме со следниот код:
процедура UPNOnBeforePrint(Sender: TfrxComponent);
почеток
...
Engine.CurY := Engine.CurY + Engine.FreeSpace - UPN.Height - 1;
крај;
Кога се создава извештај, платната нарачка ќе се преклопи со постојниот текст ако е премногу висока. Затоа мораме да го коригираме нашиот код за да ја печатиме платната нарачка на следната страница во овој случај.
процедура UPNOnBeforePrint(Sender: TfrxComponent);
почеток
...
ако Engine.CurY > Engine.CurY + Engine.FreeSpace - UPN.Height - 1 тогаш
Engine.NewPage;
Engine.CurY := Engine.CurY + Engine.FreeSpace - UPN.Height - 1;
крај;