[ 1 ] [ 2 ]
[ 3 ] [ 4 ] [
5 ] [ 6 ]
Und hier nun die zugehörige Berichtsdefinition:
Obwohl sich diese Definition auf den ersten Blick heftig von der
vorigen unterscheidet, führt sie zu einem identischen Ergebnis.
Dabei sei auf die folgenden Tricks dieser Definition besonders hingewiesen:
- Die Definition beinhaltet eine zweifach geschachtelte Gruppierung, die u.a.
das Feld xSort mit verwendet.
- Die beiden Druck-Zeilen im Detailbereich werden über Print When alternativ
ausgegeben:
- Die obere der beiden Zeilen wird nur bei "normalen" Detailsätzen angezeigt (xSort
= "1").
- Die untere der beiden Zeilen wird nur bei Rabattsummen-Datensätzen angezeigt
(xSort = "2").
- Der Teil des Gruppenfußes mit den Summen für Brutto- und Nettobetrag
befindet sich im Gruppenkopf(!) der inneren Gruppierung und ist über Print When
an xSort="2" geknüpft. Dadurch erscheinen diese Summen genau zwischen den
"normalen" Detailsätzen und den Rabattsummen, was durch eine Plazierung im
Gruppenfuß nicht erreichbar wäre.
Die hier eingesetzte Technik läßt sich natürlich so erweitern, daß auch die
Gesamtsummen der einzelnen Rabattarten am Ende der Liste mit dem gleichen
Menchanismus ermittelt und angezeigt werden können.
Potential der vorgelagerten Datenaufbereitung
Das vorherige Beispiel hat deutlich gezeigt, welches große Potential in einer
durchdachten Datenvorbereitung steckt.
Baut man diese Verfahrensweise nun soweit aus, daß man komplett ohne
Berichtsvariablen auskommt (was nicht immer ganz einfach ist), dann hat man
schlagartig die Möglichkeit, die Daten auch in anderen Varianten als nur als
FoxPro-Report auszugeben:
- mit dem COPY TO-Befehl in viele andere Dateiformate
- per OLE-Automation zu Word oder Excel
NB: Den umgedrehten Weg ist John S. Koziol für sein Tool FRX2WORD gegangen
(siehe Foxtalk August 2000). Er hat ein Programm entwickelt, welches die
Definitionen in der FRX ausliest und in Word-Befehle umwandelt, um statt eines
Reports ein Word-Dokument zu erzeugen.
NNB: Prinzipiell kann man diese Verfahrensweise auch dem mit Visual FoxPro
mitgelieferten Programm GENTHTML.PRG und der dazugehörigen Klassenbibliothek _HTML.VCX
entnehmen, aber diese Analyse ist etwas beschwerlich!
Tips und Tricks
Bandübergreifende Controls
- Wenn man Gestaltungselemente wie Linien und Rahmen über einen oder mehrere
Separator Bars hinaus vergrößert, dann passen sich diese Linien und Rahmen
automatisch an die Vervielfältigung (beim Detailbereich) bzw. an dynamische
Vergrößerungen an.
-
- Läßt man z.B. senkrechte Linien beginnend im Group Header über den
Detailbereich bis zum Group Footer verlaufen, hat man eine tabellarische
Darstellung über die gesamte Seite.
Seitenumbruch nach jedem Detailbereich
Ggf. kann es notwendig sein, innerhalb der RECNO()-Funktion den
Arbeitsbereichsnamen der führenden Tabelle des Reports angeben zu müssen, z.B.
RECNO( "Kunden" ) oder etwas allgemeiner RECNO( ALIAS() ).
Seitenübergreifender Detailbereich
- Der Reportdesigner von Visual FoxPro läßt es nicht zu, einen Detailbereich
zu definieren, der größer als eine Seite ist.
- Andererseits kann Visual FoxPro bei der Abarbeitung von Reports auch mit
größeren Detailbereichen umgehen.
- Um einen solchen Detailbereich definieren zu können, bedient man sich der
Stretch-Option im Dialogfeld "Report Expression Dialog Box".
- Man erstell ein Textfeld mit der Expression "REPLICATE( CHR(13, xxx)
)", wobei xxx durch eine Zahl zu ersetzen ist, die der benötigten Anzahl Zeilen
entspricht, um die man den Detailbereich vergrößern will.
- · Alle anderen Controls, die sich in diesem unteren Teil befinden sollen,
werden dann mit der Option "Fix Relative to Bottom of Band" definiert.
Ausgabe der Gesamtanzahl der Seiten auf jeder Seite
- Oft steht die Frage, auf jeder Seite bei der Seitennummer auch die
Gesamtanzahl der Seiten auszugeben ("Seite 3 von 9 Seiten").
- Der Trick für die Ermittlung der Seitenanzahl besteht in der Verwendung
einer normalen FoxPro-Variablen für die Anzeige der Seitenanzahl (z.B.
pnPageCount). Diese Variable wird in einem vorgeschalteten unsichtbaren
Durchlauf des Berichtes ermittelt.
- Der erste Durchlauf wird mit einem REPORT...NOCONSOLE unsichtbar ausgegeben.
- Nach diesem Durchlauf enthält die Systemvariable "_PageNo" die Anzahl der
Seiten, die der Bericht umfaßt.
- Nun speichert man _PageNo auf die Variable, die man im Bericht für die
Seitenanzahl vorgesehen hat (z.B. pnPageCount= _PageNo).
- Jetzt gibt man den Report ganz normal auf den Drucker aus und kann schon auf
der ersten Seite die Gesamtanzahl der Seiten ausdrucken!
Durchnumerieren von Gruppen im Report
· Muß man in einem Bericht die existierenden Gruppen durchnumerieren, kann
man sich mit zwei speziell definierten Berichtsvariablen behelfen, wie wOOdy in
"news://msnews.microsoft.com/microsoft.public.de.fox" auf eine entsprechende
Frage geantwortet hat:
- Angenommen sei eine Kundenliste mit einer Gruppierung auf LEFT(PLZ,2). Dazu
muss die ORDER der Tabelle natürlich auch auf PLZ sein.
- Im Report-Menü zwei Reportvariablen anlegen:
- GroupCount
- Wertzuweisung: IIF(oldgroup # left(plz,2), 1, 0)
- Initialisierung: 0
- Berechnen: Summe
- Zurückstellen: Berichtsende
- OldGroup
- Wertzuweisung: left(plz,2)
- Initialisierung: SPACE(2)
- Berechnen: Nichts
- Zurückstellen: Berichtsende
- Wichtig ist die Reihenfolge dieser beiden Einträge, da VFP diese in dieser
Sequenz bei jedem Satzwechsel abarbeitet.
- Im Report kann man nun im Gruppenfuß oder Seiten-/Reportende die Variable
GroupCount andrucken.
Präprocessing von FRX-Dateien
- Da FRX-Dateien ganz normal mit USE geöffnet werden können, bietet sich damit
auch die Möglichkeit, diese Dateien vor der Benutzung programmatisch zu
manipulieren.
- Ein Tool auf dieser Basis ist das Programm GenRepoX (siehe weiter unten).
Report-Designer zur Laufzeit
- Auch zur Laufzeit einer VFP-Applikation kann man dem Anwender mit MODIFY
REPORT den Report-Designer zur Verfügung stellen.
- In diesem Fall sollte man allerdings durch geeignete Mechanismen dafür
sorgen, daß immer noch ein kompletter Satz Original-Berichtsdefinitionen
verfügbar ist!
- Außerdem sollte man eine kleine Manipulation an der FoxUser-Datei vornehmen,
um zu sichern, daß die Toolbars des Report-Designers immer zugänglich sind.
Preview-Fenster zur Laufzeit
- Das Verhalten des Preview-Fensters zur Laufzeit kann man gezielt
beeinflussen, wenn man die [IN] WINDOW-Klausel des REPORT-Befehls nutzt und dort
ein speziell vordefiniertes Fenster angibt.
- NB: Für die Definition dieses Fensters sollte man sich etwas in den
FPW-2.6-Fensterdefinitionen auskennen oder jemand entsprechendes zu Hilfe
nehmen.
Druckerunabhängige Reports
- In der Report-Definitionsdatei sind bestimmte Eigenschaften des zur
Designzeit des Reports gerade aktiven Druckers gespeichert.
- Diese Angaben können sich negativ auf das Ausdruckverhalten auf den
Zielsystemen auswirken.
- Deshalb ist man gut beraten, wenn man die Felder TAG, TAG2 sowie
Expression im ersten Datensatz vor dem Ausliefern von FRX-Dateien einfach
per REPLACE-Befehl leert.
Tools
Tools rund um die Berichts-Engine von Visual FoxPro gibt es für
unterschiedliche Zwecke eine ganze Reihe, deshalb hier eine kurze Aufzählung.
Zu beachten ist dabei, daß die einzelnen Tools unterschiedliche
Anwendungsbereiche abdecken, deshalb sollte man sich ausführlich damit
beschäftigen.
- Ergänzungen zum VFP-Reportdesigner / zum VFP-Report-Befehl:
- FRX2Word - Umleitung der VFP-Berichtsausgabe in Word-Dokumente
- (liegt auf der Begleit-CD bei)
- GenRepoX - Erweiterungstool ähnlich GenScrnX, GenMenuX. Erschließt einige
Möglichkeiten des VFP-Reports, die nicht oder nur auf Umwegen im
VFP-Reportdesigner zu formulieren sind.
- (liegt auf der Begleit-CD bei)
- Adobe Acrobat Writer - Druckertreiber, der die Ausgabe von VFP-Reports
direkt in eine PDF-Datei umleiten kann
- Alternativen zum VFP-Reportdesigner kann man sich auf http://www.prolib.de
anschauen:
- Ganz brandneu - und deshalb noch nicht evaluiert ist der "js Reports", der
unter http://www.thskk.sk erreichbar sein
soll.
Übersetzungsliste
Im folgenden sind die Übersetzungen sowie kurze Erläuterungen der englischen
Fachbegriffe aufgelistet, die im Zusammenhang mit dem behandelten Thema relevant
sind.
Begriff |
Übersetzung |
Bedeutung |
Calculate |
Berechnen |
|
Column Header |
Spaltenkopf |
einer der Teilbereiche eines Berichts |
DataEnvironment |
Datenumgebung |
|
Detail Band
|
Detail-Bereich
|
|
End of Report |
Berichtsende |
|
Expression |
Berechnungsausdruck |
|
File |
Datei |
Menü "Datei" |
Fix Relative to Bottom of Band |
Relativ zu unterem Bereichsrand ausrichten |
|
Group Expressions |
Gruppierungsausdrücke |
|
Initial-value |
Initialisierungswert |
|
Nothing |
Nichts |
|
Page Footer |
Seitenfuß |
einer der Teilbereiche eines Berichts |
Page Header |
Seitenkopf |
einer der Teilbereiche eines Berichts |
Page Setup... |
Seite einrichten... |
Menüpunkt im Menü "Datei" |
Preview |
Seitenansicht |
|
Print only when expression is true!
|
Nur drucken, wenn Ausdruck wahr ist! |
|
Print When |
Objekt drucken |
|
Private DataSession |
private Datensitzung |
|
Remove line if blank! |
Zeile entfernen, wenn leer! |
|
Report Bands |
Berichtsbereich |
einer der Teilbereiche eines Berichts |
Report Expression Dialog Box |
Dialogfeld "Berichtsausdruck" |
|
Reset at |
Zurückstellen bei |
|
Separator Bar |
Trennleiste |
Trennleiste zwischen den einzelnen Detailbereichen |
Stretch |
Bei Überlauf vergrößern |
|
Sum |
Summe |
|
Summary |
Zusammenfassung |
einer der Teilbereiche eines Berichts |
Title |
Titel |
einer der Teilbereiche eines Berichts |
User Defined Function |
nutzerdefinierte Funktion |
|
Value-to-store |
Wertzuweisung |
|
View |
Ansicht |
Menü "Ansicht" |
[ 1 ] [ 2 ]
[ 3 ] [ 4 ] [
5 ] [ 6 ]