===== Variable Reihenhöhen in Tabellen ===== \\ ==== Anforderung ==== In einer Tabelle auf einem Lieferschein sollen Artikel eingetragen werden, deren Beschreibungen unterschiedlich viele Zeilen in Anspruch nehmen. Die horizontalen Trennlinien innerhalb der Tabelle sind an die Länge der jeweiligen Beschreibung anzupassen. Grundlage für dieses Beispiel ist das Formular '**Einzelne Seite mit Tabelle ohne Reihen**' aus der Beispielinstallation. Der gewünschte Ausdruck der ausgefüllten Tabelle mit den Artikelbeschreibungen soll wie folgt aussehen: \\ \\ {{print2forms:tips:0009-1.GIF}} \\ \\ ==== Realisierung ==== Der Realisation dieser Anforderung liegt die Idee zugrunde, in das Lieferscheinformular lediglich den Kopf und den äußeren Rahmen der Tabelle aufzunehmen. Die untere Trennlinie zwischen Kopfbereich und Tabellenkörper wird ebenfalls weggelassen. Die horizontale Trennlinie wird als eigene Ressource hinterlegt und über jedem neuen Artikel angedruckt. Mit dem ersten Artikel wird dann auch die Trennlinie zum Kopfbereich gezeichnet. Zum besseren Verständnis nachfolgend ein Bild des Tabellenbereichs aus dem Formular '**Einzelne Seite mit Tabelle ohne Reihen**': \\ \\ {{print2forms:tips:0009-2.GIF}} \\ \\ Die zum Zeichnen der Trennlinien benötigte Ressource '**Lieferscheinzeile mit Grau hinterlegt**' hat folgendes Aussehen: \\ \\ {{print2forms:tips:0009-3.GIF}} \\ \\ Das Zeichnen der Trennlinie wird durch ein Ressourcenfeld innerhalb des Formulars '**Einzelne Seite mit Tabelle ohne Reihen**' übernommen. Das Ressourcenfeld hat eine **Feldauswahl**, die nach den ersten Zeilen einer Artikelbeschreibung sucht. Diese erste Zeile zeichnet sich dadurch aus, daß ihr eine ein- oder zweistellige Positionsangabe vorausgeht. \\ \\ {{print2forms:tips:0009-4.GIF}} \\ \\ Um die erste Zeile der Artikelbeschreibung im Ausdruck zu finden, wird als Feldindex '**01????0000**' und als Vergleichsmuster ' **[ 0-9]# @.***' verwendet. Mit diesen beiden Angaben wird jede Textpassage, die an der horizontalen Position '**0000**' beginnt, gegen das Muster verglichen. Das Muster prüft zunächst auf fünf Leerzeichen gefolgt von einer Folge aus zwei Ziffern oder einem Leerzeichen und einer Ziffer. Damit wird die ein oder zweistellige Positionsnummer in der Tabelle gefunden. Der Teil '**@.***' findet die mit einem Buchstaben beginnende Artikelbezeichnung sowie den Rest der Zeile. Die Auswahl '**Nein**' bei **Feld entfernen** läßt die Textpassage so wie sie ist auf dem Blatt. Zum besseren Verständnis der Arbeitsweise des Vergleichsmusters 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 ... Die Positionierung der Ressource geht von der Anforderung aus, daß die Trennzeile oberhalb der ersten Artikelzeile gezeichnet werden soll. Damit wird die Zeile auch durch die graue Hinterlegung aus der Ressource hervorgehoben. Die angegebenen Werte für horizontale und vertikale Position sind empirisch ermittelt. Sie hängen sehr stark davon ab, was als Referenzpunkt der Trennlinie innerhalb der Ressource festgelegt wird. Da in der Ressource selbst schon ein negativer Offset vorgegeben wurde, muß die vertikale Position im Formular nicht weiter korrigiert werden. \\ \\ {{print2forms:tips:0009-5.GIF}} \\ \\ Weil in unserem Beispiel das Vergleichsmuster im Ressourcenfeld insgesamt sechs mal erfüllt wird, wird das Ressourcenfeld auch sechs mal ausgeführt. Das heist, jeder Artikel bekommt seine Trennzeile. Die Taballe erhält damit das gewünschte Aussehen (siehe oben). \\ ==== Hinweise ==== * 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, die Ressource für jeden Artikel einmal zu drucken. * Durch die zwangsläufige Positionierung '**Relativ zum Feld**' wird erzwungen, daß sich die Position der Trennzeile nicht ändert, wenn das Formular verschoben wird. Muss das Formular verschoben werden, müssen die Positionsangaben im Ressourcenfeld korrigiert werden. Werden hingegen im Prozess die Nutzdaten verschoben, verschieben sich die Trennzeilen mit. * Der Ausdruck zum Austesten dieses Beispiels wurde mit Hilfe des beim (p2f) mitgelieferten Programms 'Beispielprogramm' erstellt. Dazu wurde das Beispiel '**Lieferschein mit variabler Tabelle**' ausgewählt. * Eine etwas komplexere Variante der hier vorgestellten Lösung wird im Kapitel '**Länge eines Tabellenrahmens an Nutzdaten angepassen**' behandelt. Hier wird beschrieben, wie vorzugehen ist, wenn nicht nur die Trennlinien sondern auch der äußere Rahmen der Tabelle abhängig von den Nutzdaten gezeichnet werden sollen.