CrystalReports: Beispiel Angebotsformular: Unterschied zwischen den Versionen
(→Kopf) |
(→Termine im Auftragskopf) |
||
Zeile 81: | Zeile 81: | ||
==== Termine im Auftragskopf ==== | ==== 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: | + | Die Termine im Auftragskopf werden in einem '''Unterbericht''' ausgegeben. Dieser führt die Auftragstermine chronologisch auf [[CrystalReports:_Beispiel_Angebotsformular#Automatische_Termine|(s.o.)]]. Der Unterbericht ist schlicht und einfach: |
[[Datei:CrystalReports_Bsp_Angebot_AuftrTermineUnterbericht.png]] | [[Datei:CrystalReports_Bsp_Angebot_AuftrTermineUnterbericht.png]] |
Version vom 29. April 2014, 11:12 Uhr
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 [CrystalReports: Formulartexte und Formeln|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 Fuss
3.2.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