===== Lieferschein mit Anlagen ===== Dieses Beispiel beschäftigt sich wieder mit Anlagen. Allerdings soll nicht ein konstantes Dokument hinzugefügt werden, sondern die Anzahl der Anlagen sowie deren Inhalt richtet sich nach den empfangenen Nutzdaten. 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. Wählen Sie in der Beispielapplikation unter **Beispiel** jetzt **Lieferschein mit Anlagen** aus. Wenn Sie auf die Schaltfläche **Drucken** klicken, wird der Ausdruck gestartet. Eine kurze Meldung bestätigt dies und auf Ihrem Drucker sollten zwölf Seiten gedruckt werden. \\ \\ {{print2forms:tutorial:sample17.gif|AUsdruck Lieferscheine Übersicht}} \\ \\ Der dem Beispiel 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. Zum besseren Verständnis der nachfolgenden Ausführungen ist der zweite Lieferschein hier noch einmal vergrößert abgebildet: \\ \\ {{print2forms:tutorial:tabelle2.gif|Ausdruck Lieferschein}} \\ \\ Zur Realisation der Anforderung wird zunächst in dem Dokumentenprozess **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 an dieser Textstelle 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 aber ausnahmsweise auch **01** stehen. \\ \\ {{print2forms:tutorial:sample34.png|Prozess Lieferschein mit Anlagen}} \\ \\ Der eigentliche Druck des Lieferscheins wird durch Übergabe der Lieferscheindaten an den aus einem der vorherigen Beispiele bekannten Prozess **Lieferschein einzelne Seite mit variabler Tabelle** veranlaßt. Dies soll hier also nicht weiter interessieren. Die Aufgabe des Druckens der Anhänge wird mit dem zweiten 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. Die Artikelbezeichnung besteht aus bis zu acht Ziffern oder Großbuchstaben und endet mit der ersten Leerstelle. Die Liefermenge ist die erste Zahlenfolge hinter den Buchstaben 'St'. Zum besseren Verständnis der Arbeitsweise dieses und der nachfolgenden Vergleichsmuster 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] 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 Textstellen durchsucht, die an der horizontalen Position **0000** anfangen, wird die Bedingung für jeden Artikel des Lieferscheins erfüllt. Im obigen Beispiel der Indexdatei 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 einen Zeichenkettenpuffer übernimmt. Wegen des fixen Feldindex wird diese Bedingung nur einmal erfüllt. Die eigentlichen Anhänge sind die zuvor im (p2f)-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 über ein Import-Gateway im Anhang-Container abgespeichert. \\ \\ {{print2forms:tutorial:sample35.png|Anhang für Lieferschein}} \\ \\ 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** fest 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. \\ \\ {{print2forms:tutorial:sample36.png|Prozess Anlage zum Lieferschein}} \\ \\ Das Formular **Anlage mit Artikelbild** schliesslich sorgt mit drei Textfeldern für die Ausgabe der Lieferscheinnummer, Artikelbezeichnung und Liefermenge und den Eindruck des Firmenlogos. \\ \\ {{print2forms:tutorial:sample37.png|Formular Anlage mit Artikelbild}} \\ \\ Das für diesen Anwendungsfall Entscheidende ist die Formulierung der **Schablone**n 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. Die Referenzierung erfolgt über die Namen oder Nummern der Bedingungen. Der Anhang sieht dann für den ersten Artikel wie folgt aus: \\ \\ {{print2forms:tutorial:sample38.gif|Ausdruck Anlage}} \\ \\ 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. Im vorliegenden Beispiel erscheinen mit dem ersten Lieferschein insgesamt sechs Anlagen und mit dem zweiten Lieferschein erscheinen vier Anlagen. Im (p2f)-System gibt es einen Automatismus, der dafür sorgt, daß bei mehrfach erfüllten Bedingungen die zugehörigen Aktionen mehrfach ausgeführt werden. In diesem Beispiel wurde das dazu benutzt, eine von den Nutzdaten abhängige Anzahl von Anhängen zu drucken. Damit dieser Automatismus greift, müssen die eventuell mehrfach erfüllten Bedingungen am Anfang einer Bedingungsliste stehen. Dabei bestimmt die erste Bedingung in der Liste, wie oft die Aktion ausgeführt wird. Sind weitere Bedinungen vorhanden, die öfter erfüllt wurden, werden deren zusätzliche Zeichenkettenpuffer ignoriert. Wurden weitere Bedinungungen innerhalb der Liste weniger oft erfüllt (hier die Suche nach der Lieferscheinnummer), wird beim Zugriff auf die dann fehlenden Zeichenkettenpuffer immer der letzte Puffer verwendet. Die hier vorgestellte Methode, Anhänge anzudrucken hat ihre Grenzen, wenn sich die Anzahl der Anhänge der 10.000 nähert oder sie gar übersteigt. In solchen Fällen macht es keinen Sinn, die Anhänge innerhalb des (p2f)-Systems zu speichern. Die Anhänge werden dann in eigenen Datenbanken hinterlegt, auf die die Drucker dann über einen HTTP-Server zugreifen. Mit einer solchen Lösung sind dann auch die Ablageformate weitestgehend frei, weil erst beim Zugriff durch den HTTP-Server quasi gedruckt wird. \\ \\