Migration CrystalReports zu FastReport: Unterschied zwischen den Versionen
(→Varianten) |
|||
Zeile 33: | Zeile 33: | ||
Man kann beispielsweise über einen Code im Report festlegen, dass das Feld '''Einzelpreis''' unterdrückt (Visible=False) werden soll, wenn das Kennzeichen '''Kennz1''' auf "Nein" steht. | Man kann beispielsweise über einen Code im Report festlegen, dass das Feld '''Einzelpreis''' unterdrückt (Visible=False) werden soll, wenn das Kennzeichen '''Kennz1''' auf "Nein" steht. | ||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | procedure MemoEinzelpreisOnBeforePrint(Sender: TfrxComponent); | ||
+ | begin | ||
+ | if <AuftragsKopf."Kennz1"> = 'Nein' then | ||
+ | MemoEinzelpreis.Visible := False | ||
+ | else | ||
+ | MemoEinzelpreis.Visible := True; | ||
+ | end; | ||
+ | |||
=== Verschiedene Sprachen === | === Verschiedene Sprachen === |
Version vom 9. September 2015, 21:52 Uhr
Inhaltsverzeichnis
1 Allgemeines
FastReport kann in GEVITAS-Programmen zur Ausgabe von Daten verwendet werden (ab 10/2015), alternativ zu CrystalReports.
Dieser Artikel beschreibt, wie Sie von CrystalReports auf FastReport umsteigen können.
1.1 Reports konvertieren?
Es gibt leider keine richtig funktionierende Möglichkeit, Reports von CrystalReports nach FastReport zu konvertieren. Reports müssen neu erstellt werden.
Es gibt auf dem Markt einige Konverter, die in unseren Tests jedoch alle mehr oder weniger versagt haben. Vor allem komplexe Reports mit Formeln, Unterberichten usw. konnten nicht konvertiert werden. Der Aufwand, diese "Rumpf"-Reports vernünftig und zukunftsweisend zum Laufen zu bringen, ist unverhältnismäßig groß.
2 Vergleich CrystalReports zu FastReport
In diesem Artikel werden die Unterschiede zwischen den beiden Produkten beschrieben.
3 Bestandsaufnahme
Als erster Schritt ist es empfehlenswert, alle vorhanden Reports (Formulare) darauf zu untersuchen, ob/welche überhaupt noch benutzt werden. Erfahrungsgemäß sammeln sich in einem Unternehmen im Laufe der Zeit Reports an, die nicht mehr benutzt werden.
Danach sollte man sich überlegen, warum es diese unterschiedlichen Reports überhaupt gibt. Ziel sollte es sein, mit möglichst wenig Reports auszukommen, im Idealfall mit nur einem einzigen!
4 Varianten
4.1 Angebot, Auftrag, Faktura, Bestellung: Report-Varianten über Auftragskennzeichen
Oft hat man verschiedene Reports, die sich nur in Kleinigkeiten unterscheiden. Beispielsweise soll manchmal das Firmenlogo gedruckt werden, manchmal nicht. Oder es sollen bei manchen Kunden Einzelpreise ausgegeben werden, bei anderen nicht.
Dazu gibt es z.B. in REFLEX die sog. Auftragskennzeichen, mit denen die Ausgabe eines Reports gesteuert werden kann. Im Report kann man diese Felder abfragen und einzelne Objekte oder ganze Bänder ausgeben oder nicht.
Diese Felder können über die Tabelle Auftragskopf und die Felder Kennz1 bis Kennz12 abgerufen werden.
Man kann beispielsweise über einen Code im Report festlegen, dass das Feld Einzelpreis unterdrückt (Visible=False) werden soll, wenn das Kennzeichen Kennz1 auf "Nein" steht.
Beispiel:
procedure MemoEinzelpreisOnBeforePrint(Sender: TfrxComponent); begin if <AuftragsKopf."Kennz1"> = 'Nein' then MemoEinzelpreis.Visible := False else MemoEinzelpreis.Visible := True; end;
4.2 Verschiedene Sprachen
Mehrsprachige Reports zu erstellen, bedeutet natürlich einen zusätzlichen Aufwand. Dabei gibt es im Wesentlichen diese Probleme zu lösen:
4.2.1 Artikel-Texte
Das ist das geringste Problem, weil das Programm automatisch den zugehörigen Artikel-Text in der ausgewählten Sprache des Auftrags zur Verfügung stellt. Dazu gibt es in der Tabelle Positionen das Feld TextPosition. In diesem Feld steht der Artikel-Text in der ausgewählten Sprache.
4.2.2 Titel des Formulars
Auch das ist kein Problem, weil der Titel des Formulars in REFLEX durch das Programm festgelegt wird. Dazu muss man im Report eine neue Variable mit dem Namen "Titel" anlegen. Das Programm ersetzt den Inhalt der Variable durch den Titel, der in Datei-->Admin-Optionen-->Formular-Texte angegeben wurde.
4.2.3 Feste Texte
Feste Texte sind Felder für Überschriften, Feld-Titel usw. Das stellt einen erheblichen Aufwand dar! Die einzig sinnvolle Möglichkeit, dies zu lösen, ist es Code (in CrystalReports: Formeln) zu schreiben.
Dazu fügen Sie ein Textfeld in den Report ein. Dies bekommt anfangs den Namen "MemoXX", wobei XX einfach eine Fortlaufende Nummer ist.
In der Eigenschaft Name geben Sie dem Feld nun einen aussagekräftigen Namen, z.B. "MemoNummer", wenn es um eine Auftragsnummer, Bestellnummer usw. geht.
Nun schalten Sie auf das Register Ereignisse um und Doppelklicken auf OnBeforePrint. Es öffnet sich er Code-Editor, in dem Sie nun Befehle eingeben können, die z.B. den Text festlegen, der ausgegeben werden soll.
- Das EreignisOnBeforePrint wird von FastReport aufgerufen, bevor das Feld ausgegeben wird! In diesem Ereignis können Sie Code schreiben, der z.B. die Sichtbarkeit (Visible) auf Wahr (True) oder Falsch (False) setzen können. Sie können aber auch den Text festlegen, der ausgegeben werden soll.
Nun geben Sie den Code ein, der festlegt, was bei welcher Sprache ausgegeben werden soll. Beispiel:
procedure MemoNummerOnBeforePrint(Sender: TfrxComponent); begin if <AuftragsKopf."Sprache"> = 'E' then MemoNummer.Memo.Text := 'Number:' else if <AuftragsKopf."Sprache"> = 'F' then MemoNummer.Memo.Text := 'Nombre:' else MemoNummer.Memo.Text := 'Nummer:'; end;
In diesem Beispiel wird der der "Number" ausgegeben, wenn das Sprachkennzeichen auf "E" steht. Wenn nicht ("else"), wird "Numero" ausgegeben, wenn das Sprachkennzeichen auf "F" steht. Wenn nicht ("else"), wird "Nummer" ausgegeben.
Übersetzt bedeutet dieser Code:
Wenn <AuftragsKopf."Sprache"> = 'E' dann Der Text des Feldes ist 'Number:' ansonsten Wenn <AuftragsKopf."Sprache"> = 'F' dann Der Text des Feldes ist 'Nombre:' ansonsten Der Text des Feldes ist 'Nummer:';
Das ";" am Ende muss eingegeben werden.
Das ist natürlich ein erheblicher Aufwand. Alle festen Texte müssen so behandelt werden. Der Lohn der Arbeit ist aber ein Report, der in allen Sprachen funktioniert!
5 Standard-Kopf- und Fußbereiche
Es gibt das Problem, dass auf jedem offiziellen Formular (=Report) ein Kopfbereich und ein Fußbereich stehen soll, der die Firmendaten beinhaltet, z.B. im Seitenkopf ein Logo und im Seitenfuß die Bankverbindung, die Firmendaten usw.
Das kann man über einen Basis-Report lösen, wie hier beschrieben.
6 Verzeichnisse
Beispiel einer Verzeichnis-Struktur:
Verzeichnis | Beschreibung |
---|---|
R:\Formular | Allgemeines Formular-Verzeichnis, in dem eigentlich keine Reports stehen. Die eigentlichen Reports stehen in Unterverzeichnissen (s.u.). Für den Basis-Report ist das jedoch der richtige Platz! Siehe FastReport Vererbung/Basis-Report. |
R:\Formular\Auftrag | Reports für Anfragen, Angebote oder Aufträge. Im Gegensatz zu CrystalReports sucht FastReport die Reports nur in diesem Verzeichnis! Grund: Es sollte nur ein Report für Anfragen, Angebote und Auftragsbestätigungen verwendet werden. In CrystalReports musste man diesen universellen Report in beiden Verzeichnissen halten, also immer eine Kopie des geänderten Reports in das andere Verzeichnis kopieren. |
R:\Formular\Angebot | Dieses Verzeichnis wird in FastReport nicht verwendet. Alle Reports für die Auftragsverwaltung stehen in "R:\Formular\Auftrag". |
R:\Formular\Bestell | Reports für Bestellungen. |
R:\Formular\Fertigung | Reports für die Fertigung. |
R:\Formular\LiefSch | Reports für den Lieferschein bei der Lagerausgabe. |
R:\Formular\Ladeliste | Reports für die Ladeliste aus der Auftragsverwaltung oder der Lagerausgabe. |
R:\Formular\KV | Reports für den Kostenvoranschlag in der Werkstatt. |
R:\Formular\Mahnungen | Reports für die Mahnungen. |
R:\Formular\Rechnung | Reports für Rechnungen und Gutschriften. |
R:\Formular\WAuftrag | Reports für den Werkstatt-/Reparatur-Auftrag. |