Ich wende mich einmal mit dieser doch recht speziellen Anforderung vertrauensvoll an das Forum und hoffe auf eine Lösung.
Gibt es eine Möglichkeit, innerhalb eines zu druckenden Dokuments die restliche verbleibende Höhe innerhalb der aktuellen Seite herauszufinden?
Folgendes Problem möchte ich damit lösen: Eine Tabelle mit freiem Inhalt enthält ein HTML-Feld welches wiederum ein generiertes Bild enhält (Diagramm das von der Anwendung on the fly erzeugt wird). Je nach Position des Diagramms innerhalb der Seite (das hängt von der Länge der Texte vor dem Diagramm ab), hat das Diagramm noch Platz auf der Seite oder eben nicht. Das Diagramm kann auch datenabhängig unterschiedlich hoch sein.
Nun würde ich dem Diagramm gerne in der URL einen Parameter übergeben, welcher den Code, der das Diagramm erzeugt, darüber informiert, wieviel Platz das Diagramm noch zur Verfügung hat und das Diagramm dann entsprechend abschneiden und auf der nächsten Seite den verbleibenden Rest ausgeben. Dazu wäre ein weiterer Aufruf nötig.
Ich stelle mir so etwas vor wie die Funktion CurrentLineIndex() mit welcher ich feststellen kann, in welcher Zeile einer Tabelle man sich gerade befindet. Vielleicht gibt es soetwas wie “RemainingSpace()” (ich weiß, eine Wunschvorstelliung).
Soweit ich bisher herausfinden konnte, ist es nicht möglich, HTML-Felder innerhalb von Tabellen mit freiem Inhalt zu einem Seitenumbruch innerhalb eines ins HTML eingebetteten Bildes zu überreden, also so das die erste Hälfte des Bildes am Ende einer Seite und die zweite Hälfte am Anfang der nächsten Seite gedruckt wird. Falls das doch irgendwie möglich sein sollte, wäre das natürlich auch eine brauchbare Lösung, wenn auch nicht 100%ig ideal da das Diagramm dann irgendwo zerteilt wird und nicht an einer von mir zuvor ermittelten “Sollburchstelle”.
Vielen Dank im Voraus schon mal für Eure Gedanken und Lösunsvorschläge!
Für dein spezielles Problem scheint die Designer Funktion RemainingTableSpace() genau das Richtige zu sein. Diese Funktion kann genutzt werden, um den noch verbleibenden Platz auf der aktuellen Seite zu ermitteln. Hier ist der Link zur entsprechenden Dokumentation:
Mit dieser Funktion kannst du die verbleibende Höhe in der aktuellen Tabelle bestimmen. Das könnte dir ermöglichen, den Platz für dein Diagramm dynamisch zu berechnen und entsprechend zu reagieren.
Ein kleines Beispiel haben wir dir ebenfalls angehängt:
Jetzt habe ich einmal ein wenig mit der Funktion “RemainingTableSpace()” experimentiert und muss gestehen, dass ich da noch nicht so ganz schlau draus geworden bin. Folgendes habe ich probiert:
Wobei die geschachtelte Tabelle den Text mit dem rosanen Hintergrund anzeigt.
Interssant ist hier, dass die ersten 4 Zeilen immer dasselbe Ergebnis an verbleibendem Platz ermitteln obwohl das eigentlich nicht sein kann. Bei der Tabelle am Ende kommt dann doch ein deutlich niedrigerer Wert heraus.
Jetzt bin ich etwas verwirrt wie man diese Ergebnisse zu interpretieren hat bzw. wie diese überhaupt genau zustandekommen.
die Funktion RemainingTableSpace() funktioniert grundsätzlich auch in Untertabellen und freien Tabellen. Wichtig ist dabei jedoch, dass sie für alle Zeilendefinitionen, die auf einmal gedruckt werden, nur einmal berechnet wird, nämlich bevor die erste Zeile ausgegeben wird.
Das bedeutet, dass der Wert in einer Tabelle mit freiem Inhalt konstant dem Platz entspricht, der zu Beginn der Tabelle im Berichtscontainer frei war. Falls das Verhalten bei dir anders ist, könnte es sich um ein spezifisches Problem handeln. In diesem Fall wäre es sinnvoll, einen Support Case im Supportportal zu erstellen.
Ich bin jetzt leicht verwirrt. Habe per Email eine Benachrichtigung bekommen, dass es hier eine Antwort gibt. Die Antwort unterscheidet sich aber inhaltlich völlig von der Antwort die hier zu lesen ist:
Die Funktion RemainingTableSpace() funktioniert nicht in Untertabellen und auch nicht in freien Tabellen. Du musst daher eine eigenständige Tabelle dafür verwenden, dann liefert die Funktion genau die erwarteten Ergebnisse. In geschachtelten Tabellen oder freien Tabellen kann es passieren, dass der verfügbare Platz nicht korrekt berechnet wird, was zu den beobachteten Werten führt.
Ich bin mir jetzt nicht sicher, ob ich die Anwort überhaupt richtig verstanden habe oder ich habe nicht verstanden, welchen Sinn diese Funktion tatsächlich hat. So wie ich das verstanden hatte, kann ich pro Zeile der Tabelle feststellen, wieviel “Restplatz” noch zur Verfügung steht um auf Basis dessen Bedingungen zu nutzen welche die Ausgabe beeinflussen. Dazu muss ich pro Zeile wissen, wieviel Platz noch frei ist. Dieser Wert sollte dann in jeder Zeile kleiner sein als in der Zeile davor.
Aber vielleicht habe ich das auch nicht richtig verstanden. Vielleicht könnte man das besser anhand eines Beispiels erläutern.
Siehe dazu bitte auch meine eigentliche Anforderung zu Beginn dieses Threads. Das ist ja das eigentliche Problem das ich lösen wollte und für welches mir diese Funktion empfohlen wurde.
Die ursprüngliche Antwort war nicht richtig, @mlitkin hat sie korrigiert. Hier mag es ein Verständnisproblem geben, was mit “Zeilen” gemeint ist.
Jede Tabelle (auch die mit freiem Inhalt) kann mehrere Zeilendefinitionen haben. Zudem können Tabellen mit einer Datenquelle auch mehrere Datensätze enthalten. Die Funktion RemainingTableSpace wird immer zu Beginn der Ausgabe eines Datensatzes aktualisiert. In allen zu diesem Datensatz gehörenden Zeilendefinitionen (die alle zu genau diesem Zeitpunkt berechnet und fixiert werden) hat die Funktion den selben Wert. Daher ist in deinem Beispiel oben der Wert für Line 1 - Line 4 identisch. In Line 5 ist ja wieder eine Tabelle enthalten, für diese wird dann erneut RemainingTableSpace berechnet, daher weicht der Wert dort dann ab.
Kannst du mal dein real existierendes Layout hier posten? Wo genau würdest du gerne den Seitenumbruch haben? Ist das innerhalb eines Datensatzes zwischen zwei Zeilendefinitionen? Oder im Berichtscontainer vor der Ausgabe eines Folgeelements?