Announcement

Collapse
No announcement yet.

Druckauswahl QReport, Delphi 5

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Druckauswahl QReport, Delphi 5

    Hallo, ich habe ein Problem mit QReport.

    Ich erzeuge aus einer sehr großen Datenbank mithilfe generierter SQL- Anweisungen eine Ergebnistabelle.
    Diese wird in einem entsprechendem Formular als Tabelle oder als Detaildatensatz angezeigt.
    Auf dieses Fromular habe ich zwei Buttons (Tabellendruck und Detaildruck) gesetzt. Beim Klick auf den
    jeweiligen Button wird entweder ein Report mit der Tabellenansicht aller Ergebnisdatensätze (1-zeilig) oder
    ein Report mit allen Detaildatensätzen (jeweils eine Seite) erzeugt. Das funktioniert auch ganz gut.
    Da in Abhängigkeit von der Suchabfrage die Ergebnisdatenmenge sehr groß (mehrere 100.000 DS) sein kann,
    möchte ich im Report verhindern, daß alle Daten gedruckt werden (Einschränkung beim Druck auf 10-15
    Seiten bzw. Auswahl erzwingen) auch wenn der Anwender ausversehen gleich den Druckbutton des Reports drückt.
    Trotzdem soll die gesamte Datenmenge ersteinmal als Report angezeigt und gespeichert (HTML) werden können.
    Leider habe ich dazu in meinen schlauen Delphi- Büchern und der Online- Hilfe nichts passendes gefunden.

    Für Tipps oder Literaturhinweise wäre ich sehr dankbar.

    Gruß vlsoft

  • #2
    Hallo Volker,
    .
    meine Zeit mit QuickReport liegt zwar schon etwas zurück, aber kann man die Ereignisse nicht benutzen, um zu sehen, ob die Preview oder der Print läuft? Wenn das so ist, könntest Du einen Zähler integrieren, der nach einer Seite erhöht wird. Dann könntest Du den Druck manuell abbrechen.
    .
    Gruß
    Michae

    Comment


    • #3
      Na dann würde ich den User ab einer gewissen Anzahl von Records vor dem Start des Druckes darauf hinweisen, um wieviele Datensätze es sich handelt und ihn fragen, ob er wirklich drucken will. Denn wenn der Vorgang läuft, dann ist meistens die Aufbereitung und der Transfer in den Druckerspooler so schnell, dass der Benutzer sowieso viel zu spät zum Reagieren kommt, denke ich mal. Und ein Stop in der Applikation entfernt die bereits im Spooler stehenden Seiten ja nicht mehr. Vorsorge ist besser als Heilen.
      Und wenn's gar nicht anders geht, dann die Druck-Funktion nur zulassen, wenn die Anzahl der Datensätze eine gewisse Größe nicht überschreitet (ist ja alles im beforePrint event von TQuickRep kontrollier- und machbar)<br>
      bye, Helmu

      Comment


      • #4
        Hallo,

        erst einmal Dank für die schnellen Antworten.

        Das mit dem Abblocken des Drucks vor dem Aufruf hatte ich bereits implementiert. Der Anwender soll aber erst das gesamte Ergebnis sehen und auch speichern können (HTML, Text) oder es in eine PDF- Datei drucken können. Erst wenn er einen realen Drucker benutzt, sollen maximal 15 Seiten auf einmal gedruckt werden dürfen. Hat der Anwender mehr Seiten ausgewählt, soll er mit einer Fehlermeldung darauf hingewiesen werden und die Möglichkeit einer erneuten Auswahl bekommen.

        An das beforePrint- Ereignis habe ich auch schon gedacht. Ich finde aber nirgends eine Möglichkeit, die aktuell gewählte Seitenzahl zu ermitteln (Differenz: EndPage - FirstPage < 16, wobei FirstPage die erste gewählte Seite oder 1 und EndPage die letzte gewählte Seite oder PageCount ist). Wie kriege ich die Werte raus, die im DruckerSetupDialog von QReport 3.5 (Standard) gesetzt oder nicht gesetzt wurden?

        Für einen Hinweis oder Hilfe wäre ich dankbar.

        Gruß Volke

        Comment


        • #5
          Wenn doch eh nur maximal 15 Seiten aus dem Drucker kommen sollen, lass einfach den Zähler mitlaufen und brech dann online den Ausdruck ab. Dafür wird nicht der SetupDialog gebraucht. Dem Anwender kannst Du doch über ein Label einen Hinweis geben, dass nur die ersten 15 Seiten gedruckt werden.
          mfg
          Michae

          Comment


          • #6
            Hallo Michael, danke für die Hinweise.

            Nicht nur die ersten 15 Seiten, sondern 15 Seiten ab Auswahl sollen ausgedruckt werden. Nur mit Zählen funktioniert das nicht. Ich habe jetzt eine Vorschauformular mit dem PrintDialog erstellt. Den Druck wollte ich ähnlich dem Beispiel in der Hilfe incl. der Seitenauswahl realisieren. Hier der Quelltext:

            procedure TForm5.BitBtn8Click(Sender: TObject);
            Var
            I, Start, Stop: Integer;
            begin
            PrintDialog1.Options := [poPageNums];
            PrintDialog1.FromPage := 1;
            PrintDialog1.MinPage := 1;
            PrintDialog1.ToPage := PageCount;
            PrintDialog1.MaxPage := PageCount;
            PrintDialog1.PrintRange := prPageNums;
            if PrintDialog1.Execute then
            begin
            { Druckbereich festlegen }
            with PrintDialog1 do
            begin
            Start := FromPage;
            Stop := ToPage;
            if PrintRange = prAllPages then
            if (Stop - Start) > 15 then
            MessageDlg('Druck aller Seiten nicht möglich - max. 15 Seiten auswählen!', mtError, [mbOk], 0)
            else begin
            with Printer do
            begin
            BeginDoc;
            for I := Start to Stop do
            begin
            // ----->> QRPreview1.Print; Hier soll die Seite der Vorschau gedruckt werden
            if I <> Stop then
            NewPage;
            end;
            EndDoc;
            end;
            end
            else { PrintRange = prPageNums }
            begin
            if (Stop - Start) > 15 then
            MessageDlg('Druck von mehr als 15 Seiten nicht möglich - bitte neu auswählen!', mtError, [mbOk], 0)
            else begin
            with Printer do
            begin
            BeginDoc;
            for I := Start to Stop do
            begin
            // ---->> QRPreview1.Print; Hier soll die Seite der Vorschau gedruckt werden
            if I <> Stop then
            NewPage;
            end;
            EndDoc;
            end;
            end;
            end;
            end;
            end;
            end;

            Leider sind in der Hilfe weder die Eigenschaften, Methoden noch die Events beschrieben. Wie kann ich die Seite ausdrucken?

            Mir fehlt nur noch diese eine Quelltextzeile.

            Gruß Volke

            Comment


            • #7
              Hallo,
              hier habe ich noch eine zweite Version mit QrPrinter- Komponenten.
              Leider finde ich dazu keinereli Dokumentation:

              procedure TForm5.BitBtn8Click(Sender: TObject);
              Var
              I, Start, Stop: Integer;
              begin
              with QRPreview1.QRPrinter do
              begin
              PrintSetup;

              --->> Start := PrintSetup.FromPage; !!!!!
              --->> Stop := PrintSetup.ToPage; !!!!!

              MessageDlg('Seitenwahl: ' + IntToStr(Start) + ' - ' + IntToStr(Stop), mtInformation, [mbOk], 0);
              if (Stop - Start) > 15 then
              MessageDlg('Druck aller Seiten nicht möglich - max. 15 Seiten auswählen!', mtError, [mbOk], 0)
              else begin
              Title := 'ZGA - Ergebnisdruck';
              Print;
              end;
              end;
              end;

              Wie kann ich den Variablen Start und Stop die im QRPrinter.Printsetup ausgewählten Werte (Namen der dort verwendeten Variablen) übergeben, da ich keinerlei Dokumentation dazu habe finden können?

              Vielen Dank für Eure Tipps!

              Gruß Volke

              Comment


              • #8
                Hallo Volker
                *
                Mit den Befehl -> QuickRep.prepare wird der Report vorbereitet
                Nun kannst du mit -> QuickRep.PageNumber die generierten Seiten auslesen.
                *
                if QuickRep.PageNumber > 15 then
                ****QuickRep.PrinterSetup
                else
                ****QuickRep.print;

                So sollte es funktionieren
                *
                Viel Erfolg
                Oswal

                Comment

                Working...
                X