In allen bisherigen Beispielen wurden Lieferscheine gedruckt, bei denen pro Artikel eine Zeile ausgegeben wurde. Entsprechend war die Tabelle auf dem Lieferschein mit horizontalen Linien aufgeteilt. Muß mehr Information pro Artikel ausgegeben werden, kann man die horizontale Teilung der Tabelle so ändern, daß die maximale Informationsmenge darstellbar ist. Nachteil dieses Vorgehens ist der Verlust von Papierfläche bei Artikeln mit wengier Information - der Lieferschein wird unnötig lang, verbraucht mehr Papier und kostet damit mehr Papier und eventuell auch mehr Porto.
Die optimale Ausnutzung der Papierfläche ergäbe sich, wenn man die horizontale Teilung der Tabelle von der Menge der darzustellenden Information abhängig machen könnte. Mit solch einer Tabelle beschäftigt sich dieses Beispiel.
Wählen Sie in der Beispielapplikation unter Beispiel jetzt Lieferschein mit variablem Rahmen aus. Wenn Sie auf die Schaltfläche Drucken klicken, wird der Ausdruck gestartet. Eine kurze Meldung bestätigt dies und auf Ihrem Drucker sollte eine Seite ähnlich der folgenden erscheinen:
Um sich einen Eindruck von der Leistung des print2forms-Systems in diesem Beispiel machen zu können, sind nachfolgend die reinen Druckdaten abgebildet, die dem Beispiel zugrunde liegen. Sie können diese durch Aktivieren von Nur Nutzdaten ausdrucken. Wie an den Positionsnummern der Artikel deutlich zu erkennen, sind die Abstände von Artikel zu Artikel nicht mehr gleich. Die Verwendung verschieden großer Schriften innerhalb der Tabelle ist bereits so von den Druckdaten vorgegeben.
Der print2forms-Prozess, der dem Beispiel zugrunde liegt, hat den Namen Lieferschein einzelne Seite mit variabler Tabelle. Öffnen Sie diesen Prozess bitte im Administrationsprogramm.
Dieser Prozess ist sehr einfach gehalten - alle Seiten werden gleich behandelt und mit dem Formular Einzelne Seite mit variabler Tabelle versehen. Ganz offensichtlich wird also die ganze Formatierung vom Formular und nicht vom Prozess erledigt. Öffnen Sie nun dieses Formular.
Zunächst enthält das Formular bereits Bekanntes: es werden zwei untergeordnete Formulare zum Drucken des Logos und der Geschäftsangaben fest plaziert. Den eigenen Beitrag zum Formular liefern die Ressource Tabellenkopf aus dem Subcontainer Lieferschein variable Tabelle, und die vier Felder, die für den Barcode und den variablen Aufbau der Tabelle sorgen.
Um das Ziel einer sich in der Länge an die Nutzdaten anpassenden Tabelle zu erreichen, muß die Tabelle in vier Teile zerlegt und in vier eigenen Ressourcen abgelegt werden. Wie beim bisherigen Vorgehen auch, enthält der erste Teil der Tabelle den (nach unten offenen) Tabellenkopf (sowie die sonstigen fixen Bestandteile des Formulars). Die Ressource ist unter dem Namen Tabellenkopf im Subcontainer Lieferschein mit variabler Tabelle abgelegt und sieht wie folgt aus (Ausschnitt):
Für die Hervorhebung der ersten Artikelzeile wird ein mit grau hinterlegter nach unten offener Rahmen benötigt, der unter dem Namen Tabellenrahmen erste Zeile im Subcontainer Lieferschein mit variabler Tabelle abgelegt ist. Der Rahmen sieht wie folgt aus (Ausschnitt):
Für die weiteren Artikelzeilen benötigen wir eine Ressource, in der lediglich die senkrechten Linien innerhalb der Tabelle verlängert werden. Hierbei ist eine Besonderheit zu beachten. Da im Nutzdatenstrom zwischen den einzelnen Artikelzeilen zur Abgrenzung vertikale Zwischenräume erzeugt wurden, und auf diese Zwischenräume nicht geprüft werden kann, ergibt sich das Problem, wie die vertikalen Linien der Tabelle in diesem Bereich gezeichnet werden sollen.
Eine Lösung dieses Problems besteht darin, die vertikalen Linien in der Ressource Tabellenrahmen weitere Zeilen so lang zu machen, daß sie den Leerraum mit überbrücken (auch den Leerraum am Ende der Tabelle!). Die ebenfalls im Subcontainer Lieferschein mit variabler Tabelle abgelegte Ressource hat dann folgendes Aussehen (Ausschnitt):
Als Letztes benötigen wir noch eine Abschlußlinie, die unsere Tabelle nach unten hin abschließt. Die Ressource ist unter dem Namen Tabellenrahmen Abschluß im Subcontainer Lieferschein mit variabler Tabelle abgelegt und sieht wie folgt aus (Ausschnitt):
Um die Teile des Tabellenrahmens korrekt zu positionieren, benötigen wir drei Ressourcenfelder - die vierte Ressource Tabellenkopf wird als Formular Ressource angegeben und damit an einer fixen Stelle positioniert. Zum besseren Verständnis der nachfolgenden Ausführungen sind die Inhalte der drei Ressourcenfelder hier noch einmal abgebildet.
Das erste Ressourcenfeld Erste Zeile Artikel sucht mit dem Feldindex 01????0000 und dem Vergleichsmuster ' [ 0-9]# @.*' nach den Zeilen mit den Positionsnummern, und druckt dann an allen Fundstellen (sechs Stück) mit einem vertikalen Versatz von -1,70 cm die Ressource Tabellenrahmen erste Zeile aus dem Subcontainer Lieferschein mit variabler Tabelle. Der vertikale Offset kommt dadurch zustande, daß als Position der Fundstelle die Grundlinie des gefundenen Textes angenommen wird, und dadurch, daß der Rahmen in der Ressource einen Versatz zum oberen Rand hat. Der Bezugspunkt einer Ressource ist die linke obere Ecke des Blattes, auf dem sie importiert wurde (eine Positionierung direkt in der linken oberen Ecke des Blattes ist nicht möglich, weil die beim Importieren verwendeten Druckertreiber von einem undruckbaren Rand des realen Druckers ausgehen, und Ausgaben innerhalb des Randbereichs unterdrücken).
Zum besseren Verständnis der Arbeitsweise dieses und der weiteren noch benötigten Vergleichsmuster ist hier ein Ausschnitt aus der Indexdatei des Beispieldatenstroms abgebildet:
... [0106810000] 1 SK20HQT Scart Kabel, high quality St 230 0 230 [0106BD0000] 1 x Scartstecker auf 1 x Scartstecker (21 pin), [0106EA0000] transparentes Kabel mit vergoldeten Kontakten, [0107170000] 4 x 0.14 mm² abgeschirmt (Audio), 6 x 75 Ohm [0107440000] RG59 (Video), Länge 2 m [0107DA0000] 2 SK20F1 Scart-Flachkabel St 160 0 160 [0108160000] Stecker auf Stecker, 21 polig belegt, 1 m [0108AC0000] 3 SV3 Scart Verteiler St 10 0 10 [0108E80000] Vollständig beschaltet für den Anschluß von 3 [0109150000] Geräten, alle Buchsen parallel geschaltet [0109AB0000] 4 AVS1020 Video-Kabel Scart auf Cinch St 160 0 160 [0109E70000] 1 x Scartstecker auf 3 x Cinchstecker, 2 x [010A140000] 0.14 mm² abgeschirmt (Audio), 1 x 75 Ohm [010A410000] RG 59 (Video), Länge 1 m [010AD70000] 5 AV3030 Video-Kabel Cinchstecker St 260 0 260 [010B130000] 3 x Cinchstecker auf 3 x Cinchstecker, 2 m [010BA90000] 6 HC7502 AV-Kabel S-VHS/Cinch - Scart St 20 5 15 [010BE50000] 4 pol. S-VHS-Stecker / 2 Cinchstecker nach [010C120000] Scartstecker, verchromte Metallstecker, vergol- [010C3F0000] dete Kontakte, High Quality, molded ...
Das Ressourcenfeld Weitere Zeilen Artikel sorgt mit dem Feldindex 01????0000 und dem Vergleichsmuster ' {19}[A-Za-z0-9].*' nun dafür, daß die weiteren Zeilen zur Beschreibung des Artikels gefunden werden. Dabei wird davon ausgegangen, daß die Zeile mit 19 Leerstellen beginnt und das erste Zeichen der Beschreibung ein Buchstabe oder eine Ziffer ist. Der Rest der Beschreibung ist ohne Interesse.
An allen Fundstellen (vierzehn Stück) wird dann mit einem vertikalen Versatz von -1,50 cm die Ressource Tabellenrahmen weitere Zeilen aus dem Subcontainer Lieferschein mit variabler Tabelle gedruckt. Bezüglich des vertikalen Versatzes gilt das beim vorherigen Feld Gesagte.
Für den Druck der Abschlußlinie ist das dritte Ressourcenfeld mit dem Namen Abschlußlinie zuständig. Auch hier wird mit dem Feldindex 01????0000 und dem Vergleichsmuster ' {19}[A-Za-z0-9].*' nach den weiteren Artikelzeilen gesucht. Der entscheidende Unterschied zum vorherigen Feld ist aber, daß durch die Positionierung Relativ zum letzten Feld nur einmal die Ressource Tabellenrahmen Abschluß aus dem Subcontainer Lieferschein mit variabler Tabelle gedruckt wird. Dadurch entsteht genau eine Abschlußlinie und man erhält als Resultat die fertige Tabelle.
Der Vollständigkeit halber gehen wir auch noch einmal auf das Barcodefeld etwas genauer ein. Sein Inhalt ist wie folgt:
Der bereits bekannte Feldindex sucht zusammen mit dem Vergleichsmuster wieder nach den Textstellen mit den Positionsnummern. Aus diesen Texten werden dann mit den beiden Klammerpaaren die Artikelbezeichnung und die Stückzahl extrahiert und in Zwischenspeicher übertragen.
Die Position des Barcodes wird durch die Angaben in der Gruppe Positionierung vorgegeben. Die Angabe Relativ zum Feld zusammen mit den beiden Positionsangaben positioniert den Barcode etwas unterhalb der Artikelnummer. (Die horizontale Position des Feldes selbst ist die linke Kante der ersten Leerstelle, die vertikale Position ist die Grundlinie des Textes.)
In der Gruppe Barcode sind nun alle Angaben den Barcode betreffend zu finden. Hier interessiert im Rahmen des Beispiels der Eintrag unter Schablone. Damit wird eine Schablone für die als Barcode zu codierende Zeichenkette vorgegeben. Die Angabe \Artikel:2 besagt, daß der Inhalt des zweiten Puffers des Feldes mit dem Namen Artikel eingesetzt werden soll. Danach soll das Zeichen * und wegen \Artikel:1 der Inhalt des ersten Puffers des ersten Feldes eingesetzt werden. Für den ersten Artikel ergäbe sich also die Zeichenkette 260*AV3030 .
Wegen der Wildcardzeichen unter Feldindex wird dieses Barcodefeld insgesamt sechsmal ausgeführt und generiert damit alle sechs Barcodes in diesem Beispiel.