Delphi-PRAXiS
Seite 1 von 2  1 2      

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]


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 Uhr.
Seite 1 von 2  1 2      

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