Variable Anzahl von Anlagen drucken

Anforderung

Zu einem Lieferschein mit einer variablen Anzahl von Artikeln sollen Anhänge gedruckt werden. Für jeden der aufgeführten Artikel soll ein Packschein mit der Artikelbezeichnung, der Liefermenge und einem Bild des Artikels gedruckt werden.

Grundlage für dieses Beispiel ist der Prozess 'LieferAnl: Lieferschein mit Anlagen' aus der Beispielinstallation. Der zugrundeliegende Lieferschein hat als Besonderheit nicht nur eine variable Anzahl von Artikeln, sondern auch noch eine an die Informationsmenge der Artikel angepasste horizontale Teilung. Das ist aber für die hier vorgestellte Lösung ohne Belang.

Der Ausdruck des Lieferscheins (erzeugt mit der Beispielapplikation 'Lieferschein mit variabler Tabelle') sieht wie folgt aus (Ausschnitt):

Realisierung

Zur Realisation dieser Anforderung wird zunächst in dem Dokumentenprozess 'LieferAnl: Lieferschein mit Anlagen' nach den Grenzen der hier aus Gründen der Übersichlichket nur einseitigen Lieferscheine gesucht. Dies geschieht durch einfache Prüfung eines 'Feldwechsel's mit dem Index '0002C1000', da in dieser Zeile nur die Lieferscheinnummer steht. Die ersten beiden Ziffern des Index sind hier '00', weil die Prüfung des Feldwechsels bei eventuell mehrseitigen Lieferscheinen auf jeder Seite durchgeführt werden muß. In unserem Fall (einseitige Lieferscheine) könnte hier ausnahmsweise auch '01' stehen.

Der eigentliche Druck des Lieferscheins wird durch Übergabe der Lieferscheindaten an den Prozess 'Lieferschein einzelne Seite mit variabler Tabelle' veranlaßt. Dies soll hier nicht weiter interessieren.

Die Aufgabe des Druckens der Anhänge wird mit den Bearbeitungsschritt 'Artikelbild' erledigt. Hier werden zunächst zwei Bedingungen ausgewertet, um die Artikelbezeichnung, die Liefermenge und die Lieferscheinnummer zu ermitteln. In der ersten Bedingung mit dem Namen Artikelbezeichnung werden mit dem Vergleichswert ' .# ([A-Z0-9]{1,8}[^ ]).*St *(#*).*' zwei Zeichenketten aufgesammelt: die Artikelbezeichnung und die Liefermenge.

Zum besseren Verständnis der Arbeitsweise dieses Vergleichsmusters ist hier die Indexdatei des Beispieldatenstroms abgebildet:

 [p2f]
 [Param]1.0;10.1.17.7;07.11.07 15:34:36
 [Computer]thinkcentre.spe-gmbh.de
 [User]Volker
 [Model]P2F LaserJet 5
 [Job]Sample 9
 [JobNo]
 [File]9
 [FileNo]
 [Hold]
 [Save]
 [UserData]
 [DefData]
 [Process]6ML_JK@.XML
 [0102C10000]                                                           00123/25
 [0103390000]                                                           1704
 [0103750000]       Kunde GmbH
 [0103B10000]       Z.Hd. Fr. V. Kunde                                  347-57897
 [0104290000]       Kundengasse 7                                       15587
 [0104650000]       D-48535 Kundendorf
 [0104A10000]                                                           Fr. M. Muster
 [0105190000]                                                           09.03.2007
 [0106090000]
 [0106450000]
 [0106810000]      1   SK20F1   Scart-Flachkabel               St     160      0    160 
 [0106BD0000]                   Stecker auf Stecker, 21 polig belegt, 1 m
 [0107530000]      2   SK20HQT  Scart Kabel, high quality      St     230      0    230
 [01078F0000]                   1 x Scartstecker auf 1 x Scartstecker (21 pin),
 [0107BC0000]                   transparentes Kabel mit vergoldeten Kontakten,
 [0107E90000]                   4 x 0.14 mm² abgeschirmt (Audio), 6 x 75 Ohm 
 [0108160000]                   RG59 (Video), Länge 2 m
 [0108AC0000]      3   AVS1020  Video-Kabel Scart auf Cinch    St     160      0    160
 [0108E80000]                   1 x Scartstecker auf 3 x Cinchstecker, 2 x 
 [0109150000]                   0.14 mm² abgeschirmt (Audio), 1 x 75 Ohm 
 [0109420000]                   RG 59 (Video), Länge 1 m
 [0109D80000]      4   HC7502   AV-Kabel S-VHS/Cinch - Scart   St      20      5     15
 [010A140000]                   4 pol. S-VHS-Stecker / 2 Cinchstecker nach
 [010A410000]                   Scartstecker, verchromte Metallstecker, vergol-
 [010A6E0000]                   dete Kontakte, High Quality, molded
 [Page]

Der Teil ' .#' sucht die Positionsnummern innerhalb der Lieferscheintabelle. Der erste Punkt ist notwendig, weil die Positionsnummer zweistellig sein kann. Genaugenommen könnte dieser Teil des Vergleichsmusters auch als ' [ 0-9]#' formuliert werden.

Der Teil ' ([A-Z0-9]{1,8}[^ ])' kopiert die Artikelbezeichnung, die immer mit einem Buchstaben anfängt und mit dem ersten Leerzeichen beendet wird, in den ersten Zeichenkettenpuffer. Mit '.*St' wird die hier der Einfachheit halber konstante Mengeneinheit übersprungen. Der Ausdruck ' *(#*).*' schließlich kopiert die Liefermenge, die mit einer Ziffer beginnt und durch ein Leerzeichen beendet wird, in den zweiten Zeichenkettenpuffer.

Da der Feldindex für diese Bedingung mit '00????0000' wegen der vier Wildcard-Zeichen anstelle der vertikalen Position auf allen Seiten (wegen '00') alle Zeilen durchsucht, die an der horizontalen Position '0000' anfangen, wird die Bedingung für jeden Artikel des Lieferscheins erfüllt. Im obigen Beispiel wird die Bedingung vier mal erfüllt, und in den Zeichenkettenpuffern stehen vier Artikelbezeichnungen ('SK20F1', 'SK20HQT', 'AVS1020', 'HC7502') und vier Liefermengen ('160', '230', '160', '20').

Die zweite Bedingung mit dem Namen Lieferscheinnummer ist vergleichsweise einfach, weil sie mit dem Vergleichsmuster '.*(#####/##)' und dem fixen Feldindex '0002C10000' lediglich die aus fünf Ziffern, einem Schrägstrich und zwei weiteren Ziffern bestehende Lieferscheinnummer in den Zeichenkettenpuffer übernimmt. Wegen des fixen Feldindex wird diese Bedingung nur einmal erfüllt.

Die eigentlichen Anhänge sind die zuvor im print2forms-System hinterlegten Artikelbilder. Die Anhänge liegen innerhalb des dafür vorgesehenen Containers in einem Subcontainer mit dem Namen 'Artikelbilder'. Die Namen der Anhänge entsprechen hier genau den Artikelbezeichnungen. Die Artikelbilder wurden entweder über das Administrationsprogramm des print2forms-Servers oder über ein Import-Gateway im Anhang-Container abgespeichert.

Im Bearbeitungsschritt 'Artikelbild' wird über die Anhangschablone mit dem Wert '\Artikelbezeichnung:1' der erste Zeichenkettenpuffer der Bedingung 'Artikelbezeichnung' als Name des zu druckenden Anhangs ausgewählt (weil wir für die Artikelbilder als Namen die Artikelbezeichnung verwenden). Der Name des Subcontainers ist unter 'Zugriffspfad' angegeben. Weil diese Bedingung im Beispielfall insgesamt vier mal erfüllt wurde, wird der Bearbeitungsschritt automatisch vier mal wiederholt und somit für jeden Artikel ein Anhang gedruckt.

Für die eigentliche Bearbeitung und das Aussehen eines Anhangs ist hier der Prozess 'Anlage zum Lieferschein (Artikelbilder) drucken' veranwortlich, der unter Prozess im Bearbeitungsschritt 'Artikelbild' eingetragen wird. Dieser Prozess macht nichts weiter, als jede Seite des Anhangs auf ein Blatt DIN-A4 im Hochformat zu drucken, und mit dem Formular 'Anlage mit Artikelbild' aus dem Subcontainer 'Lieferschein' zu versehen.

Das Formular 'Anlage mit Artikelbild' schliesslich sorgt mit drei Textfeldern für die Ausgabe der Lieferscheinnummer, Artikelbezeichnung und Liefermenge und den Eindruck des Firmenlogos.

Das für diesen Anwendungsfall Entscheidende ist die Formulierung der Schablonen innerhalb der Textfelder. Durch die Benutzung des Fluchtsymbols '^' anstatt '\' beziehen sich die Referenzen nicht auf die Zeichenkettenpuffer, die das Formular selbst gefüllt hat, sondern auf die Zeichenkettenpuffer des übergeordneten Dokumentprozesses (der den Druckprozess aufgerufen hat, der seinerseits dieses Formular aufgerufen hat). Auf diese Weise kann auf die durch den Dokumentprozess aufgesammelte Lieferscheinnummer, Artikelbezeichnung und die Liefermenge zugegriffen werden.

Der Anhang sieht dann für den ersten Artikel wie folgt aus:

Bemerkenswert ist noch, daß in den zwei Schablonen die Zeichenkette '\x09' Verwendung findet. Der hexadezimale Code 09 bezeichnet für den Drucker ein Tabulatorzeichen. Dieses wird benutzt, um die Artikelbezeichnung und die Bestellmenge linksbündig auszurichten, was mit Leerstellen natürlich wegen der Verwendung einer Proportionalschrift (hier Arial) nicht möglich ist.


Bemerkungen