QuickReport Problem - Seitenumbruch



  • 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
    


  • hoffentlich gehts jetzt...

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


  • 3 Labels



  • So bekomme ich es bisher hin mit einem DetailBand und 2 Subdetailbändern und jeweils OnNeedData:

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

    aber das sieht eben ziemlich besch.. aus...
    Mit drei Labels und nur einem Band..mhh..das wird dann wenn es überhaupt möglich ist ziemlich schwierig zu programmieren mit meinem bisher programmierten Programm (das auslesen aus der xml etc.) und das war schon ganz schön viel arbeit..

    Was außerdem noch sein sollte ist, dass ein Seitenumbruch nicht innerhalb eines "Hauptpunktes" passieren sollte. Hat da jemand eine Idee? Das ist auf jdenfall mit nur einem Band auch ein größeres Problem..

    Gruß udn frohe Ostern,
    der Bauer


Anmelden zum Antworten