===== 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): {{print2forms:tips:0005-5.GIF}} ==== 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. {{..:IMGS:0005-2.GIF}} 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 (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 entweder über das Administrationsprogramm des (p2f)-Servers oder über ein Import-Gateway im Anhang-Container abgespeichert. {{print2forms:tips:0005-3.GIF}} 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. {{print2forms:tips:0005-6.GIF}} 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:tips:0005-1.GIF}} 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. Der Anhang sieht dann für den ersten Artikel wie folgt aus: {{print2forms:tips:0005-4.GIF}} 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 ==== * 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. * Größere Mengen von Anhängen mit Hilfe des Administrationsprogramms manuell ins (p2f)-System zu importieren ist sehr mühselig. In solchen Fällen kann das **Import-Gateway** Anwendung finden, das eine automatische Übernahme ins (p2f)-System direkt aus der die Anhänge erzeugenden Anwendung heraus ermöglicht. Zum Thema Importieren gibt es ein gesondertes Kapitel. * 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. * Der Ausdruck zum Austesten dieses Beispiels wurde mit dem bei (p2f) mitgelieferten Programm 'Beispielprogramm' erstellt. Dazu wurde das Beispiel '**Lieferschein mit varibalen Anlagen**' ausgewählt. Es werden dann zwei Lieferscheine mit insgesamt zehn Anlagen gedruckt:{{print2forms:tips:0005-7.GIF}}