Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Bericht/Unterbericht mit unterschiedl. Seitenkopf





Frage

Hallo ! Ich muß einen Bericht mit Unterbericht machen. Dabei muß der Seitenkopf des Unterberichts anders aussehen als der Seitenkopf des Hauptberichts. Das ergibt dann einen Bericht über z.B. 20 Rechnungen mit jeweils Deckblatt(Hauptbericht) - kann mehrere Seiten haben - und Rechnungsanhang(Unterbericht) mit den Detaildaten - kann auch mehrere Seiten umfassen. Die Lösung mit zwei Berichten, die jweils nacheinander ausgeführt werden, kann nicht angewendet werden, weil die Seitennummerierung je Rechnung durchgehend sein muß (also Deckblatt = Seite 1 und Anhang = Seite 2). Kann mir da jemand weiterhelfen ? Im Voraus vielen Dank für euere Mühe Teddy

Antwort 1 von JohnnyLoser

Hi Teddy!

Die Problematik ist, daß der Berichtskopf am Anfang des Berichts gedruckt wird und der Seitenkopf auf jeder Seite.

Was hältst Du von der Idee, den Berichtskopf als Hauptbericht zu nehmen und den Seitenkopf für die folgenden Seiten? Als Eigenschaft für den Berichtskopf noch "Neue Seite nach Bereichsende".

Einen Bericht mit 20 Rechnungen kannst Du dann zwar nicht abschicken, aber Du hast die Möglichkeit über eine Prozedur die Rechnungsnummern einzeln als Bedingung zu übergeben.

z.B. so:



Do While Not RecordSet1.EOF
    DoCmd.OpenReport "Report1", acViewPreview, , "BelegNr = " & RecordSet1!BelegNr
    RecordSet1.MoveNext
Loop



So startest Du zwar zwanzigmal den Report, erreichst aber Dein Ziel.

Gruß

Johnny

Antwort 2 von Teddy7

Hallo Johnny !
Vielen Dank für den Tipp.
Leider ist das nicht die Lösung, weil ja das Deckblatt mehrere Seiten umfassen kann.
Sonst noch ´ne Idee ??
Gruß
Teddy

Antwort 3 von JohnnyLoser

Hi Teddy,

bitte reklär mir doch mal, welche Daten auf Dein Deckblatt drauf sollen.

Es KANN mehrere Seiten umfassen ?!?!

Was bedeutet das?
Wovon ist die Seitenzahl des Deckblatts abhängig?

Wenn Du vor hast, Details auf Dein Deckblatt zu packen, die aus einer unterschiedlichen Anzahl von Datensätzen bestehen, dann bist Du zwangsläufig gezwungen mit 2 Berichten zu arbeiten, die Du nacheinander aufrufst. Du bist nicht in der Lage, zwei unterschiedliche Detail-Bereiche in einem Bericht zu erstellen.

Sollte nur die Anzahl der Felder, die auf Deinem Deckblatt angezeigt werden, so hoch sein, daß sie nicht auf eine Seite paßt oder Du aus gestalterischer Absicht diese auf mehrere Seiten verteilen willst, besteht die Möglichkeit einen Seitenwechsel im Berichtskopf einzufügen. Hierzu kannst Du in der ToolBox das entsprechende Symbol wählen.

Gruß

Johnny

Antwort 4 von Teddy7

Hallo Johnny !
Auf dem "Deckblatt" werden die Rechnungsdaten nach "Bereichen" zusammengefasst.
Es handelt sich um die Umsetzung einer Telefonabrechnung.
Auf dem Deckblatt steht z.B. die Summe der Grundgebühren, die Summe der ....wasauchimmer (je Vorgangstext).
Das kann eine Zeile sein, es können aber auch über 50 Zeilen werden.

Im Rechnungsanhang wird das Ganze dann aufgedröselt nach TelefonNr und Vorgang.

Wenn ich im Berichtskopf einen Seitenumbruch einfüge - führt Access dann nicht das aus, was im Seitenkopf steht ???

Ich habe im Hauptbericht also im Detailbereich die Summen je Vorgangstext.
Dann stelle ich mir das so vor, daß ich im Bereichsfuß RechnungsNr - also nach Druck der Rechnungssumme - einen Unterbericht aufrufe, der mir den Rechnungsanhang produziert(verknüpft über die RechnungsNr).
Das klappt auch noch nicht so ganz, aber die Daten des Rechnungsanhangs bekomme ich schon - allerdings mit dem Seitenkopf des Hauptberichts.
Gruß
Teddy

Antwort 5 von JohnnyLoser

Hi Teddy!

Hab mir meine Rübe zermartert und 2 Lösungen gefunden.

Vorab:

Das mit dem Unetrbericht hatte ich falsch verstanden, da bringt Dir ein seitenumbruch gornix.

1. Lösung

Du hast 2 Abfragen, eine für die Zusammenfassung, eine für die Details. Für die Zusammenfassung erstellst Du den Unterbericht, den Du dann im Hauptbericht in den Berichtskopf einfügst. (Neue Seite nach Bereichsende)
Falls der Unterbericht mehrere Seiten umfasst, z.B. 2, wird der Seitenkopf des Hauptberichts erst ab Seite 3 angezeigt.

Einen Schönheitsfehler hat die Sache. Da der Seitenkopf des Unterberichts beim Druck unterdrückt wird, erhältst Du für die Folgeseiten Deines Deckblattes garkeinen Kopf.

Wenn Du damit leben kannst?!, o.k.!


2. Lösung (nicht kompliziert und würde ich vorziehen)

a) Ich erstelle eine Tabelle "NOP" mit einem Textfeld "NOP"

b) In meine Abfrage der Details füge ich die Tabelle "NOP" ein ohne sie zu verknüpfen.

c) Ich erstelle 2 unabhängige Berichte "Deckblatt" und "Positionen"

d) In den Bericht "Deckblatt" füge ich ein unsichtbares Textfeld mit dem Steuerelementinhalt =[Seiten] ein

e) Folgenden Code erfasse ich im Ereignis Bei Seite:



Private Sub Report_Page()
Dim db as Database, rs as Recordset
Set db = CurrentDb
db.Execute ("DELETE FROM NOP")
Set rs = db.OpenRecordset("SELECT * FROM NOP")
rs.AddNew
rs!NOP = Trim(Str(Pages))
rs.Update
End Sub



f) In den Bericht "Positionen" füge ich als Textfeld für die Seitenanzahl folgende Steuerelementeigenschaft ein:

=[Seite] + [NOB]

g) Den Druck der beiden Berichte löse ich wie folgt aus:



Sub BT_Print_Click
'Ermittlung der Beleg-Nummern, die gedruckt werden sollen
Dim db as Database, rs as Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT ReNr...")
rs.MoveFirst
Do While Not rs.EOF
  DoCmd.OpenReport "Deckblatt", , , "ReNr = " & rs!ReNr
  DoCmd.OpenReport "Positionen", , , "ReNr = " & rs!ReNr
  rs.MoveNext
Loop
rs.Close
End Sub





Den Druck bist Du eh gezwungen in einer Schleife nacheinander auszulösen, da sonst Deine Seitennummerierung garnicht hinhaut.


Nachteil:
Du könntest zwar einfach in Deinem Unterbericht die Gesamtseitenanzahl ermitteln und darstellen, indem Du einfach den Inhalt von NOP addierst. Im Deckblatt geht dies aber nicht, da Du die Anzahl der Seiten des Unterberichts nicht kennst.
Vorab ermitteln ginge zwar, aber ob's nötig ist ?!?!

Vorteil:
Du kannst Berichts- und Seitenkopf für Deckblatt und Details frei gestalten.


Laß mich bitte wissen, wie Du Dich entschieden hast.

Gruß

Johnny

Antwort 6 von JohnnyLoser

Hi Teddy,

sorry, kleiner Fehler in e)

Anstatt in Sub Report_Page() muß der Code in Sub Report_Activate() stehen.

Gruß

Johnny

Antwort 7 von Teddy7

Hallo Johnny !
Vielen Dank für Deine Tipps.
Ich halte die letzte Lösung mit speichern der Seitenzahl des Deckblatts für die praktikablere - zumal die Seitenzahl bei der nächsten Rechnung natürlich wieder mit 1 beginnen muß.
Alternativ zur Speicherung kann man doch sicher auch ein unsichtbares Textfeld in dem Formular nehmen, aus dem heraus die Berichte aufgerufen werden.
Schade das es für so ein alltägliches Problem keine elegantere Lösung gibt.
Wenn man mal mehrere Rechnungen anzeigen will hat man wieder ein Problem(oder man müßte mit der Weiterverarbeitung -also dem Anzeigen der zweiten Rechnung- warten bis die ersten Berichte -der ersten Rechnung- wieder geschlossen wurden).

Schon ziemlich unbefriedigend !

Aber ich denke mit der Lösung kann ich (und mein Chef) leben.

Vielen Dank für Deine Mühe - vielleicht kann ich mich ja mal revangieren.

Gruß
Teddy

Antwort 8 von JohnnyLoser

Hi Teddy,

ich glaube, auf das Speichern kannst Du nicht verzichten. Hatte zuerst die Überlegung eine Variable zu nehmen, scheitert aber daran, daß ich diese in der Steuerelementeigenschaft des Textfeldes für die Seitennummer nicht verwenden kann.

Falls Du Dich revanchieren willst, mail mir 'ne Aspirin. Sitze seit 5 Uhr heute morgen vorm Komposter und habe noch die halbe Nacht vor mir.

Gruß

Johnny

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: