Document toolboxDocument toolbox

SuperReport - Formulareditor

Einleitung

Auf dieser Seite werden einzelne Kurzinfos gegeben, um etwaige Anpassungen eingenständig durchführen zu können, die bei Updates von profacto notwendig werden.

Änderungen nur durch XG Mitarbeiter

  • Änderungen in diesem Bereich sollten nur durch extragroup Mitarbeiter oder speziell in Formularanpassung geschulte Anwender vorgenommen werden. Führen Sie diese Anleitung nur aus, wenn diese Ihnen zur Durchführung empfohlen worden ist.
  • Änderungen auf eigene Gefahr!

SuperReport - Der Editor

Was ist SuperReport?

SuperReport ist ein Reportgenerator, mit dem Listen wie Auftragslisten, Stücklisten etc. gedruckt werden können aber auch so komplexe Dokumente wie Angebote, Rechnungen oder Bestellungen. Ein Reportgenerator druckt eine ausgewählte Menge von Datensätzen, also beispielsweise mehrere Stücklistenteile oder einen Auftrag mit seinen Positionen.
SuperReport wird aktuell von e-node entwickelt. Unter www.e-node.com finden Sie allgemeine Informationen zu SuperReport und eine Liste von Referenzen.

Formulare bearbeiten

SuperReport arbeitet mit so genannten Formularen, die genau beschreiben, wie eine Liste aussehen soll. Diese Formulare werden generell in der profacto-Datenbank abgespeichert, Sie müssen sich also nicht speziell darum kümmern, dass diese bei Datensicherungen berücksichtigt werden. Wollen Sie jedoch ein Formular an einen Kollegen oder an extragroup schicken, müssen Sie es extern auf der Festplatte oder einem anderem Datenträger sichern. Genau so können Sie auch Formulare, die Ihnen von einem profacto - Partner angepasst wurden, in Ihre Datenbank einlesen. Später erfahren Sie dazu mehr.
Um ein Formular zu bearbeiten, müssen Sie es in den SuperReport-Editor laden. Wir wollen uns dies einmal am Beispiel eines Rechnungsformulars ansehen, weil dieses das Formular ist, das die meisten von Ihnen dann und wann einmal bearbeiten wollen.

  • Rufen Sie aus dem Menü «Datei» den Befehl «Voreinstellungen» auf.
  • Klicken Sie auf die Karteikarte «Formulare»
  • Dort finden Sie im linken Bereich unten links die Liste der Standardformulare, von Angebot bis Rechnung, Mahnung bis hin zur Bestellung und Anfrage.

  • Klicken Sie das Popup-Menü «Rechnung» an. Wählen Sie den Eintrag «Bearbeiten» an.

Das Formular wird nun in den Editor geladen und kann bearbeitet werden.
In den nächsten Abschnitten erfahren Sie, wie Sie das Formular verändern können.

Wie Formulare gespeichert sind

Wie oben schon erwähnt, werden die Formulare für SuperReport in der profacto-Datenbank gespeichert. Für die Dokumente von Angebot bis Rechnung, Mahnungen und Anfrage/Bestellung gibt es ein ausgeklügeltes Konzept, was Ihnen eine sehr flexible Nutzung von Formularen erlaubt.

Wie auf der Seite «Formulare» zu sehen, gibt es für die Formulare eine so genannte Dokumentgruppe. Diese können Sie sich wie ein Verzeichnis auf Ihrer Festplatte vorstellen. Innerhalb einer Dokumentgruppe können beliebig viele Formulare abgelegt sein. Welche Formulare tatsächlich gerade in Benutzung sind, sehen Sie links davon. Dort ist für jede “Auswertung” ein eigenes Formular anzugeben. Nicht alle Auswertungen müssen unterschiedliche Formulare nutzen. Tatsächlich wird es eher so sein, dass hinter Angebot, Auftragsbestätigung, Teilrechnung und Rechnung derselbe Formularname steht. Es handelt sich dann um ein und dasselbe Formular. Davon abweichend werden der Lieferschein, die Abschlagsrechnung und die Schlussrechnung eigene Formulare besitzen können, damit auf die dort unterschiedlichen Rahmenbedingungen eingegangen werden kann:

  • Lieferschein: keine Preise
  • Abschlagsrechnung: wesentlich vereinfachtes Formular ohne Positionsauflistung
  • Schlussrechnung: aufwendigeres Formular mit Aufstellung aller bereits gestellten Teil- und Abschlagsrechnungen.

Formularvarianten

Nun kann es sein, dass für bestimmte Zwecke weitere Formulare benötigt werden. Beispielsweise drucken Sie zwar normalerweise auf Geschäftspapier, für das Versenden eines Angebots per Fax oder Email sollen aber Firmenlogo und andere graphische Elemente direkt im Formular enthalten sein.
Dafür brauchen wir dann eigene Formulare. Diese fügen wir auf der Karteikarte «Ansichten» hinzu. Dort legen Sie eine neue persönliche Voreinstellung an. In dem dann erscheinenden Dialog tragen Sie in das Feld «Personalnummer» den Verwendungszweck ein, beispielsweise “Fax”. Es wird dann eine Fehlermeldung erscheinen, dass diese Personalnummer nicht existiert. Ignorieren Sie diese Meldung einfach.

Nun können Sie entweder an den Inhalten von «Dokumentgruppe» etwas ändern und dadurch praktisch ein neues “Formularverzeichnis” mit einem komplett neuen Formularsatz anlegen oder einfach nur einzelne Reports mit einem anderen Formularnamen belegen.
Falls Sie übrigens in den persönlichen Voreinstellungen mit echten Personalnummern arbeiten, kann jeder Mitarbeiter, der mit profacto arbeitet, seinen eigenen Formularsatz erhalten. Auf diese Weise können vorkonfigurierte Formulare mit Unterschriften etc. erstellt werden. Ansonsten kreuzen Sie bitte die Option "Standardformulare nutzen" an.

Im Druckdialog finden Sie dann die Möglichkeit, den gewünschten Formularsatz auszuwählen.

Im obigen Beispiel haben wir lediglich für das Angebotsformular einen abweichenden Formularnamen eingetragen - die restlichen Formulare entsprechen dem Standardformularsatz.Aufbau des Editors


Formulare werden in einem so genannten Editor erstellt. In diesem Editor wird graphisch, ähnlich einem Layoutprogramm, beschrieben, welche Daten wo gedruckt werden sollen, welche Schriften verwendet werden sollen und wo eventuell Graphiken sowie Logos gedruckt werden sollen. In der Regel werden Sie ein Formular nie von Null auf erstellen, sondern ein existierendes Formular an Ihre Bedürfnisse anpassen.
Für die reine Platzierung von Feldern wie Auftragsnummern, Bezeichnungen, Abmessungen etc. benötigen Sie keine Programmierkenntnisse. Wer daher lediglich das Layout, die Optik eines Formulars beeinflussen will, kommt in diesem Abschnitt zu genügend Informationen.

Werkzeuge

Mit den Werkzeugen, die SuperReport zur Verfügung stellt, können Sie neue Objekte zeichnen und bestehende verändern, z.B. die Schriftart, Linienstärke oder Farbe. Wir stellen die Werkzeuge und die Objekte im Einzelnen vor.
Die vollständige Dokumentation finden Sie auf SuperReport - Werkzeuge.

Befehle

Nach der Referenz der Werkzeuge von SuperReport Pro folgt nun die Übersicht über die Befehle. Es gibt vier Menüs: Ablage, Bearbeiten, Optionen und Datenbank. Die am häufigsten verwendeten Befehle finden sich in den ersten beiden Menüs, da sich in «Optionen» und «Datenbank» eher nur einmal zu verwendende Grundeinstellungen befinden.
Die vollständige Dokumentation finden Sie auf SuperReport - Befehle.

Aufbau eines Formulars

Ein SuperReport-Formular beschreibt mit Hilfe von Bereichen, wie ein Report gedruckt werden soll. Der Aufbau orientiert sich dabei einerseits an klassischen “Formularen”, wie man Sie von Steuererklärungen, Antragsformularen etc. kennt, andererseits spiegelt ein Formular in seinem Aufbau aber auch die Struktur der gedruckten Daten wider. Wir sehen dies an der Funktion der in einem Formular vorhandenen Bereiche. Ein Bereich wird gekennzeichnet durch eine durchgehende, hellgraue Linie, die mit einer Marke versehen ist, die den Namen des Bereichs kennzeichnet. Der Bereich selbst ist der Bereich des Blatts oberhalb dieser Bereichslinie bis zur nächsten, darüber liegenden Bereichslinie. Im Falle des obersten Bereichs ist der Papierrand die Obergrenze des Bereichs.

Kopfzeile / Header

Dieser Bereich wird immer zuoberst auf dem Blatt gedruckt und zwar entweder auf jeder Seite, nur auf der ersten Seite oder erst ab der zweiten und den darauf folgenden Seiten. Nutzen Sie die Kopfzeile daher für den Druck von Firmenlogos, Adressinformationen oder Informationen, die auf jeder Seite gedruckt werden sollen. Wird der Bereich «Kopfzeile» erst ab der zweiten Seite gedruckt, beginnt das Formular auf der ersten Seite mit dem Bereich «Kopf 1», was zur Folge hat, daß entsprechend viel Abstand eingeplant werden muß, damit die gedruckten Informationen nicht zu weit am oberen Papierrand kleben. Den Abstand kann man sehr einfach durch ein Textfeld mit variabler Höhe erzwingen (siehe Tips & Tricks).

Kopf 1 bis 6 / SubHeader 1 bis 6

Die Bereiche «Kopf 1» bis «Kopf 6» werden in der Regel nur bei Eintreffen bestimmter Bedingungen gedruckt, zum Beispiel wenn sich der Wert eines Datenfelds ändert. Die “klassische” Belegung dieser Bereiche im Rechnungsformular könnte so aussehen:

Kopf 1: Druck wenn Feldänderung [Dokumente]Auftrag
Kopf 2: Druck wenn Feldänderung [Dokumente]Auftrag
Kopf 3: Druck wenn Feldänderung [Dokumente]Auftrag
Kopf 4: Druck wenn Feldänderung [Dokumente]Positionsnr
Kopf 5: Druck wenn Variable «ZwSum» sich ändert
Kopf 6: wird nicht verwendet
Sicherlich nimmt es Sie wunder, dass die Druckbedingungen für «Kopf 1» bis «Kopf 3» gleich sind. Dies ist damit begründet, dass man in den Fußbereichen bestimmte Informationen paketweise zusammenfassen will. Würde alles in einen Bereich gepackt werden, müsste dieser Bereich entweder komplett auf eine Seite passen, was bei längeren Textelementen zu unschönen Umbrüchen führen kann, oder der relativ große Bereich würde an nicht beeinflussbaren Stellen getrennt werden.
Benötigt man eigentlich nur einen Fußbereich und hat daher den Kopfbereich nur aus Gründen der Vollständigkeit im Formular, kann dessen Bereichslinie direkt an die nächst höhere Bereichslinie heran geschoben werden. Dadurch wird der Bereich zwar gedruckt, aber mit der Höhe «Null» - er nimmt daher keinen Platz im Formular weg.

Datenteil / Body

Dieser Bereich wird immer gedruckt, wenn ein neuer Datensatz der Druckdatei an der Reihe ist. Es gibt einige wenige Ausnahmen, an denen der Datenteil nicht gedruckt werden soll oder er zumindest nicht im Ausdruck erscheinen soll - wenn der Report zwar die Einzeldatensätze zur Ermittlung von Summen benötigt, die Datensätze selbst aber nicht im Druck erscheinen sollen.

Umbruch 1 bis 6 / SubTotal 1 bis 6

Diese Bereiche stellen das Gegenstück zu den Kopfbereichen dar. Für jeden im Druck erscheinenden Kopfbereich muss der passende Fußbereich vorhanden sein, und die Druckbedingung für den Fußbereich sollte identisch sein mit der Druckbedingung des Kopfbereichs.

Summe / Total

Dieser Bereich, zu dem es im Kopfteil keine Entsprechung gibt, wird exakt ein einziges Mal gedruckt und dient zur Darstellung von Endsummen. Wird der Bereich «Summe» gedruckt, weiß man, daß der Report gleich zu Ende ist. Dieses Wissen kann sehr nützlich sein, wenn man ganz zum Schluß bestimmte Variablen auf Werte setzen will, die nur auf der letzten Seite erscheinen dürfen.

Fußzeile / Footer

Dieser Bereich wird immer gedruckt, und zwar immer am unteren Blattrand. Daher ist dieser Bereich besonders gut für die Darstellung von Adressinformationen, Bankverbindungen, aber auch Zwischensummen geeignet. Im Bereich «Fußzeile» können Sie keine Felder mit variabler Höhe verwenden!

In jedem Bereich finden sich die zu druckenden Objekte, also Felder, Variablen, Text, Linien, Rechtecke, Kreise und Graphiken. Im nächsten Abschnitt erfahren Sie nun, was genau beim Druck eines Formulars abläuft.

Kopf- und Fussbereiche für unterschiedliche Seiten

Sie können mehr als einen Kopf/Footer im Formular verwenden. Für jeden Kopf/Footer können Sie einstellen ob er auf 

  • Seite 1
  • Seite 2 (und folgende)
  • der letzten Seite

gedruckt wird. Dadurch kann man nun erreichen, dass spezielle Fusszeilen nur auf der letzten Seite erscheinen.

Wasserzeichen

Dieser Bereich kann aktiviert werden, um ein Wasserzeichen auf jeder Seite zu drucken. extragroup bietet mit dem PDF-Deckblatt eine komfortablere Lösung, die allerdings nur beim PDF-Druck funktioniert, dafür flexibler aktivierbar ist. Um die Watermark-Section zu bearbeiten, müssen Sie sie mit Modify Section aufrufen, dort die Option "On Top" aktivieren, dann die Objekte dort plazieren, die Sie drucken wollen und dann wieder die Option "On Top" in der Section deaktivieren.

Was beim Drucken passiert

Um nachvollziehen zu können, was beim Druck eines Formulars abläuft und wo Sie unter Umständen nach Fehlern oder nach Gründen für Drucke, die anders als gedacht erscheinen, suchen müssen, sollten Sie wissen, was beim Druck eines Formulars passiert.

Ausführung des Start-Skripts

Dieses Skript wird exakt einmal ausgeführt und erlaubt Ihnen, eigene Sortierungen, Auswahlen und vor allem die Initialisierung von Variablen vorzunehmen. Verwenden Sie eigene Variablen, so müssen Sie diese hier auf alle Fälle initialisieren, damit die 4D-Laufzeitumgebung erkennen kann, was für einen Typ die Variable besitzt. Hier einige Beispiele:
meinString:=”” - für Zeichenketten
meineZahl:=0 - für Zahlen

Ausführung des Skripts des ersten gedruckten Bereichs

Wird der Kopfteil auf der ersten Seite gedruckt, wird das Skript des «Kopfteils» ausgeführt, ansonsten das Skript von «Kopf 1».

Nach der Ausführung des Skripts wird geprüft, ob der Bereich noch auf die Seite passt. Ist dies nicht der Fall, wird ein Seitenumbruch vorgenommen. Dabei wird auf jeden Fall noch die Fußzeile verarbeitet.

Ausführung des “hintersten” Objektskripts

Das Skript desjenigen Objekts, das zuhinterst im Druckbereich liegt, wird zuerst ausgeführt. Welches Objekt das ist, erfahren Sie, indem Sie im Menü «Optionen» die Option «Objektreihenfolge zeigen» einschalten.

Druck des hintersten Objekts

Es ist sehr wichtig zu wissen, dass nach dem ersten Skript bereits das erste Objekt gedruckt wird. Es werden nicht erst alle Skripts ausgeführt und dann alle Objekte gedruckt, sondern abwechselnd Objektskripts ausgeführt und dann das zugehörige Objekt gedruckt. Dieses Verhalten kann man sich zunutze machen, indem man im Druck ein und derselben Variablen immer wieder neue Werte zuweist.

Wiederholung

Wiederholung der Schritte 3+4, bis alle Objekte eines Bereichs gedruckt sind

Ausführung

Ausführung des Skripts des zweiten Bereichs, also entweder «Kopf 1» oder «Kopf 2»

Egal welche Bedingung Sie eingestellt haben, im ersten Durchlauf werden die Bereiche «Kopf x» auf jeden Fall gedruckt, da im ersten Durchlauf auf jeden Fall eine Wertänderung stattfindet. Nur falls ein Bereich erst auf der zweiten Seite gedruckt werden soll, wird er jetzt noch nicht verarbeitet.
Wertänderungen werden für jeden Bereich separat geführt, d.h. wenn auch «Kopf 2» auf die selbe Wertänderung von «DokumenteAuftragsnr» reagiert, so wird auch «Kopf 2» gedruckt, obwohl der Wert im Vergleich zum Druck von «Kopf 1» sicher erst einmal gleich geblieben ist

Verarbeitung des Datenteils

In analoger Weise wird nun der Datenteil verarbeitet: Erst wird das «Datenteil-Skript» aus dem Menü «Datenbank» ausgeführt, dann das Skript, das am Bereich «Datenteil» hängt, dann werden die Objekte des Datenteils gedruckt.

Verarbeitung der Umbruchsbereiche

In analoger Form werden nun die Umbruchsbereiche gedruckt. Bei Umbruchsbereichen, die nur bei Wertänderungen gedruckt werden sollen, passiert jetzt kein Druck, falls bereits der zugehörige Kopfbereich gedruckt wurde. Wurde beispielsweise der Bereich «Kopf 1» gedruckt, weil eine Wertänderung im Feld «[Dokumente]Auftragsnr» erfolgt ist, so wird «Umbruch 1» nicht gedruckt.

Verarbeitung des Bereichs «Fußzeile»

Dieser Bereich wird, falls er im Formular vorhanden ist, auf jeden Fall gedruckt. Er besitzt eine feste, nicht variable Höhe. Der Ablauf ist derselbe wie bei den anderen Bereichen.

Verarbeitung der Folgeseiten

Eventuell wird nun erst auf der Folgeseite der Bereich «Kopfzeile» gedruckt - oder gerade nicht. Danach wird auf jedem Fall mit dem Druckbereich weitergemacht, der auf der vorangegangenen Seite nicht vollständig gedruckt werden konnte.

Verarbeitung des Bereichs «Summe»

Zuletzt wird der Bereich «Summe verarbeitet. Nach dem Druck des Bereichs «Summe» wird nur noch ein letztes Mal der Bereich «Fußzeile» gedruckt.

Ausführung des «Ende-Skripts»

Ganz zum, im Falle einer Druckvorschau erst mit deren Verlassen, wird das Ende-Skript ausgeführt. In diesem Skript können Sie nur noch Aufräumarbeiten vornehmen, dort ausgeführte Befehle wirken sich nicht mehr auf den Druck aus.

Was die Abarbeitung eines Formulars einerseits vereinfacht, für den ungeübten Anwender jedoch anfangs eher undurchsichtig gestaltet ist die Tatsache, dass bei den von extragroup mitgelieferten Standardformularen eine Reihe von Funktions- und Prozeduraufrufen in den Skripts zu den Bereichen “vergraben” sind, die bestimmte Variablen auf definierte, in dem jeweiligen Druckzeitpunkt benötigte Werte setzen. Löscht man diese Funktionsaufrufe, so wird des Funktionieren des Formulars stark beeinträchtigt, um es gelinde auszudrücken. Ein weiterer Grund, wieso Sie immer Musterformulare an Ihre Bedürfnisse anpassen sollten.

Kommt es beim Druck eines Formulars zu einem Fehler, sei es, dass in einem Skript ein Syntaxfehler gemacht wurde oder weil eine Variable nicht den Typ besitzt, den die 4D-Laufzeitumgebung annimmt, wird eine Warnmeldung ausgegeben. Speziell unter Windows kann es immer wieder vorkommen, dass profacto dann abrupt beendet wird. Es ist daher immer sehr sinnvoll, das in Bearbeitung befindliche Formular vor dem ersten Druckversuch zu sichern, am besten nicht nur in der Datenbank, sondern auch noch auf der Festplatte. Verwenden Sie beim Sichern am besten den vorgeschlagenen Dateinamen und ändern Sie diesen nachträglich im Explorer. Sichern Sie Formulare immer in Verzeichnissen, die einen möglichst kurzen Pfad besitzen, da das Sichern von Dateien in langen Pfaden wie
C:\MeineFormulare\SpezielleRechnungsformulare\VariantenVomApril\ErsterVersuchMitBildern ohne Warnmeldung misslingen kann.

Skriptprogrammierung

Nachdem Sie nun wissen, wie Formulare aufgebaut sind und was beim Druck passiert, interessiert Sie sicherlich speziell die Programmierung von Skripts mehr. Skripts in Formularen sind eigentlich sehr einfach, weil die spezielle Umgebung, in der sie ablaufen, komplizierte Strukturen nicht erlaubt. Strukturen wie

If (Zahl1#1)
 String22:="Zahl ist nicht 1"
Else
 String22:="Zahl ist 1"
End if

oder

String22:=SR_WahrFalsch(Zahl1#1; "Zahl ist nicht 1"; "Zahl ist 1")

sind jedoch inzwischen möglich.

In der Regel werden also Variablen Werte zugewiesen und Prozeduren, Funktionen und Befehle aufgerufen. Sie können keine eigenen Prozeduren definieren, sondern nur die von 4D bzw. profacto zur Verfügung gestellten Prozeduren und Funktionen nutzen.
Wie Sie jedoch in der Liste der von profacto zur Verfügung gestellten Funktionen und Prozeduren feststellen werden, gibt es Funktionen, die die obigen «If...Then...Else...End if»-Strukturen nachbilden, zumindest um Variablen unter bestimmten Bedingungen Werte zuzuweisen. Das erlaubt mächtigere Formulare, macht das Leben aber nicht unbedingt einfacher!

Einen Überblick über die möglichen 4D-Befehle können und wollen wir an dieser Stelle nicht geben - das Handbuch zur Programmiersprache umfasst über 1000 Seiten. Nicht alle Befehle sind zur Verwendung in einem Formular geeignet, aber doch eine ganze Menge. Die unsachgemäße Verwendung von 4D-Befehlen kann nicht nur zu fehlerhaften Ausdrucken führen, sie kann im Einzelfall sogar dazu führen, dass Datensätze gelöscht werden oder mit Werten gefüllt werden, die die Konsistenz, also die Fehlerfreiheit der Datenbank massiv beeinträchtigen. Bevor Sie also in tiefere Experimente einsteigen, sollten Sie nicht nur eine Sicherheitskopie Ihrer Datenbank machen, sondern sich vor allem über eines im Klaren sein:

extragroup haftet nicht für Datenverluste oder fehlerhafte Daten jeder Art, die durch die unsachgemäße Verwendung der 4D-Programmiersprache entstehen. Formularänderungen, die nicht von extragroup direkt durchgeführt werden, erfolgen auf Risiko des Anwenders. Wird eine Datenbankreparatur notwendig, ist diese in jedem Fall, auch bei Anwendern mit Supportvertrag, kostenpflichtig!

Nachdem dies klargestellt ist, wollen wir Ihnen einen knappen Überblick geben über einige nützliche 4D-Funktionen und Befehle sowie über von profacto zur Verfügung gestellte Variablen, Funktionen und Prozeduren.

4D-Befehle und Funktionen

Die Auflistung der 4D-Befehle auf 4D-Befehle und Funktionen ist nur exemplarisch und unvollständig.
Bei der Schreibung der Befehle und Funktionen müssen Sie die Leerzeichen beachten, nicht aber Groß/Kleinschreibung. In der Auflistung sind Befehle komplett GROSS geschrieben, Funktionen, die einen Wert zurückliefern, jedoch nur mit großem Anfangsbuchstaben.

profacto - Funktionen

Generell kann zwar jede profacto - Funktion von SuperReport aus aufgerufen werden, doch nur die offiziell freigegebenen Funktionen sind “gefahrlos” und bestimmungsgemäß verwendbar. Die nun aufgeführten Funktionen werden mit den zu übergebenden Argumenten und mit dem Rückgabewert dokumentiert.

Die als Argumente verwendeten Variablen wie “String”, “Zahl1” etc. sind nur Platzhalter, die auf den zu übergebenden Datentyp hinweisen sollen. Sie können jede beliebige Variable als Argument für die unten aufgeführten Funktionen und Prozeduren verwenden und jede für den Anwender änderbare Variable kann das Ergebnis aufnehmen.

Da die Dokumentation dieser Funktionen nicht für jeden Anwender von hohem Interesse ist,
haben wir sie auf diese Unterseite ausgelagert: profacto-Funktionen

profacto - Variablen

Neben den zu druckenden Datensätzen liefert profacto eine Reihe von Variablen an ein Druckformular, die es dem Anwender einfacher machen, wichtige Informationen im Druck auszugeben. Bis auf explizit angegebene Ausnahmen sollten Sie die von profacto gelieferten Variablen nicht verändern, da die Druckroutinen teilweise davon abhängig sind, dass diese Variablen bestimmte Werte besitzen.
Auf profacto-Variablen präsentieren wir die Variablen sortiert nach der Art des Reports und der Art der Verwendung.

Tipps & Tricks

In diesem Abschnitt werden einige Techniken erläutert, die in vielen Formularen Verwendung finden. Sie sollen Aufschluss darüber geben, wie man leistungsfähige Formulare erstellen kann, die möglichst universell einsetzbar sind.

Möglichst wenige Formulare

Eine Grundregel ist, ein Formular so universell wie möglich zu machen. Die Erfahrung zeigt, daß Formulare immer wieder Änderungen unterworfen sind. Würde man für Angebot bis Rechnung jeweils eigene Formulare richten, müßten bei allfälligen Layoutänderungen sehr viele Formulare geändert werden. Tatsächlich sollte man aber für Angebot bis Rechnung und Gutschrift nur zwei Formulare benötigen: eines für den Lieferschein und eines für den Rest.

Spezialformulare

Dennoch kommt es immer wieder vor, daß für bestimmte Fälle abweichende Formulare nötig werden. Typische Beispiele dafür sind:

Faxformulare

Ein Faxformular kann oft mit sehr geringem Änderungsaufwand hergestellt werden. Man sollte darauf achten, daß lediglich die Variable «FirmaLogo» sowie vielleicht noch ein, zwei andere Textfelder zusätzlich gedruckt werden müssen. All diese Ergänzungen können über eine Boolean-Variable aktiviert werden. Dann kann das Faxformular vollkommen identisch sein mit dem normalen Formular, welches auf Geschäftspapier gedruckt wird und lediglich durch eine einzige Variablenbesetzung, z.B. einer booleschen Variablen “doFax§ im Startskript wird entschieden, ob das Formular nun gefaxt oder normal gedruckt werden soll. Dafür ist zwar dennoch eine eigene “Persönliche Voreinstellung” nötig (siehe dazu [[SuperReport#Wie_Formulare_gespeichert_sind |“Wie Formulare gespeichert sind”]] (Seite 4 im Handbuch)), aber bei Änderungen des normalen Formulars ist das Faxformular sehr einfach nachzuziehen:

Normales Formular ändern

Extern auf die Festplatte speichern

In das Faxformular laden

Boolesche Variable “doFax” wieder auf «True» setzen.

Jedes Feld, das nur im Fax gedruckt werden soll, fragt einfach mit SR_WahrFalsch den Inhalt von doFax ab, ungefähr so:

erg := SR_WahrFalsch(doFax;”Ergebnis bei Faxdruck”;””)

Firmen, die kein eigentliches Geschäftspapier besitzen, aber vielleicht einen Farbdrucker, tun sich sogar noch leichter, weil in der Regel dann für alle Situationen nur ein Formular für Ausdruck und Fax verwendet werden kann.

Formulare, die anderssprachig gedruckt werden sollen

Benötigt man beispielsweise ein englisches oder französisches Formular, so ist ein eigener Formularsatz unumgänglich. In diesem Fall jedoch hilft ebenfalls der Einsatz von Variablen anstelle normaler Textfelder, da so Änderungen meist leichter und vor allem auch programmierbar durchführbar sind.

Formulare, die abweichend zu Rest beispielsweise ein Deckblatt besitzen sollen

Benötigt man beispielsweise ein Angebotsformular, welches ein eigenes Deckblatt für das Anschreiben besitzen soll, bevor die Positionen gedruckt werden sollen, so ist ein eigenes Formular für diesen Fall ebenfalls unumgänglich. In diesem Fall wird der Bereich «Kopf1» die Umbruchsoption “Neue Seite nach diesem Bereich» erhalten. Der Bereich «Kopfzeile» sollte dann erst ab der zweiten Seite gedruckt werden - das erhöht die Flexibilität etwas.

Felder mit minimaler Höhe nutzen

In vielen Fällen gibt es Informationen in einem Report, die nicht immer gedruckt werden müssen. Sei es, daß beim Erfassen eines Projekts bestimmte Angaben (noch) nicht gemacht wurden oder daß in Abhängigkeit von Dokument - Angebot, AB oder Rechnung beispielsweise - bestimmte Felder unterdrückt werden soll. Nun ist es relativ leicht, mit Hilfe von SR_WahrFalsch solche Felder nicht zu drucken, doch Platz benötigen sie scheinbar dennoch. Es gibt jedoch einen Trick, wie auch hier weniger Platz verbraucht werden kann. Sehen wir uns einmal folgenden Ausschnitt aus einem Mahnformular an:

Dazu haben wir folgende Einstellungen im Optionendialog beispielsweise vom obersten linken schmalen Feld:

Der Trick hierbei ist, daß das Feld «Text5» mit Hilfe der Strg-Taste (Cmd auf dem Mac) und der Pfeil-Nach-Oben-Taste in der Höhe auf 1-2 Pixel reduziert wird. Die Feldoptionen bestimmen nun, daß das Feld mit variabler Höhe gedruckt wird. Im Skript erhält Text5 nur unter einer bestimmten Bedingung einen Wert, sonst ist es ein Leerstring. Und falls es ein Leerstring ist, wird das Feld in der Höhe nicht erweitert, bleibt also so niedrig wie angelegt und verbraucht damit keinen Platz. Dieser Trick findet in sehr vielen Formularen seine Anwendung, ist jedoch immer mit Vorsicht zu gebrauchen. Generell sollten Felder mit variabler Höhe immer zuerst gedruckt werden, damit andere Felder mit nicht variabler Höhe “wissen”, wie hoch sich die Höhe der variablen Felder ergibt - sonst kann es leicht zu unerwünschten Ergebnissen im Druck kommen.

Positionspreise oben oder unten drucken

Druckt man in Angebot bis Rechnung die eigentlichen Positionen, so gibt es für die Preise zwei Möglichkeiten: Entweder bündig mit der ersten Zeile der Bezeichnung oder bündig mit der letzten Zeile der Bezeichnung. Doch wie stellt man dies im Formular ein, wenn man gar nicht weiß, wie viele Zeilen die Positionsbezeichnung einnimmt? Ganz einfach: Richten Sie die zu druckenden Felder einer Position so aus, daß die oberen Ränder bündig sind. Soll nun der Preis am unteren Rand der Positionsbezeichnung gedruckt werden, so verschieben Sie die beiden Felder einfach um einen Bildpunkt nach unten.

Zwischensummen richtig berechnen lassen

Druckt man Angebot bis Rechnung, so hilft eine Zwischensumme am unteren Seitenrand, sich jederzeit über den Projektwert zu orientieren. Für die Zwischensumme gibt es eine eigene Variable «ZwSum», die von profacto automatisch bei Ausführung von «SR_Body» belegt wird. Damit diese Variable immer den richtigen Wert anzeigt, sollte man einige Dinge beachten:
Der Wert der Zwischensumme wird bereits dann erhöht, wenn versucht wird, den Datenteil zu drucken. Paßt dieser nicht auf die aktuelle Seite und wird erst auf der nächsten Seite gedruckt, so ist die Zwischensumme bereits erhöht, obwohl der dazu passende Preis noch nicht gedruckt wurde.
Wird der Positionspreis am unteren Ende der Positionsbezeichnung gedruckt, dann darf die Zwischensumme erst gedruckt werden, wenn die gesamte Position gedruckt wurde.
Soll der zu druckende Text einer Position nicht durch einen Seitenumbruch getrennt werden (Option «Gesamten Bereich auf einer Seite drucken» in den Optionen des Datenteils), ist ebenfalls sicherzustellen, daß die Zwischensumme erst dann erhöht wird, wenn die komplette Position gedruckt wurde.
Daraus folgt, daß je nach Situation andere Maßnahmen ergriffen werden müssen, wenn die Zwischensumme richtig gedruckt werden soll:

Positionspreis am oberen Rand, Position umbrechbar

Nutzen Sie vor dem Datenteil einen neuen Bereich, z.B. «Kopf4», der immer bei Änderung des Felds «[Dokumente]PositionsNr» gedruckt wird. Der Bereich enthält kein Feld und hat die Höhe Null, stößt also direkt an den darüberliegenden Bereich an. Dieser Bereich sollte nur dann gedruckt werden, wenn noch mindestens 20-25 mm freier Platz auf der Seite vorhanden sind. Diese Einstellung, den freien Platz betreffend, muß auch für den Datenteil vereinbart werden. Durch diese Einstellung wird erreicht, daß der Datenteil immer nur dann gedruckt wird, wenn Platz ist für zumindest 2 Zeilen Text. Da der Positionspreis in der Regel am oberen Rand der gedruckten Position steht, stimmt der errechnete Werte der Zwischensumme dann mit dem Positionspreis überein.

Alle weiteren Varianten

Bei jeder weiteren Variante fügen Sie ebenfalls die Bereiche «Kopf4» und «Umbruch4» wie oben ein. Weisen Sie im Skript zu «Umbruch4» einer Zahlvariablen, z.B. «Zahl2», den Wert von «ZwSum» zu:
Zahl2:=ZwSum
Drucken Sie nun «Zahl2» statt «ZwSum» als Zwischensumme. Wieso klappt das? Ein kurzer Check:
Positionspreis am oberen Rand, Position nicht umbrechbar: Die Position muß als Ganzes auf eine Seite passen. Tut sie das, paßt auch noch «Umbruch4» mit Höhe Null auf die Seite. «Zahl2» wird erhöht - prima.
Positionspreis am unteren Rand, Position umbrechbar: Der Positionspreis wird u.U. erst auf der Folgeseite gedruckt. Auch erst dann wird Zahl2 erhöht. Paßt die Position noch ganz auf die Seite, wird auch «Umbruch4» noch gedruckt. Prima.
Positionspreis am unteren Rand, Position nicht umbrechbar: Siehe oben. Jetzt darf die Zwischensumme erst recht erst am Ende erhöht werden.

Felder konditional fett setzen

Will man Überschriften oder Bezeichnungen von Summenpositionen fett drucken, normale Positionsbezeichnungen aber nicht extra hervorheben, scheint dies nicht miteinander vereinbar zu sein, da ja so oder so eine Positionsbezeichnung gedruckt wird. Doch glücklicherweise gibt es die Möglichkeit, zumindest zu erkennen, ob eine Überschrift/Zwischensumme oder eine normale Position gedruckt wird und kann dann darauf reagieren. So gehen Sie vor:
Legen Sie ein Textfeld an. Setzen Sie sein Füllmuster auf durchsichtig - in der Füllmusterpalette erscheint das Feld mit dem Attribut “N”. Das Feld erhält folgendes Skript:

TextX:=SR_Oberpos(““;[Dokumente]Bezeichnung)

TextX sei hierbei Ihr Variablenname,[Dokumente]Bezeichnung steht ganz allgemein für den zu druckenden Text.

Duplizieren Sie das Feld und legen Sie es direkt über das erste Feld. Setzen Sie die Formatierung des Felds auf fett. Ändern Sie den Feldnamen und ändern Sie das Skript wie folgt ab:

TextY:=SR_Oberpos([Dokumente]Oberpos;””)

Nun liegen zwei Felder übereinander. Nur eines der beiden Felder enthält einen Text, da eine Position entweder Oberposition (also Überschrift oder Zwischensumme) ist, oder nicht.
Analog gehen Sie vor, wenn Sie Preise konditional fett setzen wollen. Nutzen Sie dann aber «SR_Summenpos», da Überschriften ja sowieso keine Preise enthalten. Das Skript sollte dann ungefähr so aussehen:

TextX:=SR_Summenpos(““;String([Dokumente]Einzelpreis;”|WährungNK2”)

Bilder im Angebot drucken

Seit prohandwerk 4.1.4 bietet der mitgelieferte SuperReport eine sinnvoll verwendbare Option zum Druck von Bildern. Bilder können mit variabler Höhe gedruckt werden, was es endlich erlaubt, ein Angebot so zu drucken, daß nur dort Platz für Bilder benutzt wird, wo auch ein Bild vorhanden ist. Um ein Bild zu drucken gehen Sie so vor:
Fügen Sie das Feld «[Dokumente]Bild» in das Formular ein, am besten unter die Positionsbezeichnung.
Reduzieren Sie das Feld auf die Höhe von 2-3 Bildpunkten.
Setzen Sie die Option «Druck mit variabler Höhe»
Wählen Sie die Formatierung «Skaliert proportional (Zentriert)»
Die Breite des Felds bestimmt die maximale Breite des gedruckten Bilds. Die Höhe errechnet sich dann anhand der Breite, auf die das Bild skaliert wird.
Die zu druckenden Bilder sollten tendenziell schmaler sein als die im Formular vorgesehene Breite. Sind die Bilder größer, so wird zwar das Bild verkleinert, doch in der Höhe wird unnötig Leerraum eingefügt. Dies wird erst mit SuperReport 2.5.3 oder neuer abgestellt.

Unterschriften der Mitarbeiter drucken

Ähnlich wie bei Bildern können Sie die Unterschrift des "Vertreters" automatisch in Ihr Formular einfügen.

Dazu müssen Sie die Unterschrift Ihres Mitarbeiters in Bild2 bei Personal im Reiter Vertraulich ablegen (Anmerkung: Bild1 wird für die tze benutzt).
Im Formular fügen Sie eine Variable «myUnterschrift» ein, Option «Druck mit variabler Höhe» und Formatierung «Skaliert proportional (Zentriert)».
Außerdem muss im Skript ein Verweis zum Mitarbeiter eingesetzt werden. Komplettt sieht dies dann wie folgt aus:

Query([Personal];[Personal]PersonalNr=[Auftrag]Vertreter)

myUnterschrift:=[Personal]Bild2

Unload Record([Personal])

Variablen des Druckdialogs

eingegebene Werte/Haken aus Feldern des Druckdialogs können ebenfalls im Formular mit entsprechenden Variablen gesetzt, bzw. abgefragt werden:

Universal

  • FirmaLogoOptional gibt Firmenlogo der Voreinstellungen nur aus, wenn Haken gesetzt wird (<>bprintLogo gibt 0/1 entsprechend Haken raus)

Angebot - Rechnung

  • <>RechPdf2Fax fragt beim Druck mit 0/1 ab, ob direkt Fax erzeugt werden soll
  • <>RechPdf2Mail fragt beim Druck mit 0/1 ab, ob direkt Mail erzeugt werden soll

Bestellungen

  • cBestShowPricesOnPrint gibt 0/1 aus, wenn Preise im Druck angezeigt werden sollen

Besonderheiten

Display Format der Bilder (pf2010)

Das Display Format bei Bildern funktioniert in pf2010 leider nicht sauber. Es erscheint bei jedem Bild eine irrtümliche Fehlermeldung. Im normalen Bearbeitungsdialog ist dann das Display nicht aus der Listbox heraus wählbar.

'''Workaround:'''
In das Feld die entsprechenden Formate manuell reinkopieren.

  • Abgeschnitten (zentriert)
  • Größe angepaßt
  • Abgeschnitten (links oben)
  • Proportional verkleinert
  • '''Prop. verkleinert (zentriert)'''
  • Wiederholt

Seitennummern formatiert drucken

Die Variable SeiteNR wurde seit profacto 2012 durch 'SRPage' ersetzt.

Linien über SetzeLinie

Mit der Funktion SetzeLinie erhalten Sie einen langen String aus Bindestrichen, der dazu verwendet werden kann, bedingte Linien zu zeichnen. Damit das auch unter profacto 2013 klappt, sollte die Schriftgrösse des Linienobjekts mindestens 8 Punkte betragen.

Multistyle

Beim Update auf profacto2013 werden die Formulare automatisch aktualisiert. In allen Formularfeldern wird die Option "Multistyle" gesetzt, so dass normalerweise keine weiteren Anpassungen durchgeführt werden müssen. Auf Standardtexte - Text mit Stilinformationen nutzen ist dokumentiert, welche Felder aktuell innerhalb profactos formatiert und auch gedruckt werden können.

Haben Sie ältere Formulare oder stellen Formular aus einem Backup wieder her, so müssen Sie die gewünschten Anpassungen manuell durchführen.
Dazu müssen Sie in dem Formular das zu formatierende Feld ausfindig machen und wie auf SuperReport-Befehle – Edit - Modify Object beschrieben bearbeiten. Auf dem Reiter "Options" muss die Option "Multistyle" aktiviert werden.
Schauen Sie sich dazu auch das Video zur Umstellung eines Feldes auf StyledText an.

XPS Document Writer

Der neue SuperReport3 nutzt für die Druckvorschau ohne PDF auf Windows den "XPS Document Writer"!

Hinweis zur Installation und Nutzung finden Sie auf PDF & XPS