Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Gecheckte Items mit dem Report Builder ausdrucken! (https://www.delphipraxis.net/156938-gecheckte-items-mit-dem-report-builder-ausdrucken.html)

Metallicwar 21. Dez 2010 10:35

Gecheckte Items mit dem Report Builder ausdrucken!
 
Hallo, wie der Titel schon sagt, möchte ich mit Hilfe des Report Builders alle Items ausdrucken, die in der ChecklistBox angecheckt sind.
Infos:
AdsConnection --> AdsQuery --> DataSource --> ppDBPipeline --> ppReport --> ppDesigner

Delphi-Quellcode:
AdsQuery.SQL.Text:=
SELECT
p.Name,
p.Vorname,
p.PIN,
abt.Bezeichnung,
p.Passiv,
pz.Austritt,
F.Bezeichnung,
F.Zusatz,
F.Strasse,
F.Plz, F.Ort, p.ID,
bd.Bild
From Personal p
Left Outer Join Personalzusatz pz on p.ID = pz.Id_Personal
Left Outer Join Abteilungen abt on p.ID_Abteilungen = abt.Id
Left Outer Join Firma F on p.ID_Firma = F.Id
Left Outer Join Bilddatenbank bd on bd.ID_Personal = p.id
Where IFNULL(Passiv,false) = false
Order By P.name
Mithilfe dieser Query, werden Items in die Checklistbox eingetragen.
Delphi-Quellcode:
procedure TfrmAusweisdruck.FormShow(Sender: TObject);
var
  sName: String;
begin
  frmAusweisdruck.ClientWidth := 357;
  btnAusblenden.Enabled := False;
  with qMitarbeiter do
  begin
    Active:=True;
    while not Eof do
    begin
      sname := FieldByName('name').AsString + ', ' + FieldByName('Vorname').AsString;
      chlistboxMitarbeiter.Items.AddObject(sName,TObject(FieldByName('id').AsInteger));
      Next;
    end;
  end;
end;
So, das ist das wichtigste, was man wissen muss :-) um mir bei meinem Problemchen weiter zu helfen.

Momentan werden alle Einträge aus der Checklistbox ausgedruckt egal ob angecheckt oder nicht.
Delphi-Quellcode:
procedure TfrmAusweisdruck.bitbtnDruckenClick(Sender: TObject);
begin
  ppReport1.Print;
end;

Ich möchte aber, dass nur Einträge ausgedruckt werden, die auch angecheckt sind, wie löse ich das?

Metallicwar 21. Dez 2010 10:52

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
Selbe Frage, leider konnte mir keiner weiterhelfen...
http://www.delphipraxis.net/154853-i...bernehmen.html

ULIK 21. Dez 2010 11:01

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
JIT-Pipeline? Darin die die CheckListbox durchackern und bei gesetztem Häkchen nicht ignorieren?
Ansonsten könntest Du vieleicht die Datenbankpipeline filtern und nur wenn Datensatz in Checkbox aktiv ist, dann auch drucken.
Oder halt, daß Du die Selektion aus der Checklistbox in die DB schreibst und dann deine Query für den Report entsprechend anpaßt.

Metallicwar 21. Dez 2010 11:15

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
Zitat:

JIT-Pipeline? Darin die die CheckListbox durchackern und bei gesetztem Häkchen nicht ignorieren?
könntest du das bitte mal bisschen genauer erklären, hab mich mit dem Report Builder noch nicht wirklich viel beschäftigt.

ULIK 21. Dez 2010 11:24

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
Hab grad den ReportBuilder hier auf der Arbeit nicht installiert, aber schau Dir mal die Demos an. Da gibt's was zur JIT Pipeline. Ansonsten zur Ergänzung auch http://www.digital-metaphors.com:808...ccess/JIT_Data (aber probier's erst mal mit dem Demos für das Grundprinzip)

Im Prinzip läuft's so: Anzahl der Datensätze in der Pipeline setzen, dann im Datenevent entscheiden, was mit den Daten gemacht werden soll bzw. welches Report-Feld mit welchen Daten bestückt wird.

Blup 21. Dez 2010 12:42

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
Das Band das den Datensatz darstellt, hat ein BeforePrint-Ereignis.
Darin kannst du auf die Pipeline zugreifen und prüfen, ob der jeweilige Datensatz angezeigt werden soll oder nicht. Die Eigenschaft Visible des Bandes setzt du dann entsprechend.

Die saubere Lösung ist allerdings, nur die Datensätze bereitzustellen, die auch wirklich angezeigt werden.

Metallicwar 21. Dez 2010 12:54

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
könnt ihr mir vll mit ein bisschen Code helfen, ich komme nämlich einfach nicht weiter ... :(

Tyrolean 21. Dez 2010 13:30

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
Zitat:

Zitat von Metallicwar (Beitrag 1069725)
Momentan werden alle Einträge aus der Checklistbox ausgedruckt egal ob angecheckt oder nicht.
Delphi-Quellcode:
procedure TfrmAusweisdruck.bitbtnDruckenClick(Sender: TObject);
begin
  ppReport1.Print;
end;

Ich möchte aber, dass nur Einträge ausgedruckt werden, die auch angecheckt sind, wie löse ich das?

Vor dem Print einfach einen Filter auf die Query setzen. In etwa so:
Delphi-Quellcode:
var
 sFilter : String;
 i : Integer;
begin
  sFilter := '';
  for i := 0 to chlistboxMitarbeiter.Itemcount-1 do begin
   if chlistboxMitarbeiter.Items[i].checked then begin
    if sFilter <> '' then sFilter := sFilter + ' or ';
    sFilter := sFilter + 'Id = ' + IntToStr(Integer(chlistboxMitarbeiter.Items.Objects[i]));
   end;
  end;
  if sFilter <> '' then begin
    qMitarbeiter.Filter := sFilter;
    qMitarbeaiter.Filtered := True;
  end;
  ppReport1.Print;
end;
Ungetestet im Editor geschrieben.

Metallicwar 21. Dez 2010 13:58

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
Delphi-Quellcode:
procedure TfrmAusweisdruck.ppReport1BeforePrint(Sender: TObject);
var
  sFilter: String;
  ichecked: Integer;
begin
  sFilter := '';
  for ichecked := 0 to chlistboxMitarbeiter.Count - 1 do
    if chlistboxMitarbeiter.Checked[ichecked] = True then
      if sFilter <> '' then sFilter := sFilter + 'or';
      sFilter := sFilter + 'ID = ' + IntToStr(Integer(chlistboxMitarbeiter.Items.Objects[ichecked])); // hier knallt es, EListError mit der Meldung 'Listenindex' überschreitet das Maximum (14). P.S. Ich habe 14 Datenbankeinträge.
  if sFilter <> '' then
  begin
    qMitarbeiter.Filter := sFilter;
    qMitarbeiter.Filtered := True;
  end;
end;

DeddyH 21. Dez 2010 14:03

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
Da fehlen ja auch begin und end.
Delphi-Quellcode:
procedure TfrmAusweisdruck.ppReport1BeforePrint(Sender: TObject);
var
  sFilter: String;
  ichecked: Integer;
begin
  sFilter := '';
  for ichecked := 0 to chlistboxMitarbeiter.Count - 1 do
    if chlistboxMitarbeiter.Checked[ichecked]{ = True *Pfui*} then
      begin //hier
      if sFilter <> '' then sFilter := sFilter + 'or';
      sFilter := sFilter + 'ID = ' + IntToStr(Integer(chlistboxMitarbeiter.Items.Objects[ichecked])); // hier knallt es, EListError mit der Meldung 'Listenindex' überschreitet das Maximum (14). P.S. Ich habe 14 Datenbankeinträge.
      end; //und hier
  if sFilter <> '' then
  begin
    qMitarbeiter.Filter := sFilter;
    qMitarbeiter.Filtered := True;
  end;
end;
[edit] Hat aber mit dem Listenindex eigentlich nichts zu tun, sry. [/edit]

Metallicwar 21. Dez 2010 14:10

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
Danke bis dahin, das könnte zu einer Lösung führen....
... aber
Ich wähle 2 Items aus meiner Checklistbox aus und drücke auf einen Button, der mir alle zudruckende Dokumente im TppViewer anzeigen sollte, jedoch tritt folgende Fehlermeldung auf:
Code:
qMitarbeiter: Error 3111: Unknown Identifier found in a record filter expression aufgetreten

Delphi-Quellcode:
procedure TfrmAusweisdruck.ppReport1BeforePrint(Sender: TObject);
var
  sFilter: String;
  ichecked: Integer;
begin
  sFilter := '';
  for ichecked := 0 to chlistboxMitarbeiter.Count - 1 do
    if chlistboxMitarbeiter.Checked[ichecked] then
      begin
        if sFilter <> '' then sFilter := sFilter + 'or';
        sFilter := sFilter + 'ID = ' + IntToStr(Integer(chlistboxMitarbeiter.Items.Objects[ichecked]));
      end;
  if sFilter <> '' then
  begin
    qMitarbeiter.Filter := sFilter;
    qMitarbeiter.Filtered := True;
  end;
end;
Delphi-Quellcode:
procedure TfrmAusweisdruck.btnEinblendenClick(Sender: TObject);
begin
  frmAusweisdruck.ClientWidth := 697;

  btnAusblenden.Enabled := True;
  btnEinblenden.Enabled := False;

  ppViewer1.Report := ppReport1;
  ppReport1.PrintToDevices;

Metallicwar 21. Dez 2010 14:15

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
3111 Unknown identifier found in the record filter expression

Advantage Error Guide

Problem: An error occurred in the Advantage Expression Engine parser. An identifier within the record filter expression is unknown to the parser.

Solution: This error is usually caused by the use of memory variables within the record filter expression. Memory variables are not supported by the Advantage Expression Engine as the variables are visible only to the client. This error may also result from a misspelled field name or from a field name that does not exist in the current work area.

?!?

DeddyH 21. Dez 2010 14:17

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
Ich sehe gerade, da fehlen Leerzeichen vor und hinter dem or.
Delphi-Quellcode:
if sFilter <> '' then sFilter := sFilter + ' or ';
So besser?

ULIK 21. Dez 2010 14:18

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
Also, in deinem Filterstring sollte es mindestens 'p.ID' heißen. Und dann laß Dir halt mal ausgeben, was denn als Filterstring gesetzt wird und überprüf den per Hand mit dem SQL Statement.

[edit]Sorry für den ursprünglichen Kommentar, das war mein Fehler. Aber das p.ID sollte dennoch nicht schaden[/edit]

Metallicwar 21. Dez 2010 14:23

AW: Gecheckte Items mit dem Report Builder ausdrucken!
 
Zitat:

Zitat von DeddyH (Beitrag 1069780)
Ich sehe gerade, da fehlen Leerzeichen vor und hinter dem or.
Delphi-Quellcode:
if sFilter <> '' then sFilter := sFilter + ' or ';
So besser?

ja so besser, es funktioniert, viele Dank euch :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz