Flexible Berichte mit MoveLayout, NextRecord und PrintSection

Berichte lassen sich dank der unterschiedlichen Bereiche bereits sehr flexibel gestalten. Manchmal reicht dies aber nicht aus – zum Beispiel, wenn mehrere Datensätze in eine Zeile, mehrfach oder gar nicht gedruckt werden sollen. In diesem Fall helfen die drei Eigenschaften MoveLayout, NextSection und PrintSection in diversen Kombinationen weiter.

Wozu mehr Flexibilität

Das Standardbeispiel für den Einsatz zumindest von zwei der oben genannten Eigenschaften ist der Etikettendruck. Es sollen meist mehrere Datensätze in einer Zeile gedruckt werden und die Anzahl der Exemplare je Datensatz variiert von keinem bis beliebig vielen.

Dass man dazu allenfalls noch die Eigenschaft MoveLayout benötigt, wenn man die Datenherkunft des Berichts vorher entsprechend anpasst, haben wir bereits in [1] gezeigt.

Access-Berichte bieten nur wenig Flexibilität, wenn es beispielsweise um mehrspaltige Berichte geht. So können Sie beispielsweise ohne Unterbericht und sonstige Tricks keinen einspaltigen Gruppenkopf mit zweispaltigen Detaildatensätzen realisieren. Die Seiteneinrichtung liefert zwar die Möglichkeit, mehrspaltige Berichte einzurichten und auch die Reihenfolge (von links nach rechts, von oben nach unten) festzulegen, aber Bereiche wie Gruppenköpfe oder -füße werden dort nicht berücksichtigt. Wenn Sie etwa den Bericht mit der Entwurfsansicht aus Abb. 1 mit den Einstellungen aus Abb. 2 ausgeben, erhalten Sie den Bericht aus Abb. 3.

pic001.tif

Abb. 1: Entwurf eines zweispaltigen Berichts

pic002.tif

Abb. 2: Einstellungen für einen zweispaltigen Bericht

pic003.tif

Abb. 3: Verunglückter zweispaltiger Bericht mit Gruppierung nach Kategorien

Ein besseres Ergebnis erhalten Sie, wenn Sie die Mehrspaltigkeit selbst realisieren. Dazu stellen Sie einfach die Spaltenanzahl wieder auf den Wert 1 ein und gehen wie folgt vor.

MoveLayout – nächste Zeile oder nicht

Die Eigenschaft MoveLayout legt fest, ob der Inhalt des folgenden Bereichs in den aktuellen Bereich hineingeschrieben werden soll. Um dies zu verstehen, muss man wissen, dass Access Berichte Bereich für Bereich aufbaut. Bei allen Bereichen gibt es wiederum Prüfungen, ob diese noch auf die aktuelle Seite passen, ansonsten werden die notwendigen Schritte unter den gegebenen Bedingungen noch einmal wiederholt.

Im vorliegenden Fall wird Access zunächst den Gruppenkopf-Bereich der ersten Artikelkategorie anlegen und dann mit den Detaildatensätzen fortfahren – bis ein Datensatz nicht mehr auf die aktuelle Seite passt und eine neue Seite begonnen wird.

Sie können in das Erstellen von Bereichen einwirken, indem Sie VBA-Code etwa für die Beim Formatieren-Ereignisprozeduren anlegen. Eine Möglichkeit, den Ablauf zu beeinflussen, ist das Setzen der Eigenschaft MoveLayout auf den Wert False. Diese Eigenschaft wird von Access standardmäßig vor dem Abarbeiten dieser Ereigniseigenschaft auf den Wert True gesetzt, sodass normalerweise nach dem Schreiben des aktuellen Bereichs der folgende Bereich beschrieben wird.

Wenn Sie die Ereignisprozedur, die beim Formatieren des Detailbereichs ausgelöst wird, wie folgt füllen, springt Access bei keinem der Detaildatensätze zum nächsten, darunterliegenden Bereich, sondern schreibt alle Datensätze in den gleichen Bereich. Dass dies keinen Sinn ergibt, zeigt Abb. 4.

pic004.tif

Abb. 4: Stellt man die Eigenschaft MoveLayout für den Detailbereich auf False, druckt Access alle Datensätze einer Grupierung in den gleichen Detailbereich.

Die gleiche Wirkung erhalten Sie übrigens auch, wenn Sie MoveLayout für andere Bereiche wie Berichts-, Seiten- oder Gruppierungsköpfe und -füße auf False einstellen – Sie erhalten dann einen Bericht in sehr kompakter, aber ziemlich schlecht lesbarer Form.

MoveLayout will daher sehr gezielt eingesetzt werden, etwa, um Daten in zwei oder mehr Spalten anzuzeigen, was bedeutet, dass man nach dem Ausgeben des jeweils ersten Datensatzes MoveLayout auf False einstellt und die Steuerelemente des zweiten Datensatzes weiter rechts platziert.

Wenn Sie einen Bericht mit der Entwurfsansicht aus Abb. 5 zweispaltig gestalten möchten, legen Sie die Ereigniseigenschaft Beim Formatieren des Detailbereichs an (Detailbereich markieren, Doppelklick in Eigenschaft Beim Formatieren, Klick auf die danebenliegende Schaltfläche) und füllen diese wie in Listing 1.

pic005.tif

Abb. 5: Entwurfsansicht eines Berichts, der zweispaltig ausgegeben werden soll. Im Gegensatz zu einem Bericht, bei dem Sie über die Seiteneinrichtung Zweispaltigkeit erreichen wollen, müssen Sie die Breite dieses Berichts direkt auf zwei Spalten auslegen.

Listing 1: Aufteilen von Steuerelementen auf zwei Spalten

Dim intArtikel As Integer
Const intAbstand As Integer = 4000
Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
     intArtikel = intArtikel + 1
     If intArtikel Mod 2 = 1 Then
         Me.MoveLayout = False
         Me!Bezeichnungsfeld0.Left = 0
         Me!ArtikelID.Left = 1000
         Me!Bezeichnungsfeld1.Left = 0
         Me!Artikelname.Left = 1000
         'weitere Steuerelemente
     Else
         Me!ArtikelID.Left = 1000 + intAbstand
         Me!Bezeichnungsfeld0.Left = 0 + intAbstand
         Me!Artikelname.Left = 1000 + intAbstand
         Me!Bezeichnungsfeld1.Left = 0 + intAbstand
         'weitere Steuerelemente
     End If
End Sub

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar