+1 800 256 3608 (toll-free in North America) or +49 7531 90 60 10| service@combit.com

LL24: Bedingung bei Seitenlayout

designer
(Johann Wagner) #1

Hallo

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.

Bitte um Hilfe, danke!

(Günther Schwarze) #2

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 :slight_smile:.

(Johann Wagner) #3

Danke für die rasche Antwort!

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?

Danke!

(Günther Schwarze) #4

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?

1 Like
(Johann Wagner) #5

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…

Oder habe ich hier einen Denkfehler?

1 Like
(combit - Jochen Bartlau) #6

Das ist zugegebenermaßen etwas verwirrend, allerdings eigentlich logisch, wenn man drüber nachdenkt :nerd_face:: 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.

(Johann Wagner) #7

Danke, dass hab ich jetzt soweit verstanden!

Gibt es dann nun eine andere Möglichkeit, um ein Layout davon abhängig zu machen, ob eine bestimmte Tabelle darin vorhanden ist oder nicht?

(combit - Jochen Bartlau) #8

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:

image

Seitenlayout-Bedingung.lsr (40.4 KB)

1 Like