Nach langem Lesen der Dokumentation und herumprobieren, kommt leider nicht das gewünschte Ergebnis!
Ich möchte folgendes erreichen: die ersten beiden Seiten meines Berichts sollen im Hochformat ausgegeben werden. Ab Seite 3 soll ein Berichtscontainer mit einer Tabelle (Name der Tabelle ist “ComponentList”) beginnen. Dieser Container ist der dementsprechenden Ebene (Page() > 2) zugewiesen.
Und jetzt zum Problem: laut Doku kann über die Bedingung des selbst erstellten Layout-Bereichs das LL.CurrentContainerItem abgefragt werden. Wenn diese Bedingung “true” zurückliefert, wird dieses Layout auch nur für jene Seiten verwendet, wo die Tabelle “ComponentList” zu sehen ist.
Damit sollte man erreichen, dass die ersten beiden Seiten im Hochformat bleiben (da ja hier der Container bzw. die Tabelle noch nicht vorhanden ist), und die dritte Seite im Querformat ausgegeben wird.
Leider werden aber auch die ersten beiden Seiten im Querformat ausgegeben!
Weitere Kuriosität: stellt man die “Mindestzahl der Druckseiten” auf z.B. 10 um sieht man, dass die einzige Seite, welche im Hochformat ausgegeben wird, die Seite 4 ist. Alle anderen bleiben im Querformat.
Ich würde das mal genau wie in der Beispielanwendung bei “Mischung von Hoch- und Querformat” ausprobieren. Also nur einen Container (mit Formel für die Position), da die Tabellen hintereinander, vor dem gewünschten Wechsel einen Seitenumbruch auslösen und dann die Formel für die Layoutbereiche. Da klappt es ja prima. Bei mehreren Berichtscontainern kann ich mir vorstellen, dass es Probleme gibt - was soll LL.CurrentContainerItem da auch liefern, insbesondere kann man ja auch mehrere Container parallel drucken. Von daher - nur einen Container verwenden und schauen, ob es nicht auch so geht .
Die Beispielanwendung ist etwas anders aufgebaut als benötigt!
Ich habe ja nur einen Berichtscontainer mit einer Tabelle (Name ist “ComponentList”). Und der Tabelle habe ich die Ebene mit der Bedingung “Page() > 2” angegeben. Somit befindet sich die Tabelle auch richtigerweise erst auf Seite 3. Die ersten beiden Seiten sind somit leer - das Layout der beiden Seiten ist aber trotzdem im Querformat, sollten aber im Hochformat sein.
Die Bedingung am Seitenlayout des Querformats lautet: LL.CurrentContainerItem=“ComponentList”
Daher meiner Frage: warum ist das Layout der ersten beiden Seiten nicht Hochformat?
Ah - dann versuch doch mal, die Bedingung Page() > 2 auf den Berichtscontainer zu setzen, nicht auf die Tabelle. Oder - wenn es offenbar eh klar ist, dass die Tabelle erst ab Seite 3 kommt - das auch noch in die Layoutbereichsbedingung aufzunehmen, so dass da Page()>2 and LL.CurrentContainerItem="ComponentList" steht. Würde das gehen?
Danke, mit der Layoutbereichsbedingung “Page() > 2 and LL.CurrentContainerItem=“ComponentList”” ginge es.
Jedoch bräuchte man “Page() > 2” ja eigentlich gar nicht, da man ja eh das ContainerItem abfragt?! Und dieses ContainerItem ist in dem Fall nur auf der Seite 3. Denn was wäre, wenn der Container nicht auf Seite 3 ist, sondern woanders. Da könnte man ja auch nicht eine Seite mit Page() abfragen, da man das ja gar nicht weiß.
Scheinbar gibt da die Layoutbereichsbedingung “LL.CurrentContainerItem=“ComponentList”” immer True zurück, obwohl das Item gar nicht auf der jeweiligen Seite ist…
Das ist zugegebenermaßen etwas verwirrend, allerdings eigentlich logisch, wenn man drüber nachdenkt : Der Berichtscontainer ist ja technisch auf jeder Seite vorhanden, sein aktives Item ist in Ihrem Fall immer “ComponentList”. Dass sich dieses dann im aktuellen Fall gar nicht druckt entscheidet sich erst viel später und ist für LL.CurrentContainerItem auch ohne Belang. Das Item ist so lange “Current” bis es sich - dann ab Seite 3 ff. - erfolgreich gedruckt hat. Tut mir leid, wenn das bei Ihnen für Verwirrung gesorgt hat.
Sie müssten - wie von @Gunther_Schwarze vorgeschlagen - die Bedingung für die Tabelle in der Bedingung für den Bereich wiederholen. Das hängt auch mit dem Timing zusammen, das Layout für die aktuelle Seite wird bestimmt, bevor die Objekte ausgegeben werden. Oder Sie gehen wie in unserer Beispielanwendung vor - das entscheidende ist dabei, dass vor der Tabelle ein Seitenumbruch ausgelöst wird. In diesem Moment hat LL.CurrentContainerItem dann genau deswegen schon den richtigen Wert.
Mit einem Trick sollten Sie das ausnutzen können: wenn Sie vor ihre eigentliche Tabelle eine (leere) Tabelle mit freiem Inhalt platzieren, dann ihrer eigenen Tabelle einen “Seitenumbruch vor” geben und die Darstellungsbedingung des Containers auf Page() > 1 ändern. Was dann passiert ist:
der freie Inhalt wird auf S. 2 ausgegeben
die eigentliche Tabelle wird ausgewertet, LL.CurrentContainerItem wird auf den richtigen Namen gesetzt
der Seitenumbruch wird ausgelöst und die Bedingung für den Layout-Bereich greift richtig
die Tabelle wird ausgegeben
Das hat zumindest in meinem Test (anbei) hier prima geklappt:
auch wenn der oben genannte Forumseintrag auf gelöst steht, so möchte ich hier trotzdem aufspringen, denn ich habe die gleiche Ausgangssituation und komme mit genannten Lösungsvorschlägen nicht weiter.
Die genannten Beispiele (Beispielanwendung “Mischung von Hoch- und Querformat” und Forumsbeispiel “Seitenlayout-Bedingung.lsr”) habe ich angeschaut und finde nicht den Kniff, der offenbar benötigt wird.
Meine Ausgangssituation:
List & Label Version 24
Basis mit Bildobjekt, leer (keine Bedingung)
Seite 1, 1 Diagramm: Page() = 1
Seite 2, 1 Tabelle: Page() = 2
Seite 3, 1 Textobjekt: Page() = 3
Bedingung beim Layout:
Bei Projekt -> Layout-Bereiche -> Einen Bereich für das Querformat angelegt: LL.CurrentContainerItem=“Tabellenname”
Mindestanzahl der Druckseiten: 3
Ergebnis, IST:
Seite 1 und 2 im Querformat. Seite 3 hochkant.
SOLL:
Nur Seite 2 soll mit der Tabelle im Querformat erscheinen.
Der Vorschlag oben beruht darauf, dass alle Elemente in einem Container sind. Haben Sie die Möglichkeit, das Diagramm und Textobjekt ebenfalls als eigene Elemente in den Berichtscontainer aufzunehmen? Dann sollten Sie den Vorschlag oben umgesetzt bekommen und gewinnen zudem die Flexibilität, dass die Tabelle auch länger als eine Seite werden kann.
Text und Diagramm lassen sich nicht in einen Container zusammenfügen. Zumindest weiß ich nicht wie. Bei der Funktion “Ein Element anfügen” ist ein Textobjekt nicht dabei.
Dann habe ich also eine andere Situation als das Ausgangsposting. Gibt es eine Lösung für meine oben beschilderte Situation?
Wenn sie bei “Ein Element anfügen” die Tabelle auswählen und sich dann für “Freier Inhalt” als Datenbasis entscheiden können Sie auch einen beliebigen Text verwenden. Das Diagramm können Sie als Typ “Diagramm” einfügen.
Die Problemstellung ist m.E. nur auf diesem Weg zuverlässig zu lösen.
Dann ist es mit Page() = 1 und Page() = 2 und Page() = 3 usw. eine falsche Herangehensweise. Ich habe bei einem neuen Report die Ebenen mit Basis (leer), Page() = 1 und Page() <> 1 definiert, alle Objekte in einem Container zusammengefasst und der Ebene Page() <> 1 zugewiesen. Der Seitenformatwechsel funktioniert dann.
Ich brauche trotzdem noch eine (meinetwegen “holprige”) Lösung für meine Ausgangssituation. Ich habe mehrere Objekte den Ebenen fest zugewiesen mit Page() = fester Seitenzahl (hochkant). Zum Schluss soll eine Tabelle im Querformat hinzugefügt werden.
Ist da etwas zu machen? (Ohne Zusammenfassung in Berichtscontainern)
In dem Fall würde sich ja die Seitenzahl für den Querformatsbereich direkt angeben lassen. Dann würde ich einen Bereich “Querformat” mit Bedingung Page()>=x definieren wobei sich das x dann aus der Zahl der gewünschten Startseiten im Hochformat ergibt.