3   <title>LaTeX-Vorlagen und verfügbare Variablen</title>
 
   4   <style type="text/css">
 
   8            background-color: #b0ecff;
 
   9            border: 1px solid blue;
 
  16         background-color: #fae8b8;
 
  17         border: 1px solid #be5303;
 
  18         border-collapse: collapse;
 
  22      border: 1px solid #be5303;
 
  32  <h1>LaTeX-Vorlagen und verfügbare Variablen</h1>
 
  34  <p>geschrieben von <a href="mailto:m.bunkus@linet-services.de">Moritz
 
  35    Bunkus</a>. Version: $Id$ </p>
 
  39  <h2><a name="inhaltsverzeichnis">Inhaltsverzeichnis</a></h2>
 
  42   <li><a href="latex-template-variablen.html#inhaltsverzeichnis">
 
  43     Inhaltsverzeichnis</a></li>
 
  45   <li><a href="latex-template-variablen.html#einfuehrung">Einführung</a>
 
  48   <li><a href="latex-template-variablen.html#zuordnung_dateinamen">
 
  49     Zuordnung von Dateinamen zu den Funktionen</a></li>
 
  51   <li><a href="latex-template-variablen.html#allgemeine_variablen">
 
  52     Allgemeine Variablen, die in allen Vorlagen vorhanden sind</a><br>
 
  55     <li><a href="latex-template-variablen.html#allgemein_stammdaten">
 
  56       Stammdaten von Kunden und Lieferanten</a></li>
 
  58     <li><a href="latex-template-variablen.html#allgemein_verkaeufer">
 
  59       Informationen über den Verkäufer</a></li>
 
  61     <li><a href="latex-template-variablen.html#allgemein_steuern">
 
  62       Variablen für jede Steuer</a></li>
 
  66   <li><a href="latex-template-variablen.html#invoice">
 
  67     Variablen in Rechnungen</a>
 
  70     <li><a href="latex-template-variablen.html#invoice_allgemein">
 
  71       Allgemeine Variablen</a></li>
 
  73     <li><a href="latex-template-variablen.html#invoice_posten">
 
  74       Variablen für jeden Posten auf der Rechnung</a></li>
 
  76     <li><a href="latex-template-variablen.html#invoice_zahlungen">
 
  77       Variablen für die Zahlungseingänge</a></li>
 
  81   <li><a href="latex-template-variablen.html#anderevorlagen">
 
  82     Variablen in anderen Vorlagen</a></li>
 
  84   <li><a href="latex-template-variablen.html#bloecke">
 
  85     Blöcke, bedingte Anweisungen und Schleifen</a>
 
  88     <li><a href="latex-template-variablen.html#bloecke_include">
 
  89       Die <code>include</code>-Anweisung</a></li>
 
  91     <li><a href="latex-template-variablen.html#bloecke_ifnot">
 
  92       Der <code>if not</code>-Block</a></li>
 
  94     <li><a href="latex-template-variablen.html#bloecke_if">
 
  95       Der <code>if</code>-Block</a></li>
 
  97     <li><a href="latex-template-variablen.html#bloecke_foreach">
 
  98       Die <code>foreach</code>-Schleife</a></li>
 
 100     <li><a href="latex-template-variablen.html#bloecke_pagebreak">
 
 101       Der <code>pagebreak</code>-Block</a></li>
 
 109  <h2><a name="einfuehrung">Einführung</a></h2>
 
 111  <p>Dies ist eine Auflistung der Standard-LaTeX-Vorlagen und aller zur
 
 112   Bearbeitung verfügbare Variablen. Eine Variable wird in einer Vorlage
 
 113   durch ihren Inhalt ersetzt, wenn sie in der Form
 
 114   <code><%variablenname%></code> verwendet wird.</p>
 
 116  <p>Insgesamt sind technisch gesehen eine ganze Menge mehr Variablen
 
 117   verfügbar als hier aufgelistet werden. Die meisten davon können
 
 118   allerdings innerhalb einer solchen Vorlage nicht sinnvoll verwendet
 
 119   werden. Wenn eine Auflistung dieser Variablen gewollt ist, so kann diese wie
 
 120   folgt erhalten werden:</p>
 
 124   <li><code>SL/Form.pm</code> öffnen und am Anfang die Zeile
 
 125    <pre>"use Data::Dumper;"</pre> einfügen.</li>
 
 127   <li>In <code>Form.pm</code> die Funktion <code>parse_template</code>
 
 128    suchen und hier die Zeile <pre>print(STDERR Dumper($self));</pre>
 
 131   <li>Einmal per Browser die gewünschte Vorlage "benutzen", z.B. ein PDF
 
 132    für eine Rechnung erzeugen.</li>
 
 134   <li>Im <code>error.log</code> vom Apache steht die Ausgabe der Variablen
 
 135    <code>$self</code> in der Form <code>'key' => 'value',</code>. Alle
 
 136    <code>key</code>s sind verfügbar.</li>
 
 140  <small><a href="latex-template-variablen.html#inhaltsverzeichnis">
 
 141    zum Inhaltsverzeichnis</a></small><br>
 
 144  <h2><a name="zuordnung_dateinamen">
 
 145    Zuordnung von den Dateinamen zu den Funktionen</a></h2>
 
 147  <p>Diese kurze Auflistung zeigt, welche Vorlage bei welcher Funktion
 
 151   <li><code>bin_list.tex</code> -- Lagerliste</li>
 
 152   <li><code>check.tex</code> -- ?</li>
 
 153   <li><code>invoice.tex</code> -- Rechnung</li>
 
 154   <li><code>packing_list.tex</code> -- Verpackungsliste</li>
 
 155   <li><code>pick_list.tex</code> -- Sammelliste</li>
 
 156   <li><code>purcharse_order.tex</code> -- Bestellung an Lieferanten</li>
 
 157   <li><code>request_quotation.tex</code> -- Anfrage an Lieferanten</li>
 
 158   <li><code>sales_order.tex</code> -- Bestellung</li>
 
 159   <li><code>sales_quotation.tex</code> -- Angebot an Kunden</li>
 
 162  <small><a href="latex-template-variablen.html#inhaltsverzeichnis">
 
 163    zum Inhaltsverzeichnis</a></small><br>
 
 166  <h2><a name="allgemeine_variablen">
 
 167    Allgemeine Variablen, die in allen Vorlagen vorhanden sind</a></h2>
 
 169  <h3><a name="allgemein_stammdaten">
 
 170    Stammdaten von Kunden und Lieferanten:</a></h3>
 
 174    <tr><th>Variablenname</th><th>Bedeutung</th></tr>
 
 176     <td><code>account_number</code></td>
 
 180     <td><code>bank</code></td>
 
 181     <td>Name der Bank</td>
 
 184     <td><code>bank_code</code></td>
 
 185     <td>Bankleitzahl</td>
 
 188     <td><code>business</code></td>
 
 192     <td><code>city</code></td>
 
 196     <td><code>contact</code></td>
 
 200     <td><code>country</code></td>
 
 204     <td><code>cp_email</code></td>
 
 205     <td>Email des Ansprechpartners</td>
 
 208     <td><code>cp_givenname</code></td>
 
 209     <td>Vorname des Ansprechpartners</td>
 
 212     <td><code>cp_greeting</code></td>
 
 213     <td>Anrede des Ansprechpartners</td>
 
 216     <td><code>cp_name</code></td>
 
 217     <td>Name des Ansprechpartners</td>
 
 220     <td><code>cp_phone1</code></td>
 
 221     <td>Telefonnummer 1 des Ansprechpartners</td>
 
 224     <td><code>cp_phone2</code></td>
 
 225     <td>Telefonnummer 2 des Ansprechpartners</td>
 
 228     <td><code>cp_title</code></td>
 
 229     <td>Titel des Ansprechpartners</td>
 
 232     <td><code>creditlimit</code></td>
 
 236     <td><code>customernumber</code></td>
 
 237     <td>Kundennummer; nur für Kunden</td>
 
 240     <td><code>customernotes</code></td>
 
 241     <td>Bemerkungen beim Kunden; nur für Kunden</td>
 
 244     <td><code>discount</code></td>
 
 248     <td><code>email</code></td>
 
 249     <td>Emailadresse</td>
 
 252     <td><code>fax</code></td>
 
 256     <td><code>homepage</code></td>
 
 260     <td><code>language</code></td>
 
 264     <td><code>name</code></td>
 
 268     <td><code>phone</code></td>
 
 269     <td>Telefonnummer</td>
 
 272     <td><code>shiptocity</code></td>
 
 273     <td>Stadt (Lieferadresse)
 
 274      <a href="latex-template-variablen.html#anmerkung_shipto">*</a></td>
 
 277     <td><code>shiptocontact</code></td>
 
 278     <td>Kontakt (Lieferadresse)
 
 279      <a href="latex-template-variablen.html#anmerkung_shipto">*</a></td>
 
 282     <td><code>shiptocountry</code></td>
 
 283     <td>Land (Lieferadresse)
 
 284      <a href="latex-template-variablen.html#anmerkung_shipto">*</a></td>
 
 287     <td><code>shiptoemail</code></td>
 
 288     <td>Email (Lieferadresse)
 
 289      <a href="latex-template-variablen.html#anmerkung_shipto">*</a></td>
 
 292     <td><code>shiptofax</code></td>
 
 293     <td>Fax (Lieferadresse)
 
 294      <a href="latex-template-variablen.html#anmerkung_shipto">*</a></td>
 
 297     <td><code>shiptoname</code></td>
 
 298     <td>Firmenname (Lieferadresse)
 
 299      <a href="latex-template-variablen.html#anmerkung_shipto">*</a></td>
 
 302     <td><code>shiptophone</code></td>
 
 303     <td>Telefonnummer (Lieferadresse)
 
 304      <a href="latex-template-variablen.html#anmerkung_shipto">*</a></td>
 
 307     <td><code>shiptostreet</code></td>
 
 308     <td>Straße und Hausnummer (Lieferadresse)
 
 309      <a href="latex-template-variablen.html#anmerkung_shipto">*</a></td>
 
 312     <td><code>shiptozipcode</code></td>
 
 313     <td>Postleitzahl (Lieferadresse)
 
 314      <a href="latex-template-variablen.html#anmerkung_shipto">*</a></td>
 
 317     <td><code>street</code></td>
 
 318     <td>Straße und Hausnummer</td>
 
 321     <td><code>taxnumber</code></td>
 
 322     <td>Steuernummer</td>
 
 325     <td><code>terms</code></td>
 
 326     <td>Zahlungsziel</td>
 
 329     <td><code>vendoremail</code></td>
 
 330     <td>Email des Lieferanten; nur für Lieferanten</td>
 
 333     <td><code>vendorfax</code></td>
 
 334     <td>Faxnummer des Lieferanten; nur für Lieferanten</td>
 
 337     <td><code>vendornotes</code></td>
 
 338     <td>Bemerkungen beim Lieferanten; nur für Lieferanten</td>
 
 341     <td><code>vendornumber</code></td>
 
 342     <td>Lieferantennummer; nur für Lieferanten</td>
 
 345     <td><code>vendorphone</code></td>
 
 346     <td>Telefonnummer des Lieferanten; nur für Lieferanten</td>
 
 349     <td><code>zipcode</code></td>
 
 350     <td>Postleitzahl</td>
 
 355  <p><a name="anmerkung_shipto"><em>Anmerkung</em></a>: Sind die
 
 356   <code>shipto*</code>-Felder in den Stammdaten nicht eingetragen, so haben
 
 357   die Variablen <code>shipto*</code> den gleichen Wert wie die die
 
 358   entsprechenden Variablen der Lieferdaten. Das bedeutet, dass sich einige
 
 359   <code>shipto*</code>-Variablen so nicht in den Stammdaten wiederfinden
 
 360   sondern schlicht Kopien der Lieferdatenvariablen sind
 
 361   (z.B. <code>shiptocontact</code>).</p>
 
 363  <h3><a name="allgemein_verkaeufer">
 
 364    Informationen über den Verkäufer:</a></h3>
 
 368    <tr><th>Variablenname</th><th>Bedeutung</th></tr>
 
 370     <td><code>employee_email</code></td>
 
 374     <td><code>employee_fax</code></td>
 
 378     <td><code>employee_name</code></td>
 
 382     <td><code>employee_signature</code></td>
 
 386     <td><code>employee_tel</code></td>
 
 387     <td>Telefonnummer</td>
 
 392  <h3><a name="allgemein_steuern">
 
 393    Variablen für die einzelnen Steuern:</a></h3>
 
 397    <tr><th>Variablenname</th><th>Bedeutung</th></tr>
 
 399     <td><code>tax</code></td>
 
 403     <td><code>taxbase</code></td>
 
 404     <td>zu versteuernder Betrag</td>
 
 407     <td><code>taxdescription</code></td>
 
 408     <td>Name der Steuer</td>
 
 411     <td><code>taxrate</code></td>
 
 417  <small><a href="latex-template-variablen.html#inhaltsverzeichnis">
 
 418    zum Inhaltsverzeichnis</a></small><br>
 
 421  <h2><a name="invoice">Variablen in Rechnungen</a></h2>
 
 423  <h3><a name="invoice_allgemein">Allgemeine Variablen:</a></h3>
 
 427    <tr><th>Variablenname</th><th>Bedeutung</th></tr>
 
 429     <td><code>creditremaining</code></td>
 
 430     <td>Verbleibender Kredit</td>
 
 433     <td><code>currency</code></td>
 
 437     <td><code>cusordnumber</code></td>
 
 438     <td>Bestellnummer beim Kunden</td>
 
 441     <td><code>duedate</code></td>
 
 442     <td>Fälligkeitsdatum</td>
 
 445     <td><code>intnotes</code></td>
 
 446     <td>Interne Bemerkungen</td>
 
 449     <td><code>invdate</code></td>
 
 450     <td>Rechnungsdatum</td>
 
 453     <td><code>invnumber</code></td>
 
 454     <td>Rechnungsnummer</td>
 
 457     <td><code>invtotal</code></td>
 
 458     <td>gesamter Rechnungsbetrag</td>
 
 461     <td><code>notes</code></td>
 
 462     <td>Bemerkungen der Rechnung</td>
 
 465     <td><code>ordnumber</code></td>
 
 466     <td>Auftragsnummer</td>
 
 469     <td><code>quonumber</code></td>
 
 470     <td>Angebotsnummer</td>
 
 473     <td><code>shippingdate</code></td>
 
 477     <td><code>shippingpoint</code></td>
 
 481     <td><code>shipvia</code></td>
 
 482     <td>Transportmittel</td>
 
 485     <td><code>subtotal</code></td>
 
 486     <td>Zwischensumme aller Posten ohne Steuern</td>
 
 489     <td><code>sumcarriedforward</code></td>
 
 490     <td>Zwischensumme aller bisher ausgegebenen Posten. Sollte nur in einem
 
 491      <a href="latex-template-variablen.html#bloecke_pagebreak">
 
 492       <code>pagebreak</code></a>-Block verwendet werden.</td>
 
 495     <td><code>total</code></td>
 
 496     <td>Restsumme der Rechnung (Summe abzüglich bereits bezahlter Posten)</td>
 
 501  <h3><a name="invoice_posten">
 
 502    Variablen für jeden Posten auf der Rechnung:</a></h3>
 
 506    <tr><th>Variablenname</th><th>Bedeutung</th></tr>
 
 508     <td><code>assembly</code></td>
 
 512     <td><code>bin</code></td>
 
 516     <td><code>deliverydate</code></td>
 
 520     <td><code>description</code></td>
 
 521     <td>Artikelbeschreibung</td>
 
 524     <td><code>linetotal</code></td>
 
 525     <td>Zeilensumme (Anzahl * Einzelpreis)</td>
 
 528     <td><code>listprice</code></td>
 
 532     <td><code>netprice</code></td>
 
 536     <td><code>number</code></td>
 
 537     <td>Artikelnummer</td>
 
 540     <td><code>partnotes</code></td>
 
 541     <td>Die beim Artikel gespeicherten Bemerkungen</td>
 
 544     <td><code>partsgroup</code></td>
 
 548     <td><code>projectnumber</code></td>
 
 549     <td>Projektnummer</td>
 
 552     <td><code>qty</code></td>
 
 556     <td><code>runningnumber</code></td>
 
 557     <td>Position auf der Rechnung (1, 2, 3...)</td>
 
 560     <td><code>sellprice</code></td>
 
 561     <td>Verkaufspreis</td>
 
 564     <td><code>serialnumber</code></td>
 
 565     <td>Seriennummer</td>
 
 568     <td><code>unit</code></td>
 
 574  <h3><a name="invoice_zahlungen">
 
 575    Variablen für die einzelnen Zahlungseingänge:</a></h3>
 
 579    <tr><th>Variablenname</th><th>Bedeutung</th></tr>
 
 581     <td><code>datepaid</code></td>
 
 585     <td><code>memo</code></td>
 
 589     <td><code>paid</code></td>
 
 593     <td><code>source</code></td>
 
 597     <td><code>exchangerate</code></td>
 
 601     <td><code>forex</code></td>
 
 607  <small><a href="latex-template-variablen.html#inhaltsverzeichnis">
 
 608    zum Inhaltsverzeichnis</a></small><br>
 
 611  <h2><a name="anderevorlagen">
 
 612    Variablen in anderen Vorlagen</a></h2>
 
 614  <p>Die Variablen in anderen Vorlagen sind ähnlich wie in der
 
 615   Rechnung. Allerdings heißen die Variablen, die mit <code>inv</code>
 
 616   beginnen, jetzt anders. Bei den Angeboten fangen sie mit <code>quo</code>
 
 617   für "quotation" an: <code>quodate</code> für Angebotsdatum
 
 618   etc. Bei Bestellungen wiederum fangen sie mit <code>ord</code> für
 
 619   "order" an: <code>ordnumber</code> für Bestellnummer etc.</p>
 
 621  <p>Manche Variablen sind in anderen Vorlagen hingegen gar nicht vorhanden wie
 
 622   z.B. die für bereits verbuchte Zahlungseingänge. Dies sind
 
 623   Variablen, die vom Geschäftsablauf her in der entsprechenden Vorlage
 
 624   keine Bedeutung haben oder noch nicht belegt sein können.</p>
 
 626  <small><a href="latex-template-variablen.html#inhaltsverzeichnis">
 
 627    zum Inhaltsverzeichnis</a></small><br>
 
 630  <h2><a name="bloecke">
 
 631    Blöcke, bedingte Anweisungen und Schleifen</a></h2>
 
 633  <p>Der Parser kennt neben den Variablen einige weitere Konstrukte, die
 
 634   gesondert behandelt werden. Diese sind wie Variablennamen in spezieller
 
 635   Weise markiert: <code><%anweisung%></code></p>
 
 637  <p><b>Achtung: Blöcke können momentan nicht verschachtelt
 
 638    werden.</b> Das bedeutet, dass innerhalb einer
 
 639    <code><%foreach%></code>-Schleife keine
 
 640    <code><%if%></code>-Abfragen verwendet werden können. Dieses
 
 641    kann man aber mit LaTeX-Bordmitteln selber nachgebildet werden. Dazu muss
 
 642    im Vorspann das Paket <code>ifthen</code> eingebunden werden. Das Konstrukt
 
 643    selber sieht dann wie folgt aus:</p>
 
 645  <p class="blue"><code>\ifthenelse{\equal{<%variable%>}{}}{}{Dieser
 
 646    Text erscheint nur, wenn <%variable%> nicht leer ist.}</code></p>
 
 648  <h3><a name="bloecke_include">Die <code>include</code>-Anweisung</a></h3>
 
 650  <p class="blue"><code><%include dateiname.ext%></code></p>
 
 652  <p>Fügt den Inhalt einer Datei an der entsprechenden Stelle ein. Der
 
 653   eingefügte Text wird ganz normal durch den Parser behandelt und kann
 
 654   Variablen und Blöcke enthalten.</p>
 
 656  <h3><a name="bloecke_ifnot">Der <code>if not</code>-Block</a></h3>
 
 658  <p class="blue"><code><%if not variablenname%><br>
 
 660    <%end if></code></p>
 
 662  <p>Eine normale "if-not-then"-Bedingung. Die Zeilen zwischen dem "if not" und
 
 663   dem "end" werden nur ausgegeben, wenn die Variable "variablenname" nicht
 
 664   gesetzt oder gleich 0 ist.</p>
 
 666  <h3><a name="bloecke_if">Der <code>if</code>-Block</a></h3>
 
 668  <p class="blue"><code><%if variablenname%><br>
 
 670    <%end if></code></p>
 
 672  <p>Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if" und dem
 
 673   "end" werden nur ausgegeben, wenn die Variable "variablenname" gesetzt und
 
 676  <h3><a name="bloecke_foreach">Die <code>foreach</code>-Schleife</a></h3>
 
 678  <p class="blue"><code><%foreach variablenname%><br>
 
 680    <%end foreach></code></p>
 
 682  <p>Fügt die Zeilen zwischen den beiden Anweisungen so oft ein, wie das
 
 683   Perl-Array der Variablen "variablenname" Elemente enthät. Dieses
 
 684   Konstrukt wird zur Ausgabe der einzelnen Posten einer Rechnung / eines
 
 685   Angebots sowie zur Ausgabe der Steuern benutzt. In jedem Durchlauf werden
 
 686   die <a href="latex-template-variablen.html#invoice_posten">zeilenbezogenen
 
 687   Variablen</a> jeweils auf den Wert für die aktuelle Position
 
 690  <p>Die Syntax sieht normalerweise wie folgt aus:</p>
 
 692  <p class="blue"><code><%foreach number%><br>
 
 693    Position: <%runningnumber%><br>
 
 694    Anzahl: <%qty%><br>
 
 695    Artikelnummer: <%number%><br>
 
 696    Beschreibung: <%description%><br>
 
 698    <%end foreach></code></p>
 
 700  <h3><a name="bloecke_pagebreak">Der <code>pagebreak</code>-Block</a></h3>
 
 702  <p class="blue"><code><%pagebreak ZpZ ZeS ZzS%><br>
 
 704    <%end pagebreak%></code></p>
 
 706  <p>Dieser Block legt das Verhalten beim manuellen Einfügen eines
 
 707   Seitenumbruchs fest. Normalerweise bricht LaTeX die Seiten selber um. Beim
 
 708   Rechnungsdruck ist das oft nicht gewünscht, oder man möchte im
 
 709   Falle eines Seitenumbruchs den Übertrag etc. mit ausgeben. Deswegen
 
 710   versucht der Parser, manuell Seitenumbrüche einzufügen,
 
 711   während er einen <code>foreach</code>-Block auswertet, weil hier die
 
 712   manuellen Seitenumbrüche erforderlich werden. Dafür benötigt
 
 713   der Parser aber drei Informationen:</p>
 
 717    <li>Wieviele Zeichen passen bei der Variablen "description" pro Posten
 
 718     in eine Zeile? Das ist der Parameter "ZpZ" (Zeichen pro Zeile).</li>
 
 719    <li>Wieviele Zeilen/Posten passen auf die erste Seite? Das
 
 720     ist der Parameter "ZeS" (Zeilen erste Seite).</li>
 
 721    <li>Wieviele Zeilen/Posten passen auf die zweite und alle nachfolgenden
 
 722     Seiten? Das ist der Parameter "ZzS" (Zeilen zweite Seite).</li>
 
 726  <p>Diese Parameter sind drei Zahlen, die manuell durch Verwendung von langen
 
 727   Warenbezeichnungen und Rechnungen mit vielen Posten bestimmt werden
 
 730  <p>Üblicherweise wird in diesem Block zuerst die aktuelle Tabelle
 
 731   geschlossen, eventuell Text eingefügt (z.B. "Fortsetzung auf der
 
 732   nächsten Seite"), dann ein Seitenumbruch erzwungen, eventuell Text
 
 733   eingefügt (z.B. "Übertrag von der vorherigen Seite:
 
 734   <%sumcarriedforward%> EUR") und die Tabelle wieder geöffnet.</p>
 
 736  <p>Wird kein manueller Seitenumbruch gewüscht, so kann dieser Block
 
 737   komplett entfallen.</p>
 
 739  <small><a href="latex-template-variablen.html#inhaltsverzeichnis">
 
 740    zum Inhaltsverzeichnis</a></small><br>