CrystalReports: Beispiel Angebotsformular
Inhaltsverzeichnis
1 Allgemeines
Dieser Artikel zeigt den Aufbau eines Beispiel-Formulares für ein Angebot.
Es enthält:
- Einen Kopf mit einer Grafik
- Im Kopf den internen Ansprechpartner mit Name, Telefon, E-Mail usw.
- Einen Kopf-Text, der sich aus dem eingegebenen Kopftext und den angegebenen Terminen bezieht.
- Eine "Mit freundlichen Grüßen"-Floskel
- Die Positionen mit Kapitel-Überschrift
- Im Fuss die Summen
2 Vorarbeiten
2.1 Automatische Termine
Die Termine sollen in der Art
- Veranstaltungstechnik (gemäß Anhang "Equipmentaufstellung")
- Aufbau der Technik am 27.03.14 und 28.03.14
- Betreuung Ihrer Veranstaltung am 31.03.14
- Abbau der Technik am 05.04.14
erscheinen. Der Anhang "Equipmentaufstellung" beinhaltet die eigentlichen Positionen.
Dazu wird die Register-Seite Termine in der Auftragsverwaltung von REFLEX verwendet.
Nun könnte man von den Benutzern/Benutzerinnen verlangen, dass sie Termine in eine bestimmten Weise anlegen müssen, damit diese vernünftig im Formular erscheinen. Damit den Benutzern/Benutzerinnen die Arbeit erleichtert wird, kann man in den Programm-Parametern festlegen, dass beim Anlegen eines Auftrag schon Standard-Termine eingetragen werden. Das Formular wertet die Angaben in den Terminen aus und druckt die Termin-Angaben entsprechend aus:
- Überschrift
- Der Termin "- Veranstaltungstechnik (gemäß Anhang "Equipmentaufstellung")" ist nur eine Überschrift und soll kein Datum drucken! Dazu verwenden wir das Datenbank-Feld MAUFJOB.TERMINART (MAUFJOB ist die Tabelle der Auftragstermine). Wenn da keine bestimmte Terminart angegeben wurde (MAUFJOB.TERMINART=0), dann soll auch kein Datum gedruckt werden.
- Die Datumsangaben selbts werden über eine Formel gedruckt. Wenn Datum von und -Bis gleich ist, soll "am XX.XX.XXXX" gedruckt werden, sonst "vom XX.XX.XXXX bis XX.XX.XXXX". Wie das genau geht, wird weiter unten beschrieben.
In den Programm-Parametern-> Kalender, Termine, Termine-Manager-->Automatische Auftragstermine hinterlegen wir diese Termine:
- Aktion/Text
- Dieser Text wird gedruckt.
- Bezugsdatum
- Gibt an, auf welche Spalte sich Relativ zum Datum bezieht.
- Relativ zum Datum
- Gibt an, wie das Datum des automatischen Termins berechnet wird.
- Nur bei Versandart
- Gibt an, dass der Termin nur eingefügt wird, wenn die Versandart des Auftrags mit der hier angegebenen übereinstimmt.
- Terminart
- Wählen Sie hier die Terminart des Termins aus. Bei der Terminart "Allgemein" (Wert=0) soll kein Datum gedruckt werden!
Wenn Sie die Angaben wie oben beschrieben anlegen, werden beim Anlegen eines neuen Auftrags automatisch die entsprechenden Termine in den Auftrag eingefügt! Beispiel:
3 Der Report
3.1 Kopf
Der Kopf besteht aus diesen Bereichen:
Basis des Formulars ist das Standard-Formular, das mit REFLEX ausgeliefert wird.
3.1.1 Firmen-Texte
Sie meisten Felder der Firmen-Angaben sind nicht fest im Formular getextet, sondern kommen aus Formeln. Diese Formeln müssen festgelegte Namen haben, weil sie von REFLEX zur Laufzeit durch die hinterlegten Texte gefüllt werden. Einzelheiten werden hier beschrieben.
3.1.2 Adresse, Unterbericht
Die Adresse des Kunden wird in einem Unterbericht ausgegeben. Dieses Verfahren hat u.a. den Vorteil, dass sich der Unterbericht dynamisch an die tatsächliche Größe der Anschrift anpasst.
Ein Unterbericht ist sozusagen ein Formular in einem Formular (ein Report in einem Report). Ein Unterbericht wird mit dem Hauptbericht über ein Datenbank-Feld verknüpft, in diesem Fall die Auftragsnummer im Auftragskopf (MAufKo.AuftrNr). Das heißt, dass der Unterbericht nur die Daten zu einer bestimmten Auftragsnummer zeigt.
3.1.3 Termine im Auftragskopf
Die Termine im Auftragskopf werden in einem Unterbericht ausgegeben. Dieser führt die Auftragstermine chronologisch auf (s.o.). Der Unterbericht ist schlicht und einfach:
Der Unterbericht verwendet die Tabelle MAufJob, in der die Termine zu den Aufträge stehen.
Es steht das Feld Text in der Zeile, gefolgt von einer Formel:
Die Formel {@DatumVonBis} hat die Aufgabe, die Datumsfelder auszugeben (oder zu unterdrücken):
// Terminart 0 = Allgemein ist OHNE TERMINANGABE, nur der Text: if {MAUFJOB.TERMINART}=0 then "" else if {MAUFJOB.DATUM}={MAUFJOB.DATUMBIS} then " am " + ToText ({MAUFJOB.DATUM},"dd.MM.yyyy" ) else " vom " + ToText ({MAUFJOB.DATUM},"dd.MM.yyyy" ) + " bis " + ToText ({MAUFJOB.DATUMBIS},"dd.MM.yyyy" );
- Wenn die Terminart=0 (Allgemein) ist, dann soll kein Datum ausgegeben werden! Diese Zeile dient nur der Überschrift.
- Wenn ein Datum ausgegeben werden soll, wird geprüft, ob Von- und Bis-Datum gleich sind. Wenn ja, wird nur der Text "am" ausgegeben, sonst der Text " vom "..."bis".
3.2 Positionen
3.2.1 Betragsfelder optional ausblenden
Die Betragsfelder in den Positionen können optional ausgeblendet werden. Dazu wird in REFLEX das Auftragskennzeichen 1 verwendet. Beim Drucken in REFLEX kann man dieses Kennzeichen auf "Nein" stellen.
Dadurch werden die Betragsfelder unterdrückt.
Einzelheiten werden hier beschrieben.
3.2.2 Text
Unter der Bezeichnungszeile wird der formatierbare Text aus den Auftragspositionen ausgegebenen. In diesem Fall aber wird nicht direkt das Datenbankfeld MAufPo.Text verwendet, sondern diese Formel:
@Text_mit_Bullets
Replace ({MAUFPO.TEXT}, "\pntext", "\listtext")
Der Grund liegt in der ungenauen Definition der sog. (Rich-Text-Formatierung). Diese verwendet für Aufzählungen verschiedene Möglichkeiten, wobei die von Crystal verwendete besser zu Crystal passt als die von REFLEX. REFLEX benutzt die vom Betriebssystem-Hersteller kommende Komponente zur Eingabe von RTF-Text, das ist aus technischen Gründen so. Die hier gezeigte Formel setzt die Formatierung auf das Crystal-RTF-Format um.
- Wenn man keine "Bullets" verwendet, muss man die Formel nicht einsetzen.
3.3 Fuss
3.3.1 Rabatt-Betrag und -Prozent
Hier wird der Rabatt-Betrag und -Prozentwert per Formel errechnet und ausgedruckt. Die Zeile sieht so aus:
Die Formel für den Rabatt-Betrag:
// Der Gesamt-Rabattbetrag errechnet sich aus der Kalkulationssumme (Netto-Betrag ohne Rabatt) // und der rabattierten Summe auf Material (ohne Arb.-Zeit und Dienstleistungen): {MAUFFU.KalkSumme} - {MAUFFU.PosSumme1}
Die Formel für den Rabatt-Prozentwert:
// Prozentsatz berechnen: if {MAUFFU.KalkSumme} > 0 then // Falls kein Betrag drin steht! Sonst Fehler "Division durch 0"!!! 100 - ( {MAUFFU.PosSumme1} / {MAUFFU.KalkSumme} * 100 ) else 0;
Für den (unwahrscheinlichen) Fall, das man ein Angebot ohne Betrag drucken, wird die Abfrage
if {MAUFFU.KalkSumme} > 0 then
verwendet. Da eine Division durch 0 unzulässig ist, würde sonst eine Fehlermeldung erscheinen!
Die Sektion wird unterdrückt, wenn es keinen Rabatt gibt. Die Unterdrückungsformel dazu:
// Unterdrücken, wenn kein Gesamt-Rabatt enthalten ist: {@GesRabattBetrag} = 0
3.3.2 Texte im Fuss
Die Texte werden über Formeln aus den Programmparametern geholt. Einzelheiten werden hier beschrieben.