Angebote mit variablen Tabellenlängen

In diesem Beispiel soll gezeigt werden, wie auf recht einfache Weise die Länge der Tabellenumrandung an die Menge der Tabellendaten angepasst werden kann. In einem Angebot befindet sich eine Tabelle mit einer unterschiedlichen Anzahl an Artikeln. Direkt unterhalb der Tabelle sollen Lieferkonditionen und eine elektronische Unterschrift angedruckt werden.

Wählen Sie in der Beispielapplikation unter Beispiel jetzt Angebote mit variablem Tabellenlängen aus. Wenn Sie auf die Schaltfläche Drucken klicken, wird der Ausdruck gestartet. Eine kurze Meldung bestätigt dies und auf Ihrem Drucker sollten drei Seiten erscheinen.

Der hier interessierende Bereich des Angebots sollt in etwa wie folgt aussehen (Ausschnitt):

Variable Tabelle lang

oder etwas kürzer (Ausschnitt):

Variable Tabelle kurz

Um den Tabellenrahmen in der Länge an die Nutzdaten anpassen zu können, muß der Rahmen in zwei Teile zerlegt werden: den Tabellenkopf mit den Beschreibungen der Spalten, und in einen nach oben offenen Rahmen, der eine Tabellenzeile begrenzt. Der Tabellenkopf befindet sich in einer Ressource mit dem Namen Tabellenkopf im Subcontainer Angebot mit variabler Tabelle und hat folgendes Aussehen (die übrigen Bestandteile des Angebotsformulars wurden hier gleich mit aufgenommen):

Variable Tabelle Kopf

Der Tabellenrahmen befindet sich in einer Ressource mit dem Namen Tabellenrahmen und ist ebenfalls im Subcontainer Angebot mit variabler Tabelle abgelegt. Sein Aussehen ist wie folgt:

Variable Tabelle Fuss

Im Formular Angebot einzelne Seite variable Tabelle muß jetzt dafür gesorgt werden, daß zunächst der Tabellenkopf einmal gedruckt wird, und dann für jede Tabellenzeile ein Rahmen hinzugefügt wird. Die Ressource Angebot mit variabler Tabelle/Tabellenkopf wird einfach als Formular Ressource aufgenommen, was hier möglich ist, da alle sonstigen Bestandteile des Formulars mit aufgenommen wurden. Für das mehrfache Zeichnen des Tabellenrahmens ist es natürlich notwendig, die Tabellenzeilen zu erkennen. Dies leistet das Ressourcenfeld Tabellenrahmen:

Ressource Variable Tabelle

Eine Tabellenreihe ist daran zu erkennen, daß eine Positionsnummer innerhalb der Tabelle vergeben wurde. Diese einstellige Positionsnummer wird mit dem Vergleichsmuster ' .# @.*' und dem Feldindex 01????0000 gesucht. Zur Verdeutlichung hier ein Ausschnitt aus der Indexdatei des Beispieldatenstroms, der einen Teil der Tabelle zeigt:

 ...
 [0106450000]      1   SK20F1   Scart Kabel, high quality       9.99€    8.88€    7.77€ 
 [0106810000]                   1 x Scartstecker auf 1 x Scartstecker (21 pin),
 [0106AE0000]                   transparentes Kabel mit vergoldeten Kontakten,
 [0106DB0000]                   4 x 0.14 mm² abgeschirmt (Audio), 6 x 75 Ohm 
 [0107080000]                   RG59 (Video), Länge 2 m, VPE 10 Kabel
 [0108070000]      2   SK20HQT  Scart-Flachkabel                9.99€    8.88€    7.77€
 [0108430000]                   Stecker auf Stecker, 21 polig belegt, 1 m
 [0108700000]                   VPE 25 Kabel
 [0109C90000]      3   SV3      Scart Verteiler                99.99€   88.88€   77.77€
 [010A050000]                   Vollständig beschaltet für den Anschluß von 3
 [010A320000]                   Geräten, alle Buchsen parallel geschaltet
 [010A5F0000]                   VPE 1 Verteiler
 [010B8B0000]      4   AVS1020  Video-Kabel Scart auf Cinch     9.99€    8.88€    7.77€
 [010BC70000]                   1 x Scartstecker auf 3 x Cinchstecker, 2 x 
 [010BF40000]                   0.14 mm² abgeschirmt (Audio), 1 x 75 Ohm 
 [010C210000]                   RG 59 (Video), Länge 1 m, VPE 100 Kabel
 [Page]
 ...

Der Teilausdruck ' .# @' erkennt die sechs Leerstellen am Zeilenanfang, die einstellige Positionsnummer, drei weitere Leerstellen und den ersten Buchstaben der Artikelbezeichnung. Damit ist sichergestellt, daß keine andere Zeile erkannt wird. Am Ende des Vergleichsmusters steht ein '.*', um den Rest der Zeile zu überspringen. Ein Vergleichsmuster wird immer gegen die gesamte Zeile geprüft. Beim oben gezeiten Datenstrom werden auf diese Weise insgesamt vier Zeilen gefunden.

Mit der Angabe Angebot mit variabler Tabelle/Tabellenrahmen als Wert für den Parameter Fixe Ressource wird dann für jede der vier Fundstellen der eigentliche Tabellenrahmen gedruckt. Da bereits in der Ressource Tabellenrahmen durch Angabe korrekter Offsets dafür gesorgt wurde, daß die Positionierung relativ zum Tabellenkopf stimmt, ist im Ressourcenfeld selbst keine weitere Positionierung notwendig. Allerdings sorgt die Angabe Relativ zum Feld dafür, daß der Rahmen mit verschoben wird, wenn das gesamte Formular Angebot einzelne Seite variable Tabelle verschoben wird.

Mit diesem einzelnen Ressourcenfeld wird bereits die gesamte Tabelle erzeugt.


Um jetzt noch die Lieferkonditionen an der richtigen Stelle zu drucken, wird ein weiteres Ressourcenfeld mit dem Namen Konditionen benötigt:

Ressource Variable Tabelle

Das Besondere hier ist die Art der Positionierung. Mit der Angabe Relativ zum letzten Feld wird dafür gesorgt, daß die Ressource nur einmal angedruckt wird, und zwar an der letzten Fundstelle des zugehörigen Vergleichsmusters.

Auch in diesem Feld wird wieder mit dem Vergleichsmuster ' .# @.*' und dem Feldindex 01????0000 nach den Artikelzeilen gesucht. Auch diesmal wird das Muster vier Fundstellen ermitteln, allerdings werden die ersten drei Fundstellen wegen der Positionierungsangabe Relativ zum letzten Feld ignoriert.

Variable Tabelle Abbinder

Da die in diesem Ressourcefeld angezogene Ressource Konditionen neben dem Text für die Kontionen auch die Grußformel für die elektronische Unterschrift enthält, kann die eigentliche Unterschrift mit dem Ressourcenfeld Unterschrift Sachbearbeiter und der Name des Sachbearbeiters mit dem Textfeld Name Sachbearbeiter erzeugt werden. Auch hier kommt wieder die Positionierungsoption Relativ zum Feld zum Einsatz.

Hinweise