QuickReport Problem - Seitenumbruch



  • mh, aus OnNeedData bin ich noch nicht so recht schlau geworden.
    Ich hab das jetzt noch immer nicht hinbekommen mit seitenumbruch. Hat noch jemand einen Tipp?

    Gruß
    der Bauer



  • Wo ist das Problem ?
    Solange wie du Daten hast lässt du im OnNeedData deines Reports MoreData auf true und schreibst die Daten in dein Label.
    Wenn du keine Daten mehr hast, setzt du MoreData auf false.
    Kannst du ungefähr so verstehen:
    Wenn du MoreData auf true setzt, erzeugt er automatisch ein "neues Label".Du must nur die Caption des Labels ändern.

    Beispiel:

    void __fastcall TForm1::QuickRep1NeedData(TObject *Sender, bool &MoreData)
    {
    static int i=0;
    if(++i<=10)
    {
       QRLabel1->Caption = IntToStr(i);
       MoreData=true;
    }
    else MoreData=false;
    }
    


  • Hallo,

    das hilft schonmal ein bisschen. Aber ganz klar ist mir das OnNeedData immernoch nicht. Wann und wie wird denn diese QuickRep1NeedData Funktion in deinem Beispiel aufgerufen?
    gruß
    bauer



  • ah, habe eben rausgefunden dass die Funktion wohl automatisch beim Preview aufgerufen wird. Ich verstehe aber noch nicht so ganz wie die Schleife zustande kommt die jetzt von 1 bis 10 hochzählt?? Heißt das dass die Funktion solange moredata=true ist praktisch immer in Schleife läuft. Im prinzip wie eine for schleife mit bedingung moredata==true!?



  • Im prinzip wie eine for schleife mit bedingung moredata==true

    Im Prinzip ja.



  • supi, jetzt habe ich das glaube ich begriffen, es funktioniert auch. Nur jetzt gibt es ein anderes Problem: labels zur laufzeit erstellen geht jetzt nicht mehr (zumindest nicht mehr wie bisher)
    vermutlich weil Parent = DetailBand1; jetzt nicht mehr funktioniert...

    ich brauche aber trotzdem labels zur laufzeit...oder kann man onneeddata auch irgendwie schalteln??



  • Du mußt nur ein einziges Label in dem Detail-Band erzeugen.
    In dieses eine Label schreibst Du in der OnNeedData die gewünschte Ausgabe. Solange MoreData true ist, wird beim Drucken automatisch ein weiteres Detail-Band auf dem Ausdruck erzeugt. Dann klappt das auch mit dem Seitenumbruch automatisch.

    Quick-Report ist eingentlich eine Komponente für Datenbankanbindung. Da weiß man nie im voraus, wie viele Datensätze es geben wird...



  • ich brauche aber trotzdem labels zur laufzeit...

    Wozu ?



  • weil ich muss daten darstellen, die wiederum untergeordnete Daten haben und diese haben wiederum untergeordnete Daten. Und die Anzahl der jeweiligen untergeordneter Daten kann jeweils verschieden sein. Also es können beliebig viele "Hauptpunkte" vorhanden sein, die jeweils verschieden viele Unterpunkte haben und die wiederum auch verschieden viele unterpunkte haben können.

    ich müsste also im prinzip 3 OnneedDatas verschachteln.
    Die hauptpunkte habe ich nun mit Onneeddata, so dass bei jedem neuen Hauptpunkt ein neues Band mit Onneeddata gemacht wird. Aber innerhalb dieses Bandes brauche ich eben wieder unterschiedlich viele Labels, und die wollte ich dann eben weiterhin zur Laufzeit erstellen.

    Ich hoffe das war Verständlich und ihr habt eine passende Idee, ihr habt echt schon gut geholfen 🙂

    Gruß
    Bauer



  • Verschieb doch dein Label dahin wo du es haben willst bei jeden zeilen druck.

    static int i=0; 
    if(++i<=10)
    {
       QRLabel1->Left = QRLabel1->Left + 10;
       QRLabel1->Caption = IntToStr(i);
       MoreData=true;
    }
    else MoreData=false;
    


  • @VergissEs: Ich denke dann hat er wieder das Problem mit dem Seitenumbruch.

    Aber auch die abhängigen Daten sind kein Problem. Dafür gibt es SubDetail-Bands.



  • ja subdetail funktioniert.
    aber ich bin immernoch nicht zufrieden..
    jetzt bekomme ich so ein layout hin:

    hauptpunkt1
    unterpunkt1
    unterunterpunkt1
    2
    2
    1

    ich möchte aber so:

    hauptpunkt1 unterpunkt1 unterunterpunkt1
    2

    2 1



  • oh die formatierung hat es nicht so dargestellt wie ich wollte..

    jedenfalls wollte ich bänder horizontal nebeneinander anordnen



  • Bauer schrieb:

    jedenfalls wollte ich bänder horizontal nebeneinander anordnen

    Das geht AFAIK nicht.



  • Nichts ist unmöglich.
    Dann setzt du halt drei Labels nebeneinander.
    Musst dir dann im OnNeedData eine Logik schreiben, die dir dann die jeweiligen Daten in das entsprechende Label setzt und in die anderen Labels einen EmptyStr.
    Dürfte aber ziemlich kompliziert werden. 😉



  • Nein, dann bekommt er noch ganz andere Probleme, da er bereits beim Layout mindestens so viele Labels auf der rechten Seite plazieren müßte, wie sein Sub-SubDetail-Band and Datensätzen maximal hat. Die werden natürlich alle gedruckt, ob mit Inhalt versehen, oder nicht.

    Ich weiß nicht, ob andere Report-Komponenten mehr flexibilität bieten, aber ich würde die Druckausgabe 'von Hand' machen.



  • Ich die Geschichte konstuktiv für nicht so toll.

    Derartige Verdichtungen mache ich immer (auch für Crystal-Reports mit deutlich mehr Möglichkeiten) über eine Vorabfrage als View oder wenn's noch komplizierter wird, über eine temporäre Reporttabelle.

    Dann ist das Report-Layout selbst deutlich einfacher zu halten.



  • Joe_M. schrieb:

    @VergissEs: Ich denke dann hat er wieder das Problem mit dem Seitenumbruch.

    Wiso sollte er Probleme haben mit dem Seitenumbruch? wenn das Label in einem rbDetail Band liegt?

    void __fastcall TForm1::QuickRep1NeedData(TObject *Sender, bool &MoreData)
    {
    static int i=0;
    if(++i<=100)
    {
       QRLabel1->Left = QRLabel1->Left +10;
       QRLabel1->Caption = IntToStr(i);
       MoreData=true;
    }
    else MoreData=false;
    }
    

    @Bauer kannst du nochmal genau Zeigen wie jetzt dein Output ausschauen soll?
    evtl im Code Tag mit Spaces erzeugen, da man eigentlich immer noch nicht so richtig weiss wie es aussehen soll?



  • @Bauer kannst du nochmal genau Zeigen wie jetzt dein Output ausschauen soll?
    evtl im Code Tag mit Spaces erzeugen, da man eigentlich immer noch nicht so richtig weiss wie es aussehen soll?

    Geht mir genauso ...



  • Hauptpunkt1                     Unterpkt1                     Unterunter1
                                                                  Únterunter2
                                                                  Unterunter3
                                    Unterpkt2                     Unterunter1
                                                                  Unterunter2
    
    Hauptpunkt2                     Unterpkt1                          Uu1
                                                                       Uu2
                                    Unterpkt2                          Uu1
    

Anmelden zum Antworten