Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision d575e646

Von Moritz Bunkus vor fast 12 Jahren hinzugefügt

Doku: Updates bzgl. Stil, Rechtschreibung, XML-/Docbook-Konformität

Unterschiede anzeigen:

doc/dokumentation.xml
565 565
            bestimmte Eingaben von kivitendo. Falls es Probleme mit Umlauten in Ihrere Installation gibt, muss zwingend Version 0.68 oder
566 566
            aber Version 0.72 und neuer eingesetzt werden.</para>
567 567

  
568
            <para>Mit CPAN lässt sie sich die Vorgängerversion wie folgt
568
            <para>Mit <ulink url="http://www.cpan.org">CPAN</ulink> lässt sie sich die Vorgängerversion wie folgt
569 569
            installieren:</para>
570 570

  
571 571
            <programlisting>force install M/MS/MSTROUT/FCGI-0.68.tar.gz</programlisting>
......
1312 1312
    <sect1 id="Drucken-mit-kivitendo">
1313 1313
      <title>Drucken mit kivitendo</title>
1314 1314

  
1315
      <para>Das Drucksystem von kivitendo benutzt von Haus aus LaTeX Vorlagen.
1316
      Um drucken zu können, braucht der Server ein geeignetes LaTeX System. Am
1317
      einfachsten ist dazu eine <literal>texlive</literal> Installation. Unter
1318
      Debianoiden Betriebssystemen installiert man die Pakete mit:</para>
1315
      <para>Das Drucksystem von kivitendo benutzt von Haus aus LaTeX-Vorlagen.  Um drucken zu können, braucht der Server ein geeignetes
1316
      LaTeX System. Am einfachsten ist dazu eine <literal>texlive</literal> Installation. Unter Debianoiden Betriebssystemen installiert man
1317
      die Pakete mit:</para>
1319 1318

  
1320
      <para><programlisting>aptitude install \
1321
      texlive-base-bin \
1322
texlive-latex-recommended \
1323
texlive-fonts-recommended \
1324
texlive-latex-extra \
1325
texlive-lang-german \
1326
texlive-generic-extra
1327
      </programlisting></para>
1319
      <para><programlisting>aptitude install texlive-base-bin texlive-latex-recommended texlive-fonts-recommended \
1320
  texlive-latex-extra texlive-lang-german texlive-generic-extra</programlisting></para>
1328 1321

  
1329
      <para>TODO: rpm Pakete.</para>
1322
      <para>TODO: RPM-Pakete.</para>
1330 1323

  
1331
      <para>kivitendo bringt 3 alternative Vorlagensätze mit:</para>
1332
        <itemizedlist>
1333
          <listitem>Standard</listitem>
1334
          <listitem>f-tex</listitem>
1335
          <listitem>RB</listitem>
1336
        </itemizedlist>
1324
      <para>kivitendo bringt drei alternative Vorlagensätze mit:</para>
1325
      <itemizedlist>
1326
        <listitem><para>Standard</para></listitem>
1327
        <listitem><para>f-tex</para></listitem>
1328
        <listitem><para>RB</para></listitem>
1329
      </itemizedlist>
1337 1330

  
1338 1331
      <sect2 id="Vorlagenverzeichnis-anlegen" xreflabel="Vorlagenverzeichnis anlegen">
1339 1332
        <title>Vorlagenverzeichnis anlegen</title>
1340
        <para>Bei einem neuen Benutzer/Mandanten lässt sich einer dieser Vorlagensätze
1341
        als Basis für die zu druckenden Dokumente auswählen:</para>
1333
        <para>Im Administrationsbereich lässt sich bei einem Benutzer/Mandanten einer dieser Vorlagensätze als Basis für die zu
1334
        druckenden Dokumente auswählen. Rufen Sie dazu die <guimenu>Benutzerverwaltung</guimenu> auf.</para>
1335

  
1336
        <para>Wählen Sie dort einen Benutzer aus oder legen Sie einen neuen an. In der Benutzerbearbeiten-Maske müssen Sie zwei Dinge
1337
        angeben:</para>
1338

  
1339
        <orderedlist>
1340
          <listitem><para><option>Name</option>: Der Verzeichnisname für den neuen Vorlagensatz. Dieser kann im Rahmen der üblichen
1341
          Bedingungen für Verzeichnisnamen frei gewählt werden.</para></listitem>
1342
          <listitem><para><option>Vorlagen auswählen</option>: Wählen Sie hier den Vorlagensatz aus, der kopiert werden soll
1343
          (<filename>Standard</filename>, <filename>f-tex</filename> oder <filename>RB</filename>.)</para></listitem>
1344
        </orderedlist>
1342 1345

  
1343
        <para><programlisting>unter:
1344
Administration -> Benutzerverwaltung -> [ein Benutzer]
1345
   Erzeuge Vorlagen, Name: [Name für das neue Vorlagenverzeichnis]
1346
   Vorlagen auswählen: [Default, f-tex oder RB]
1347
   -> Speichern
1348
        </programlisting></para>
1349
        <para>der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Benutzern verwendet werden.</para>
1346
        <para>Der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Benutzern verwendet werden.</para>
1350 1347

  
1351 1348
        <para>Die Abhängigkeiten kann man prüfen mit:</para>
1352
        <para><programlisting>/scripts/installation_check.pl -l</programlisting></para>
1349

  
1350
        <programlisting>/scripts/installation_check.pl -l</programlisting>
1353 1351

  
1354 1352
      </sect2>
1355
      <sect2 id="Standard">
1356
        <title>Default</title>
1353
      <sect2 id="Vorlagen-Standard">
1354
        <title>Standard</title>
1357 1355

  
1358
        <para>Der standard Vorlagensatz von Kivitendo. Wie unter
1359
        <ulink url="http://demo.kivitendo.org">http://demo.kivitendo.org</ulink> zu sehen.</para>
1356
        <para>Der Standard-Vorlagensatz von Kivitendo. Wie unter <ulink url="http://demo.kivitendo.org">http://demo.kivitendo.org</ulink> zu
1357
        sehen.</para>
1360 1358

  
1361 1359
      </sect2>
1362 1360

  
1363 1361
      <sect2 id="f-tex">
1364 1362
        <title>f-tex</title>
1365 1363

  
1366
        <para>Ein Vorlagensatz, der in Wenigen Minuten alle Dokumente zur stellt.</para>
1364
        <para>Ein Vorlagensatz, der in wenigen Minuten alle Dokumente zur Verfügung stellt.</para>
1367 1365

  
1368 1366
        <sect3 id="f-tex-Feature-Übersicht">
1369
          <title>f-tex Feature Übersicht</title>
1367
          <title>Feature-Übersicht</title>
1370 1368
          <itemizedlist>
1371
            <listitem>Keine Retundanz. Es wird ein und die selbe Latex-Vorlage für alle
1372
            briefartigen Dokumente verwendet. Also Angebot, Rechnung,
1373
            Performarechnung, Lieferschein, aber eben nicht für Paketaufkleber
1374
            etc.. </listitem>
1375
            <listitem>Leichte Anpassung an das Firmen Layout durch verwendung eines Hintergrund-PDF
1376
            dieses kann leicht mit dem eigenen Lieblingsprogramm erstellt werden
1377
            (Openoffice, Inkscape, Gimp, Adobe*)
1378
            </listitem>
1379
            <listitem>Hintergrundpdf um schaltbar auf "nur erste Seite" (default) oder "alle Seiten"
1380
            (option "bgPdfFirstPageOnly" in Datei letter.lco)
1381
            </listitem>
1382
            <listitem>Hintergrundpdf für Ausdruck auf bereits bedrucktem Briefpapier Abschaltbar,
1383
            es wird dann nur bei per email versendeten Dokumenten eingebunden.
1384
            (Option "bgPdfEmailOnly" in Datei letter.lco)
1385
            </listitem>
1386
            <listitem>Nutzung der Layout-Funktionen von Latex für Seitenumbruch,
1387
            wiederholung von Kopfzeilen, Zwischensummen etc. (danke an Kai-Martin für
1388
            die Vorarbeit)
1389
            </listitem>
1390
            <listitem>Anzeige des Empfängerlandes im Adressfeld nur, wenn es vom Land des
1391
            eigenen Unternehmens abweicht (also die Rechnung das Land verlässt).
1392
            </listitem>
1393
            <listitem>Multisprachfähig leicht um weitere Sprachen zu erweitern, alle
1394
            Übersetzungen in der Datei translatinos.tex.
1395
            </listitem>
1396
            <listitem>Auflistung von Bruttopreisen für Endverbraucher.
1397
            </listitem>
1369
            <listitem><para>Keine Redundanz. Es wird ein- und dieselbe LaTeX-Vorlage für alle briefartigen Dokumente verwendet. Also
1370
            Angebot, Rechnung, Performarechnung, Lieferschein, aber eben nicht für Paketaufkleber etc..</para></listitem>
1371

  
1372
            <listitem><para>Leichte Anpassung an das Firmen-Layout durch verwendung eines Hintergrund-PDF. Dieses kann leicht mit dem
1373
            eigenen Lieblingsprogramm erstellt werden (Openoffice, Inkscape, Gimp, Adobe*)</para></listitem>
1374

  
1375
            <listitem><para>Hintergrund-PDF umschaltbar auf "nur erste Seite" (Standard) oder "alle Seiten" (Option
1376
            "<option>bgPdfFirstPageOnly</option>" in Datei <filename>letter.lco</filename>)</para></listitem>
1377

  
1378
            <listitem><para>Hintergrund-PDF für Ausdruck auf bereits bedrucktem Briefpapier abschaltbar. Es wird dann nur bei per E-Mail
1379
            versendeten Dokumenten eingebunden (Option "<option>bgPdfEmailOnly</option>" in Datei
1380
            <filename>letter.lco</filename>).</para></listitem>
1381

  
1382
            <listitem><para>Nutzung der Layout-Funktionen von LaTeX für Seitenumbruch, Wiederholung von Kopfzeilen, Zwischensummen
1383
            etc. (danke an Kai-Martin Knaak für die Vorarbeit)</para></listitem>
1384

  
1385
            <listitem><para>Anzeige des Empfängerlandes im Adressfeld nur, wenn es vom Land des eigenen Unternehmens abweicht (also die
1386
            Rechnung das Land verlässt).</para></listitem>
1387

  
1388
            <listitem><para>Multisprachfähig leicht um weitere Sprachen zu erweitern, alle Übersetzungen in der Datei
1389
            <filename>translatinos.tex</filename>.</para></listitem>
1390

  
1391
            <listitem><para>Auflistung von Bruttopreisen für Endverbraucher.</para></listitem>
1398 1392
          </itemizedlist>
1399 1393
        </sect3>
1400 1394

  
1401
        <sect3 id="f-tex-installation">
1402
          <title>f-tex Die Installation</title>
1395
        <sect3 id="f-tex-Installation">
1396
          <title>Die Installation</title>
1403 1397
          <itemizedlist>
1404
            <listitem>Vorlagenverzeichnis mit Option f-tex anlegen, siehe:
1405
              <xref linkend="Vorlagenverzeichnis-anlegen"/>
1406
              Das Vorlagensystem funktioniert jetzt schon, hat allerdings noch einen
1407
              Beispiel Briefkopf
1408
            </listitem>
1409
            <listitem>
1410
              Erstelle eine pdf-Hintergrund Datei und verlinke sie nach
1411
              <programlisting>./letter_head.pdf</programlisting>
1412
            </listitem>
1413
            <listitem>
1414
              Editiere den Bereich "settings" in der datei letter.lco
1415
            </listitem>
1398
            <listitem><para>Vorlagenverzeichnis mit Option f-tex anlegen, siehe: <xref linkend="Vorlagenverzeichnis-anlegen"/>. Das
1399
            Vorlagensystem funktioniert jetzt schon, hat allerdings noch einen Beispiel-Briefkopf.</para></listitem>
1400

  
1401
            <listitem><para>Erstelle eine pdf-Hintergrund Datei und verlinke sie nach <filename>./letter_head.pdf</filename>.</para></listitem>
1402
            <listitem><para>Editiere den Bereich "<option>settings</option>" in der datei <filename>letter.lco</filename>.</para></listitem>
1416 1403
          </itemizedlist>
1417 1404

  
1418 1405
          <para>oder etwas Detaillierter:</para>
1419 1406

  
1420 1407
          <para>
1421
            Es wird eine Datei sample.lco erstellt und diese nach letter.lco verlinkt.
1422
            Eigentlich ist dies die Datei die für die Firmenspezifischen Anpassungen
1423
            gedacht ist.  Da die Einstiegshürde in LaTeX nicht ganz niedrig ist, wird in
1424
            dieser Datei auf ein Hintergrundpdf verwiesen. Ich empfehle über dieses pdf
1425
            die persönlichen Layoutanpassungen vorzunehmen und sample.lco unverändert zu
1426
            lassen. Die die Anpassung über eine *.lco Datei die letztlich auf letter.lco
1427
            verlinkt ist ist aber auch möglich.
1408
            Es wird eine Datei <filename>sample.lco</filename> erstellt und diese nach <filename>letter.lco</filename> verlinkt.  Eigentlich
1409
            ist dies die Datei die für die Firmenspezifischen Anpassungen gedacht ist.  Da die Einstiegshürde in LaTeX nicht ganz niedrig
1410
            ist, wird in dieser Datei auf ein Hintergrundpdf verwiesen. Ich empfehle über dieses PDF die persönlichen Layoutanpassungen
1411
            vorzunehmen und <filename>sample.lco</filename> unverändert zu lassen. Die die Anpassung über eine
1412
            <filename>*.lco</filename>-Datei die letztlich auf <filename>letter.lco</filename> verlinkt ist ist aber auch möglich.
1428 1413
          </para>
1414

  
1429 1415
          <para>
1430
            Es wird eine Datei sample_head.pdf mit ausgeliefert, diese wird nach
1431
            letter_head.pdf verlinkt. Damit gibt es schon mal eine Funktionsfähige
1432
            Vorlage. Schau Dir nach Abschluss der Installation die Datei sample_haed.pdf
1433
            an und erstelle ein entsprechendes pdf passend zum Briefkopf Deiner Firma,
1434
            diese dann im Template Verzeichniss ablegen und statt sample_head.pdf nach
1435
            letter_head.pdf verlinken.
1416
            Es wird eine Datei <filename>sample_head.pdf</filename> mit ausgeliefert, diese wird nach <filename>letter_head.pdf</filename>
1417
            verlinkt. Damit gibt es schon mal eine Funktionsfähige Vorlage. Schau Dir nach Abschluss der Installation die Datei
1418
            <filename>sample_haed.pdf</filename> an und erstelle ein entsprechendes PDF passend zum Briefkopf Deiner Firma, diese dann im
1419
            Template Verzeichniss ablegen und statt <filename>sample_head.pdf</filename> nach <filename>letter_head.pdf</filename>
1420
            verlinken.
1436 1421
          </para>
1422

  
1437 1423
          <para>
1438
            letzlich muss ./letter_head.pdf auf das passende Hintergrundpdf verweisen,
1439
            welches gewünschten Briefkopf enthält. Bei Updates oder nach erneutem
1424
            letzlich muss <filename>letter_head.pdf</filename> auf das passende Hintergrund-PDF verweisen, welches gewünschten Briefkopf
1425
            enthält. Bei Updates oder nach erneutem
1440 1426
          </para>
1427

  
1441 1428
          <para>
1442
            Es wird eine Datei mydata.tex.example ausgeliefert die nach mytdata.tex
1443
            verlinkt ist. Bei verwendetem Hintergrundpdf wird nur der Eintrag für das
1444
            Land verwendet die Datei muss  also nicht angefasst werden. Die Anderen Werte
1445
            sind für das Modul  lp (Label Print in erp - zur Zeit nicht im
1446
            öffentlichen Zweig).
1429
            Es wird eine Datei <filename>mydata.tex.example</filename> ausgeliefert, die nach <filename>mytdata.tex</filename> verlinkt
1430
            ist. Bei verwendetem Hintergrund-PDF wird nur der Eintrag für das Land verwendet. Die Datei muss also nicht angefasst
1431
            werden. Die Anderen Werte sind für das Modul 'lp' (Label Print in erp - zur Zeit nicht im öffentlichen Zweig).
1447 1432
          </para>
1448 1433
          <para>
1449
            Alle Anpassungen zum Briefkopf, Fusszeilen, Firmenlogos, etc.
1450
            sollten über die Hintergrund pdf datei oder die *.lco Datei erfolgen.
1434
            Alle Anpassungen zum Briefkopf, Fusszeilen, Firmenlogos, etc.  sollten über die Hintergrund-PDF-Datei oder die
1435
            <filename>*.lco</filename>-Datei erfolgen.
1451 1436
          </para>
1452 1437
        </sect3>
1438

  
1453 1439
        <sect3 id="f-tex-Funktionsübersicht">
1454 1440
          <title>f-tex Funktionsübersicht</title>
1455 1441
          <para>
1456
            Das Konzept von kivitendo sieht vor, für jedes Dokument
1457
            (Auftragsbestätigung, Lieferschein, Rechnung, etc.) eine
1458
            Latex-Vorlage vorzuhalten, dies ist sehr Wartungsunfreundlich. Auch
1459
            das Einlesen einer einheitlichen Quelle für den Briefkopf bringt nur
1460
            bedingte Vorteile, da hier leicht die Pflege der Artikel-Tabellen aus
1461
            dem Ruder läuft. Bei dem vorliegenden Ansatz wird für alle
1462
            Briefartigen Dokumente mit Artikel-Tabellen eine einheitliche
1463
            Latexvorlage verwendet, welche über Codeweichen die Besonderheiten
1464
            der jeweiligen Dokumente Berücksichtigt
1442
            Das Konzept von kivitendo sieht vor, für jedes Dokument (Auftragsbestätigung, Lieferschein, Rechnung, etc.) eine LaTeX-Vorlage
1443
            vorzuhalten, dies ist sehr Wartungsunfreundlich. Auch das Einlesen einer einheitlichen Quelle für den Briefkopf bringt nur
1444
            bedingte Vorteile, da hier leicht die Pflege der Artikel-Tabellen aus dem Ruder läuft. Bei dem vorliegenden Ansatz wird für alle
1445
            briefartigen Dokumente mit Artikel-Tabellen eine einheitliche LaTeX-Vorlage verwendet, welche über Codeweichen die
1446
            Besonderheiten der jeweiligen Dokumente Berücksichtigt.
1465 1447
          </para>
1448

  
1466 1449
          <itemizedlist>
1467
            <listitem>Tabellen mit oder ohne Preis
1468
            </listitem>
1469
            <listitem>Sprache der Tabellenüberschriften etc.
1470
            </listitem>
1471
            <listitem>Anpassung der Bezugs-Zeile (z.B. Rechnungsnummer versus
1472
               Angebotsnummer)
1473
            </listitem>
1474
            <listitem>Darstellung von Brutto oder Netto-Preisen in der Auflistung
1475
              (Endverbraucher versus Gewerblicher Kunde)
1476
            </listitem>
1450
            <listitem><para>Tabellen mit oder ohne Preis</para></listitem>
1451
            <listitem><para>Sprache der Tabellenüberschriften etc.</para></listitem>
1452
            <listitem><para>Anpassung der Bezugs-Zeile (z.B. Rechnungsnummer versus Angebotsnummer)</para></listitem>
1453
            <listitem><para>Darstellung von Brutto oder Netto-Preisen in der Auflistung (Endverbraucher versus Gewerblicher
1454
            Kunde)</para></listitem>
1477 1455
           </itemizedlist>
1478 1456

  
1479 1457
           <para>Nachteil:</para>
1458

  
1480 1459
           <para>
1481
             Latex hat ohnehin eine sehr steile Lehrnkurve. Die Datei letter.tex
1482
             ist sehr komplex und verstärkt damit diesen Effekt noch einmal erheblich.
1483
             Wer Latex-Erfahrung hat, oder geübt ist Scriptsparachen nachzuvollziehen kann
1484
             natürlich auch innerhalb der Tabellendarstellung gut persönliche Anpassungen
1485
             vornehmen. Aber man kann sich hier bei Veränderungen sehr schnell häftig in
1486
             den Fuss schiessen.
1487
           </para>
1488
           <para>Wer nicht so tief in die Materie einsteigen will oder leicht zu
1489
              frustrieren ist, sollte sein Hintergrund PDF auf Basis der mitglieferten
1490
              Datei sample_head.pdf erstellen, und sich an der Form der dargestellten Tabellen
1491
              wie sie ausgeliefert werden, erfreuen.
1460
             LaTeX hat ohnehin eine sehr steile Lehrnkurve. Die Datei <filename>letter.tex</filename> ist sehr komplex und verstärkt damit
1461
             diesen Effekt noch einmal erheblich.  Wer LaTeX-Erfahrung hat, oder geübt ist Scriptsparachen nachzuvollziehen kann natürlich
1462
             auch innerhalb der Tabellendarstellung gut persönliche Anpassungen vornehmen. Aber man kann sich hier bei Veränderungen sehr
1463
             schnell häftig in den Fuss schiessen.
1492 1464
           </para>
1493
           <para>Kleiner Tipp:
1494
             Nicht zu viel auf einmal wollen, lieber kleine kontinuierliche
1495
             Schritte gehen.
1465

  
1466
           <para>Wer nicht so tief in die Materie einsteigen will oder leicht zu frustrieren ist, sollte sein Hintergrund PDF auf Basis der
1467
           mitglieferten Datei <filename>sample_head.pdf</filename> erstellen, und sich an der Form der dargestellten Tabellen wie sie
1468
           ausgeliefert werden, erfreuen.
1496 1469
           </para>
1497 1470

  
1471
           <para>Kleiner Tipp: Nicht zu viel auf einmal wollen, lieber kleine kontinuierliche Schritte gehen.</para>
1498 1472

  
1499
           <para>Bruttopreise für Endvorbraucher</para>
1500
	   <para>Der auszuweisende Bruttopreis wird innerhalb der LaTeX
1501
             Umgebung berechnet.  es gibt zwar ein Feld um bei Aufträgen "alle Preise
1502
             Brutto" auszuwählen, aber:</para>
1473
        </sect3>
1474

  
1475
        <sect3 id="f-tex-Bruttopreise">
1476
          <title>Bruttopreise für Endverbraucher</title>
1477

  
1478
	         <para>Der auszuweisende Bruttopreis wird innerhalb der LaTeX-Umgebung berechnet. Es gibt zwar ein Feld, um bei Aufträgen "alle
1479
	         Preise Brutto" auszuwählen, aber:</para>
1503 1480
          <itemizedlist>
1504 1481
            <listitem>
1505
              hierfür müssen die Preise auch in Brutto in der Datenbank stehen
1506
              (ja - das lässt sich über die Preisgruppen und die Zuordung einer Default-Preisgruppe
1507
              handhaben)
1482
              <para>hierfür müssen die Preise auch in Brutto in der Datenbank stehen (ja - das lässt sich über die Preisgruppen und die
1483
              Zuordung einer Default-Preisgruppe handhaben)</para>
1508 1484
            </listitem>
1509 1485
            <listitem>
1510
              man darf beim Anlegen des Vorgangs nicht vergessen Dieses Häkchen zu setzen.
1511
               (das ist in der Praxis wenn man sowohl Endverbraucher- wie Gewerbekunden beliefert
1512
              der eigentliche Knackpunkt)
1486
              <para>man darf beim Anlegen des Vorgangs nicht vergessen Dieses Häkchen zu setzen.  (das ist in der Praxis wenn man sowohl
1487
              Endverbraucher- wie Gewerbekunden beliefert der eigentliche Knackpunkt)</para>
1513 1488
            </listitem>
1514 1489
          </itemizedlist>
1515 1490

  
1516 1491
          <para>
1517
            Es gibt mit f-tex eine weitere Alternative. Die Information ob Brutto oder
1518
            Nettorechnung wird mit den Zahlarten verknüpft. Zahlarten bei denen
1519
            Rechnungen, Angebote, etc, in Brutto ausgegeben werden sollen enden mit "_E"
1520
            (für Endverbraucher) Falls identische Zahlarten für Gewerbekunden und
1521
            Endverbraucher vorhanden sind legt man diese einfach doppelt an (einmal mit
1522
            der Namensendung "_E"). Gewinn:</para>
1523
          <itemizedlist>
1524
            <listitem>
1525
               die Entscheidung ob Netopreise ausgewiesen werden ist nicht mehr fix
1526
               mit einer Preisliste Verbunden.
1527
            </listitem>
1528
            <listitem>
1529
              die Default-Zahlart kann im Kundendatensatz hinterlegt werden und man
1530
              muss nicht mehr daran denken "alle Preise Netto" auszuwählen.
1531
            </listitem>
1532
            <listitem>
1533
              Die Entscheidung ob Netto/Oder Bruttopreise ausgewiesen werden kann direkt
1534
              beim Drucken reviediert werden, ohne dass sich der Auftragswert ändert.
1535
            </listitem>
1536
          </itemizedlist>
1492
            Es gibt mit f-tex eine weitere Alternative. Die Information ob Brutto oder Nettorechnung wird mit den Zahlarten
1493
            verknüpft. Zahlarten bei denen Rechnungen, Angebote, etc, in Brutto ausgegeben werden sollen, enden mit "_E" (für
1494
            Endverbraucher). Falls identische Zahlarten für Gewerbekunden und Endverbraucher vorhanden sind, legt man diese einfach doppelt
1495
            an (einmal mit der Namensendung "_E"). Gewinn:</para>
1537 1496

  
1538
          <para>Lieferadressen</para>
1539 1497
          <itemizedlist>
1540
            <listitem>
1541
              in Lieferscheinen kommen shipto* -Variablen im Adressfeld zum Einsatz
1542
            </listitem>
1543
            <listitem>
1544
              wenn die shipto*variable leer ist wird die entsprechende
1545
              Adressvariable eingesetzt.  Wenn Also die Lieferadresse in Strasse,
1546
              Hausnummer und Ort abweicht, müssen auch nur diese Felder in der
1547
              Lieferadresse ausgefüllt werden. Für den Firmenname wird der Wert der
1548
              Hauptadresse angezeigt.
1549
            </listitem>
1498
            <listitem><para>Die Entscheidung, ob Netopreise ausgewiesen werden, ist nicht mehr fix mit einer Preisliste Verbunden.</para></listitem>
1499
            <listitem><para>Die Default-Zahlart kann im Kundendatensatz hinterlegt werden, und man muss nicht mehr daran denken, "alle Preise
1500
            Netto" auszuwählen.</para></listitem>
1501
            <listitem><para>Die Entscheidung, ob Netto- oder Bruttopreise ausgewiesen werden, kann direkt beim Drucken reviediert werden,
1502
            ohne dass sich der Auftragswert ändert.</para></listitem>
1550 1503
          </itemizedlist>
1551 1504
        </sect3>
1552 1505

  
1506
        <sect3 id="f-tex-lieferadressen">
1507
          <title>Lieferadressen</title>
1508

  
1509
          <para>In Lieferscheinen kommen <varname>shipto*</varname>-Variablen im Adressfeld zum Einsatz. Wenn die
1510
          <varname>shipto*</varname>-Variable leer ist, wird die entsprechende Adressvariable eingesetzt.  Wenn also die Lieferadresse in
1511
          Straße, Hausnummer und Ort abweicht, müssen auch nur diese Felder in der Lieferadresse ausgefüllt werden. Für den Firmenname wird
1512
          der Wert der Hauptadresse angezeigt.
1513
          </para>
1514
        </sect3>
1553 1515
      </sect2>
1554 1516

  
1555
      <sect2 id="RB">
1517
      <sect2 id="Vorlagen-RB">
1556 1518
        <title>RB</title>
1557 1519

  
1558
        <para>Vollständiger Dokumentensatz mit alternativen Design</para>
1520
        <para>Vollständiger Dokumentensatz mit alternativem Design</para>
1559 1521

  
1560 1522
      </sect2>
1561 1523

  
1562
      <sect2 id="Allgemeine Hinweise zu LaTeX">
1524
      <sect2 id="allgemeine-hinweise-zu-latex">
1563 1525
        <title>Allgemeine Hinweise zu LaTeX Vorlagen</title>
1564 1526
        <para>In den allermeisten Installationen sollte drucken jetzt schon
1565 1527
        funktionieren. Sollte ein Fehler auftreten wirft TeX sehr lange
......
1575 1537
            Pakete.</para>
1576 1538
          </listitem>
1577 1539
          <listitem>
1578
            <para>! Package inputenc Error: Unicode char \u8:桜 not set up for
1540
            <para>! Package inputenc Error: Unicode char \u8:... set up for
1579 1541
            use with LaTeX. Dieser Fehler tritt auf, wenn sie versuchen mit
1580 1542
            einer Standardinstallation exotische utf8 Zeichen zu drucken.
1581 1543
            TeXLive unterstützt von Haus nur romanische Schriften und muss mit
......
5803 5765
        <itemizedlist>
5804 5766
          <listitem><para><literal>Test::Deep</literal> (Debian-Paketname: <literal>libtest-deep-perl</literal>; Fedora Core:
5805 5767
          <literal>perl-Test-Deep</literal>; openSuSE: <literal>perl-Test-Deep</literal>)</para></listitem>
5768
          <listitem><para><literal>Test::Harness</literal> 3.0.0 oder höher. Dieses Modul ist ab Perl 5.10.1 Bestandteil der
5769
          Perl-Distribution und kann für frühere Versionen aus dem <ulink url="http://www.cpan.org">CPAN</ulink> bezogen
5770
          werden.</para></listitem>
5806 5771
        </itemizedlist>
5807 5772
      </sect2>
5808 5773

  
doc/html/ch02s05.html
44 44
          mod_fastcgi nicht mehr explizit eingegangen.</p><p>Als Perl Backend wird das Modul <code class="filename">FCGI.pm</code>
45 45
          verwendet.</p><div class="warning" title="Warnung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warnung]" src="../../../../system/docbook-xsl/images/warning.png"></td><th align="left">Warnung</th></tr><tr><td align="left" valign="top"><p>FCGI-Versionen ab 0.69 und bis zu 0.71 inklusive sind extrem strict in der Behandlung von Unicode, und verweigern
46 46
            bestimmte Eingaben von kivitendo. Falls es Probleme mit Umlauten in Ihrere Installation gibt, muss zwingend Version 0.68 oder
47
            aber Version 0.72 und neuer eingesetzt werden.</p><p>Mit CPAN lässt sie sich die Vorgängerversion wie folgt
47
            aber Version 0.72 und neuer eingesetzt werden.</p><p>Mit <a class="ulink" href="http://www.cpan.org" target="_top">CPAN</a> lässt sie sich die Vorgängerversion wie folgt
48 48
            installieren:</p><pre class="programlisting">force install M/MS/MSTROUT/FCGI-0.68.tar.gz</pre></td></tr></table></div></div><div class="sect3" title="2.5.2.4. Konfiguration des Webservers"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.Konfiguration"></a>2.5.2.4. Konfiguration des Webservers</h4></div></div></div><p>Bevor Sie versuchen, eine kivitendo Installation unter FCGI
49 49
          laufen zu lassen, empfliehlt es sich die Installation ersteinmal
50 50
          unter CGI aufzusetzen. FCGI macht es nicht einfach Fehler zu
doc/html/ch02s06.html
29 29
        Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
30 30
        einzubinden. Da das bei neueren Linux-Distributionen aber nicht
31 31
        zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
32
        anstelle eines symbolischen Links verwendet werden können.</p><div class="sect3" title="2.6.2.1. SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e776"></a>2.6.2.1. SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora
32
        anstelle eines symbolischen Links verwendet werden können.</p><div class="sect3" title="2.6.2.1. SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e779"></a>2.6.2.1. SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora
33 33
          Core)</h4></div></div></div><p>Kopieren Sie die Datei
34 34
          <code class="filename">scripts/boot/system-v/kivitendo-server</code>
35 35
          nach <code class="filename">/etc/init.d/kivitendo-server</code>. Passen
......
40 40
insserv kivitendo-task-server</pre></li><li class="listitem"><p>OpenSuSE und Fedora Core:</p><pre class="programlisting">chkconfig --add kivitendo-task-server</pre></li></ul></div><p>Danach kann der Task-Server mit dem folgenden Befehl gestartet
41 41
          werden: <span class="command"><strong>/etc/init.d/kivitendo-task-server
42 42
          start</strong></span>
43
               </p></div><div class="sect3" title="2.6.2.2. Upstart-basierende Systeme (z.B. Ubuntu)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e806"></a>2.6.2.2. Upstart-basierende Systeme (z.B. Ubuntu)</h4></div></div></div><p>Kopieren Sie die Datei
43
               </p></div><div class="sect3" title="2.6.2.2. Upstart-basierende Systeme (z.B. Ubuntu)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e809"></a>2.6.2.2. Upstart-basierende Systeme (z.B. Ubuntu)</h4></div></div></div><p>Kopieren Sie die Datei
44 44
          <code class="filename">scripts/boot/upstart/kivitendo-task-server.conf</code>
45 45
          nach <code class="filename">/etc/init/kivitendo-task-server.conf</code>.
46 46
          Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
doc/html/ch02s10.html
1 1
<html><head>
2 2
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
3
   <title>2.10. Drucken mit kivitendo</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s09.html" title="2.9. E-Mail-Versand aus kivitendo heraus"><link rel="next" href="ch02s11.html" title="2.11. OpenDocument-Vorlagen"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.10. Drucken mit kivitendo</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s09.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s11.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.10. Drucken mit kivitendo"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Drucken-mit-kivitendo"></a>2.10. Drucken mit kivitendo</h2></div></div></div><p>Das Drucksystem von kivitendo benutzt von Haus aus LaTeX Vorlagen.
4
      Um drucken zu können, braucht der Server ein geeignetes LaTeX System. Am
5
      einfachsten ist dazu eine <code class="literal">texlive</code> Installation. Unter
6
      Debianoiden Betriebssystemen installiert man die Pakete mit:</p><p>
7
            </p><pre class="programlisting">aptitude install \
8
      texlive-base-bin \
9
texlive-latex-recommended \
10
texlive-fonts-recommended \
11
texlive-latex-extra \
12
texlive-lang-german \
13
texlive-generic-extra
14
      </pre><p>
15
         </p><p>TODO: rpm Pakete.</p><p>kivitendo bringt 3 alternative Vorlagensätze mit:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">Standard</li><li class="listitem">f-tex</li><li class="listitem">RB</li></ul></div><div class="sect2" title="2.10.1. Vorlagenverzeichnis anlegen"><div class="titlepage"><div><div><h3 class="title"><a name="Vorlagenverzeichnis-anlegen"></a>2.10.1. Vorlagenverzeichnis anlegen</h3></div></div></div><p>Bei einem neuen Benutzer/Mandanten lässt sich einer dieser Vorlagensätze
16
        als Basis für die zu druckenden Dokumente auswählen:</p><p>
17
               </p><pre class="programlisting">unter:
18
Administration -&gt; Benutzerverwaltung -&gt; [ein Benutzer]
19
   Erzeuge Vorlagen, Name: [Name für das neue Vorlagenverzeichnis]
20
   Vorlagen auswählen: [Default, f-tex oder RB]
21
   -&gt; Speichern
22
        </pre><p>
23
            </p><p>der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Benutzern verwendet werden.</p><p>Die Abhängigkeiten kann man prüfen mit:</p><p>
24
               </p><pre class="programlisting">/scripts/installation_check.pl -l</pre><p>
25
            </p></div><div class="sect2" title="2.10.2. Default"><div class="titlepage"><div><div><h3 class="title"><a name="Standard"></a>2.10.2. Default</h3></div></div></div><p>Der standard Vorlagensatz von Kivitendo. Wie unter
26
        <a class="ulink" href="http://demo.kivitendo.org" target="_top">http://demo.kivitendo.org</a> zu sehen.</p></div><div class="sect2" title="2.10.3. f-tex"><div class="titlepage"><div><div><h3 class="title"><a name="f-tex"></a>2.10.3. f-tex</h3></div></div></div><p>Ein Vorlagensatz, der in Wenigen Minuten alle Dokumente zur stellt.</p><div class="sect3" title="2.10.3.1. f-tex Feature Übersicht"><div class="titlepage"><div><div><h4 class="title"><a name="f-tex-Feature-%C3%9Cbersicht"></a>2.10.3.1. f-tex Feature Übersicht</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">Keine Retundanz. Es wird ein und die selbe Latex-Vorlage für alle
27
            briefartigen Dokumente verwendet. Also Angebot, Rechnung,
28
            Performarechnung, Lieferschein, aber eben nicht für Paketaufkleber
29
            etc.. </li><li class="listitem">Leichte Anpassung an das Firmen Layout durch verwendung eines Hintergrund-PDF
30
            dieses kann leicht mit dem eigenen Lieblingsprogramm erstellt werden
31
            (Openoffice, Inkscape, Gimp, Adobe*)
32
            </li><li class="listitem">Hintergrundpdf um schaltbar auf "nur erste Seite" (default) oder "alle Seiten"
33
            (option "bgPdfFirstPageOnly" in Datei letter.lco)
34
            </li><li class="listitem">Hintergrundpdf für Ausdruck auf bereits bedrucktem Briefpapier Abschaltbar,
35
            es wird dann nur bei per email versendeten Dokumenten eingebunden.
36
            (Option "bgPdfEmailOnly" in Datei letter.lco)
37
            </li><li class="listitem">Nutzung der Layout-Funktionen von Latex für Seitenumbruch,
38
            wiederholung von Kopfzeilen, Zwischensummen etc. (danke an Kai-Martin für
39
            die Vorarbeit)
40
            </li><li class="listitem">Anzeige des Empfängerlandes im Adressfeld nur, wenn es vom Land des
41
            eigenen Unternehmens abweicht (also die Rechnung das Land verlässt).
42
            </li><li class="listitem">Multisprachfähig leicht um weitere Sprachen zu erweitern, alle
43
            Übersetzungen in der Datei translatinos.tex.
44
            </li><li class="listitem">Auflistung von Bruttopreisen für Endverbraucher.
45
            </li></ul></div></div><div class="sect3" title="2.10.3.2. f-tex Die Installation"><div class="titlepage"><div><div><h4 class="title"><a name="f-tex-installation"></a>2.10.3.2. f-tex Die Installation</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">Vorlagenverzeichnis mit Option f-tex anlegen, siehe: 
46
              <a class="xref" href="ch02s10.html#Vorlagenverzeichnis-anlegen" title="2.10.1. Vorlagenverzeichnis anlegen">Vorlagenverzeichnis anlegen</a>
47
              Das Vorlagensystem funktioniert jetzt schon, hat allerdings noch einen
48
              Beispiel Briefkopf
49
            </li><li class="listitem">
50
              Erstelle eine pdf-Hintergrund Datei und verlinke sie nach
51
              <pre class="programlisting">./letter_head.pdf</pre></li><li class="listitem">
52
              Editiere den Bereich "settings" in der datei letter.lco
53
            </li></ul></div><p>oder etwas Detaillierter:</p><p>
54
            Es wird eine Datei sample.lco erstellt und diese nach letter.lco verlinkt.
55
            Eigentlich ist dies die Datei die für die Firmenspezifischen Anpassungen
56
            gedacht ist.  Da die Einstiegshürde in LaTeX nicht ganz niedrig ist, wird in
57
            dieser Datei auf ein Hintergrundpdf verwiesen. Ich empfehle über dieses pdf
58
            die persönlichen Layoutanpassungen vorzunehmen und sample.lco unverändert zu
59
            lassen. Die die Anpassung über eine *.lco Datei die letztlich auf letter.lco
60
            verlinkt ist ist aber auch möglich.
3
   <title>2.10. Drucken mit kivitendo</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s09.html" title="2.9. E-Mail-Versand aus kivitendo heraus"><link rel="next" href="ch02s11.html" title="2.11. OpenDocument-Vorlagen"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.10. Drucken mit kivitendo</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s09.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s11.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.10. Drucken mit kivitendo"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Drucken-mit-kivitendo"></a>2.10. Drucken mit kivitendo</h2></div></div></div><p>Das Drucksystem von kivitendo benutzt von Haus aus LaTeX-Vorlagen.  Um drucken zu können, braucht der Server ein geeignetes
4
      LaTeX System. Am einfachsten ist dazu eine <code class="literal">texlive</code> Installation. Unter Debianoiden Betriebssystemen installiert man
5
      die Pakete mit:</p><p>
6
            </p><pre class="programlisting">aptitude install texlive-base-bin texlive-latex-recommended texlive-fonts-recommended \
7
  texlive-latex-extra texlive-lang-german texlive-generic-extra</pre><p>
8
         </p><p>TODO: RPM-Pakete.</p><p>kivitendo bringt drei alternative Vorlagensätze mit:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Standard</p></li><li class="listitem"><p>f-tex</p></li><li class="listitem"><p>RB</p></li></ul></div><div class="sect2" title="2.10.1. Vorlagenverzeichnis anlegen"><div class="titlepage"><div><div><h3 class="title"><a name="Vorlagenverzeichnis-anlegen"></a>2.10.1. Vorlagenverzeichnis anlegen</h3></div></div></div><p>Im Administrationsbereich lässt sich bei einem Benutzer/Mandanten einer dieser Vorlagensätze als Basis für die zu
9
        druckenden Dokumente auswählen. Rufen Sie dazu die <span class="guimenu">Benutzerverwaltung</span> auf.</p><p>Wählen Sie dort einen Benutzer aus oder legen Sie einen neuen an. In der Benutzerbearbeiten-Maske müssen Sie zwei Dinge
10
        angeben:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
11
                     <code class="option">Name</code>: Der Verzeichnisname für den neuen Vorlagensatz. Dieser kann im Rahmen der üblichen
12
          Bedingungen für Verzeichnisnamen frei gewählt werden.</p></li><li class="listitem"><p>
13
                     <code class="option">Vorlagen auswählen</code>: Wählen Sie hier den Vorlagensatz aus, der kopiert werden soll
14
          (<code class="filename">Standard</code>, <code class="filename">f-tex</code> oder <code class="filename">RB</code>.)</p></li></ol></div><p>Der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Benutzern verwendet werden.</p><p>Die Abhängigkeiten kann man prüfen mit:</p><pre class="programlisting">/scripts/installation_check.pl -l</pre></div><div class="sect2" title="2.10.2. Standard"><div class="titlepage"><div><div><h3 class="title"><a name="Vorlagen-Standard"></a>2.10.2. Standard</h3></div></div></div><p>Der Standard-Vorlagensatz von Kivitendo. Wie unter <a class="ulink" href="http://demo.kivitendo.org" target="_top">http://demo.kivitendo.org</a> zu
15
        sehen.</p></div><div class="sect2" title="2.10.3. f-tex"><div class="titlepage"><div><div><h3 class="title"><a name="f-tex"></a>2.10.3. f-tex</h3></div></div></div><p>Ein Vorlagensatz, der in wenigen Minuten alle Dokumente zur Verfügung stellt.</p><div class="sect3" title="2.10.3.1. Feature-Übersicht"><div class="titlepage"><div><div><h4 class="title"><a name="f-tex-Feature-%C3%9Cbersicht"></a>2.10.3.1. Feature-Übersicht</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Keine Redundanz. Es wird ein- und dieselbe LaTeX-Vorlage für alle briefartigen Dokumente verwendet. Also
16
            Angebot, Rechnung, Performarechnung, Lieferschein, aber eben nicht für Paketaufkleber etc..</p></li><li class="listitem"><p>Leichte Anpassung an das Firmen-Layout durch verwendung eines Hintergrund-PDF. Dieses kann leicht mit dem
17
            eigenen Lieblingsprogramm erstellt werden (Openoffice, Inkscape, Gimp, Adobe*)</p></li><li class="listitem"><p>Hintergrund-PDF umschaltbar auf "nur erste Seite" (Standard) oder "alle Seiten" (Option
18
            "<code class="option">bgPdfFirstPageOnly</code>" in Datei <code class="filename">letter.lco</code>)</p></li><li class="listitem"><p>Hintergrund-PDF für Ausdruck auf bereits bedrucktem Briefpapier abschaltbar. Es wird dann nur bei per E-Mail
19
            versendeten Dokumenten eingebunden (Option "<code class="option">bgPdfEmailOnly</code>" in Datei
20
            <code class="filename">letter.lco</code>).</p></li><li class="listitem"><p>Nutzung der Layout-Funktionen von LaTeX für Seitenumbruch, Wiederholung von Kopfzeilen, Zwischensummen
21
            etc. (danke an Kai-Martin Knaak für die Vorarbeit)</p></li><li class="listitem"><p>Anzeige des Empfängerlandes im Adressfeld nur, wenn es vom Land des eigenen Unternehmens abweicht (also die
22
            Rechnung das Land verlässt).</p></li><li class="listitem"><p>Multisprachfähig leicht um weitere Sprachen zu erweitern, alle Übersetzungen in der Datei
23
            <code class="filename">translatinos.tex</code>.</p></li><li class="listitem"><p>Auflistung von Bruttopreisen für Endverbraucher.</p></li></ul></div></div><div class="sect3" title="2.10.3.2. Die Installation"><div class="titlepage"><div><div><h4 class="title"><a name="f-tex-Installation"></a>2.10.3.2. Die Installation</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Vorlagenverzeichnis mit Option f-tex anlegen, siehe: <a class="xref" href="ch02s10.html#Vorlagenverzeichnis-anlegen" title="2.10.1. Vorlagenverzeichnis anlegen">Vorlagenverzeichnis anlegen</a>. Das
24
            Vorlagensystem funktioniert jetzt schon, hat allerdings noch einen Beispiel-Briefkopf.</p></li><li class="listitem"><p>Erstelle eine pdf-Hintergrund Datei und verlinke sie nach <code class="filename">./letter_head.pdf</code>.</p></li><li class="listitem"><p>Editiere den Bereich "<code class="option">settings</code>" in der datei <code class="filename">letter.lco</code>.</p></li></ul></div><p>oder etwas Detaillierter:</p><p>
25
            Es wird eine Datei <code class="filename">sample.lco</code> erstellt und diese nach <code class="filename">letter.lco</code> verlinkt.  Eigentlich
26
            ist dies die Datei die für die Firmenspezifischen Anpassungen gedacht ist.  Da die Einstiegshürde in LaTeX nicht ganz niedrig
27
            ist, wird in dieser Datei auf ein Hintergrundpdf verwiesen. Ich empfehle über dieses PDF die persönlichen Layoutanpassungen
28
            vorzunehmen und <code class="filename">sample.lco</code> unverändert zu lassen. Die die Anpassung über eine
29
            <code class="filename">*.lco</code>-Datei die letztlich auf <code class="filename">letter.lco</code> verlinkt ist ist aber auch möglich.
61 30
          </p><p>
62
            Es wird eine Datei sample_head.pdf mit ausgeliefert, diese wird nach
63
            letter_head.pdf verlinkt. Damit gibt es schon mal eine Funktionsfähige
64
            Vorlage. Schau Dir nach Abschluss der Installation die Datei sample_haed.pdf
65
            an und erstelle ein entsprechendes pdf passend zum Briefkopf Deiner Firma,
66
            diese dann im Template Verzeichniss ablegen und statt sample_head.pdf nach
67
            letter_head.pdf verlinken.
31
            Es wird eine Datei <code class="filename">sample_head.pdf</code> mit ausgeliefert, diese wird nach <code class="filename">letter_head.pdf</code>
32
            verlinkt. Damit gibt es schon mal eine Funktionsfähige Vorlage. Schau Dir nach Abschluss der Installation die Datei
33
            <code class="filename">sample_haed.pdf</code> an und erstelle ein entsprechendes PDF passend zum Briefkopf Deiner Firma, diese dann im
34
            Template Verzeichniss ablegen und statt <code class="filename">sample_head.pdf</code> nach <code class="filename">letter_head.pdf</code>
35
            verlinken.
68 36
          </p><p>
69
            letzlich muss ./letter_head.pdf auf das passende Hintergrundpdf verweisen,
70
            welches gewünschten Briefkopf enthält. Bei Updates oder nach erneutem
37
            letzlich muss <code class="filename">letter_head.pdf</code> auf das passende Hintergrund-PDF verweisen, welches gewünschten Briefkopf
38
            enthält. Bei Updates oder nach erneutem
71 39
          </p><p>
72
            Es wird eine Datei mydata.tex.example ausgeliefert die nach mytdata.tex
73
            verlinkt ist. Bei verwendetem Hintergrundpdf wird nur der Eintrag für das
74
            Land verwendet die Datei muss  also nicht angefasst werden. Die Anderen Werte
75
            sind für das Modul  lp (Label Print in erp - zur Zeit nicht im
76
            öffentlichen Zweig).
40
            Es wird eine Datei <code class="filename">mydata.tex.example</code> ausgeliefert, die nach <code class="filename">mytdata.tex</code> verlinkt
41
            ist. Bei verwendetem Hintergrund-PDF wird nur der Eintrag für das Land verwendet. Die Datei muss also nicht angefasst
42
            werden. Die Anderen Werte sind für das Modul 'lp' (Label Print in erp - zur Zeit nicht im öffentlichen Zweig).
77 43
          </p><p>
78
            Alle Anpassungen zum Briefkopf, Fusszeilen, Firmenlogos, etc.
79
            sollten über die Hintergrund pdf datei oder die *.lco Datei erfolgen.
44
            Alle Anpassungen zum Briefkopf, Fusszeilen, Firmenlogos, etc.  sollten über die Hintergrund-PDF-Datei oder die
45
            <code class="filename">*.lco</code>-Datei erfolgen.
80 46
          </p></div><div class="sect3" title="2.10.3.3. f-tex Funktionsübersicht"><div class="titlepage"><div><div><h4 class="title"><a name="f-tex-Funktions%C3%BCbersicht"></a>2.10.3.3. f-tex Funktionsübersicht</h4></div></div></div><p>
81
            Das Konzept von kivitendo sieht vor, für jedes Dokument
82
            (Auftragsbestätigung, Lieferschein, Rechnung, etc.) eine
83
            Latex-Vorlage vorzuhalten, dies ist sehr Wartungsunfreundlich. Auch
84
            das Einlesen einer einheitlichen Quelle für den Briefkopf bringt nur
85
            bedingte Vorteile, da hier leicht die Pflege der Artikel-Tabellen aus
86
            dem Ruder läuft. Bei dem vorliegenden Ansatz wird für alle
87
            Briefartigen Dokumente mit Artikel-Tabellen eine einheitliche
88
            Latexvorlage verwendet, welche über Codeweichen die Besonderheiten
89
            der jeweiligen Dokumente Berücksichtigt
90
          </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">Tabellen mit oder ohne Preis
91
            </li><li class="listitem">Sprache der Tabellenüberschriften etc.
92
            </li><li class="listitem">Anpassung der Bezugs-Zeile (z.B. Rechnungsnummer versus
93
               Angebotsnummer)
94
            </li><li class="listitem">Darstellung von Brutto oder Netto-Preisen in der Auflistung
95
              (Endverbraucher versus Gewerblicher Kunde)
96
            </li></ul></div><p>Nachteil:</p><p>
97
             Latex hat ohnehin eine sehr steile Lehrnkurve. Die Datei letter.tex
98
             ist sehr komplex und verstärkt damit diesen Effekt noch einmal erheblich.
99
             Wer Latex-Erfahrung hat, oder geübt ist Scriptsparachen nachzuvollziehen kann
100
             natürlich auch innerhalb der Tabellendarstellung gut persönliche Anpassungen
101
             vornehmen. Aber man kann sich hier bei Veränderungen sehr schnell häftig in
102
             den Fuss schiessen.
103
           </p><p>Wer nicht so tief in die Materie einsteigen will oder leicht zu
104
              frustrieren ist, sollte sein Hintergrund PDF auf Basis der mitglieferten
105
              Datei sample_head.pdf erstellen, und sich an der Form der dargestellten Tabellen
106
              wie sie ausgeliefert werden, erfreuen.
107
           </p><p>Kleiner Tipp:
108
             Nicht zu viel auf einmal wollen, lieber kleine kontinuierliche
109
             Schritte gehen.
110
           </p><p>Bruttopreise für Endvorbraucher</p><p>Der auszuweisende Bruttopreis wird innerhalb der LaTeX
111
             Umgebung berechnet.  es gibt zwar ein Feld um bei Aufträgen "alle Preise
112
             Brutto" auszuwählen, aber:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
113
              hierfür müssen die Preise auch in Brutto in der Datenbank stehen
114
              (ja - das lässt sich über die Preisgruppen und die Zuordung einer Default-Preisgruppe
115
              handhaben)
116
            </li><li class="listitem">
117
              man darf beim Anlegen des Vorgangs nicht vergessen Dieses Häkchen zu setzen.
118
               (das ist in der Praxis wenn man sowohl Endverbraucher- wie Gewerbekunden beliefert
119
              der eigentliche Knackpunkt)
120
            </li></ul></div><p>
121
            Es gibt mit f-tex eine weitere Alternative. Die Information ob Brutto oder
122
            Nettorechnung wird mit den Zahlarten verknüpft. Zahlarten bei denen
123
            Rechnungen, Angebote, etc, in Brutto ausgegeben werden sollen enden mit "_E"
124
            (für Endverbraucher) Falls identische Zahlarten für Gewerbekunden und
125
            Endverbraucher vorhanden sind legt man diese einfach doppelt an (einmal mit
126
            der Namensendung "_E"). Gewinn:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
127
               die Entscheidung ob Netopreise ausgewiesen werden ist nicht mehr fix
128
               mit einer Preisliste Verbunden.
129
            </li><li class="listitem">
130
              die Default-Zahlart kann im Kundendatensatz hinterlegt werden und man
131
              muss nicht mehr daran denken "alle Preise Netto" auszuwählen.
132
            </li><li class="listitem">
133
              Die Entscheidung ob Netto/Oder Bruttopreise ausgewiesen werden kann direkt
134
              beim Drucken reviediert werden, ohne dass sich der Auftragswert ändert.
135
            </li></ul></div><p>Lieferadressen</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
136
              in Lieferscheinen kommen shipto* -Variablen im Adressfeld zum Einsatz
137
            </li><li class="listitem">
138
              wenn die shipto*variable leer ist wird die entsprechende
139
              Adressvariable eingesetzt.  Wenn Also die Lieferadresse in Strasse,
140
              Hausnummer und Ort abweicht, müssen auch nur diese Felder in der
141
              Lieferadresse ausgefüllt werden. Für den Firmenname wird der Wert der
142
              Hauptadresse angezeigt.
143
            </li></ul></div></div></div><div class="sect2" title="2.10.4. RB"><div class="titlepage"><div><div><h3 class="title"><a name="RB"></a>2.10.4. RB</h3></div></div></div><p>Vollständiger Dokumentensatz mit alternativen Design</p></div><div class="sect2" title="2.10.5. Allgemeine Hinweise zu LaTeX Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="Allgemeine Hinweise zu LaTeX"></a>2.10.5. Allgemeine Hinweise zu LaTeX Vorlagen</h3></div></div></div><p>In den allermeisten Installationen sollte drucken jetzt schon
47
            Das Konzept von kivitendo sieht vor, für jedes Dokument (Auftragsbestätigung, Lieferschein, Rechnung, etc.) eine LaTeX-Vorlage
48
            vorzuhalten, dies ist sehr Wartungsunfreundlich. Auch das Einlesen einer einheitlichen Quelle für den Briefkopf bringt nur
49
            bedingte Vorteile, da hier leicht die Pflege der Artikel-Tabellen aus dem Ruder läuft. Bei dem vorliegenden Ansatz wird für alle
50
            briefartigen Dokumente mit Artikel-Tabellen eine einheitliche LaTeX-Vorlage verwendet, welche über Codeweichen die
51
            Besonderheiten der jeweiligen Dokumente Berücksichtigt.
52
          </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Tabellen mit oder ohne Preis</p></li><li class="listitem"><p>Sprache der Tabellenüberschriften etc.</p></li><li class="listitem"><p>Anpassung der Bezugs-Zeile (z.B. Rechnungsnummer versus Angebotsnummer)</p></li><li class="listitem"><p>Darstellung von Brutto oder Netto-Preisen in der Auflistung (Endverbraucher versus Gewerblicher
53
            Kunde)</p></li></ul></div><p>Nachteil:</p><p>
54
             LaTeX hat ohnehin eine sehr steile Lehrnkurve. Die Datei <code class="filename">letter.tex</code> ist sehr komplex und verstärkt damit
55
             diesen Effekt noch einmal erheblich.  Wer LaTeX-Erfahrung hat, oder geübt ist Scriptsparachen nachzuvollziehen kann natürlich
56
             auch innerhalb der Tabellendarstellung gut persönliche Anpassungen vornehmen. Aber man kann sich hier bei Veränderungen sehr
57
             schnell häftig in den Fuss schiessen.
58
           </p><p>Wer nicht so tief in die Materie einsteigen will oder leicht zu frustrieren ist, sollte sein Hintergrund PDF auf Basis der
59
           mitglieferten Datei <code class="filename">sample_head.pdf</code> erstellen, und sich an der Form der dargestellten Tabellen wie sie
60
           ausgeliefert werden, erfreuen.
61
           </p><p>Kleiner Tipp: Nicht zu viel auf einmal wollen, lieber kleine kontinuierliche Schritte gehen.</p></div><div class="sect3" title="2.10.3.4. Bruttopreise für Endverbraucher"><div class="titlepage"><div><div><h4 class="title"><a name="f-tex-Bruttopreise"></a>2.10.3.4. Bruttopreise für Endverbraucher</h4></div></div></div><p>Der auszuweisende Bruttopreis wird innerhalb der LaTeX-Umgebung berechnet. Es gibt zwar ein Feld, um bei Aufträgen "alle
62
	         Preise Brutto" auszuwählen, aber:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>hierfür müssen die Preise auch in Brutto in der Datenbank stehen (ja - das lässt sich über die Preisgruppen und die
63
              Zuordung einer Default-Preisgruppe handhaben)</p></li><li class="listitem"><p>man darf beim Anlegen des Vorgangs nicht vergessen Dieses Häkchen zu setzen.  (das ist in der Praxis wenn man sowohl
64
              Endverbraucher- wie Gewerbekunden beliefert der eigentliche Knackpunkt)</p></li></ul></div><p>
65
            Es gibt mit f-tex eine weitere Alternative. Die Information ob Brutto oder Nettorechnung wird mit den Zahlarten
66
            verknüpft. Zahlarten bei denen Rechnungen, Angebote, etc, in Brutto ausgegeben werden sollen, enden mit "_E" (für
67
            Endverbraucher). Falls identische Zahlarten für Gewerbekunden und Endverbraucher vorhanden sind, legt man diese einfach doppelt
68
            an (einmal mit der Namensendung "_E"). Gewinn:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Die Entscheidung, ob Netopreise ausgewiesen werden, ist nicht mehr fix mit einer Preisliste Verbunden.</p></li><li class="listitem"><p>Die Default-Zahlart kann im Kundendatensatz hinterlegt werden, und man muss nicht mehr daran denken, "alle Preise
69
            Netto" auszuwählen.</p></li><li class="listitem"><p>Die Entscheidung, ob Netto- oder Bruttopreise ausgewiesen werden, kann direkt beim Drucken reviediert werden,
70
            ohne dass sich der Auftragswert ändert.</p></li></ul></div></div><div class="sect3" title="2.10.3.5. Lieferadressen"><div class="titlepage"><div><div><h4 class="title"><a name="f-tex-lieferadressen"></a>2.10.3.5. Lieferadressen</h4></div></div></div><p>In Lieferscheinen kommen <code class="varname">shipto*</code>-Variablen im Adressfeld zum Einsatz. Wenn die
71
          <code class="varname">shipto*</code>-Variable leer ist, wird die entsprechende Adressvariable eingesetzt.  Wenn also die Lieferadresse in
72
          Straße, Hausnummer und Ort abweicht, müssen auch nur diese Felder in der Lieferadresse ausgefüllt werden. Für den Firmenname wird
73
          der Wert der Hauptadresse angezeigt.
74
          </p></div></div><div class="sect2" title="2.10.4. RB"><div class="titlepage"><div><div><h3 class="title"><a name="Vorlagen-RB"></a>2.10.4. RB</h3></div></div></div><p>Vollständiger Dokumentensatz mit alternativem Design</p></div><div class="sect2" title="2.10.5. Allgemeine Hinweise zu LaTeX Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="allgemeine-hinweise-zu-latex"></a>2.10.5. Allgemeine Hinweise zu LaTeX Vorlagen</h3></div></div></div><p>In den allermeisten Installationen sollte drucken jetzt schon
144 75
        funktionieren. Sollte ein Fehler auftreten wirft TeX sehr lange
145 76
        Fehlerbeschreibungen, der eigentliche Fehler ist immer die erste Zeite
146 77
        die mit einem Ausrufezeichen anfängt. Häufig auftretende Fehler sind zum
147 78
        Beispiel:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>! LaTeX Error: File `eurosym.sty' not found. Die entsprechende
148 79
            LaTeX-Bibliothek wurde nicht gefunden. Das tritt vor allem bei
149 80
            Vorlagen aus der Community auf. Installieren Sie die entsprechenden
150
            Pakete.</p></li><li class="listitem"><p>! Package inputenc Error: Unicode char \u8:桜 not set up for
81
            Pakete.</p></li><li class="listitem"><p>! Package inputenc Error: Unicode char \u8:... set up for
151 82
            use with LaTeX. Dieser Fehler tritt auf, wenn sie versuchen mit
152 83
            einer Standardinstallation exotische utf8 Zeichen zu drucken.
153 84
            TeXLive unterstützt von Haus nur romanische Schriften und muss mit
doc/html/ch03s02.html
556 556
                        <code class="varname">invdate</code>
557 557
                     </span></dt><dd><p>Rechnungsdatum</p></dd><dt><span class="term">
558 558
                        <code class="varname">invnumber</code>
559
                     </span></dt><dd><p>Rechnungsnummer</p></dd></dl></div></div></div><div class="sect2" title="3.2.10. Variablen in anderen Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen"></a>3.2.10. Variablen in anderen Vorlagen</h3></div></div></div><div class="sect3" title="3.2.10.1. Einführung"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4241"></a>3.2.10.1. Einführung</h4></div></div></div><p>Die Variablen in anderen Vorlagen sind ähnlich wie in der
559
                     </span></dt><dd><p>Rechnungsnummer</p></dd></dl></div></div></div><div class="sect2" title="3.2.10. Variablen in anderen Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen"></a>3.2.10. Variablen in anderen Vorlagen</h3></div></div></div><div class="sect3" title="3.2.10.1. Einführung"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4361"></a>3.2.10.1. Einführung</h4></div></div></div><p>Die Variablen in anderen Vorlagen sind ähnlich wie in der
560 560
          Rechnung. Allerdings heißen die Variablen, die mit
561 561
          <code class="varname">inv</code> beginnen, jetzt anders. Bei den Angeboten
562 562
          fangen sie mit <code class="varname">quo</code> für "quotation" an:
......
660 660
...
661 661
&lt;%end%&gt;</pre><p>Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if"
662 662
          und dem "end" werden nur ausgegeben, wenn die Variable
663
          <code class="varname">variablenname</code> gesetzt und ungleich 0 ist.</p><p>Die Bedingung kann auch negiert werden, indem das Wort
663
          <code class="varname">variablenname</code> gesetzt und ungleich 0 ist.</p><p>Handelt es sich bei der benannten Variable um ein Array, also um einen Variablennamen, über den man mit
664
          <span class="command"><strong>&lt;%foreach variablenname%&gt;</strong></span> iteriert, so wird mit diesem Konstrukt darauf getestet, ob das Array Elemente
665
          enthält. Somit würde im folgenden Beispiel nur dann eine Liste von Zahlungseingängen samt ihrer Überschrift "Zahlungseingänge"
666
          ausgegeben, wenn tatsächlich welche getätigt wurden:</p><pre class="programlisting">&lt;%if payment%&gt;
667
Zahlungseingänge:
668
 &lt;%foreach payment%&gt;
669
   Am &lt;%paymentdate%&gt;: &lt;%payment%&gt; €
670
 &lt;%end foreach%&gt;
671
&lt;%end if%&gt;</pre><p>Die Bedingung kann auch negiert werden, indem das Wort
664 672
          <code class="function">not</code> nach dem <code class="filename">if</code> verwendet
665 673
          wird. Beispiel:</p><pre class="programlisting">&lt;%if not cp_greeting%&gt;
666 674
...
doc/html/ch04.html
1 1
<html><head>
2 2
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
3
   <title>Kapitel 4. Entwicklerdokumentation</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="kivitendo: Installation, Konfiguration, Entwicklung"><link rel="prev" href="ch03s03.html" title="3.3. Excel-Vorlagen"><link rel="next" href="ch04s02.html" title="4.2. Entwicklung unter FastCGI"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 4. Entwicklerdokumentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s03.html">Zurück</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 4. Entwicklerdokumentation"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4841"></a>Kapitel 4. Entwicklerdokumentation</h2></div></div></div><div class="sect1" title="4.1. Globale Variablen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.globals"></a>4.1. Globale Variablen</h2></div></div></div><div class="sect2" title="4.1.1. Wie sehen globale Variablen in Perl aus?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4847"></a>4.1.1. Wie sehen globale Variablen in Perl aus?</h3></div></div></div><p>Globale Variablen liegen in einem speziellen namespace namens
3
   <title>Kapitel 4. Entwicklerdokumentation</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="kivitendo: Installation, Konfiguration, Entwicklung"><link rel="prev" href="ch03s03.html" title="3.3. Excel-Vorlagen"><link rel="next" href="ch04s02.html" title="4.2. Entwicklung unter FastCGI"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 4. Entwicklerdokumentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s03.html">Zurück</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 4. Entwicklerdokumentation"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4968"></a>Kapitel 4. Entwicklerdokumentation</h2></div></div></div><div class="sect1" title="4.1. Globale Variablen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.globals"></a>4.1. Globale Variablen</h2></div></div></div><div class="sect2" title="4.1.1. Wie sehen globale Variablen in Perl aus?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4974"></a>4.1.1. Wie sehen globale Variablen in Perl aus?</h3></div></div></div><p>Globale Variablen liegen in einem speziellen namespace namens
4 4
        "main", der von überall erreichbar ist. Darüber hinaus sind bareword
5 5
        globs global und die meisten speziellen Variablen sind...
6 6
        speziell.</p><p>Daraus ergeben sich folgende Formen:</p><div class="variablelist"><dl><dt><span class="term">
......
25 25
              <code class="varname">$PACKAGE::form</code>.</p></dd><dt><span class="term">
26 26
                     <code class="literal">local $form</code>
27 27
                  </span></dt><dd><p>Alle Änderungen an <code class="varname">$form</code> werden am Ende
28
              des scopes zurückgesetzt</p></dd></dl></div></div><div class="sect2" title="4.1.2. Warum sind globale Variablen ein Problem?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4948"></a>4.1.2. Warum sind globale Variablen ein Problem?</h3></div></div></div><p>Das erste Problem ist <span class="productname">FCGI</span>™.</p><p>
28
              des scopes zurückgesetzt</p></dd></dl></div></div><div class="sect2" title="4.1.2. Warum sind globale Variablen ein Problem?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5075"></a>4.1.2. Warum sind globale Variablen ein Problem?</h3></div></div></div><p>Das erste Problem ist <span class="productname">FCGI</span>™.</p><p>
29 29
               <span class="productname">SQL-Ledger</span>™ hat fast alles im globalen
30 30
        namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
31 31
        Unter <span class="productname">FCGI</span>™ müssen diese Sachen aber wieder
......
39 39
        dies hat, seit der Einführung, u.a. schon so manche langwierige
40 40
        Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package
41 41
        angegeben werden, werden die nicht geprüft, und somit kann sich
42
        schnell ein Tippfehler einschleichen.</p></div><div class="sect2" title="4.1.3. Kanonische globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4981"></a>4.1.3. Kanonische globale Variablen</h3></div></div></div><p>Um dieses Problem im Griff zu halten gibt es einige wenige
42
        schnell ein Tippfehler einschleichen.</p></div><div class="sect2" title="4.1.3. Kanonische globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5108"></a>4.1.3. Kanonische globale Variablen</h3></div></div></div><p>Um dieses Problem im Griff zu halten gibt es einige wenige
43 43
        globale Variablen, die kanonisch sind, d.h. sie haben bestimmte
44 44
        vorgegebenen Eigenschaften, und alles andere sollte anderweitig
45 45
        umhergereicht werden.</p><p>Diese Variablen sind im Moment die folgenden neun:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
......
62 62
                     <code class="varname">$::request</code>
63 63
                  </p></li></ul></div><p>Damit diese nicht erneut als Müllhalde missbraucht werden, im
64 64
        Folgenden eine kurze Erläuterung der bestimmten vorgegebenen
65
        Eigenschaften (Konventionen):</p><div class="sect3" title="4.1.3.1. $::form"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5045"></a>4.1.3.1. $::form</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Ist ein Objekt der Klasse
65
        Eigenschaften (Konventionen):</p><div class="sect3" title="4.1.3.1. $::form"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5172"></a>4.1.3.1. $::form</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Ist ein Objekt der Klasse
66 66
              "<code class="classname">Form</code>"</p></li><li class="listitem"><p>Wird nach jedem Request gelöscht</p></li><li class="listitem"><p>Muss auch in Tests und Konsolenscripts vorhanden
67 67
              sein.</p></li><li class="listitem"><p>Enthält am Anfang eines Requests die Requestparameter vom
68 68
              User</p></li><li class="listitem"><p>Kann zwar intern über Requestgrenzen ein Datenbankhandle
......
110 110
  push @{ $form-&gt;{TEMPLATE_ARRAYS}{number} },          $form-&gt;{"partnumber_$i"};
111 111
  push @{ $form-&gt;{TEMPLATE_ARRAYS}{description} },     $form-&gt;{"description_$i"};
112 112
  # ...
113
}</pre></div><div class="sect3" title="4.1.3.2. %::myconfig"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5129"></a>4.1.3.2. %::myconfig</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Das einzige Hash unter den globalen Variablen</p></li><li class="listitem"><p>Wird spätestens benötigt wenn auf die Datenbank
113
}</pre></div><div class="sect3" title="4.1.3.2. %::myconfig"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5256"></a>4.1.3.2. %::myconfig</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Das einzige Hash unter den globalen Variablen</p></li><li class="listitem"><p>Wird spätestens benötigt wenn auf die Datenbank
114 114
              zugegriffen wird</p></li><li class="listitem"><p>Wird bei jedem Request neu erstellt.</p></li><li class="listitem"><p>Enthält die Userdaten des aktuellen Logins</p></li><li class="listitem"><p>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
115 115
              extern serialisiert werden, weil da auch der Datenbankzugriff
116 116
              für diesen user drinsteht.</p></li><li class="listitem"><p>Enthält unter anderem Listenbegrenzung vclimit,
......
122 122
          überwiegend die Daten, die sich unter <span class="guimenu">Programm</span>
123 123
          -&gt; <span class="guimenuitem">Einstellungen</span> befinden, bzw. die
124 124
          Informationen über den Benutzer die über die
125
          Administrator-Schnittstelle (admin.pl) eingegeben wurden.</p></div><div class="sect3" title="4.1.3.3. $::locale"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5168"></a>4.1.3.3. $::locale</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "Locale"</p></li><li class="listitem"><p>Wird pro Request erstellt</p></li><li class="listitem"><p>Muss auch für Tests und Scripte immer verfügbar
125
          Administrator-Schnittstelle (admin.pl) eingegeben wurden.</p></div><div class="sect3" title="4.1.3.3. $::locale"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5295"></a>4.1.3.3. $::locale</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "Locale"</p></li><li class="listitem"><p>Wird pro Request erstellt</p></li><li class="listitem"><p>Muss auch für Tests und Scripte immer verfügbar
126 126
              sein.</p></li><li class="listitem"><p>Cached intern über Requestgrenzen hinweg benutzte
127 127
              Locales</p></li></ul></div><p>Lokalisierung für den aktuellen User. Alle Übersetzungen,
128
          Zahlen- und Datumsformatierungen laufen über dieses Objekt.</p></div><div class="sect3" title="4.1.3.4. $::lxdebug"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5186"></a>4.1.3.4. $::lxdebug</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "LXDebug"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Muss immer verfügbar sein, in nahezu allen
128
          Zahlen- und Datumsformatierungen laufen über dieses Objekt.</p></div><div class="sect3" title="4.1.3.4. $::lxdebug"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5313"></a>4.1.3.4. $::lxdebug</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "LXDebug"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Muss immer verfügbar sein, in nahezu allen
129 129
              Funktionen</p></li></ul></div><p>
130 130
                  <code class="varname">$::lxdebug</code> stellt Debuggingfunktionen
131 131
          bereit, wie "<code class="function">enter_sub</code>" und
......
135 135
          "<code class="function">message</code>" und "<code class="function">dump</code>" mit
136 136
          denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
137 137
          packen kann.</p><p>Beispielsweise so:</p><pre class="programlisting">$main::lxdebug-&gt;message(0, 'Meine Konfig:' . Dumper (%::myconfig));
138
$main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});</pre></div><div class="sect3" title="4.1.3.5. $::auth"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5223"></a>4.1.3.5. $::auth</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "SL::Auth"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Hat eine permanente DB Verbindung zur Authdatenbank</p></li><li class="listitem"><p>Wird nach jedem Request resettet.</p></li></ul></div><p>
138
$main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});</pre></div><div class="sect3" title="4.1.3.5. $::auth"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5350"></a>4.1.3.5. $::auth</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "SL::Auth"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Hat eine permanente DB Verbindung zur Authdatenbank</p></li><li class="listitem"><p>Wird nach jedem Request resettet.</p></li></ul></div><p>
139 139
                  <code class="varname">$::auth</code> stellt Funktionen bereit um die
140 140
          Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
141 141
          vom aktuellen User abhängen wird das Objekt aus
142 142
          Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
143
          Request kurz resettet.</p></div><div class="sect3" title="4.1.3.6. $::lx_office_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5244"></a>4.1.3.6. $::lx_office_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
143
          Request kurz resettet.</p></div><div class="sect3" title="4.1.3.6. $::lx_office_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5371"></a>4.1.3.6. $::lx_office_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
144 144
              "<code class="classname">SL::LxOfficeConf</code>"</p></li><li class="listitem"><p>Global gecached</p></li><li class="listitem"><p>Repräsentation der
145 145
              <code class="filename">config/kivitendo.conf[.default]</code>-Dateien</p></li></ul></div><p>Globale Konfiguration. Configdateien werden zum Start gelesen
146 146
          und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass
......
150 150
file = /tmp/kivitendo-debug.log</pre><p>ist der Key <code class="varname">file</code> im Programm als
151 151
          <code class="varname">$::lx_office_conf-&gt;{debug}{file}</code>
152 152
          erreichbar.</p><div class="warning" title="Warnung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warnung]" src="../../../../system/docbook-xsl/images/warning.png"></td><th align="left">Warnung</th></tr><tr><td align="left" valign="top"><p>Zugriff auf die Konfiguration erfolgt im Moment über
153
            Hashkeys, sind also nicht gegen Tippfehler abgesichert.</p></td></tr></table></div></div><div class="sect3" title="4.1.3.7. $::instance_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5280"></a>4.1.3.7. $::instance_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
153
            Hashkeys, sind also nicht gegen Tippfehler abgesichert.</p></td></tr></table></div></div><div class="sect3" title="4.1.3.7. $::instance_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5407"></a>4.1.3.7. $::instance_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
154 154
              "<code class="classname">SL::InstanceConfiguration</code>"</p></li><li class="listitem"><p>wird pro Request neu erstellt</p></li></ul></div><p>Funktioniert wie <code class="varname">$::lx_office_conf</code>,
155 155
          speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
156 156
          ist hier eine Mandantendatenbank. Beispielsweise überprüft
157 157
          </p><pre class="programlisting">$::instance_conf-&gt;get_inventory_system eq 'perpetual'</pre><p>
158
          ob die berüchtigte Bestandsmethode zur Anwendung kommt.</p></div><div class="sect3" title="4.1.3.8. $::dispatcher"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5301"></a>4.1.3.8. $::dispatcher</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
158
          ob die berüchtigte Bestandsmethode zur Anwendung kommt.</p></div><div class="sect3" title="4.1.3.8. $::dispatcher"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5428"></a>4.1.3.8. $::dispatcher</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
159 159
              "<code class="varname">SL::Dispatcher</code>"</p></li><li class="listitem"><p>wird pro Serverprozess erstellt.</p></li><li class="listitem"><p>enthält Informationen über die technische Verbindung zum
160 160
              Server</p></li></ul></div><p>Der dritte Punkt ist auch der einzige Grund warum das Objekt
161 161
          global gespeichert wird. Wird vermutlich irgendwann in einem anderen
162
          Objekt untergebracht.</p></div><div class="sect3" title="4.1.3.9. $::request"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5319"></a>4.1.3.9. $::request</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Hashref (evtl später Objekt)</p></li><li class="listitem"><p>Wird pro Request neu initialisiert.</p></li><li class="listitem"><p>Keine Unterstruktur garantiert.</p></li></ul></div><p>
162
          Objekt untergebracht.</p></div><div class="sect3" title="4.1.3.9. $::request"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5446"></a>4.1.3.9. $::request</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Hashref (evtl später Objekt)</p></li><li class="listitem"><p>Wird pro Request neu initialisiert.</p></li><li class="listitem"><p>Keine Unterstruktur garantiert.</p></li></ul></div><p>
163 163
                  <code class="varname">$::request</code> ist ein generischer Platz um
164 164
          Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
165 165
          at a distance benutzt werden, sondern um lokales memoizing zu
......
172 172
              <code class="varname">$::request</code>
173 173
                     </p></li><li class="listitem"><p>Muss ich von anderen Teilen des Programms lesend drauf
174 174
              zugreifen? Dann <code class="varname">$::request</code>, aber Zugriff über
175
              Wrappermethode</p></li></ul></div></div></div><div class="sect2" title="4.1.4. Ehemalige globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5361"></a>4.1.4. Ehemalige globale Variablen</h3></div></div></div><p>Die folgenden Variablen waren einmal im Programm, und wurden
176
        entfernt.</p><div class="sect3" title="4.1.4.1. $::cgi"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5366"></a>4.1.4.1. $::cgi</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil cookie Methoden nicht als
175
              Wrappermethode</p></li></ul></div></div></div><div class="sect2" title="4.1.4. Ehemalige globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e5488"></a>4.1.4. Ehemalige globale Variablen</h3></div></div></div><p>Die folgenden Variablen waren einmal im Programm, und wurden
176
        entfernt.</p><div class="sect3" title="4.1.4.1. $::cgi"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5493"></a>4.1.4.1. $::cgi</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil cookie Methoden nicht als
177 177
              Klassenfunktionen funktionieren</p></li><li class="listitem"><p>Aufruf als Klasse erzeugt Dummyobjekt was im
178 178
              Klassennamespace gehalten wird und über Requestgrenzen
179 179
              leaked</p></li><li class="listitem"><p>liegt jetzt unter
180 180
              <code class="varname">$::request-&gt;{cgi}</code>
181
                     </p></li></ul></div></div><div class="sect3" title="4.1.4.2. $::all_units"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5382"></a>4.1.4.2. $::all_units</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil einige Funktionen in Schleifen zum Teil
181
                     </p></li></ul></div></div><div class="sect3" title="4.1.4.2. $::all_units"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5509"></a>4.1.4.2. $::all_units</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil einige Funktionen in Schleifen zum Teil
182 182
              ein paar hundert mal pro Request eine Liste der Einheiten
183 183
              brauchen, und de als Parameter durch einen Riesenstack von
184 184
              Funktionen geschleift werden müssten.</p></li><li class="listitem"><p>Liegt jetzt unter
185 185
              <code class="varname">$::request-&gt;{cache}{all_units}</code>
186 186
                     </p></li><li class="listitem"><p>Wird nur in
187 187
              <code class="function">AM-&gt;retrieve_all_units()</code> gesetzt oder
188
              gelesen.</p></li></ul></div></div><div class="sect3" title="4.1.4.3. %::called_subs"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5401"></a>4.1.4.3. %::called_subs</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>wurde benutzt um callsub deep recursions
188
              gelesen.</p></li></ul></div></div><div class="sect3" title="4.1.4.3. %::called_subs"><div class="titlepage"><div><div><h4 class="title"><a name="d0e5528"></a>4.1.4.3. %::called_subs</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>wurde benutzt um callsub deep recursions
189 189
              abzufangen.</p></li><li class="listitem"><p>Wurde entfernt, weil callsub nur einen Bruchteil der
190 190
              möglichen Rekursioenen darstellt, und da nie welche
191 191
              auftreten.</p></li><li class="listitem"><p>komplette recursion protection wurde entfernt.</p></li></ul></div></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s03.html">Zurück</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">3.3. Excel-Vorlagen&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;4.2. Entwicklung unter FastCGI</td></tr></table></div></body></html>
doc/html/ch04s05.html
3 3
   <title>4.5. Die kivitendo-Test-Suite</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="prev" href="ch04s04.html" title="4.4. Translations and languages"><link rel="next" href="ch04s06.html" title="4.6. Stil-Richtlinien"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.5. Die kivitendo-Test-Suite</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s04.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s06.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="4.5. Die kivitendo-Test-Suite"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.testsuite"></a>4.5. Die kivitendo-Test-Suite</h2></div></div></div><div class="sect2" title="4.5.1. Einführung"><div class="titlepage"><div><div><h3 class="title"><a name="devel.testsuite.intro"></a>4.5.1. Einführung</h3></div></div></div><p>kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul <code class="literal">Test::More</code>.</p><p>Die grundlegenden Fakten sind:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Alle Tests liegen im Unterverzeichnis <code class="filename">t/</code>.</p></li><li class="listitem"><p>Ein Script (bzw. ein Test) in <code class="filename">f/</code> enthält einen oder mehrere Testfälle.</p></li><li class="listitem"><p>Alle Dateinamen von Tests enden auf <code class="literal">.t</code>. Es sind selbstständig ausführbare Perl-Scripte.</p></li><li class="listitem"><p>Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in <code class="filename">f/</code>, deren
4 4
          Dateiname auf <code class="literal">.t</code> endet.</p></li></ul></div></div><div class="sect2" title="4.5.2. Voraussetzungen"><div class="titlepage"><div><div><h3 class="title"><a name="devel.testsuite.prerequisites"></a>4.5.2. Voraussetzungen</h3></div></div></div><p>Für die Ausführung werden neben den für kivitendo eh schon benötigten Module noch weitere Perl-Module benötigt. Diese sind:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
5 5
                     <code class="literal">Test::Deep</code> (Debian-Paketname: <code class="literal">libtest-deep-perl</code>; Fedora Core:
6
          <code class="literal">perl-Test-Deep</code>; openSuSE: <code class="literal">perl-Test-Deep</code>)</p></li></ul></div></div><div class="sect2" title="4.5.3. Existierende Tests ausführen"><div class="titlepage"><div><div><h3 class="title"><a name="devel.testsuite.execution"></a>4.5.3. 
6
          <code class="literal">perl-Test-Deep</code>; openSuSE: <code class="literal">perl-Test-Deep</code>)</p></li><li class="listitem"><p>
7
                     <code class="literal">Test::Harness</code> 3.0.0 oder höher. Dieses Modul ist ab Perl 5.10.1 Bestandteil der
8
          Perl-Distribution und kann für frühere Versionen aus dem <a class="ulink" href="http://www.cpan.org" target="_top">CPAN</a> bezogen
9
          werden.</p></li></ul></div></div><div class="sect2" title="4.5.3. Existierende Tests ausführen"><div class="titlepage"><div><div><h3 class="title"><a name="devel.testsuite.execution"></a>4.5.3. 
7 10
          Existierende Tests ausführen
8 11
        </h3></div></div></div><p>Es gibt mehrere Möglichkeiten zum Ausführen der Tests: entweder, man lässt alle Tests auf einmal ausführen, oder man führt
9 12
        gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript <code class="filename">t/test.sh</code>.</p><p>Will man die komplette Test-Suite ausführen, so muss man einfach nur <code class="filename">t/test.sh</code> ohne weitere Parameter aus
doc/html/index.html
1 1
<html><head>
2 2
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
3
   <title>kivitendo: Installation, Konfiguration, Entwicklung</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch01.html" title="Kapitel 1. Aktuelle Hinweise"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">kivitendo: Installation, Konfiguration, Entwicklung</th></tr><tr><td width="20%" align="left">&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01.html">Weiter</a></td></tr></table><hr></div><div lang="de" class="book" title="kivitendo: Installation, Konfiguration, Entwicklung"><div class="titlepage"><div><div><h1 class="title"><a name="kivitendo-documentation"></a>kivitendo: Installation, Konfiguration, Entwicklung</h1></div></div><hr></div><div class="toc"><p><b>Inhaltsverzeichnis</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Aktuelle Hinweise</a></span></dt><dt><span class="chapter"><a href="ch02.html">2. Installation und Grundkonfiguration</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch02.html#Ben%C3%B6tigte-Software-und-Pakete">2.1. Benötigte Software und Pakete</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02.html#Betriebssystem">2.1.1. Betriebssystem</a></span></dt><dt><span class="sect2"><a href="ch02.html#Pakete">2.1.2. Pakete</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s02.html">2.2. Manuelle Installation des Programmpaketes</a></span></dt><dt><span class="sect1"><a href="ch02s03.html">2.3. kivitendo-Konfigurationsdatei</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s03.html#config.config-file.introduction">2.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s03.html#config.config-file.sections-parameters">2.3.2. Abschnitte und Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s03.html#config.config-file.prior-versions">2.3.3. Versionen vor 2.6.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s04.html">2.4. Anpassung der PostgreSQL-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s04.html#Zeichens%C3%A4tze-die-Verwendung-von-UTF-8">2.4.1. Zeichensätze/die Verwendung von UTF-8</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#%C3%84nderungen-an-Konfigurationsdateien">2.4.2. Änderungen an Konfigurationsdateien</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#Erweiterung-f%C3%BCr-servergespeicherte-Prozeduren">2.4.3. Erweiterung für servergespeicherte Prozeduren</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#Datenbankbenutzer-anlegen">2.4.4. Datenbankbenutzer anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s05.html">2.5. Webserver-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s05.html#d0e592">2.5.1. Grundkonfiguration mittels CGI</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Apache-Konfiguration.FCGI">2.5.2. Konfiguration für FastCGI/FCGI</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s06.html">2.6. Der Task-Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s06.html#Konfiguration-des-Task-Servers">2.6.1. Verfügbare und notwendige Konfigurationsoptionen</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Einbinden-in-den-Boot-Prozess">2.6.2. Automatisches Starten des Task-Servers beim Booten</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Prozesskontrolle">2.6.3. Wie der Task-Server gestartet und beendet wird</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Prozesskontrolle2">2.6.4. Task-Server mit mehreren Mandanten</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s07.html">2.7. Benutzerauthentifizierung und Administratorpasswort</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s07.html#Grundlagen-zur-Benutzerauthentifizierung">2.7.1. Grundlagen zur Benutzerauthentifizierung</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Administratorpasswort">2.7.2. Administratorpasswort</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Authentifizierungsdatenbank">2.7.3. Authentifizierungsdatenbank</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Passwort%C3%BCberpr%C3%BCfung">2.7.4. Passwortüberprüfung</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Name-des-Session-Cookies">2.7.5. Name des Session-Cookies</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Anlegen-der-Authentifizierungsdatenbank">2.7.6. Anlegen der Authentifizierungsdatenbank</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s08.html">2.8. Benutzer- und Gruppenverwaltung</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s08.html#Zusammenh%C3%A4nge">2.8.1. Zusammenhänge</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Datenbanken-anlegen">2.8.2. Datenbanken anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Gruppen-anlegen">2.8.3. Gruppen anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Benutzer-anlegen">2.8.4. Benutzer anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Gruppenmitgliedschaften-verwalten">2.8.5. Gruppenmitgliedschaften verwalten</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Migration-alter-Installationen">2.8.6. Migration alter Installationen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s09.html">2.9. E-Mail-Versand aus kivitendo heraus</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s09.html#config.sending-email.sendmail">2.9.1. Versand über lokalen E-Mail-Server</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#config.sending-email.smtp">2.9.2. Versand über einen SMTP-Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s10.html">2.10. Drucken mit kivitendo</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s10.html#Vorlagenverzeichnis-anlegen">2.10.1. Vorlagenverzeichnis anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#Standard">2.10.2. Default</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#f-tex">2.10.3. f-tex</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#RB">2.10.4. RB</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#Allgemeine Hinweise zu LaTeX">2.10.5. Allgemeine Hinweise zu LaTeX Vorlagen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s11.html">2.11. OpenDocument-Vorlagen</a></span></dt><dt><span class="sect1"><a href="ch02s12.html">2.12. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
3
   <title>kivitendo: Installation, Konfiguration, Entwicklung</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="kivitendo: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch01.html" title="Kapitel 1. Aktuelle Hinweise"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">kivitendo: Installation, Konfiguration, Entwicklung</th></tr><tr><td width="20%" align="left">&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01.html">Weiter</a></td></tr></table><hr></div><div lang="de" class="book" title="kivitendo: Installation, Konfiguration, Entwicklung"><div class="titlepage"><div><div><h1 class="title"><a name="kivitendo-documentation"></a>kivitendo: Installation, Konfiguration, Entwicklung</h1></div></div><hr></div><div class="toc"><p><b>Inhaltsverzeichnis</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Aktuelle Hinweise</a></span></dt><dt><span class="chapter"><a href="ch02.html">2. Installation und Grundkonfiguration</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch02.html#Ben%C3%B6tigte-Software-und-Pakete">2.1. Benötigte Software und Pakete</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02.html#Betriebssystem">2.1.1. Betriebssystem</a></span></dt><dt><span class="sect2"><a href="ch02.html#Pakete">2.1.2. Pakete</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s02.html">2.2. Manuelle Installation des Programmpaketes</a></span></dt><dt><span class="sect1"><a href="ch02s03.html">2.3. kivitendo-Konfigurationsdatei</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s03.html#config.config-file.introduction">2.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s03.html#config.config-file.sections-parameters">2.3.2. Abschnitte und Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s03.html#config.config-file.prior-versions">2.3.3. Versionen vor 2.6.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s04.html">2.4. Anpassung der PostgreSQL-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s04.html#Zeichens%C3%A4tze-die-Verwendung-von-UTF-8">2.4.1. Zeichensätze/die Verwendung von UTF-8</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#%C3%84nderungen-an-Konfigurationsdateien">2.4.2. Änderungen an Konfigurationsdateien</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#Erweiterung-f%C3%BCr-servergespeicherte-Prozeduren">2.4.3. Erweiterung für servergespeicherte Prozeduren</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#Datenbankbenutzer-anlegen">2.4.4. Datenbankbenutzer anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s05.html">2.5. Webserver-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s05.html#d0e592">2.5.1. Grundkonfiguration mittels CGI</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Apache-Konfiguration.FCGI">2.5.2. Konfiguration für FastCGI/FCGI</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s06.html">2.6. Der Task-Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s06.html#Konfiguration-des-Task-Servers">2.6.1. Verfügbare und notwendige Konfigurationsoptionen</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Einbinden-in-den-Boot-Prozess">2.6.2. Automatisches Starten des Task-Servers beim Booten</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Prozesskontrolle">2.6.3. Wie der Task-Server gestartet und beendet wird</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Prozesskontrolle2">2.6.4. Task-Server mit mehreren Mandanten</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s07.html">2.7. Benutzerauthentifizierung und Administratorpasswort</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s07.html#Grundlagen-zur-Benutzerauthentifizierung">2.7.1. Grundlagen zur Benutzerauthentifizierung</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Administratorpasswort">2.7.2. Administratorpasswort</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Authentifizierungsdatenbank">2.7.3. Authentifizierungsdatenbank</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Passwort%C3%BCberpr%C3%BCfung">2.7.4. Passwortüberprüfung</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Name-des-Session-Cookies">2.7.5. Name des Session-Cookies</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Anlegen-der-Authentifizierungsdatenbank">2.7.6. Anlegen der Authentifizierungsdatenbank</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s08.html">2.8. Benutzer- und Gruppenverwaltung</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s08.html#Zusammenh%C3%A4nge">2.8.1. Zusammenhänge</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Datenbanken-anlegen">2.8.2. Datenbanken anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Gruppen-anlegen">2.8.3. Gruppen anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Benutzer-anlegen">2.8.4. Benutzer anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Gruppenmitgliedschaften-verwalten">2.8.5. Gruppenmitgliedschaften verwalten</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Migration-alter-Installationen">2.8.6. Migration alter Installationen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s09.html">2.9. E-Mail-Versand aus kivitendo heraus</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s09.html#config.sending-email.sendmail">2.9.1. Versand über lokalen E-Mail-Server</a></span></dt><dt><span class="sect2"><a href="ch02s09.html#config.sending-email.smtp">2.9.2. Versand über einen SMTP-Server</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s10.html">2.10. Drucken mit kivitendo</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s10.html#Vorlagenverzeichnis-anlegen">2.10.1. Vorlagenverzeichnis anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#Vorlagen-Standard">2.10.2. Standard</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#f-tex">2.10.3. f-tex</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#Vorlagen-RB">2.10.4. RB</a></span></dt><dt><span class="sect2"><a href="ch02s10.html#allgemeine-hinweise-zu-latex">2.10.5. Allgemeine Hinweise zu LaTeX Vorlagen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s11.html">2.11. OpenDocument-Vorlagen</a></span></dt><dt><span class="sect1"><a href="ch02s12.html">2.12. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
4 4
      EUR</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s12.html#config.eur.introduction">2.12.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s12.html#config.eur.parameters">2.12.2. Konfigurationsparameter</a></span></dt><dt><span class="sect2"><a href="ch02s12.html#config.eur.setting-parameters">2.12.3. Festlegen der Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s12.html#config.eur.inventory-system-perpetual">2.12.4. Bemerkungen zu Bestandsmethode</a></span></dt><dt><span class="sect2"><a href="ch02s12.html#config.eur.knonw-issues">2.12.5. Bekannte Probleme</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s13.html">2.13. SKR04 19% Umstellung für innergemeinschaftlichen Erwerb</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s13.html#config.skr04-update-3804.introduction">2.13.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s13.html#config.skr04-update-3804.create-chart">2.13.2. Konto 3804 manuell anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s14.html">2.14. Einstellungen pro Mandant</a></span></dt><dt><span class="sect1"><a href="ch02s15.html">2.15. kivitendo ERP verwenden</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch03.html">3. Features und Funktionen</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch03.html#features.periodic-invoices">3.1. Wiederkehrende Rechnungen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.introduction">3.1.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.configuration">3.1.2. Konfiguration</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.reports">3.1.3. Auflisten</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.task-server">3.1.4. Erzeugung der eigentlichen Rechnungen</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.create-for-current-month">3.1.5. Erste Rechnung für aktuellen Monat erstellen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s02.html">3.2. Dokumentenvorlagen und verfügbare Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.einf%C3%BChrung">3.2.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.variablen-ausgeben">3.2.2. Variablen ausgeben</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">3.2.3. Verwendung in Druckbefehlen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.tag-style">3.2.4. Anfang und Ende der Tags verändern</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.zuordnung-dateinamen">3.2.5. Zuordnung von den Dateinamen zu den Funktionen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.dateinamen-erweitert">3.2.6. Sprache, Drucker und E-Mail</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.allgemeine-variablen">3.2.7. Allgemeine Variablen, die in allen Vorlagen vorhanden
5 5
        sind</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.invoice">3.2.8. Variablen in Rechnungen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.dunning">3.2.9. Variablen in Mahnungen und Rechnungen über Mahngebühren</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.andere-vorlagen">3.2.10. Variablen in anderen Vorlagen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.bloecke">3.2.11. Blöcke, bedingte Anweisungen und Schleifen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.markup">3.2.12. Markup-Code zur Textformatierung innerhalb von
6
        Formularen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s03.html">3.3. Excel-Vorlagen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s03.html#excel-templates.summary">3.3.1. Zusammenfassung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.usage">3.3.2. Bedienung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.syntax">3.3.3. Variablensyntax</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.limitations">3.3.4. Einschränkungen</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Entwicklerdokumentation</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#devel.globals">4.1. Globale Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04.html#d0e4847">4.1.1. Wie sehen globale Variablen in Perl aus?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e4948">4.1.2. Warum sind globale Variablen ein Problem?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e4981">4.1.3. Kanonische globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5361">4.1.4. Ehemalige globale Variablen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s02.html">4.2. Entwicklung unter FastCGI</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.general">4.2.1. Allgemeines</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.exiting">4.2.2. Programmende und Ausnahmen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.globals">4.2.3. Globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.performance">4.2.4. Performance und Statistiken</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.known-issues">4.2.5. Bekannte Probleme</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s03.html">4.3. SQL-Upgradedateien</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.introduction">4.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format">4.3.2. Format der Kontrollinformationen</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.dbupgrade-tool">4.3.3. Hilfsscript dbupgrade2_tool.pl</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s04.html">4.4. Translations and languages</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s04.html#translations-languages.introduction">4.4.1. Introduction</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.file-structure">4.4.2. File structure</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s05.html">4.5. Die kivitendo-Test-Suite</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.intro">4.5.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.prerequisites">4.5.2. Voraussetzungen</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.execution">4.5.3. 
6
        Formularen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s03.html">3.3. Excel-Vorlagen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s03.html#excel-templates.summary">3.3.1. Zusammenfassung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.usage">3.3.2. Bedienung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.syntax">3.3.3. Variablensyntax</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.limitations">3.3.4. Einschränkungen</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Entwicklerdokumentation</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#devel.globals">4.1. Globale Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04.html#d0e4974">4.1.1. Wie sehen globale Variablen in Perl aus?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5075">4.1.2. Warum sind globale Variablen ein Problem?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5108">4.1.3. Kanonische globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e5488">4.1.4. Ehemalige globale Variablen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s02.html">4.2. Entwicklung unter FastCGI</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.general">4.2.1. Allgemeines</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.exiting">4.2.2. Programmende und Ausnahmen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.globals">4.2.3. Globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.performance">4.2.4. Performance und Statistiken</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.known-issues">4.2.5. Bekannte Probleme</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s03.html">4.3. SQL-Upgradedateien</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.introduction">4.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format">4.3.2. Format der Kontrollinformationen</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.dbupgrade-tool">4.3.3. Hilfsscript dbupgrade2_tool.pl</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s04.html">4.4. Translations and languages</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s04.html#translations-languages.introduction">4.4.1. Introduction</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.file-structure">4.4.2. File structure</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s05.html">4.5. Die kivitendo-Test-Suite</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.intro">4.5.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.prerequisites">4.5.2. Voraussetzungen</a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.execution">4.5.3. 
7 7
          Existierende Tests ausführen
8 8
        </a></span></dt><dt><span class="sect2"><a href="ch04s05.html#devel.testsuite.meaning_of_scripts">4.5.4. 
9 9
          Bedeutung der verschiedenen Test-Scripte

Auch abrufbar als: Unified diff