Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TRaveReport -> DataField -> Spalte übergeben (https://www.delphipraxis.net/133369-travereport-datafield-spalte-uebergeben.html)

HolgerCW 30. Apr 2009 12:28


TRaveReport -> DataField -> Spalte übergeben
 
Hallo zusammen,

ich möchte in einem DataBand die Spalten selber festlegen. Wie kann ich das machen.

Wenn ich mit Parametern arbeite übergibt er nur den Spaltennamen als String. Ich möchte aber das er dem DataField die Spalte übergibt.

Wie geht das ?

Habe es nun so versucht:

Delphi-Quellcode:
With DM_Rave_Report.RvProject.ProjMan do
begin

  MeinReport := FindRaveComponent('Report1', nil) as TRaveReport;
  MeineSeite := FindRaveComponent('Page1', MeinReport) as TRavePage;
  MeineRegion := FindRaveComponent('Region1', MeineSeite) as TRaveRegion;
  MeinBand := FindRaveComponent('Band1', MeineRegion) as TRaveBand;
  MeinDataBand := FindRaveComponent('DataBand1', MeineRegion) as TRaveDataBand;
  MeinDataText1 := FindRaveComponent('DataText_1', MeinDataBand) as TRaveDataText;

  MeineDataView := FindRaveComponent('DataView1', nil) as TRaveDataView;
  MeineDataView.Active := TRUE;
 
  MeinDataText1.DataField := 'AUFTRAG_ID';

end;
Bei der letzten Zeile kommt ein Adress-Fehler. Wodran liegt es. Lade vorher ein vorhandenes Project indem die Komponenten enthalten sind.

Gruss

Holger

HolgerCW 4. Mai 2009 09:41

Re: TRaveReport -> DataField -> Spalte übergeben
 
Hat denn keiner einen Hinweis ???

HolgerCW 7. Mai 2009 13:05

Re: TRaveReport -> DataField -> Spalte übergeben
 
Dann gebe ich mir jetzt selber die Lösung ;)

Delphi-Quellcode:
//Procedure für variabeln Rave Report - Erstellung
procedure Rave_Report_Variabel(Ueberschrift: String; Parameter: Array of String; ParaWerte: Array of String; Anzeigen:Boolean; DBGrid:TDBGrid);
var
 I, Y, Z, komplette_Breite, Max_Breite: Integer;
 Sender: TObject;
 MeinReport : TRaveReport;
 MeineSeite: TRavePage;
 MeineRegion: TRaveRegion;
 MeinBand: TRaveBand;
 MeinDataBand: TRaveDataBand;
 MeinText: TRaveText;
 MeineTexte: TRaveText;
 MeinDataText: TRaveDataText;
 MeinDataText1: TRaveDataText;
 MeineDataView: TRaveDataView;
 New_save, Datei_Pfad: String;
 vorherige_Breite, naechste_Breite, Prozentwert: Double;
begin

 DM_Rave_Report.RvDS_Con_AW_Variabel.DataSet := DBGrid.DataSource.DataSet;
 vorherige_Breite := 0;
 komplette_Breite := 0;

 for Z:= 0 to DBGrid.columns.count - 1 do
 begin

  If DBGrid.Columns[Z].Visible = True then komplette_Breite := komplette_Breite + DBGrid.Columns[Z].Width;

 end;

 Max_Breite := 1110;
 Datei_Pfad := 'AW_Variabel';

 if komplette_Breite < 790 then
 begin
  Datei_Pfad := 'AW_Variabel_hoch';
  Max_Breite := 770;
 end;
 if komplette_Breite > 1130 then
 begin
  Datei_Pfad := 'AW_Variabel_A3';
  Max_Breite := 1590;
 end;

 DM_Rave_Report.RvSystem.DefaultDest := rdFile;
 DM_Rave_Report.RvSystem.DoNativeOutput := false;
 DM_Rave_Report.RvSystem.RenderObject := DM_Rave_Report.RvRenderPDF;
 DM_Rave_Report.RvSystem.OutputFileName := 'C:PDF_Report\PDF-Dateien\' + Datei_Pfad + '_' + Anwender_ermitteln (FormTerMaS.SB_TerMaS.Panels[1].Text) + '.pdf';
 DM_Rave_Report.RvSystem.SystemSetups := DM_Rave_Report.RvSystem.SystemSetups - [ssAllowSetup];
 
 //Projekt zurücksetzen
 DM_Rave_Report.RvProject.Close;
 DM_Rave_Report.RvProject.ClearParams;
 DM_Rave_Report.RvProject.ProjectFile := 'C:\PDF_Report\' + Datei_Pfad + '.rav';
 DM_Rave_Report.RvProject.Open;

 //Eventuelle Parameter hinzufügen
 for I := 0 to length(Parameter) - 1 do
 begin
  DM_Rave_Report.RvProject.SetParam('' + Parameter[I] + '', ParaWerte[I]);
 end;

 New_save := '';

 //Projekt abändern
 With DM_Rave_Report.RvProject.ProjMan do
 begin

  MeinReport := FindRaveComponent('Report1', nil) as TRaveReport;
  MeineSeite := FindRaveComponent('Page1', MeinReport) as TRavePage;

  MeineRegion := FindRaveComponent('Region', MeineSeite) as TRaveRegion;
  MeinBand := FindRaveComponent('Band', MeineSeite) as TRaveBand;
  MeinDataBand := FindRaveComponent('DataBand', MeineSeite) as TRaveDataBand;
  MeineDataView := FindRaveComponent('DataView', MeineSeite) as TRaveDataView;
  CreateFields(MeineDataView, nil, nil, true);

  MeinText := FindRaveComponent('Text_Main', MeineSeite) as TRaveText;
  MeinText.Text := Ueberschrift;

  for Y := 0 to DBGrid.Columns.count - 1 do
  begin

   if DBGrid.Columns[Y].Visible = True then
   begin

    naechste_Breite := vorherige_Breite + RoundTo(DBGrid.Columns[Y].Width / 100, -2);

    if naechste_Breite >= RoundTo(Max_Breite / 100, -2) then
    begin

     Prozentwert := ((RoundTo(Max_Breite / 100, -2) - (0.05 + vorherige_Breite)) / RoundTo(DBGrid.Columns[Y].Width / 100, -2)) * 100;

     if Prozentwert < 50 then
     begin

      Application.MessageBox(PChar('Es können nicht alle Spalten ausgegeben werden.'),'Information',MB_OK or MB_ICONINFORMATION);
      break;

     end;

    end;

    MeineTexte := MeinBand.CreateChild(TRaveText, 'Text_' + inttostr(Y)) As TRaveText;
    MeineTexte.Text := DBGrid.Columns[Y].Title.Caption;
    MeineTexte.Left := 0.05 + vorherige_Breite;
    MeineTexte.Top := 0.05;
    if RoundTo(Max_Breite / 100,-2) > MeineTexte.Left + RoundTo(DBGrid.Columns[Y].Width / 100, -2) then
     MeineTexte.Width := RoundTo(DBGrid.Columns[Y].Width / 100, -2)
    else
     MeineTexte.Width := RoundTo(Max_Breite / 100, -2) - MeineTexte.Left;
    If DBGrid.Columns[Y].Alignment = taLeftJustify then MeineTexte.FontJustify := pjLeft;
    If DBGrid.Columns[Y].Alignment = taRightJustify then MeineTexte.FontJustify := pjRight;
    If DBGrid.Columns[Y].Alignment = taCenter then MeineTexte.FontJustify := pjCenter;
    MeineTexte.Font.Size := 8;
    MeineTexte.Font.Name := 'Tahoma';

    MeinDataText := MeinDataBand.CreateChild(TRaveDataText, 'DataText_' + inttostr(Y)) As TRaveDataText;
    MeinDataText.DataField := DBGrid.Columns[Y].FieldName;
    MeinDataText.DataView := MeineDataView;
    MeinDataText.Left := 0.05 + vorherige_Breite;
    MeinDataText.Top := 0.05;
    if RoundTo(Max_Breite / 100,-2) > MeinDataText.Left + RoundTo(DBGrid.Columns[Y].Width / 100, -2) then
     MeinDataText.Width := RoundTo(DBGrid.Columns[Y].Width / 100, -2)
    else
     MeinDataText.Width := RoundTo(Max_Breite / 100, -2) - MeinDataText.Left;
    If DBGrid.Columns[Y].Alignment = taLeftJustify then MeinDataText.FontJustify := pjLeft;
    If DBGrid.Columns[Y].Alignment = taRightJustify then MeinDataText.FontJustify := pjRight;
    If DBGrid.Columns[Y].Alignment = taCenter then MeinDataText.FontJustify := pjCenter;
    MeinDataText.Font.Size := 8;
    MeinDataText.Font.Name := 'Tahoma';

    vorherige_Breite := vorherige_Breite + RoundTo(DBGrid.Columns[Y].Width / 100, -2);

   end;

  end;

  //Zwischenspeichern und nachher wird neu geladen
  DM_Rave_Report.RvProject.ProjectFile := 'C:\PDF_Report\' + Datei_Pfad + '_2.rav';
  DM_Rave_Report.RvProject.Save;
  DM_Rave_Report.RvProject.Open;

  New_save := '_2';

 end;

 //Rave-Datei als PDF speichern
 DM_Rave_Report.RvProject.LoadFromFile('C:PDF_Report\' + Datei_Pfad + New_save + '.rav');
 DM_Rave_Report.RvProject.ExecuteReport('Report1');

end;
Zur Info: Es wird das übergebene DBGrid daraufhin analysiert, ob die Spalten auf einem Hochformat A4 oder Querformat A4 oder Querformat A3 ausgegeben werden kann. Die rav - Dateien dafür habe ich vorher schon erstellt. Mit dieser Procedure fülle ich nur noch die Spalten.

Gruss

Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 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