Darstellungsbedingung um Text nicht auf Seiten eines PDF-Objektes anzuzeigen

Hallo zusammen,

folgendes Problem:
Ich habe einen Report mit einem Berichtscontainer und einem eingebetteten PDF-Dokument (8 Seiten lang).
Das PDF-Dokument hat eine Vielzahl von Darstellungsbedingungen, wird also nicht jedes Mal gedruckt.
Das PDF-Dokument ist zeitlich mit dem Berichtscontainer verknüpft, außerdem ist diese Variable eingebaut und in der Darstellungsbedingung des PDFs enthalten wie in der folgenden Anleitung aufgeführt:
Praxis: PDF nach einer Tabelle auf letzter Seite ausgeben

Im Report enthalten sind mehrere Textobjekte, die natürlich NICHT auf den Seiten dargestellt werden sollen, auf denen das PDF angezeigt wird (also den letzten 8 Seiten).

Wie kann eine solche Darstellungsbedingung aussehen?

  • Der Berichtscontainer hat eine variable Länge, d.h. ich kann nicht Seitenzahlen “von vorne” zählen.
  • Lastpage() hilft nicht, da es ausschließlich prüft ob es die letzte Seite ist.
  • Totalpages$() hilft ebenfalls nicht, da nicht für Verwendung in Formeln vorgesehen.
  • Die Variable am Ende der Tabelle hilft ebenfalls nicht (da nur globales TRUE/FALSE, keine Seitenzahl).

Hallo und herzlich Willkommen im Forum :slight_smile:.

Wenn der Berichtscontainer zum Zeitpunkt der Ausgabe des PDF-Objekts schon beendet ist kannst du durchaus mit Lastpage arbeiten. Die Bedingung liefert für mehrere Seiten true, nämlich für alle die nach dem Berichtscontainer ausgegeben werden.

Hey, danke für die schnelle Antwort!

Leider ist es in meinem Beispiel aber tatsächlich so, dass die “Not Lastpage()” Darstellungsbedingung die Texte lediglich auf der allerletzten Seite ausblendet.

Kannst du mal versuchen, die Texte zeitlich hinter die Tabelle zu verketten? Eventuell ist es noch ein Problem der Reihenfolge. Das ist hier dokumentiert.

Ansonsten könntest du mal versuchen, das Szenario mit der Beispielanwendung nachzustellen, dann schauen wir uns das gerne an.

Hallo,
sorry für die späte Antwort (Urlaub kam dazwischen).

Ich habe die zeitliche Verkettung versucht, so dass in der Objektliste unter der Tabelle jetzt alle Textfelder aufgeführt werden die nicht auf der “letzten Seite” dargestellt werden sollen (und eines, welches zwar immer dargestellt werden soll, aber die Anzahl der Gesamtseiten benötigt) sowie das PDF-Dokument, das dargestellt werden soll.
Im Objektdialog habe ich dazu jeweils die Tabelle ausgewählt, “Verketten mit” und dann das jeweilige Textfeld.

Die Textfelder haben die folgende Darstellungsbedingung:
Cond(AttributXYWert=2, Not Lastpage(), True)

Die Textfelder sind teilweise der Ebene “Basis” und teilweise der Ebene “Folgeseiten” zugewiesen.

Mit der zeitlichen Verkettung habe ich jetzt tatsächlich keine Darstellung der Textfelder die der Ebene “Folgeseiten” zugewiesen sind mehr - also generell nicht, nicht nur nicht auf den PDF-Seiten.
Das Textobjekt, das der Ebene “Basis” zugewiesen ist, wird auf der allerersten Seite angezeigt, auf der zweiten (die Teil der Tabelle ist, also noch keine PDF-Seite) auch nicht mehr.
Wie gesagt ist mein Ziel aber, dass diese Felder nur auf den “PDF-Seiten” nicht dargestellt werden sollen.

Gerne würde ich das in der Beispielanwendung nachstellen - ist damit die Free Trial gemeint oder geht das auch im Web-Reporting-Tool (dort habe ich soweit ich sehe nicht die Möglichkeit neue Objekte zu erzeugen)?

Dass die Objekte nur einmal ausgegeben werden liegt vermutlich daran, dass die Option “Seitenumbruch” für die Objekte aktiv ist - dann werden Objekte nur einmal ausgegeben. Wenn du den Umbruch deaktivierst sollte das klappen.

Warum die Objekte aber gar nicht ausgegeben wird bleibt rätselhaft. Ja, genau ich meinte die Trial-Version, da ist eine Beispielanwendung dabei, mit der das Problem mal nachgestellt werden könnte. Vielleicht hilft ja auch für diesen Problemteil das deaktivieren des Seitenumbruchs für die Textobjekte.

Danke für die Antwort!

Der “Seitenumbruch” (wie auch “Umbruch vor”) steht bei allen Textobjekten auf “nein”.
Nur beim PDF steht “Umbruch vor” auf “Ja”.

Es scheint hier aber eine Interaktion zwischen drei Dingen zu geben:

  • Darstellungsbedingung der einzelnen Objekte
  • Zuweisung zur Ebene
  • Anordnung (Vorder- oder Hintergrund)

Wie ich festgestellt habe, hat die bisherige Darstellungsbedingung die Textfelder auf den PDF-Seiten nicht ausgeblendet, sie waren nur nicht sichtbar da das “PDF”-Objekt dem “Vordergrund” zugewiesen war und damit nach dem Druck “vor” den Textfelder angezeigt wurde. Wenn das “PDF”-Objekt entsprechend dem “Hintergrund” zugewiesen ist, dann sind diese Felder sichtbar.
Das funktioniert aber nur in Verbindung mit der Darstellungsbedingung - wenn ich diese entferne und durch True / “Immer anzeigen” ersetze, dann werden die Text-Felder angezeigt unabhängig von der Anordnung.

Damit könnte ich leben, allerdings stehe ich noch vor einem Problem:
Es wird anscheinend bereits die Seite, auf der die Tabelle endet als “Lastpage()” betrachtet (auch wenn das bereits auf der ersten Seite der Fall ist). Ich bräuchte aber eine Darstellungsbedingung, die nur die Seiten, die auf die letzte Seite der Tabelle folgen, ausschließt.
Oder alternativ eine Darstellungsbedingung die nur die durch das PDF belegte Seiten ausschließt.

/€: Es scheint sogar so zu sein, dass “Lastpage()” den Report-Teil mit dem Berichtscontainer / Tabelle und den Report-Teil mit dem PDF als getrennte Report-Teile behandelt. Bei vorhandener Darstellungsbedingung und mit PDF “in den Hintergrund”:

  • Textfelder werden NICHT auf der letzten von der Tabelle belegten Seite angezeigt
  • Textfelder WERDEN auf den ersten sieben Seiten des achtseitigen PDFs angezeigt (diese folgen auf die letzte Seite mit Tabelle)
  • Textfelder werden NICHT auf der letzten (also achten) Seite des achtseitigen PDFs angezeigt

/€€: Auch ohne Darstellungsbedingung (also mit “True” / “Immer anzeigen”) werden die Textobjekte NICHT auf der letzten Seite der Tabelle angezeigt (aber auf den übrigen Seiten). Hat vermutlich mit der zeitlichen Verkettung zu tun, erschließt sich mir aber nicht wirklich.

Ich hänge hier mal ein Projekt für unsere Demoanwendung an. Als Darstellungsbedingung verwende ich als Kniff die RemainingTableSpace()-Funktion, die -1 zurückliefert, wenn auf der aktuellen Seite gar keine Tabelle gedruckt wird. Allerdings braucht es ein neues Modul (28.004 oder 29.000) damit das in der Demo so funktioniert wie gedacht, nur dann wird das angehängte PDF vollständig ausgegeben. Du scheinst keinen Datenprovider zu verwenden? Dann könnte es auch direkt bei dir funktionieren. Wichtig ist - wie von dir schon vermutet - die Druckreihenfolge. Das PDF sollte ganz zum Schluss ausgegeben werden, auch die Textfelder sollten vor dem PDF in der Reihenfolge stehen. Sonst hast du genau den von dir beschriebenen Effekt, dass die Textfelder sich auf der letzten Seite der Tabelle nicht drucken. Grund ist, dass - falls erst das PDF ausgegeben wird - dieses einen Seitenumbruch auslöst, bevor die Textfelder ausgegeben werden können.

Teste das gerne mal mit der LL29-Demo (sobald die verfügbar ist, vermutlich ab kommender Woche) oder melde dich kurz bei unserem Support für eine aktualisierte LL28-DLL.

Artikelliste mit Bildern.lst (993.7 KB)

Hey, vielen Dank für die schnelle Antwort!

Ich muss gestehen, dass ich nicht weiß was ein Datenprovider ist - LL ist als Report-Lösung in unserem CAFM-System integriert, entsprechend stammen die Daten von dort.

RemainingTableSpace() finde ich nicht in der Liste der Funktionen, aber wenn ich in einer Darstellungsbedingung “RemainingTableSpace()=-1” eingebe, gibt LL “false” aus anstelle von “Syntax konnte nicht interpretiert werden”. Die genaue Version die wir verwenden sehe ich leider nicht auf anhieb.
Wäre aber eine durchaus passende Lösung, da ich in dem Report nur Seiten mit entweder einer Tabelle ODER einem PDF habe.

Davor hatte ich den Ansatz, irgendwie zu versuchen vor der letzten Zeile der Tabelle einen Seitenumbruch zu erzwingen, wenn die Darstellungsbedingung für das PDF erfüllt ist, bin da aber nicht weiter gekommen.

Ah, okay, ich hatte das jetzt aus Entwicklersicht geschrieben :slight_smile:. Klappt es denn mit der Bedingung dann? Oder nicht? Sonst müsste sich dein Hersteller mal bei uns melden und wir versuchen, das zusammen im Kontext deiner Applikation zu lösen.

Also nach etwas herumprobieren habe ich jetzt scheinbar das gewünschte Ergebnis - danke für den Tip!

Ich dachte die Darstellungsbedingung “RemainingTableSpace()=-1” gibt für Seiten, auf denen KEINE Tabelle gedruckt wird, “True” aus.
Beim Testen mit dieser Bedingung wurden die Textfelder aber gerade auf den Seiten mit PDF dargestellt (wo sie nicht dargestellt werden sollten).

Mit der Darstellungsbedingung “RemainingTableSpace()<>-1” dagegen werden die Textfelder nur auf den Seiten mit der Tabelle gedruckt, und nicht mehr auf den Seiten mit dem PDF. :+1:

1 Like