Rechnungsformulare, Lieferscheine, Überweisungsaufträge, Schecks, Steuererklärungen: Formulare über Formulare. In diesem Workshop wird es darum gehen, ob und wie Signum! 3 sinn voller weise zum Bedrucken von Formularen eingesetzt werden kann.
Unabhängig davon, ob Sie nun Rechnungen oder Überweisungsaufträge drucken wollen, Sie werden immer vor dem Problem stehen, in ein bestehendes Layout (das Formular) wechselnde Daten an den richtigen Positionen einfügen zu müssen. Durch die Möglichkeit der freien Positionierung von Text kann man mit Signum! zwar prinzipiell jedes beliebige Formular ausfüllen, sinnvoll ist es deswegen jedoch noch lange nicht. So ist z.B. das Ausfüllen von Steuererklärungen mit Signum!3 eine reine Spielerei, denn der Zeitaufwand steht in keinem Verhältnis zum tatsächlichen Nutzen.
Der Einsatz einer Textverarbeitung wie Signum!3 zum Drucken von Formularen ist erst dann sinnvoll, wenn auch das Formular selbst als Signum!-Dokument vorliegt. Dies ist z.B. bei Rechnungen der Fall.
Genau genommen gibt es drei Möglichkeiten, Daten in ein bereits bestehendes (Signum!-)Rechnungsformular einzutragen: Erstens, Sie ergänzen die Rechnungsdaten jedesmal von Hand. Zweitens, Sie importieren die Daten als ASCII-Text, und drittens. Sie kombinieren Daten und Formular über die Serienbrieffunktion.
Bei der ersten Methode sichern Sie das Formular unter dem Namen „NO-NAME.SDK“ in einem Ordner namens „RECHNUNGEN“. In dieses Formular tragen Sie dann immer manuell die aktuellen Rechnungsdaten ein. Der Kniff daran ist, daß Dokumente mit dem Namen „NONAME.SDK“ nicht automatisch mit „Dokument speichern“ überschrieben werden, es öffnet sich statt dessen die Fileselectorbox, in der Sie dann der aktuellen Rechnung einen Namen geben können. Diese Methode ist Ihnen vielleicht schon aus der Signum!-Dokumentation als „Noname-Trick“ bekannt.
Wenn Sie das „NONAME.SDK“ in einen Ordner verfrachten, können Sie nicht nur am Ordnernamen erkennen, um welches Formular es sich handelt, sondern haben auch noch die Möglichkeit, mehrere verschiedene „NONAME.SDK“ zu definieren, indem Sie diese jeweils in unterschiedlichen Ordnern unterbringen.
Sofern Sie jedoch Ihre Rechnungsdaten mit einer Datenbank, einer Tabellenkalkulation oder einer Fibu verwalten, werden Sie die soeben beschriebene Methode als unbefriedigend empfinden, da Sie bei ihr die Daten von Hand in das Rechnungsformular eintragen müssen. Deshalb soll im folgenden der Import von externen Daten in Signum!-Formulare beschrieben werden.
Werden die Daten als ASCII-Text über das Clipboard oder durch „ASCII-Datei einfügen“ in das Dokument importiert, muß man sicherstellen, daß das bereits vorhandene Formular dadurch nicht beeinflußt, z.B. verschoben, wird. Deshalb legt man das Formular am besten im Kopfbereich an. Dies hat den Vorteil, daß es nicht nur automatisch auf jeder neuen Seite, sondern auch immer an derselben Position erscheint.
Man kann sich das bildlich so vorstellen, daß sich das Formular, welches sich in der Kopfzeile befindet, beim Seitenumbruch wie eine durchsichtige Folie über die importierten Daten legt.
Doch nun zu einem konkreten Beispiel. In Abbildung 1 sehen Sie ein typisches Rechnungsformular. Dies ist jedoch mit Hilfe des Akkumulators kein Problem.
Das Datum wurde als Symbol eingefügt. Dies bewirkt, daß automatisch das aktuelle Datum aus der Rechneruhr gelesen und ins Formular eingefügt wird. Zwischen den beiden Faltmarken befindet sich ein Gummi-Blank. Dadurch werden diese, bei eingeschaltetem Blocksatz, rechts- und linksbündig ausgerichtet. Auch die Datumszeile ist durch einen Gummi-Blank am Anfang der Zeile rechtsbündig ausgerichtet. Man könnte statt dessen auch ein lokales Lineal einfügen, das rechtsbündig formatierend ist. Im vorliegenden Fall ist jedoch die Tastenkombination Control-Leertaste schneller.
Alle Linien wurden mit Tabellenlinealen erzeugt. Auch der graue Balken im Logo ist das Werk eines Tabellenlineals. Die Tabellenparameter für dieses Lineal zeigt Abbildung 2. Ansonsten soll an dieser Stelle nicht weiter auf den Tabellensatz mit Signum!3 eingegangen werden. Dieser wird Thema folgender Workshops sein.
Alle Zeilen, auch die Absätze, haben einen eineinhalbzeiligen Zeilenabstand. Dadurch, daß alle Zeilen denselben Abstand haben, kann man sehr einfach und exakt die Zeilen des Kopfbereiches mit denen des Hauptbereiches überlagern.
Zurück zum Datenimport: Sie erzeugen mit Ihrer Datenbank, Tabellenkalkulation oder Fibu ein Export-File mit folgendem Format:
Damit bestimmte Daten immer ab einer festgelegten Zeile (vertikalen Position) zu stehen kommen, verwenden Sie z.B. bei der Datenbank Phoenix den Report-Befehl {$VPOS = xx}, wobei Sie für xx die Nummer der Zeile eintragen müssen, ab der die Daten ausgegeben werden sollen. Einen Beispielreport finden Sie in Abbildung 3, die in den Hauptbereich von Signum! importierte Datei in Abbildung 4.
Die Daten werden an den Tabulatoren des globalen Lineals ausgerichtet.
Der Abstand der Adresse vom oberen Seitenrand wird über die Höhe des Kopfbereiches eingestellt. Im Formular beginnt der Bereich, ab dem die Adresse eingetragen werden soll, bei ca. 6.4 cm. Dieser Wert wird in die Box für die Seitenparameter eingetragen (siehe Abbildung 5). Als Seitenlänge wurden im Beispiel 26.4 cm definiert, d.h. bei einem eineinhalbzeiligen Zeilenabstand passen 33 Datenzeilen auf eine Seite (26.4 cm minus 6.4 cm; das Ergebnis geteilt durch 0.635 cm pro Zeile). Wenn Sie mehrere Rechnungen hintereinander drucken wollen, müssen Sie sicherstellen, daß auch mindestens 33 Zeilen für jede Rechnung von der Datenbank ausgegeben werden. Im obigen Beispiel werden pro Rechnung 40 Zeilen ausgegeben. Signum! zeigt sich hier sehr kulant: Die Seitengrenze wird exakt auf dem Beginn der nächsten Adresse gesetzt, obwohl mehr Zeilen ausgegeben werden, als die Seite faßt; überflüssige Leerzeilen werden beim Seitenumbruch geschluckt, solange der Abstand zwischen den Adressen nicht größer als 34 cm ist.
Auch die Serienbrieffunktion eignet sich zum Import externer Daten in bestehende Formulare.
Der Vorteil gegenüber der oben beschriebenen Methode besteht darin, daß die Positionen, an denen die Daten ins Formular eingefügt werden, sehr exakt durch die Platzhalter definierbar sind.
Erster Nachteil: Sie müssen für jeden Dateneintrag einen eigenen Platzhalter definieren.
Zweiter Nachteil: Da in der Importdatei für Serienbriefe alle Einträge, die zu einem Datensatz gehören, in einer Zeile stehen müssen, ist die Datenmenge auf das Fassungsvermögen einer Zeile begrenzt. Die Serienbrieffunktion ist also auf den Import kleiner Datenmengen pro Datensatz beschränkt.
Die Anzahl der Rechnungsposten variiert meist in gewissen Grenzen. Dies gestaltet sich beim Rechnungsdruck über die Serienbrieffunktion als Problem, da man die Zahl der Platzhalter vorher festlegen muß. Andererseits ist man nicht an eine bestimmte Reihenfolge der Daten in der Importdatei gebunden. Daher ist die Lösung der Misere: Man definiert im Formular die maximal zu erwartende Anzahl von Feldern. In der Importdatei werden die Feldnamen, bei denen nicht sicher ist, ob für sie überhaupt Daten vorhanden sein werden, an den Schluß der Zeile gestellt, in der die Feldnamen definiert werden (erste Zeile).
Wichtig: Alle im Signum!-Formular definierten Feldernamen müssen auch in der ersten Zeile der Importdatei definiert werden.
Angenommen, Sie haben ein Rechnungsformular mit vier Rechnungsposten definiert (siehe Abbildung 6). Die Importdatei enthält in der ersten Zeile die Namen der Felder. Ab der zweiten Zeile folgen die Daten von zehn Rechnungen, von denen aber die meisten weniger als vier Rechnungsposten aufweisen, d.h. in diesen Zeilen fehlen am Zeilenende Daten. Wenn Sie nun den Serienbriefdruck starten, wird Signum! die Meldung „Zeile x enthält zuwenig Daten“ bringen. Bestätigen Sie mit „OK“. Signum! geht nun davon aus, daß die Datenfelder leer sind. Die Rechnungen werden korrekt gedruckt.