HintergrundProzessierung von Schleifen und Tabellen

 

Wenn Sie den Schleifen- oder Tabellen-Knoten verwenden, geben Sie in der Regel eine interne Tabelle an. Diese wird von SAP Smart Forms zeilenweise ausgelesen, um Daten auszugeben. Da die Anzahl der Einträge dieser Tabelle so groß werden kann, daß die Ausgabe nicht auf eine Seite paßt, verwenden Sie für solche Ausgaben ein Hauptfenster.

Die Besonderheit bei der Ausgabe von Tabellen ist also, daß die Größe einer Tabelle dynamisch ermittelt werden muß. Für die Ausgabesteuerung haben dabei verschiedene Höhen eine Bedeutung:

  • Die Höhe des Fußbereichs (die Höhe des Kopfbereichs ist deshalb nicht so entscheidend, weil er immer zu Beginn des Hauptfensters ausgegeben wird).

  • Die Höhe einer Tabellenzeile. Damit ist die Ausgabe aller Knoten über einen Zeilentyp gemeint. Die Höhe der Tabellenzeile hängt von der höchsten Zelle der Zeile ab und dies hängt wiederum davon ab, wie viele Inhalte in dieser Zelle ausgegeben werden.

  • Die Höhe einer Zeile. In einer Tabellenzelle sind Ausgaben über mehrere Zeilen möglich. Falls alle Zeilen einer Tabellenzeile immer zusammen ausgegeben werden sollen, muß für den Zeilentyp das Kennzeichen Schutz vor Umbruch gesetzt werden.

Bei der Prozessierung berechnet SAP Smart Forms allerdings nicht die Größe der gesamten Tabelle im voraus, sondern muß für die folgende Zeile entscheiden, ob sie noch auf die aktuelle Seite paßt.

Der Fußbereich

Bei der Ausgabe von Tabellen steht Ihnen neben dem Hauptbereich zur Ausgabe der Tabellenzeilen ein Kopf- und ein Fußbereich zur Verfügung. Der Fußbereich hat besondere Bedeutung, wenn er vor jedem Seitenumbruch ausgegeben wird. Die Ausgabesteuerung muß dann nämlich die Höhe des Fußbereichs berücksichtigen, um den Zeitpunkt für den automatischen Seitenumbruch zu bestimmen. Wenn Sie keine Höhe für den Fußbereich angegeben haben, kann die Ausgabesteuerung keinen Platz am Ende des Hauptfensters reservieren und so auch nicht die Unterknoten des Fußbereichs vor dem Seitenumbruch ausgeben.

Automatischer Seitenumbruch versus Seitenschutz

Die Ausgabesteuerung realisiert einen automatischen Seitenumbruch, um Inhalte auf mehreren Seiten ausgeben zu können. Aus Sicht des Formularentwicklers ist dieser Seitenumbruch nicht immer erwünscht, zum Beispiel, weil Tabellenzeilen immer komplett ausgegeben werden sollen. Würde man für diese Tabellenzeilen einen Zeilentyp ohne Schutz vor Umbruch verwenden, kann es aus Platzgründen passieren, daß Zellen einer Tabellenzeile am Ende des Hauptfensters nicht vollständig ausgegeben werden.

Hinweis Hinweis

Bei Ausgaben außerhalb von Tabellen können Sie an Stelle des Kennzeichens Schutz vor Umbruch bei den Ausgabeoptionen das Kennzeichen Seitenschutz setzen.

Ende des Hinweises
Prozessierung
Anforderungen an den automatischen Seitenumbruch

Zum Zeitpunkt der Ausgabe muß SAP Smart Forms dynamisch feststellen, wann die Ausgabe nicht mehr auf die aktuelle Seite paßt und gegebenenfalls einen Seitenumbruch durchführen. Für die Prozessierung von Tabellen hat dies insofern eine Bedeutung, daß die Tabellenzeilen nicht unmittelbar nach der Prozessierung der zugehörigen Knoten ausgegeben werden können. Jedesmal, wenn eine neue Zeile beginnt, muß die Ausgabesteuerung feststellen, wie hoch die auszugebende Zeile sein wird und speichert dazu die gesamte Zeile in einem Puffer. Warum dies nötig ist, zeigen die folgenden Beispiele:

Beispiel Beispiel

In den Zellen innerhalb einer Tabellenzeile werden Inhalte ausgegeben, die mal über eine Zeile und mal über mehrere Zeilen gehen. Wenn der Zeilentyp vor Seitenumbruch geschützt ist, müssen aber trotzdem noch alle Zellen der Tabellenzeile auf der Seite ausgegeben werden. Dies hängt von der Höhe der höchsten Zelle in der Tabellenzeile ab.

Ende des Beispiels.

Beispiel Beispiel

Selbst wenn der Tabellenzeilentyp nicht vor dem Seitenumbruch geschützt ist, könnte in einer späteren Zelle eine Grafik folgen, die höher ist als die Textausgaben der ersten Zellen.

Ende des Beispiels.

Die Beispiele zeigen, daß erst durch die Analyse der gesamten Zeile im Puffer die Ausgabesteuerung die Zeilenhöhe der nächsten Zeile feststellen kann.

Ablauf der Prozessierung

Für die Formularentwicklung sind nicht alle Details der Ausgabesteuerung interessant. Wir konzentrieren uns hier auf die Frage, wann der Fußbereich prozessiert wird und wie der automatische Seitenumbruch ermittelt wird:

  1. Der Kopfbereich wird, sofern Sie die Ausgabe zum Anfang der Tabelle beziehungsweise bei Seitenumbruch aktiviert haben, prozessiert und ausgegeben.

  2. Beim alten Tabellen-Knoten markiert die Ausgabe des ersten Unterknotens, bei dem bei den Ausgabeoptionen das Kennzeichen neue Zeile angekreuzt ist, sowohl das Ende der letzten Zeile, als auch den Beginn einer neuen Zeile. Beim neuen Tabellen-Knoten ist das Zeilenende durch das explizite Anlegen von Tabellenzeilen gegeben. In beiden Fällen berechnet Smart Forms zu diesem Zeitpunkt, ob ein automatischer Zeilenumbruch durchgeführt werden muß:

    1. Befindet sich bereits eine Tabellenzeile im Puffer, so handelt es sich um die Zeile des vorherigen Schleifendurchlaufs. Mit dem Beginn der neuen Tabellenzeile kann nun für die gepufferte Zeile festgestellt werden, ob sie noch auf die Seite paßt. Dabei wird der noch nicht ausgegebene Fußbereich berücksichtigt, vorausgesetzt dieser soll vor dem Seitenumbruch ausgegeben werden:

      • Ist noch genügend Platz auf der Seite vorhanden, wird sie ausgegeben.

      • Falls nicht, prozessiert die Ausgabesteuerung den Fußbereich und gibt ihn aus. Danach arbeitet die Ausgabesteuerung alle folgenden Fenster der Seite ab und fügt einen Seitenumbruch ein. Die gepufferte Zeile wird dann also nach dem Seitenumbruch ausgegeben.

    2. Die Tabellenzeile des aktuellen Schleifendurchlaufs wird gepuffert, um ihre Höhe festzustellen. Die Ausgabesteuerung gibt sie aber erst mit dem nächsten Schleifendurchlauf aus.

  3. Nach der Prozessierung des letzten Unterknotens beginnt die Prozessierung wieder beim ersten Unterknoten der Tabelle (beim neuen Tabellenknoten im Hauptbereich).

Programmzeilen-Knoten

Programmzeilen-Knoten müssen gesondert betrachtet werden:

  • Programmzeilen-Knoten können nicht gepuffert werden. Die Ausgabesteuerung führt Sie also direkt bei Ihrer Prozessierung aus und nicht erst dann, wenn die zugehörige gepufferte Zeile im nächsten Schleifendurchlauf ausgegeben wird. Dies hat Konsequenzen für die Ausgabe einer Zwischensumme am Ende der Seite über den Fußbereich.

  • Programmzeilen-Knoten haben keine Ausgabe. Beim alten Tabellen-Knoten hat dies zur Konsequenz, daß Sie für die Ausgabesteuerung noch nicht den Beginn einer neuen Zeile markieren. Das bedeutet, daß alle Programmzeilen-Knoten, die sich vor dem ersten Knoten mit einer Ausgabe befinden, schon prozessiert werden, obwohl die Ausgabe der Zeile des letzten Schleifendurchlaufs noch nicht vollständig abgeschlossen ist. Beim neuen Tabellen-Knoten ist dies nicht so, weil durch das explizite Anlegen von Tabellenzeilen das Tabellenende festgelegt ist.

Die Programmzeilen-Knoten innerhalb einer Tabelle oder Schleife werden natürlich in der gewünschten Reihenfolge ausgeführt und nicht etwa mehrfach pro Schleifendurchlauf. Nur ist zu beachten, daß deren Ausführung durch die oben angegebenen Punkte zeitversetzt zur Ausgabe der Knoten stattfindet (auch beim neuen Tabellen-Knoten).

Hinweis Hinweis

Der Abschnitt Summieren beschreibt, wie Sie mit Hilfe von Programmzeilen-Knoten korrekte Summen ausgeben. Die dort beschriebene Vorgehensweise ist nur nötig, wenn Sie über Werte mit verschiedenen Währungen oder Einheiten summieren wollen. Ansonsten können Sie die Registerkarte Berechnungen des neuen Tabellen-Knotens verwenden, bei der Sie sich keine Gedanken über die Prozessierung der Schleife machen müssen.

Ende des Hinweises