Mehrere unabhängige Tabellen

Ein Beispiel hierfür wäre eine Liste der Kunden, die von einer Chartauswertung der Angestellten gefolgt werden soll. Beide Tabellen sind nicht voneinander abhängig. Die Druckschleife für eine solche Ausgabe ist der aus dem vorigen Kapitel sehr ähnlich, mit einem Unterschied. Der Abschluss des Drucks einer Tabelle erfolgt über LlPrintFieldsEnd(), Sie bekommen an dieser Stelle aber möglicherweise den Rückgabewert LL_WRN_TABLECHANGE. Dies bedeutet, dass im Layout noch eine weitere zu druckende Tabelle vorhanden ist. Am Einfachsten teilen Sie die Druckschleife so auf, dass Sie verschiedene Unterroutinen haben.

Der erste Teil meldet die Daten und Datenstruktur an, startet den Druckjob und initialisiert die erste Seite, so dass mit dem Druck einer Tabelle begonnen werden kann. Die optionalen Teile der Druckschleife sind hier aus Übersichtlichkeitsgründen nicht enthalten, diese sind analog zu den im letzten Kapitel beschriebenen.

 

<definiere Datenstruktur>
       (LlDbAddTable,
        LlDbAddTableRelation,
        LlDbAddTableSortOrder)
<definiere alle möglichen Variablen>
       (LlDefineVariableStart,
        LlDefineVariable,
        LlDefineVariableExt,
        LlDefineVariableExtHandle)
<definiere alle möglichen Felder>
       (LlDefineFieldStart,
        LlDefineField,
        LlDefineFieldExt,
        LlDefineFieldExtHandle)
        LlSetPrinterDefaultsDir
<starte Ausdruck>
       (LlPrintStart,
        LlPrintWithBoxStart)
<definiere Optionen>
       (LlPrintSetOption,
        LlPrintSetOptionString,
        LlPreviewSetTempPath) 
<definiere unveränderliche Variablen>
       (LlDefineVariable,
        LlDefineVariableExt,
        LlDefineVariableExtHandle)
<drucke Variablen>     (drucke alle Objekte)
                (LlPrint)
<solange Warnung wiederholen>
                (LlPrint)

Der zweite Teil der Druckschleife benötigt eine Hilfsfunktion. Diese druckt die Daten einer einzelnen (Datenbank-)Tabelle:

Funktion DruckeTabelle(DataTable Datenobjekt)
{
       // DataTable ist ein geeignetes Datenzugriffsobjekt, z. B. eine
       // Datenbanktabelle, ein Klassenarray o. ä.

       <wiederhole>
       {
                <definiere Felder von DataTable>
                        (LlDefineField,
                         LlDefineFieldExt,
                         LlDefineFieldExtHandle)
                <drucke Zeile>
                        (LlPrintFields)
                <solange Warnung wiederholen>
                        (LlPrint,
                         LlPrintFields)
                <nächster Datensatz in DataTable>
       }
       <bis letzter Datensatz in DataTable erreicht>

       <Fußzeile drucken>
                (Rückgabewert = LlPrintFieldsEnd)
       <solange Warnung "Seite voll" wiederholen>
                (Rückgabewert = LlPrintFieldsEnd)
       <Ergebnis = Rückgabewert>
}

Als Rückgabewert erhält man die Information, ob eine weitere Tabelle folgt (LlPrintFieldsEnd() liefert dann LL_WRN_TABLECHANGE zurück), oder ob der Druck abgeschlossen werden kann (Rückgabewert 0).

Damit kann der zweite Teil des Drucks, also der Teil nach der Initialisierung der ersten Seite, wie folgt realisiert werden:

 

<wiederhole>
{
       <Hole aktuellen Tabellennamen>
                (LlPrintDbGetCurrentTable)
       <Hole aktuelle Sortierung>
                (LlPrintDbGetCurrentTableSortOrder)
       <Generiere ein passendes DataTable-Objekt>
       <Rückgabewert=DruckeTabelle(DataTable)>
}
<bis Rückgabewert <> LL_WRN_TABLECHANGE>

<beende Ausdruck>
       (LlPrintEnd)

 

Wenn Sie die "LLStaticTable"-Tabelle für freien Inhalt angemeldet haben und LlPrintDbGetCurrentTable() diese Tabelle als aktuelle Tabelle liefert, muss Ihre Druckschleife darauf mit dem Druck einer einzelnen Datenzeile über LlPrintFields() reagieren. Im Beispiel oben könnten Sie für den Fall von "LLStaticTable" einfach ein DataTable-Objekt mit nur einem beliebigen Datensatz erzeugen, dann läuft der Druck automatisch korrekt.

Dieser Code erlaubt bereits die beliebige Abfolge von mehreren Tabellen hintereinander. Im folgenden Abschnitt wird eine Erweiterung für den Druck von Untertabellen vorgenommen.