===== Tabellen ausfüllen =====
==== Anforderung ====
Bei vielen Dokumenten im Geschäftsalltag ist eine Liste oder Tabelle fester Bestandteil des Layouts, z.B. bei Lieferscheinen, Rechnungen, Kommisionierlisten. Meist sind diese Tabellen bereits im Druckdatenstrom entsprechend in Spalten und Zeilen aufbereitet, so dass es meist nur darum geht, die Tabelle im Dokument optisch besser zu präsentieren.
Im einfachsten Fall genügt es, einfach einen Tabellenrahmen mit einer dazugehörigen Kopfzeile über die Druckdaten einzudrucken. Die Beispielinstallation von (p2f) enthält ein solches Beispiel für den Druck von Lieferscheinen.
Was aber, wenn die Tabelle nicht nur in einer anderen, eventuell typographischen Schrift gedruckt werden soll, sondern einzelne Spalten nicht benötigt werden, oder die Reihenfolge der Spalten verändert werden soll?
Eine mögliche Lösung einer solchen Anforderung bietet (p2f) mit den sogenannten Vorlagen.
Als Beispiel soll die Anforderung formuliert werden, dass aus den Lieferscheinen der Beispielinstallation jetzt Kommisionierlisten erzeugt werden sollen. Der Druckdatenstrom bleibt identisch, nur werden nicht alle Spalten benötigt und die Liste soll an einer anderern Position im Dokument erscheinen.
\\
\\
==== Realisierung ====
Um in (p2f) Vorlagen zu erstellen, kann im Prinzip jedes Programm verwendet werden, das in der Lage ist, das gewünschte Layout zu erzeugen. Im Beispiel hier wurde die Textverarbeitung aus dem kostenlosen //Open Office// Paket verwendet.
\\
{{print2forms:tips:0057-10.png?480 }} In einer Vorlage werden Platzhalter definiert, die dann später beim Druck gegen die Nutzdaten ersetzt werden.
Die Anforderung an die Namen der Platzhalter ist, dass sie eineindeutig sein müssen. Das heist, kein Platzhalter darf als Bestandteil eines reglären Textes auf dem Dokument vorkommen, und kein Name darf Bestandteil eines anderen Platzhalternamens sein.
Ein Platzhalter darf aus Buchstaben, Ziffern und Sonderzeichen bestehen. Die Länge des Platzhalternamens ist meist durch das Layout festgelegt und sollte möglichst sprechend gewählt werden.
Es ist im Layout der Kommisionierliste leicht zu erkennen, dass die Zeichen(-)folgen **Adr**, **Num**, **Bez**, **100** und **101** wohl als Platzhalter für die Anschrift und die Tabelleninhalte gedacht sind.
Für die Spalte //Menge// und //Rest// wurde ein rein numerischer Platzhalter verwendet, weil hier dreistellige Zahlen rechtsbündig gedruckt werden sollen. Für die einzelnen Tabellenzeilen werden immer die gleichen Platzhalter verwendet.
Nicht ganz so offensichtlich ist, dass auch **123456**, **27.10.2015** und **Barcode** als Platzhalter eingesetzt sind.
Bemerkenswert ist, dass für die Gestal(-)tung der Tabelle die typo(-)graphische Schrift Arial Verwendung findet.
\\
\\
Bevor mit dem Import der Vorlage in (p2f) begonnen werden kann, wird noch eine Aufzeichnung der Druckdaten benötigt, die später zum Ausfüllen der Vorlage verwendet werden soll. Dazu wird bei einem (p2f)-Client für Laserdrucker die Aufzeichnung der Eingangsdaten aktiviert, und anschliessend der Druck der Lieferscheindaten ausgelöst. Das geschieht durch Aufruf der Beispielapplikation **p2fSample** und Druck eines Lieferscheins. Dabei ist darauf zu achten, dass ein Lieferschein mit 13 Artikeln gedruckt wird, da sonst später beim Importieren nicht alle Zeilen der Tabelle zugewiesen werden können.
Die Aufzeichnung der Druckdaten wird mit Hilfe des entsprechenden Punktes aus dem Kontextmenü des (p2f)-Clients in eine Datei geschrieben. Der Client muss allerdings dazu vorher erst angehalten werden.
\\
\\
{{ print2forms:tips:0057-9.png?400}} Ist die Vorlage fertig gestaltet, muss sie in (p2f) als Ressource importiert werden. Dazu wird das Layout einfach über den (p2f)-Druckertreiber auf das Import-Gateway gedruckt. Im Druckdialog von //OpenOffice// wird das Import-Gateway ausgesucht und der Eigenschaftendialog des (p2f)-Druckertreibers aufgerufen. Dort sind im Reiter //Import// die notwendigen Einstel(-)lungen vorzunehmen.
Es muss eine neue Ressource importiert werden. Der Name der Resource wird mit **Kommisionierliste** festgelegt. Da im Fenster //Verfügbare Verzeichnisse// keine Einstellung vorgenommen wurde, wird die Ressource direkt im Container //Ressourcen// erzeugt.
In den Geräteeigenschaften des Import-Gateways wurde bereits festgelegt mit welcher Auflösung die Ressource erstellt werden soll und ob die Graphik als Raster- oder Vektorgraphik erzeugt werden soll. Ebenso ist dort - abhängig vom Treiber - festgelegt, ob die Ressource in Schwarz/Weiss oder in Farbe erzeugt wird. Im Falle, dass der (p2f)-Farbtreiber Verwendung findet, kann im Reiter //Papier/Qualität// noch zwischen Schwarz/Weiss und Farbe umgestellt werden.
Da in der Vorlage die Schrift Arial verwendet wird, ist sehr wichtig, dass in den Geräteeigenschaften des Import-Gateways in den //Geräteeinstellungen// unter //Ersetzungstabelle für Schriftarten// angegeben wird, dass die Schrift Arial immer mit der residenten Duckerschrift gedruckt werden soll. Das ist deshalb von Bedeutung, weil sonst das Import-Gateway die Platzhalter nicht erkennen kann. (Das ist in der Regel nach der Installation des Druckertrei(-)bers bereits der Fall.)
\\
{{print2forms:tips:0057-1.png?450 }}Nachdem der Druckvorgang in //Open Office// ausgelöst wurde, erscheint ein Fenster mit den in der Vorlage erkannten Textpassagen, unter denen sich natürlich jetzt auch die Platzhalter befinden.
Durch einen Klick auf die Schaltfläche //Druckdaten// wird als nächstes die Datei mit den aufgezeichneten Druckdaten geladen. Es erscheint ein zweites Fenster mit den Druckdaten.
Die Position der beiden Fenster zueinander wurde hier nur aus Platzgründen so gewählt.
Bei genügend grossem Bildschirm können die beiden Fenster in der Regel neben(-)einander angeordnet werden.
\\
{{ print2forms:tips:0057-2.png?450}}Um jetzt die Platzhalter der Tabelle zu definieren, wird das **erste** Auftauchen der Zeichenfolge **Num** mit der Maus markiert und als Platzhalter festgelegt. Das geschieht entweder über die Plus-Taste auf der Zehner-Tastatur oder über den ent(-)sprechenden Punkt des Kontextmenüs.
Es werden automatisch alle Vorkommnisse der Zeichenfolge **NUM** als noch nicht zugewiesener Platzhalter markiert (in der Regel in Rot, falls nicht angepasst). Dabei wird der sichtbare Bereich des Fensters eventuell so verschoben, dass der erste Platzhalter in der obersten Zeile steht.
Mit der Tabulator-Taste erfolgt der Wechsel in das Fenster mit den Druckdaten. Dort werden die Druckdaten mit der Maus markiert, die in die Spalte mit dem Platzhalter **Num** eingefügt werden sollen.
\\
{{print2forms:tips:0057-3.png?450 }}Die Zuweisung der Druckdaten zum Platzhalter **Num** erfolgt jetzt wieder entweder über die Plus-Taste auf der Zehner-Tastatur oder über den ent(-)sprechenden Punkt des Kontextmenüs.
Als Zeichen für die erfolgreiche Zuordnung werden jetzt alle 13 Druckdatenzeilen entsprechend markiert. Auch die Farbe der Platzhalter im Fenster mit der Vorlage wechselt jetzt (auf Blau, wenn nicht angepasst), um anzuzeigen, dass den Platzhaltern nun Druckdaten zugewiesen worden sind.
Stimmt die Anzahl der Platzhalter nicht mit der Anzahl der Druckdatenzeilen überein, bleiben entweder einige Platzhalter Rot (zu wenige Druckdatenzeilen) oder es werden nicht alle Druckzeilen markiert (zu wenig Platzhalter).
\\
{{ print2forms:tips:0057-4.png?450}}Analog wird jetzt mit den restlichen Spalten der Tabelle verfahren.
Dabei ist darauf zu achten, dass immer der gesamte Druckdatenbereich markiert wird, der für den Platzhalter zugewiesen werden soll, selbst wenn die entsprechende Spalte im Einzelfall nicht vollständig ausgefüllt ist.
Der Platzhalter **100** wird mit der letzten Spalte (drei Zeichen) der Druckdatentabelle verknüpft. Der Platzhalter **101** wird mit der vorletzten Spalte (drei Zeichen) der Druck(-)datentabelle verknüpft.
Ist das erledigt, wird der Platzhalter **Adr** zunächst nur festgelegt.
Die beiden Fenster sollten jetzt so wie in der Abbildung rechts aussehen.
\\
{{print2forms:tips:0057-5.png?450}}\\
{{print2forms:tips:0057-6.png?450}}
Bei der Zuweisung von Druckdaten für den Platzhalter **Adr** gibt es eine Besonderheit. Nicht alle fünf Zeilen für die Anschrift sind gleich lang.
Einige Zeilen enthalten noch Daten, die weiter rechts gedruckt werden, andere Zeilen enden unmittelbar nach den Daten der Anschrift. Dies gilt auch für die erste Zeile der Anschrift.
Von daher kann die erste Zeile nicht einfach mit der Maus markiert werden, weil dann von den nachfolgenden Zeilen auch nur die jeweils acht ersten Zeichen im Anschriften(-)feld der Vorlage landen würden.
Deshalb muss nach dem Markieren der ersten Zeile der automatisch erzeugte re(-)guläre Ausdruck ''.{7}(.{8}).*'' manuell auf\\ ''.{7}(.{,30}).*'' geändert werden (eine Anschriftenzeile enthält maximal 30 Zei(-)chen). Erst danach darf die Plus-Taste auf der Zehnertastatur zur Zuweisung der Druck(-)daten ausgelöst werden.
Wird jetzt durch Drücken der Leertaste nachgeschaut, welche Druckdaten dem fünften Platzhalter **Adr** zugewiesen worden sind, sieht man die 30 Leerstellen in der nicht ausgefüllten fünften Anschriftenzeile der Druckdaten.
Wird nachgeschaut, welche Druckdaten dem ersten Platzhalter **Adr** zugewiesen sind, sieht man zwar nur die acht Zeichen der ersten Anschriftenzeile in den Druckdaten, aber ein Blick auf das //Auswahlmuster// zeigt, dass auch hier bis zu 30 Zeichen zugewiesen werden, wenn sie denn in den Druckdaten enthalten wären.
\\
Jetzt werden noch die Nummer des Lie(-)ferscheins als Nummer des Kommisionier(-)scheins (Platzhalter **123456**) und das Lie(-)ferscheindatum übernommen (Platzhalter **27.10.2015**).
Als letztes wird der Platzhalter **Barcode** zugewiesen.
Die Besonderheit hier ist, dass dieser Platzhalter nicht einfach gegen einen Text ersetzt wird, sondern dass an seiner Stelle ein ganzer Barcode erzeugt werden soll. Barcodes werden in (p2f) mit Hilfe sogenannter Barcode-Felder in Formularen erzeugt.
Aus diesem Grund wird, nachdem der Platzhalter **Barcode** markiert ist (Rot), unter //Feldreferenz// der Name eines Barcodefeldes eingegeben - hier einfach //Nummer//. Erst danach werden die entsprechenden Druck(-)daten zugewiesen.
Weil im Barcode ebenfalls die Lieferschein(-)nummer kodiert werden soll, erscheint die Lieferscheinnummer im Fenster mit den Druckdaten jetzt grün (falls nicht geändert), als Zeichen dafür, dass diese Druckdaten mehreren Platzhaltern zugewiesen sind.
Wird der Cursor in die Lieferscheinnummer gesetzt und die Leertaste gedrückt, werden im Fenster mit der Vorlage abwechselnd die beiden Platzhalter **123456** und **Barcode** markiert. So kann auch eine mehrfache Zuweisung kontrolliert werden.
Jetzt ist die Vorlage vollständig bearbeitet und kann durch Klicken auf die Schaltfläche //Import// zum Import-Gateway gesendet werden.
{{print2forms:tips:0057-8.png?450}}//
{{print2forms:tips:0057-7.png?450}}
\\
//Nach dem erfolgreichen Import der Vorlage existiert in (p2f) jetzt eine Ressource mit dem Namen //Kommisionierliste//. Damit diese verwendet werden kann, muss noch ein Formular und ein Prozess definiert werden.
\\
{{print2forms:tips:0057-12.png }}
Das Formular bekommt ebenfalls den Namen //Kommisionierliste//.
Weil es direkt von einem Prozess aufgerufen werden soll, muss für //Horizontale Position// und für //Vertikale Position// jeweils der Wert 0 Zentimeter eingetragen werden.
Es enthält als Wichtigstes eine Referenz auf die eben importierte Ressource //Kommisionierliste//.
Zusätzlich muss jetzt noch das in der Ressource referenzierte Barcode-Feld mit dem Namen //Nummer// angelegt werden.
Bei der Positionierung des Feldes ist darauf zu achten, dass dort //Relativ zur Ressource// angegeben ist, damit der Barcode auch dort angedruckt wird, wo der Platzhalter **Barcode** in der Vorlage steht.
Es ist prinzipiell auch erlaubt, hier absolut oder relativ zum Formular zu positionieren, allerdings wäre dann die Position des Platzhalters **Barcode** in der Vorlage vollkommen unwichtig, und der Barcode erscheint an der definierten Stelle unabhängig von der Vorlage.
Die //Schablone// des Barcode-Feldes bekommt den Inhalt ''\Nummer:1'', weil unter dem Namen des Feldes die Druckdaten abgelegt sind, die bei der Bearbeitung der Vorlage für den Platzhalter **Barcode** zugewiesen worden sind.
\\
Jetzt wird ein neuer Druckprozess angelegt, der ebenfalls den Namen //Kommisionierliste// bekommt.
Das einzig Besondere an diesem Prozess ist, dass in der //Seitenfolge// der Seitentyp //Nutzdatenseite// angegeben werden muss.
Diese Einstellung sorgt dafür, dass die eigentlichen Druckdaten nicht auf der Druckseite erscheinen, sondern nur die Druckdaten, die in einer Vorlage irgendwelchen Platzhaltern zugewiesen worden sind.\\
\\
\\
\\
\\
\\
Um das Ergebnis der Arbeit jetzt auch austesten zu können, wird der Einfachheit halber der Dokumentenprozess //ExLiefer - Lieferscheine ermitteln// temporär so geändert, dass dort statt des Verweises auf den Druckprozess //Lieferschein drucken// jetzt ein Verweis auf den Druckprozess //Kommisionierliste// steht. Damit kann wieder die Beispielapplikation **p2fSample** zur Erzeugung entsprechender Druckdaten verwendet werden.
{{print2forms:tips:0057-13.png}}
Eine für einen Lieferschein mit acht Artikel erzeugte Kommisionierliste ist nachfolgend zu sehen.
{{print2forms:tips:0057-11.png}}\\
\\
==== Hinweise ====
* Für Zahlen sollten in der Regel rein numerische Platzhalter (mit Punkt und Komma) verwendet werden, weil das garantiert, dass bei Verwendung von typographischen Schriften Zahlen innerhalb einer Tabelle stellenrichtig gedruckt werden.
* Das hier präsentierte Vorgehen verlangt eine (p2f)-Version 3.4 oder höher. Nachfolgend sind die notwendigen minimalen Build-Nummern der beteiligten Komponenten angegeben: p2fClient 5766, Gateway 3044 und Import-Filter 863. Diese sind noch nicht Bestandteil des Installers Build 274, und müssen daher bei Bedarf manuell nachinstalliert werden.
* In diesem Beispiel wurde der Einfachheit halber angenommen, dass nur einseitige Lieferscheine als Kommisionierliste ausgegeben werden sollen. Wollte man die Kommisionierlisten für beliebig lange Lieferscheine drucken, müsste man - wie für die Lieferscheine - nicht nur die Vorlage für eine einseitige Kommisionierliste definieren, sondern auch jeweils eine Vorlage als Start-, Mittel- und Endseite.\\ \\ Der Prozess //Kommisionierliste// müsste dann analog zum Prozess //Lieferschein drucken// mit vier Seiten innerhalb der //Seitenfolge// definiert werden. Das ist prinzipiell auch mit der Nutzung von Vorlagen möglich.
* Weitere Informationen zum Import von Vorlagen finden sich auch unter [[print2forms:tips:tip14|Ein Etikett für Laserdrucker erstellen]].
* In neueren Versionen von (p2f) (ab Installer Build 276) ist dieses Beispiel mit in die Beispiel(-)applikation und in die Testdaten der Free-Edition aufgenommen, und kann dort direkt ausprobiert werden.