Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Sortierung / Gruppierung im Bericht

Begonnen von smily68, März 05, 2011, 11:12:55

⏪ vorheriges - nächstes ⏩

smily68

Hallo

Ich komme wieder mit einem Problem zu euch.

Ich habe eine grosse Anzahl von Berichten erstellt. Es geht immer das gleiche. Anzahl verkaufter Artikel. Nur die Gruppierung und die Sortierung ist jeweils anders. Gruppierung nach Artikelklassierung, nach Lieferanten, nach Konto-Nr usw. sowie Sortierung nach Artikel-Nr, Artikelname, grösste Anzahl, grösster Betrag, Marge usw.

Ich habe für jede Kombination einen Bericht erstellt. Da ich nicht herausgefunden habe, wie ich die Sortierung und einen Gruppenbruch steuern kann. In einem Formular kann ich in einem Auswahlfeld die Gruppierung und in einem zweiten Auswahlfeld die Sortierung wählen, sowie für die einzelnen Felder auch Auswahlfelder für einen einzelnen Artikel oder für eine Klassierung, Konto usw. In einer Abfrage filtere ich die Daten. In einem Makro spreche ich nun die entsprechenden Berichte an.

Der Aufwand für die Erstellung von so vielen Berichten ist jedoch unsinnig. Wer kann mir helfen und mir zeigen wie ich im Bericht selber nochmals die Sortierung und die Gruppierng steuern kann.

Für eure Hilfe bin ich euch dankbar.

Daniel


bahasu

Hallo,

übergib eine Variable (entweder global deklariert oder als me.openargs) und werte sie aus. Im unteren Beispiel habe ich sie Sortierfeld genannt.
Die Zeilen stehen im Bericht im Ereignis "Beim Öffnen"
    Select Case Sortierfeld
        Case "R"
            Me.GroupLevel(0).ControlSource = "Feld_abc"
            Me.GroupLevel(1).ControlSource = "FELD_xyz"

        Case "X"
            Me.GroupLevel(0).ControlSource = "Feld_xyz"
            Me.GroupLevel(1).ControlSource = "FELD_abc"
    end select


Harald
Servus

smily68

Hallo Harald

Vielen Dank für deine Hilfe. Es funktioniert und ich habe mich nun auch ein wenig mit den Möglichkeiten von GroupLevel auseinandergesetzt.
Nun stehe ich aber bein einem nächsten Problem an. Ich möchte im Gruppenkopf das Feld anzeigen, nach dem ich gruppiert habe. Ich kriege dass jedoch nicht hin. Hast du eine Ahnung wie ich das machen kann.

Daniel

bahasu

Hi Daniel,

denkbar ist folgendes:
1 . Du erstellst im VBA-Teil Deines Berichtes eine Funktion:

Private Function fSortierung() As String
    fSortierung = Me.GroupLevel(0).ControlSource     ' ggf bei mehreren Sortierungen anpassen um weitere ...levels...
End Function


2. Im Gruppenkopf Deines Berichtes legst Du ein ungebundenes Steuerelement an.
Bei dessen Eigenschaften im Reiter "Daten" gibt Du bei "Steuerelementinhalt" ein: =fSortierung()

Vielleicht hilft das.

Harald
Servus

smily68

Hallo Harald

Leider hat dein Lösungsansatz nicht zum gewünschten Erfolg geführt. Er zeigt mir im Report den Feldnamen an, nach dem ich gruppiere und nicht den Inhalt.

Daniel

bahasu

N'abend,

dann probier mal:
fSortierung = Me(GroupLevel(0).ControlSource)

Harald
Servus

smily68

Hallo Harald

Vielen dank für deinen Typ. Es funktioiert. Nun stehe ich aber schon an einem nächsten Punkt an.
Ich möchte mehrere Felder mit einem Ja/Nein Feld aus oder einblenden können und der Bericht soll geschrumpft werden? wenn die Felder nicht angezeigt werden. Ich habe die Felder auf visible = false gesetzt und die die Höhe des Detailbereiches Height kleiner gemacht, doch das nützt nichts, solange ein Feld da  ist ,ob es angezeigt wird oder nicht, kann ich die Höhe nicht kleine machen als die Felderhöhe.
Meine nächste Ueberlegung ist kann ich mit einem VB script die Felder dynamisch anzeigen und sie an einer bestimmten Stelle im Detailbereich platzieren?

Ein weitere Frage ist noch aufgetaucht
Es gibt ein ArtikelBezeichnungsfeld2 das nur manchmal abgefüllt ist. Immer wenn es leer ist soll es geschrumpft werden.
Ich glaube ich muss für diesen Fall ein Loop machen und alle Datensätze prüfen und davor ein DAO oder ADO Objekt kreieren. Doch wie  ich dies genau mache, ich habe keine Ahnung?

Kannst du mir auch damit weiterhelfen?
Wie du siehst betreibe ich einen grossen Aufwand für den Bericht, einerseits um zu lernen, andererseits hatte ich vorher etwa 40 unterschiedliche Berichte, die auch noch für eine französische Version umgeschrieben werden müssen, das heisst bei Aenderungen muss ich 80 Berichte anpassen.

Gruss Daniel
:)     

bahasu

Moin,

das Verkleinern habe ich bei meinen Berichten damit erreicht, dass ich die Felder auf eine minimale Höhe (geschrumpft bis zu einem waagerechten Strich) eingestellt habe. Durch die Eigenschaft "Vergrößerbar = Ja" werden sie auf die notwendige Höhe gebracht, wenn sie einen Inhalt haben.

Vielleicht lassen Deine Daten es auch zu, dass Du eine weitere Gruppe bei "Sortieren/Gruppieren" aufmachst, die Du dynamisch auf sichtbar/unsichtbar stellst.

Genauso lassen sich Felder per VBA sichtbar / Unsichtbar machen:
If DeinSteuerungsparameter = "xyz" then
   Me!DeinFeld.visible = true
else
   Me!DeinFeld.visible = false
end if

Alternativ :
  Me!DeinFeld.visible = DeinSteuerungsparameter = "xyz"


Das dynamische Plazieren ist sicher auch möglich, wenn Du die Eigenschaften
  Me!DeinFeld.top = 123
  Me!DeinFeld.left = 456
nimmst. Habe aber die Befürchtung, dass das dann unübersichtlich/komplex werden wird.
Diese Werte findest Du bei den Eigenschaften des Feldes im Reiter "Format".


Zum geschrumpften " ArtikelBezeichnungsfeld2".
Dieses und weitere Felder per VBA zu schrumpfen ist recht leicht möglich. Dann müsstest Du aber auch noch die Position anpassen. Ich würde lieber die Felder im Entwurfmodus auf "Strichhöhe" schrumpfen und die Vergrößerbar-Eigenschaften wie oben auf Ja einstellen.
Bin neugierig, wie andere solch ein Vorhaben umgesetzt haben.



Zur "französischen" Variante:
So etwas hatte ich mal damit gelöst, dass ich den Bericht dynamisch übersetzt habe. Es gab eine Tabelle mit den deutschen und den ausländischen Begriffen. Diese wurden dazu genutzt, dass im Bericht die Feld-Bezeichnungen an die gewünschte Landessprache angepasst wurden.
Als Steuerelementinhalt stand =fUebersetzung("Meine Bezeichnung";nz([Sprache];""))
Durch Vorgabe von [Sprache] wurde in der Funktion fUebersetzung der zur Sprache passende Begriff festgelegt. So hatte ich mir erspart, für x Sprachen auch x Berichte anzulegen.

Harald
Servus

smily68

Hallo Harald

Vielen Dank für deine Tipps. Auch ich bin zur Lösung gekommen die Daten, die ich nicht sehen will mit VB auf die erste Line zu verschieben und unsichtbar zu machen. Ich bevorzuge diese Lösung vor dem Schrumpfen, denn wenn ich mehr als zwei Linen habe bleibt mir pro Line immer denn Zwischenraum zwischen den Feldern.
Bezüglich des Artikelbezeichnungfeldes habe ich es so gemacht, wie du gesagt hast, ich bin aber nicht ganz zufrieden mit dieser Lösung, da ich in der Entwurfsansicht nicht mehr erkennen kann, dass da ein Feld ist. Ich denke es gibt eine professionelle Lösung, aber dazu muss man das ADO Objekt laden und in einem Loop jedes Feld abfragen, doch dazu reicht mir mein Wissen momentan nicht.

Nun habe ich das Formular fertigerstellt und ich kann wirklich alles mit einem Formular machen.

Vielen Dank für deine Hilfe

Daniel

ZD14

hallo leute :)
ich belebe dieses thema mal wieder weil es genau mein problem erklärt und ws löst :D

allerdings habe ich noch ein frage:

wo und wie kann ich die "case"-möglichkeiten festlegen?
das müsste dann ja in der prozedur funktionieren in der man auch die gruppierung auswählt aber mit welchen zeile deklariere ich dann - wie im beispiel case "R" ??

danke für die hilfe :)
mfg

ZD14

das mit dem select hab ich jetzt hinbekommen .. war doch ganz easy ^^

allerdings funktioniert bei mir die gruppierung noch nicht so recht .. muss ich im berichtsentwurf auch einstellungen voreinstellen??

lg

MaggieMay

Hallo,

kannst du dieses "Nicht-Funktionieren" evtl. ein wenig ausführlicher beschreiben?
Gibt es Fehlermeldungen? Vielleicht zeigst du auch deine Version des Codes dazu...
Freundliche Grüße
MaggieMay

ZD14

hallo :)

geöffnet wird der bericht mit:
    DoCmd.OpenReport rpt_name, acViewReport
--> passt diese ansicht?

und dann mein code beim laden:

Private Sub Report_Load()
    MsgBox Forms!frm_Listendruck.opt_Gruppieren.Value
   
    Select Case Forms!frm_Listendruck.opt_Gruppieren.Value
    Case 0
        MsgBox "nichts wird ausgelesen"
    Case 1
        Me.GroupLevel(0).ControlSource = "BL"
'        Me.Bezeichnungsfeld_Gruppierung = "BL"
    Case 2
        Me.GroupLevel(0).ControlSource = "PSI"
'        Me.Bezeichnungsfeld_Gruppierung = "PSI"
    Case 3
        Me.GroupLevel(0).ControlSource = "Bildungsregion"
'        Me.Bezeichnungsfeld_Gruppierung = "Bildungsregion"
    Case 4
        Me.GroupLevel(0).ControlSource = "Schultyp"
'        Me.Bezeichnungsfeld_Gruppierung = "Schultyp"
    Case 5
        Me.GroupLevel(0).ControlSource = "SpF-Status"
'        Me.Bezeichnungsfeld_Gruppierung = "SpF-Status"
    Case 6
        Me.GroupLevel(0).ControlSource = "Betreuungsstatus"
'        Me.Bezeichnungsfeld_Gruppierung = "Betreuungsstatus"
    Case 7
        Me.GroupLevel(0).ControlSource = "Betreuungsform"
'        Me.Bezeichnungsfeld_Gruppierung = "Betreuungsform"
    Case 8
        Me.GroupLevel(0).ControlSource = "ZSI"
'        Me.Bezeichnungsfeld_Gruppierung = "ZIS"
    Case 9
        Me.GroupLevel(0).ControlSource = "SSt"
'        Me.Bezeichnungsfeld_Gruppierung = "SSt"
    Case Else
        MsgBox "Es ist ein Fehler aufgetreten!"
    End Select
End Sub

habe meinen fehler schon gefunden!!
aber mir ist noch etwas aufgefallen:
wie kann ich die sortierung innerhalb der gruppierung steuern und ich hätte gerne das man jeweils das gruppierte element in der kopfzeile sieht .. Me.Bezeichnungsfeld_Gruppierung = "SSt" dachte ich aber das funktioniert nicht !!

vielen dank :)

ZD14

das bezeichnungsfeldproblem hab ich auch schon gelöst !! war ziemlich einfach (.Caption hat gefehlt!) :P

aber die sortierung innerhalb einer gruppe hab ich immer nocht nicht .. finde auch nichts dazu im internet (da steht nur wie man die gruppierung sortiert (Me.GroupLevel(0).SortOrder = True/Flase)

MaggieMay

Hi,

für die Sortierung innerhalb einer Gruppe brauchst du einen weiteren GroupLevel (ohne Kopf und Fuß).
Freundliche Grüße
MaggieMay