Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Rave Reports Mirror per Event Script (https://www.delphipraxis.net/143130-rave-reports-mirror-per-event-script.html)

alphanumeric 11. Nov 2009 15:26

Re: Rave Reports Mirror per Event Script
 
hier mein constructor, der aufgerufen wird sobald die Form geöffnet wird.
Delphi-Quellcode:
begin


    adoConnectionString := adoConnectionString;

    raveSystem := TRvSystem.Create( self );
    raveProject := TRvProject.Create( self );
    ravePDFRender := TRvRenderPDF.Create( self );

    raveDataSetConnection_Auf := TRvDataSetConnection.Create( self );
    raveDataSetConnection_Pos := TRvDataSetConnection.Create( self );
    raveDataSetConnection_Technik := TRvDataSetConnection.Create( self );
    raveDataSetConnection_Design := TRvDataSetConnection.Create( self );
    raveDataSetConnection_Flg := TRvDataSetConnection.Create( self );
    raveDataSetConnection_VerAdr := TRvDataSetConnection.Create( self );
    raveDataSetConnection_RecAdr := TRvDataSetConnection.Create( self );
    raveDataSetConnection_TechPos := TRvDataSetConnection.Create( self );
    raveDataSetConnection_UeberTechPos := TRvDataSetConnection.Create( self );
    raveDataSetConnection_Revision := TRvDataSetConnection.Create( self );

    dataSet_Auf := TADODataSet.Create( self );
    dataSet_Pos := TADODataSet.Create( self );
    dataSet_Technik := TADODataSet.Create( self );
    dataSet_Design := TADODataSet.Create( self );
    dataSet_Flg := TADODataSet.Create( self );
    dataSet_VerAdr := TADODataSet.Create( self );
    dataSet_RecAdr := TADODataSet.Create( self );
    dataSet_RecLaen := TADODataSet.Create( self );
    dataSet_VerLaen := TADODataSet.Create( self );
    dataSet_E := TADODataSet.Create( self );
    dataSet_TechPos := TADODataSet.Create( self );
    dataSet_UeberTechPos := TADODataSet.Create( self );
    dataSet_Revision := TADODataSet.Create( self );

    raveProject.Engine := _raveSystem;
    raveProject.ProjectFile := '.\TestReport.rav';
    raveProject.StoreRAV := true;

     //DataSet-Auf
    raveDataSetConnection_Auf.DataSet := dataSet_Auf;
    raveDataSetConnection_Auf.Name := 'Auf';
    raveDataSetConnection_Auf.RuntimeVisibility := rtDeveloper;
    raveDataSetConnection_Auf.OnGetCols := raveDataSetConnection_AufGetCols;
    raveDataSetConnection_Auf.OnGetRow := raveDataSetConnection_AufGetRow;
    //Pos
    raveDataSetConnection_Pos.DataSet := dataSet_Pos;
    raveDataSetConnection_Pos.Name := 'Pos';
    raveDataSetConnection_Pos.RuntimeVisibility := rtDeveloper;
    raveDataSetConnection_Pos.OnGetCols := raveDataSetConnection_PosGetCols;
    raveDataSetConnection_Pos.OnGetRow := raveDataSetConnection_PosGetRow;

    //Technik
    raveDataSetConnection_Technik.DataSet := dataSet_Technik;
    raveDataSetConnection_Technik.Name := 'Technik';
    raveDataSetConnection_Technik.RuntimeVisibility := rtDeveloper;
    raveDataSetConnection_Technik.OnGetCols := raveDataSetConnection_TechnikGetCols;
    raveDataSetConnection_Technik.OnGetRow := raveDataSetConnection_TechnikGetRow;

    //
    raveDataSetConnection_Design.DataSet := dataSet_Design;
    raveDataSetConnection_Design.Name := 'Design';
    raveDataSetConnection_Design.RuntimeVisibility := rtDeveloper;
    raveDataSetConnection_Design.OnGetCols := raveDataSetConnection_DesignGetCols;
    raveDataSetConnection_Design.OnGetRow := raveDataSetConnection_DesignGetRow;

    //AufträgeFlg
    raveDataSetConnection_Flg.DataSet := dataSet_Flg;
    raveDataSetConnection_Flg.Name := 'Flg';
    raveDataSetConnection_Flg.RuntimeVisibility := rtDeveloper;
    raveDataSetConnection_Flg.OnGetCols := raveDataSetConnection_FlgGetCols;
    raveDataSetConnection_Flg.OnGetRow := raveDataSetConnection_FlgGetRow;

    raveDataSetConnection_VerAdr.DataSet := dataSet_VerAdr;
    raveDataSetConnection_VerAdr.Name := 'VerAdr';
    raveDataSetConnection_VerAdr.RuntimeVisibility := rtDeveloper;
    raveDataSetConnection_VerAdr.OnGetCols := raveDataSetConnection_VerAdrGetCols;
    raveDataSetConnection_VerAdr.OnGetRow := raveDataSetConnection_VerAdrGetRow;

    raveDataSetConnection_RecAdr.DataSet := dataSet_RecAdr;
    raveDataSetConnection_RecAdr.Name := 'RecAdr';
    raveDataSetConnection_RecAdr.RuntimeVisibility := rtDeveloper;
    raveDataSetConnection_RecAdr.OnGetCols := raveDataSetConnection_RecAdrGetCols;
    raveDataSetConnection_RecAdr.OnGetRow := raveDataSetConnection_RecAdrGetRow;

    raveDataSetConnection_TechPos.DataSet := dataSet_TechPos;
    raveDataSetConnection_TechPos.Name := 'TechPos';
    raveDataSetConnection_TechPos.RuntimeVisibility := rtDeveloper;
    raveDataSetConnection_TechPos.OnGetCols := raveDataSetConnection_TechPosGetCols;
    raveDataSetConnection_TechPos.OnGetRow := raveDataSetConnection_TechPosGetRow;

    raveDataSetConnection_UeberTechPos.DataSet := _dataSet_UeberTechPos;
    raveDataSetConnection_UeberTechPos.Name := 'UeberTechPos';
    raveDataSetConnection_UeberTechPos.RuntimeVisibility := rtDeveloper;
    raveDataSetConnection_UeberTechPos.OnGetCols := raveDataSetConnection_UeberTechPosGetCols;
    raveDataSetConnection_UeberTechPos.OnGetRow := raveDataSetConnection_UeberTechPosGetRow;
   
    raveDataSetConnection_Revision.DataSet := _dataSet_Revision;
    raveDataSetConnection_Revision.Name := 'Revision';
    raveDataSetConnection_Revision.RuntimeVisibility := rtDeveloper;
    raveDataSetConnection_Revision.OnGetCols := raveDataSetConnection_RevisionGetCols;
    raveDataSetConnection_Revision.OnGetRow := raveDataSetConnection_RevisionGetRow;
Hier die GetCols/GetRow:

Delphi-Quellcode:

procedure TForm_KundenauftragReport._raveDataSetConnection_AuftraegeVersandAdrGetCols(
  Connection: TRvCustomConnection);
begin
    raveDataSetConnection_VerAdr.DoGetCols;
    raveDataSetConnection_VerAdr.WriteField('ADR',dtString, 20, 'ADR','ADR');

end;


procedure TForm_KundenauftragReport._raveDataSetConnection_AuftraegeVersandAdrGetRow(
  Connection: TRvCustomConnection);
begin
    _raveDataSetConnection_VerAdr.DoGetRow;
    Adr();

Last but Not least, das Dataset befüllen:

Delphi-Quellcode:

        dataSet_Revision.Connection := adoConnection;
        dataSet_Revision.CommandText:= 'select * from Revision where nr=''xyz''';
        dataSet_Revision.Open();

Der ado connection string wird aus einer DLL übergeben. Im Prinzip werden dann Alle DataConnections initalisiert beim start, da ich ja nen Create constructor hab. Die Form wird letztendlich über eine Funktion aufgerufen, dort wo meine datasets befüllt werden, und anschließend kann ich den Rave Dialog per druck auf nen button öffnen und damit halt weitermachen. ich habs jetzt so eingestellt dass er den Dialog nicht zeigt sondern direkt nen Preview ausgibt.

Ist viel Tipperei, aber er hatte mit dem komponenten auf der oberfläche probleme, weswegen ich die sachen später erzeugen muss.

Gruß

alphaflight83 11. Nov 2009 15:58

Re: Rave Reports Mirror per Event Script
 
Uff, das ist ganz schön heftig.

Ich hab meine RvConnections in einem DataModule geparkt,
RvProject und RvSystem liegen im RavePreview, das dann bei Bedarf dynamisch erzeugt wird.
Mit dieser Kombination hatte ich noch nie Probleme.
Rave macht bei mir nur Probleme, wenn RvDataSetConnections in verschiedenen Forms liegen.
Die Reports wurden ebenfalls wie gesagt zur Designzeit erstellt.

Ein Beispielaufruf:
Delphi-Quellcode:
(*******************************
** Procedure: Print_MenuClick **
*******************************)
procedure TForm_Example.Print_MenuClick(Sender: TObject);
var
  Form_RavePreview: TForm_RavePreview;
begin

  Form_RavePreview := TForm_RavePreview.Create(self);

  Form_RavePreview.RvProject.ProjectFile :=
    (AP_Path + '\DATA\REPORT\Example.rav');

  Form_RavePreview.RvSystem.TitlePreview           := 'Example-Preview';
  Form_RavePreview.RvSystem.SystemPreview.FormState := wsMaximized;

  with Form_RavePreview.RvProject do begin
    Open;
    try
      SetParam('Caption_Example', 'Example-Caption');
      SetParam( ... );

      ExecuteReport('Report1');
    finally
      Close;
    end;
  end;
end;
Hier auch schon mal gepostet.


Gruß, alphaflight

alphanumeric 12. Nov 2009 08:50

Re: Rave Reports Mirror per Event Script
 
ich hab mein problem übrigens nun so gelößt, dass ich ne funktion in delphi habe, die dann meinen string ins dataset reinschreibt. Funktioniert wunderbar.

Konchulio 12. Nov 2009 10:27

Re: Rave Reports Mirror per Event Script
 
Hallo Zusammen,

grundlegend kann man wie folgt auf die Komponenten in einer *.rav-Datei zugreifen.

var
Report : TRavereport;
Page : TRavePage;
begin
Report := RvReport.ProjMan.findravecomponent('Default' , nil) as TRavereport;
Page := RvReport.ProjMan.findravecomponent('Main', Report) as TRavePage;
end;

über die TRavePage-Instanz (Page) kann man dann auf jedes Objekt auf der Rave-Seite zugreifen...
ich hoffe das hilft euch weiter

mfg
Konchulio

alphanumeric 12. Nov 2009 10:44

Re: Rave Reports Mirror per Event Script
 
Mir eröffnet sich derzeit ein ganz anderes problem:

Ich würde gerne ein DataBand spiegeln. sprich Databand von einer Globalen Seite soll auf meine Hauptseite gespiegelt werden. problem dabei ist wohl, dass die komponente keine Mirror eigenschaft hat. im Prinzip würde es reichen, wenn ich nur die Inhalte spiegele und dann den DataView per Event abfrage änder. Hier hab ich aber wohl syntaxprobleme, da ich in der OnBeforePrint bereits eine If Abfrage habe:

Delphi-Quellcode:
if DS_pos_cposmodus.AsString='2' then
DataMemo8.FontMirror := FM_ArialBold;
elseif DS_pos_cposmodus.AsString='1' then
DataMemo8.FontMirror := FM_Arial;
elseif DS_pos_cposmodus.AsString='3' then
DataMemo8.FontMirror := FM_ArialStrikeout;
end;
Hier werden die FontMaster Components gespiegelt.

Problem ist nur, wenn ich jetzt mit der syntax

Delphi-Quellcode:
if X then
DataBand.DataView:=DS_Whatever;

if DS_pos_cposmodus.AsString='2' then
DataMemo8.FontMirror := FM_ArialBold;
elseif DS_pos_cposmodus.AsString='1' then
DataMemo8.FontMirror := FM_Arial;
elseif DS_pos_cposmodus.AsString='3' then
DataMemo8.FontMirror := FM_ArialStrikeout;
end;
end;
drumsetzen will, krieg ich ne Zugriffsverletzung. problem ist dabei, wenn das DataView nicht auf DS_pos steht, krieg ich ebenfalls ne Zugriffsverletzung, weil die if's ja alle auf DS_pos gehen. Wie krieg ich den kram jetzt also sauber verkapselt?



Gruß

Konchulio 12. Nov 2009 11:26

Re: Rave Reports Mirror per Event Script
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo alphanumeric,

das Spiegeln solcher Daten-Bänder geht wie folgt.

Im Rave-Report-Designer...
1. Auf der Hauptseite die Komponente "DataMirrorSection" anlegen.
2. In der "DataMirrorSection"-Komponente die Eigenschaft "DataView" einstellen. (z.B. verbundenes Dataset aus Delphi)
3. In der "DataMirrorSection"-Komponente die Eigenschaft "DataField" einstellen. Dieses Feld wird für die Einschränkung/Bedingung herangenommen.
4. Anschließend über die "DataMirrors"-Eigenschaft den "Data Mirror Editor"(siehe Anhang) öffnen. Hier kann man nun die Bedingung(siehe auch Punkt 3) und die zu spiegelnde Section(z.B. DataBand auf Global Page) angeben. Die Default Einstellung wird dann herangezogen wenn keine Bedingung zutrifft.

Das mit den FontMirror kann man dan aufs DataBand hinterlegen, oder wie oben beschrieben darauf zugreifen.

Ich hoffe ich konnte weiter helfe....

mfg
Konchulio

alphanumeric 12. Nov 2009 12:47

Re: Rave Reports Mirror per Event Script
 
soweit ich das sehe, kann man mit dem dataMirror nur sections spiegeln oder? meine DataText krieg ich da nicht angezeigt.


edit: sry, zu blöd zum lesen ;)


edit2: ich habe mir jetzt überlegt, einfach 2 reports anzufertigen und einen dritten von dem ich die daten, die sowieso gleich sind, herspiegeln kann. kann ich überhaupt von 1 Report zum anderen etwas spiegeln? Sprich meinetwegen nur die Elemente, nichtmal das databand.

Also ich meine 2 Reports innerhalb von 1 Rave Project

gruß

Konchulio 12. Nov 2009 13:43

Re: Rave Reports Mirror per Event Script
 
Hallo alphanumeric,

erst einmal was hast du den eigenglich vor. Im ersten Post wilst du ein DataBand spiegeln dann plötzlich ein DataText?!

Schmeiß deine komponenten (egal ob datengebunden oder nicht und in deinem Fall dein DataText) in eine Section die auf einer Globale Seite liegt rein. Dann kannst du die Sections einfach spiegeln. Wenn du unterschiedliche Layouts willst, leg dir doch einfach noch eine Section an die du dann ensprechend lädts. Oder für ganz dynamische Reports kannst du gleich auf einer Globalen Seite alles realisieren und dann einfach nur noch auf deine Report-Seiten spieglen. Vorteil von Globalen Seiten --> man kann diese in mehreren Reports verwenden.

Also...:

1. Auf eine Globale Seite legst du eine DataMirrorSection-Komponente an.
2. Dannach 2 Sechtion-Komponenten ebenfals auf die Globale Seite anlegen.
3. Eeine DataText-Komponente für jede Section-Komponente anlegen.
4. In Section1.DataText z.B. Fontmirror1; In Section2.DataText z.B. Fontmiror2 einstellen usw.
5. Die zwei Section kannst du nun wie im vorigen Post in die DataMirrorSection laden.
6. Nun kannst du das auf der globalen Seite liegende DataMirrorSection-Kompoenten wiederum auf deine Seit(en) spieglen.

mfg
Konchulio


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr.
Seite 2 von 2     12   

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