NavHummel hat geschrieben:Wie zeige ich auf allen Seiten die Gesamtseitenzahl an?
Michael Schumacher hat geschrieben:...Aber, du könntest einen Pseudodrucker einrichten, ...
martinst hat geschrieben:Nicht in Preview sonder Report.SaveAsHTML und dann die Seitenzahl holen.
Du kannst ja im Report eine neue Funktion implementieren
GetTotalPage
exit(TotalPages)
Report.SaveAsHtml(Environ('TEMP')+'\Reportxy.html');
Report.GetTotalPage
...
mespelage hat geschrieben:@rotsch
"Report als Preview ausfĂĽhren ohne Requestform "
lässt sich ein Preview im Report erzwingen, d.h. kann ich einen Report automatisch ausführen nur in der Seitenansicht?
Den Report müsste man ganz normal starten und als Seitenansicht laufen lassen. Dabei können die Seiten gezählt werden. Anschliessend muss dann der Report nochmals gestartet und definitiv gedruckt werden.
[CopyLoop - OnAfterGetRecord()]
[...]
CurrReport.PAGENO := 1;
// > TL4.01:01 >>>
IF NOT CurrReport.PREVIEW THEN BEGIN
SalesHeader2 := "Sales Header";
SalesHeader2.SETRECFILTER;
repMySelf.SETTABLEVIEW(SalesHeader2);
IF repMySelf.SAVEASHTML(DELCHR(ENVIRON('TEMP'),'>','\') + '\' + repMySelf.OBJECTID + '.html') THEN BEGIN
TotalNoOfPages := repMySelf.GetTotalNoOfPages;
CLEAR(repMySelf);
ERASE(DELCHR(ENVIRON('TEMP'),'>','\') + '\' + repMySelf.OBJECTID + '.html');
END;
END;
// < TL4.01:01 <<<
[GetTotalNoOfPages() : Integer]
EXIT(CurrReport.PAGENO);
Der optimale Punkt wäre der OnPreReport-Trigger, da dort alle gesetzten Filter des Anwenders bekannt sind, jedoch noch keine Druckausgabe erfolgte.
Timo Lässer hat geschrieben:Die sicherste Methode ist und bleibt wohl leider wirklich nur die Möglichkeit, den Report per SaveAsHTML zu speichern und über eine entsprechende Funktion die Anzahl Seiten ermitteln.
Der optimale Punkt wäre der OnPreReport-Trigger, da dort alle gesetzten Filter des Anwenders bekannt sind, jedoch noch keine Druckausgabe erfolgte.
FĂĽr Verkaufs- und Einkaufs-Belege (wo die Seitenzahl jedesmal wieder zurĂĽckgesetzt wird), empfiehlt sich der OnAfterGetRecord-Trigger des DataItems CopyLoop (direkt hinter der Zeile CurrReport.PAGENO := 1;).
Kleiner Hinweis:
Wenn ein Report als XML oder HTML gespeichert wird, läuft diese Instanz des Reports in dem gleichen Modus wie die Seitenansicht, d. h. man kann mit CurrReport.PREVIEW eine Endlosschleife verhindern:
- Code: Alles auswählen
[CopyLoop - OnAfterGetRecord()]
Head - OnAfterGetRecord()
//Hier
IF NOT BlockTotalPages THEN BEGIN
HTMLFileName := ENVIRON('TEMP')+'\'+FORMAT(CREATEGUID)+'html';
Header2.COPY(Head);
Header2.SETRECFILTER;
SalesOrder2.SETTABLEVIEW(Header2);
SalesOrder2.USEREQUESTFORM(FALSE);
SalesOrder2.BlockCountTotalPages(TRUE);
SalesOrder2.SAVEASHTML(HTMLFileName);
IF EXISTS(HTMLFileName) THEN
ERASE(HTMLFileName);
PageCount := SalesOrder2.GetPageCount;
END;
//Ende
Total - OnPostDataItem()
//Hier
PageCount := CurrReport.PAGENO;
GetPageCount() : Integer
//Hier
EXIT(PageCount);
BlockCountTotalPages(_b : Boolean)
//Hier
BlockTotalPages := _b;
Ignitor hat geschrieben:Ich habe mal einen Post im Tips & Tricks Bereich zu diesem Thema erstellt:
viewtopic.php?f=17&t=6809
[…]
IF PageCountReport.SAVEASHTML(Path + '\' + DELCHR(PageCountReport.OBJECTID) + '.html') THEN
BEGIN
TotalNoOfPages := PageCountReport.GetTotalNoOfPages;
CLEAR(PageCountReport);
FileSystem.DeleteFolder(Path);
END;
CLEAR(FileSystem);
// - ZurĂĽcksetzen beim Stapeldruck
PageCountReport.ClearCountTotalPages;
// +
ClearCountTotalPages()
CountTotalPages := FALSE;
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast