Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: BotschafterSarek am Januar 23, 2015, 13:01:58

Titel: Detailbereich alle drei Datensätze vergrößern
Beitrag von: BotschafterSarek am Januar 23, 2015, 13:01:58
Hallo zusammen,

ich möchte in einem Bericht den Detailbereich alle drei Datensätze vergrößern, damit auf diese Weise im Ausdruck eine kleine Leerzeile entsteht, die die Ausgabe besser lesbar macht.

Ich wollte das mit VBA mit Me.Section(acDetail).Heigh lösen, aber für die If-Abfrage (ist dies der 3., 6., 9. ... Datensatz) müsste ich wissen, wie man in VBA abfragt, der wievielte Datensatz der Ausgabe es ist.


Danke im Voraus,
Sarek \\//_
Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: MaggieMay am Januar 23, 2015, 13:22:41
Hallo,
Zitatwie man in VBA abfragt, der wievielte Datensatz der Ausgabe es ist
du könntest evtl. einen statischen Zähler im Detailbereich nutzen. Aber anstatt die Höhe zu vergrößern, wäre eine "echte" Leerzeile evtl. optisch die bessere Lösung.
Schau mal ob dir das Beispiel "Leerzeilen" im Download-Bereich des dbWiki  (http://www.dbwiki.net/wiki/Access_Beispieldatenbanken)weiterhilft.
Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: database am Januar 23, 2015, 13:30:40
Hallo,

ich verstehe leider dein Ansinnen nicht ganz.
Wenn du eine kleine Leerzeile haben willst stellst du das doch im Berichtsentwurf ein.
Der Detailbereich passt sich in seiner Höhe automatisch an, die Höhe ist von der Anzahl der dargestellten Datensätze und der eingestellten Papiergröße des Standarddruckers (oder eines angegebenen speziellen Druckers) abhängig.

Zitat...wie man in VBA abfragt, der wievielte Datensatz der Ausgabe es ist

Mit VBA gibt es unterschiedliche Möglichkeiten so etwas zu erledigen. Ich frage mich aber aus Verständnisgründen wozu das benötigt wird - dürfen in deinem Bericht pro Seite nur 3 Datensätze ausgegeben werden?
Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: BotschafterSarek am Januar 23, 2015, 13:33:07
Zitat von: MaggieMay am Januar 23, 2015, 13:22:41
du könntest evtl. einen statischen Zähler im Detailbereich nutzen.

Was ist mit statischem Zähler gemeint? Das einzige, was ich gefunden habe, ist ein Feld mit Steuerelementinhalt = 1 und laufender Aufsummierung. Aber geht es nicht ohne Feld? Ist da keine Eigenschaft, die man unter VBA abfragen kann, die einem die Nummer des Datensatzes angibt?
Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: BotschafterSarek am Januar 23, 2015, 13:34:37
Zitat von: database am Januar 23, 2015, 13:30:40
Ich frage mich aber aus Verständnisgründen wozu das benötigt wird - dürfen in deinem Bericht pro Seite nur 3 Datensätze ausgegeben werden?

Nein, aber nach jeweils drei Datensätzen möchte ich einen Abstand haben, damit der Leser nicht so leicht in der Zeile verrutscht.
Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: database am Januar 23, 2015, 13:46:18
Hallo,

eine Möglichkeit kannst du dir in der FAQ anschauen:
http://www.donkarl.com/?FAQ5.3
so könntest du auch jede 3. Zeile grau hinterlegen:

Option Compare Database
Option Explicit

Dim zaehler As Long
Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
   zaehler = zaehler + 1
   Me.Section(acDetail).BackColor = IIf(zaehler Mod 3 = 0, 12632256, 16777215)
End Sub


Kleine Änderung zum Code in der FAQ5.3 - Mod 3 = 1 beginnt nicht mit der 3. Zeile, sondern mit der ersten, dann die 4. usw


Mit einer Leerzeile nach jedem 3. Datensatz schaut's nicht gut aus, da der Detailbereich - einmalig verändert - für jeden Datensatz gleich bleibt.

Zum statischen Zähler schaust du dir
http://www.donkarl.com/?FAQ5.16

an
Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: MaggieMay am Januar 23, 2015, 14:30:14
Leerzeilen kann man bspw. erzeugen, indem man die Berichts-Eigenschaft/Methode NextRecord auf False setzt und (falls erforderlich) die Steuerelemente ausblendet. Evtl. kann man hierzu auch MoveLayout einsetzen, einfach mal in der Access-Hilfe nachlesen und ein bißchen ausprobieren. ;-)
Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: BotschafterSarek am Januar 23, 2015, 14:38:42
Zitat von: database am Januar 23, 2015, 13:46:18
eine Möglichkeit kannst du dir in der FAQ anschauen:
http://www.donkarl.com/?FAQ5.3

Danke ... das einzige, was ich brauchte, war die Variable CurrentRecord .... und genau die war in dem Beispiel in der FAQ zu finden :)

Zitat von: database am Januar 23, 2015, 13:46:18
so könntest du auch jede 3. Zeile grau hinterlegen:

Dank CurrentRecord ist das mit dem manuellen Zähler gar nicht notwendig :-)


Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
If CurrentRecord Mod 3 = 0 Then
    Me.Section(acDetail).Height = 450
   Else
    Me.Section(acDetail).Height = 300
   End If
End Sub



Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: database am Januar 23, 2015, 14:41:34
Hi,
das ist zwar richtig - aber nicht mit der Änderung der Höhe des Detailbereichs.
Und ... mit dem Einzeiler ist's dann auch vorbei ;-)


Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
  zaehler = zaehler + 1
  If zaehler Mod 4 = 0 Then
    Me.NextRecord = False
    Me!Feld1.Visible = False
    Me!Feld2.Visible = False
    Me!Feld3.Visible = False
    Me!Feldx.Visible = False
  Else
    Me.NextRecord = True
    Me!Feld1.Visible = True
    Me!Feld2.Visible = True
    Me!Feld3.Visible = True
    Me!Feld4.Visible = True
  End If
End Sub

Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: MaggieMay am Januar 23, 2015, 14:46:30
Hi,

so sollte es auch klappen:Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
    Static cnt
    cnt = cnt + 1
    If cnt Mod 4 = 0 Then
        NextRecord = False
        Me.PrintSection = False
[s]    Else
        NextRecord = True[/s]
    End If
End Sub

Der Else-Zweig ist dabei sogar komplett überflüssig.
Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: database am Januar 23, 2015, 14:52:41
Da hab' ich mit dem Herumprobieren und Hin- und Her-Kopieren was verwurschtelt.
Natürlich geht's mit der Höheneinstellung auch wenn man sie im Format-Ereignis verwendet.  :-[
Ich hab's ins Print-Ereignis verschoben und da kann's dann nicht gehen.

Gefühlsmäßig sagt mir persönlich die Variante mit der grauen Zeile mehr zu.
Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: MaggieMay am Januar 23, 2015, 15:53:48
Ich habe das auch nochmal ausgetestet und bin mit der Höhenverstellung nicht zurecht gekommen, da gab es bei meinem Testbericht (von mir) unüberbrückbare Probleme beim Seitenwechsel.

Was die Alternative mit der Leerzeile betrifft, so wäre auch hier noch eine Verbesserung angebracht. Da das Format-Ereignis bei meinem Testbericht zweimal durchlaufen wurde, kam die Nummerierung durcheinander und die Leerzeilen wurden letztendlich an den falschen Stellen eingefügt. Im Print-Ereignis dagegen klappt es wunderbar.
Hier nochmal der Code dazu:Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer)
    Static cnt As Long

    ' neu: Abbruch bei Seitenwechsel innerhalb der "Gruppe"
    If PrintCount > 2 Then Exit Sub

    cnt = cnt + 1
   ' Debug.Print cnt, Me.id, PrintCount
    If cnt Mod 4 = 0 Then
        NextRecord = False
        Me.PrintSection = False
    End If
End Sub
Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: database am Januar 23, 2015, 18:40:46

Zitatkam die Nummerierung durcheinander und die Leerzeilen wurden letztendlich an den falschen Stellen eingefügt
Das Problem wird wahrscheinlich hier erzeugt:
Static cnt As Long

Wenn die Zählvariable nicht im Modulkopf deklariert wird gibt's ein Problem, da eine statisch deklarierte Variable ihren Wert nicht verliert und diesen auch beim Seitenwechsel mitnimmt.
Auffällig wird das bei einem mehrseitigen Bericht, auf den weiteren Seiten stimmt dadurch auch die Zeilenabfolge nicht mehr.

Ich habe daher die Zählvariable im Modulkopf untergebracht und stelle diese beim Seitenwechsel wieder auf 0

Option Compare Database
Option Explicit

Dim zaehler As Long

Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer)

'Static zaehler As Long

    ' neu: Abbruch bei Seitenwechsel innerhalb der "Gruppe"
    If PrintCount > 2 Then Exit Sub

    zaehler = zaehler + 1
   ' Debug.Print zaehler, Me.id, PrintCount
    If zaehler Mod 4 = 0 Then
         NextRecord = False
         Me.PrintSection = False
    End If

End Sub

Private Sub Report_Page()
    NextRecord = True
    zaehler = 0
End Sub
Titel: Re: Detailbereich alle drei Datensätze vergrößern
Beitrag von: MaggieMay am Januar 23, 2015, 21:19:03
Super Idee mit dem Löschen des Zählers beim Seitenwechsel!   :)