FastReport Schulungsplan: Unterschied zwischen den Versionen
(→Etwas aufwändigerer Report: Angebot/Auftrag) |
(→Bereiche eines Reports) |
||
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 21: | Zeile 21: | ||
;Bänder | ;Bänder | ||
:[[Erstellen_eines_Reports_mit_FastReport#Elemente_eines_Reports|Elemente eines Reports]] | :[[Erstellen_eines_Reports_mit_FastReport#Elemente_eines_Reports|Elemente eines Reports]] | ||
+ | :[[Erstellen_eines_Reports_mit_FastReport#B.C3.A4nder|Bänder]] | ||
;Tabellen, DataSets | ;Tabellen, DataSets | ||
:[[FastReport_Daten,_Tabellen_und_Felder|Daten, Tabellen und Felder]] | :[[FastReport_Daten,_Tabellen_und_Felder|Daten, Tabellen und Felder]] | ||
+ | :[[Erstellen_eines_Reports_mit_FastReport#Was_ist_ein_Dataset.3F|DataSets]] | ||
;Objekte | ;Objekte | ||
:[[Erstellen_eines_Reports_mit_FastReport#Texte_.28Memos.29|Memo-Felder, Objekte im Report]] | :[[Erstellen_eines_Reports_mit_FastReport#Texte_.28Memos.29|Memo-Felder, Objekte im Report]] | ||
− | |||
== Der Designer == | == Der Designer == | ||
Zeile 71: | Zeile 72: | ||
** Rahmen | ** Rahmen | ||
* Nur am Rande: Barcode, QR-Code, siehe [[Etiketten_mit_QR-Code|Etiketten mit QR-Code]] | * Nur am Rande: Barcode, QR-Code, siehe [[Etiketten_mit_QR-Code|Etiketten mit QR-Code]] | ||
+ | * Eigenschaften eines Objekts im Objekt-Inspektor | ||
Zeile 92: | Zeile 94: | ||
;Seitenkopf | ;Seitenkopf | ||
− | * Basis-Report, siehe: [[FastReport_Vererbung/Basis-Report|Vererbung/Basis-Report]] [[REFLEX_Standard-Basis-Report|Standard-Basis-Report]] | + | * Basis-Report, siehe: [[FastReport_Vererbung/Basis-Report|Vererbung/Basis-Report]] und [[REFLEX_Standard-Basis-Report|Standard-Basis-Report]] und [[Checkliste_Anpassen_Standard-Basis-Report|Checkliste Anpassen Standard-Basis-Report]] |
+ | * Keine Datenfelder in den Basis-Report ziehen! | ||
+ | |||
+ | ;MasterData-Bänder | ||
+ | * Unterschiedliche Bereichen ein-/ausblenden, das kommt später! | ||
+ | |||
+ | ;Detail-Band (nur eines!) | ||
+ | * Hat Child-Bänder zum ein-/ausblenden, das kommt später! | ||
+ | |||
+ | ;Footer | ||
+ | * Seitenfuss am Ende des Reports | ||
+ | |||
+ | ;Seitenfuß | ||
+ | * Aus Basis-Report! | ||
+ | |||
+ | == Code: Die Script-Sprache von FastReport == | ||
+ | |||
+ | ;Der Code-Editor | ||
+ | * Aufrufen über das Register "Code" | ||
+ | * oder Durch Doppelklick auf ein Ereignis im Objekt-Inspektor | ||
+ | * Was sind Ereignisse? | ||
+ | ** Ein Ereignis wird bei bestimmten Geschehnissen ausgelöst und kann eine Code beinhalten. | ||
+ | ** Das wichtigste Ereignis: '''OnBeforePrint''' wir ausgelöst, bevor ein Objekt (Band, Feld usw.) "gedruckt" wird. | ||
+ | :: "Gedruckt" meint hier auch angezeigt, exportiert usw. | ||
+ | ** Prozeduren, '''begin''' und '''end;''' | ||
+ | |||
+ | |||
+ | procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent); | ||
+ | begin | ||
+ | // Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band | ||
+ | // ausgegeben wird. | ||
+ | |||
+ | // Wenn der Gesamtpreis 0 ist, den Einzelpreis unterdrücken: | ||
+ | // (z.B. bei 100 % Rabatt) | ||
+ | if <Positionen."GesBetrag"> = 0 then | ||
+ | begin | ||
+ | memoPosEinzelPreis.Visible := False; | ||
+ | memoPositionenRabattProz.Visible := False; | ||
+ | end; | ||
+ | end; | ||
+ | |||
+ | |||
+ | === procedure === | ||
+ | |||
+ | Prozeduren sind Code-Blöcke, die für bestimmte Aufgaben (=Ereignisse) bestimmte Befehle enthalten. | ||
+ | |||
+ | Die Befehle befinden sich zwischen... | ||
+ | |||
+ | '''procedure DetailPositionenOnBeforePrint'''(Sender: TfrxComponent); | ||
+ | begin | ||
+ | |||
+ | ...und... | ||
+ | |||
+ | end; | ||
+ | |||
+ | '''Sender: TfrxComponent''' wird nur für ganz wenige Spezialfälle benötigt, vergessen Sie das. | ||
+ | |||
+ | * Der Autor hat '''Sender''' in den letzten 5 Jahren nicht benötigt... | ||
+ | |||
+ | |||
+ | |||
+ | === Begin und end === | ||
+ | |||
+ | Begin und end legen den Anfang und das Ende eines Programm-Blocks fest. | ||
+ | |||
+ | Eine Prozedur beginnt und endet damit. | ||
+ | |||
+ | Blöcke werden auch in '''if''' ... '''then''' ...'''else''' verwendet, wenn nach dem '''if''' bzw. '''else''' mehrere Zeilen kommen. | ||
+ | |||
+ | Siehe [[FastReport: Der if-Befehl]] | ||
+ | |||
+ | <nowiki>if {Ausdruck} then</nowiki> | ||
+ | |||
+ | ...wobei <nowiki>{Ausdruck}</nowiki> ein logischer Ausdruck ist, der entweder '''wahr''' (true) oder '''falsch''' (false) ergibt. | ||
+ | |||
+ | Wenn nach dem | ||
+ | |||
+ | <nowiki>then</nowiki> | ||
+ | |||
+ | |||
+ | nur '''eine Zeile''' folgt, kann man diese direkt darunter schreiben. | ||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | <nowiki> // Kapitel-Position (PosNr=0) ausblenden:</nowiki> | ||
+ | <nowiki> if ( <Positionen."PosNr"> = 0 ) then</nowiki> | ||
+ | <nowiki> ddPositionen.Visible := False;</nowiki> | ||
+ | |||
+ | |||
+ | |||
+ | Wenn nach dem | ||
+ | |||
+ | <nowiki>then</nowiki> | ||
+ | |||
+ | |||
+ | '''mehrere Zeilen''' folgen, muss man einen Block mit | ||
+ | |||
+ | <nowiki>begin</nowiki> | ||
+ | |||
+ | und | ||
+ | |||
+ | <nowiki>end;</nowiki> | ||
+ | |||
+ | |||
+ | schreiben. Dazwischen schreibt man die Zeilen des Codes. | ||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | <nowiki> // Kapitel-Position (PosNr=0) ausblenden:</nowiki> | ||
+ | <nowiki> if ( <Positionen."PosNr"> = 0 ) then</nowiki> | ||
+ | <nowiki> begin</nowiki> | ||
+ | <nowiki> ddPositionen.Visible := False;</nowiki> | ||
+ | <nowiki> ddPosTexte.Visible := False;</nowiki> | ||
+ | <nowiki> end;</nowiki> | ||
+ | |||
+ | |||
+ | |||
+ | === Das Semikolon ''';''' === | ||
+ | |||
+ | :Das Ende einer Programmzeile wird durch das Semikolon ''';''' festgelegt. | ||
+ | |||
+ | |||
+ | === Ist-Gleich ist nicht Ist-Gleich! === | ||
+ | |||
+ | Das Gleich-Zeichen hat zwei Syntax-Varianten: | ||
+ | |||
+ | ;<nowiki> = </nowiki> | ||
+ | |||
+ | <nowiki> = </nowiki> wird verwendet, wenn man zwei Werte miteinander vergleichen will. | ||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | <nowiki> if ( <Positionen."PosNr"> = 0 ) then</nowiki> | ||
+ | |||
+ | |||
+ | ;<nowiki> := </nowiki> | ||
+ | |||
+ | <nowiki> := </nowiki> wird verwendet, wenn man dem linken Objekt den Wert rechts zuweisen will. | ||
+ | |||
+ | <nowiki> ddPositionen.Visible := False;</nowiki> | ||
+ | |||
+ | |||
+ | === Felder und Variablen im Code === | ||
+ | |||
+ | Wenn man Datenbank-Felder, Variablen usw. im Code ansprechen will, muss man die Namen in spitzen Klammern... | ||
+ | |||
+ | <nowiki> <Name> </nowiki> | ||
+ | |||
+ | angeben. | ||
+ | |||
+ | |||
+ | ;Hinweis: | ||
+ | :Der Schulungsplan ist hier frühzeitig beendet, CORONA/COVID-19 "sei Dank"! Er wird später weitergeführt... | ||
== Links == | == Links == |
Aktuelle Version vom 21. April 2020, 21:18 Uhr
Inhaltsverzeichnis
1 Allgemeines
Hier finden Sie einen Schulungsplan als Leitfaden für eine FastReport©-Schulung.
Es sind hilfreiche Links enthalten, so dass man Details zu einem Thema schnell aufrufen kann.
2 Funktionsweise
2.1 Wie funktioniert das Drucken mit GEVITAS-Programmen und FastReport
- Das heißt
- Das Programm stellt alle benötigten Daten-Tabellen zur Verfügung
- Es sind nur die Tabellen vorhanden, die beim jeweiligen Vorgang auch benötigt werden
- In den Tabellen sind die Daten für den jeweiligen Vorgang enthalten
2.2 Bereiche eines Reports
- Bänder
- Elemente eines Reports
- Bänder
- Tabellen, DataSets
- Daten, Tabellen und Felder
- DataSets
- Objekte
- Memo-Felder, Objekte im Report
3 Der Designer
- Designer öffnen mit ausgewähltem Formular (=Report-Datei)
- Wie öffnet man den Designer
- Zugriffsrecht wird benötigt
- Zugriffsrecht
- Designer-Elemente
- Übersicht über den Designer
- Report-Einstellungen, Seitengröße usw.
- Grundlegende Einstellungen des Reports
4 Einfacher Report: Artikel-Etikett
Anhand eines Artikel-Etiketts kann man in die Report-Gestaltung einsteigen:
Dazu in die Artikel-Stammdaten, einen Artikel öffnen und auf Etikett klicken.
Das Modul GevitasLabelPrint wird gestaret.
- Im Designer
- Klicken auf Datei - Neu
- Standard Report auswählen
- Report - Daten auswählen, DataSet anklicken
- Nun hat man ein leeres Fenster
- Rechts die möglichen Datenbank-Tabelle(n) und -felder
- Man könnte nun einfach Felder hineinziehen
- Funktioniert aber nur mit einem Datensatz, weil: Band fehlt! Siehe Es wird nur EIN Etikett gedruckt
- Ein Band Masterdaten hineinziehen
- Felder nun auf diesem Band platzieren.
- Text-Felder heißen "Memos"
- Erklärung der Feld-Formatierung
- Größe
- Position
- Schrift
- Rahmen
- Nur am Rande: Barcode, QR-Code, siehe Etiketten mit QR-Code
- Eigenschaften eines Objekts im Objekt-Inspektor
5 Etwas aufwändigerer Report: Angebot/Auftrag
Anhand eines Angebot/Auftrag kann man die Report-Gestaltung erweitern:
Dazu in die Auftragsverwaltung und ein Angebot/Auftrag öffnen und auf Drucken klicken.
- Eine Kopie des Reports erstellen
- Doppelklick auf den Formular-Namen öffnet Windows-Explorer
- Die Datei xxx.fr3 kopieren mit sinnvollem Namen
- Zurück zum Druckprogramm, Button klicken, um die Dateiliste zu aktualisieren!
- Viele Bänder in dem Report
- Mehrere MasterData-Bänder für den Auftragskopf
- Ein Detail-Band, mehrere "Child-Bander" darunter, wozu?
- Hauptsächlich wegen Ein-/ausblenden von Bereichen
- Child kann Child haben! Siehe: Child-Band wird nicht gedruckt
- Welche Band-Typen gibt es: Bänder
- Seitenkopf
- Basis-Report, siehe: Vererbung/Basis-Report und Standard-Basis-Report und Checkliste Anpassen Standard-Basis-Report
- Keine Datenfelder in den Basis-Report ziehen!
- MasterData-Bänder
- Unterschiedliche Bereichen ein-/ausblenden, das kommt später!
- Detail-Band (nur eines!)
- Hat Child-Bänder zum ein-/ausblenden, das kommt später!
- Footer
- Seitenfuss am Ende des Reports
- Seitenfuß
- Aus Basis-Report!
6 Code: Die Script-Sprache von FastReport
- Der Code-Editor
- Aufrufen über das Register "Code"
- oder Durch Doppelklick auf ein Ereignis im Objekt-Inspektor
- Was sind Ereignisse?
- Ein Ereignis wird bei bestimmten Geschehnissen ausgelöst und kann eine Code beinhalten.
- Das wichtigste Ereignis: OnBeforePrint wir ausgelöst, bevor ein Objekt (Band, Feld usw.) "gedruckt" wird.
- "Gedruckt" meint hier auch angezeigt, exportiert usw.
- Prozeduren, begin und end;
procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent); begin // Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band // ausgegeben wird. // Wenn der Gesamtpreis 0 ist, den Einzelpreis unterdrücken: // (z.B. bei 100 % Rabatt) if <Positionen."GesBetrag"> = 0 then begin memoPosEinzelPreis.Visible := False; memoPositionenRabattProz.Visible := False; end; end;
6.1 procedure
Prozeduren sind Code-Blöcke, die für bestimmte Aufgaben (=Ereignisse) bestimmte Befehle enthalten.
Die Befehle befinden sich zwischen...
procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent); begin
...und...
end;
Sender: TfrxComponent wird nur für ganz wenige Spezialfälle benötigt, vergessen Sie das.
- Der Autor hat Sender in den letzten 5 Jahren nicht benötigt...
6.2 Begin und end
Begin und end legen den Anfang und das Ende eines Programm-Blocks fest.
Eine Prozedur beginnt und endet damit.
Blöcke werden auch in if ... then ...else verwendet, wenn nach dem if bzw. else mehrere Zeilen kommen.
Siehe FastReport: Der if-Befehl
if {Ausdruck} then
...wobei {Ausdruck} ein logischer Ausdruck ist, der entweder wahr (true) oder falsch (false) ergibt.
Wenn nach dem
then
nur eine Zeile folgt, kann man diese direkt darunter schreiben.
Beispiel:
// Kapitel-Position (PosNr=0) ausblenden: if ( <Positionen."PosNr"> = 0 ) then ddPositionen.Visible := False;
Wenn nach dem
then
mehrere Zeilen folgen, muss man einen Block mit
begin
und
end;
schreiben. Dazwischen schreibt man die Zeilen des Codes.
Beispiel:
// Kapitel-Position (PosNr=0) ausblenden: if ( <Positionen."PosNr"> = 0 ) then begin ddPositionen.Visible := False; ddPosTexte.Visible := False; end;
6.3 Das Semikolon ;
- Das Ende einer Programmzeile wird durch das Semikolon ; festgelegt.
6.4 Ist-Gleich ist nicht Ist-Gleich!
Das Gleich-Zeichen hat zwei Syntax-Varianten:
- =
= wird verwendet, wenn man zwei Werte miteinander vergleichen will.
Beispiel:
if ( <Positionen."PosNr"> = 0 ) then
- :=
:= wird verwendet, wenn man dem linken Objekt den Wert rechts zuweisen will.
ddPositionen.Visible := False;
6.5 Felder und Variablen im Code
Wenn man Datenbank-Felder, Variablen usw. im Code ansprechen will, muss man die Namen in spitzen Klammern...
<Name>
angeben.
- Hinweis
- Der Schulungsplan ist hier frühzeitig beendet, CORONA/COVID-19 "sei Dank"! Er wird später weitergeführt...