Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fastreport - Variable übergeben (https://www.delphipraxis.net/168081-fastreport-variable-uebergeben.html)

user0815 4. Mai 2012 07:42


Fastreport - Variable übergeben
 
Hallo,

ich möchte von Delphi aus eine Variable zum Fastreport (Version: 4.12.6) übergeben & dort z.B. anzeigen.
Auf der Fastreport Seite in den FAQ habe ich folgendes gefunden:

Question: How can you transfer an array of variables from Delphi into FR ?
Delphi-Quellcode:
var
  a : variant;
begin
  a := VarArrayOf([1,2,3]);
  frxReport1.Script.Variables['a'] := a;
end;
Ich habe auch solchen Code gefunden:
Delphi-Quellcode:
  frxReport1.Variables['My Variable 1'] := 10;
  frxReport1.Script.AddVariable('WPath', 'String', ExtractFilePath(ParamStr(0)));
Compilieren kann ich obigen Code. Wie greife ich jetzt innerhalb von FR darauf zu ?

<strike>Die Seite http://www.fast-report.com/de/documentation/ zeigt gerade "nichts" an.</strike>
Die en zeigt was an: http://www.fast-report.com/en/documentation/ schaue jetzt dort erstmal...
Aus der Programmhilfe im Fastreport OrdnerDoc werde ich nicht schlau. Finde die Hilfe schlecht gemacht.

Grüße
user0815

Lemmy 4. Mai 2012 07:48

AW: Fastreport - Variable übergeben
 
Hi,

Fastreport Designer öffnen, Report laden. Unter Report - Variablen die Variable anlegen (zuerst eine neue Kategorie, dann die Variable) und den Namen vergeben. Diese kannst Du dann innerhalb FR wie ein DB-Feld verwenden bzw. über Get/Set in einem Script Werte auslesen / zugreifen.

Wert von Delphi aus setzen hast Du ja schon....

GRüße

user0815 4. Mai 2012 08:07

AW: Fastreport - Variable übergeben
 
Klappt. Geht das nur mit Strings ?

Wie kann ich get / set nutzen?

Wo finde ich dazu die entsprechende Dokumentation?
Habe eben mal das "FR4.6.ProgrammerManual-en" nach "set" durchsucht & nichts brauchbares gefunden.
Das ganze muss doch irgendwo Dokumentiert sein.

Lemmy 4. Mai 2012 08:27

AW: Fastreport - Variable übergeben
 
hm.. FastReport und Dokumentation ist so ne Sache ;-)

FR4.6.UserManual-en.pdf
Seite 31 (37 im PDF) Grundlagen
Seite 90/91 (96/97 im PDF): Anwendung von Variablen im Script

und bzgl. "Geht das nur mit Strings": Da musst Du aufpassen! String genrell mit QuotedStr() einpacken, da FR wirklich her geht und den Namen mehr oder weniger nur mit dem Wert der Variable ersetzt (wenn Du diese wie ein DBFeld verwendest). Da der Typ einer Variable innerhalb Delphi als Variant zugreifbar ist, kannst DU da theoretisch alles übergeben, musst es halt auf der FR Seite entsprechend auswerten...

Grüße

user0815 4. Mai 2012 09:24

AW: Fastreport - Variable übergeben
 
FR4.6.ProgrammerManual-en:

Adds a variable to the specified category
Delphi-Quellcode:
  procedure AddVariable(const ACategory, AName: String; const AValue: Variant);


funktioniert auch (ob das gewollt ist ?):
Delphi-Quellcode:
 
  frxReport1.Script.AddVariable('AAA', '', QuotedStr('ABC'));
  frxReport1.Script.AddVariable('BBB', '', 'DEF');
  frxReport1.Script.AddVariable('BBB', '', 'BLA'); // wird ignoriert

  frxReport1.Script.AddVariable('YYY', 'unnecessary', QuotedStr('456'));
  frxReport1.Script.AddVariable('ZZZ', 'unnecessary', '789');
Jetzt im Report in ein Memo Feld (TfrxMemoView) den jeweiligen Wert von ACategory in eckigen Klammern eintragen z.B.: [AAA]
Ausgabe in diesem Fall:
'ABC'
DEF
'456'
789

Bummi 4. Mai 2012 09:50

AW: Fastreport - Variable übergeben
 
ich habe fast alle meiner Drucks auf eine Generische Unit umgestellt der Datasets, Variablen, Reports, Callbacks etc.
im Execute mitgegeben werden, der Variablenteil sieht so aus ....

Delphi-Quellcode:
Procedure TDM.PrintEttis;

var
  vars: TFrxVariables;
  ...
begin

      vars := TFrxVariables.Create;
      try
        for i := 0 to FReportingList.Count - 1 do
        begin
          With vars.Add do
          begin
            Name := FReportingList.Names[i];
            Value := QuotedStr(FReportingList.Values[i]);
          end;
        end;
      ...
      ...
      TFPrintF.Execute(... ,vars, .... ....
end;



TFPrintF.Execute(... ,vars, .... ....);
begin
  ....


    for i := 0 to Report.Variables.Count - 1 do
    begin
      Report.Variables.Items[i].Value := QuotedStr('');
    end;
    if Assigned(Variables) then
      for i := 0 to Variables.Count - 1 do
      begin
        k := Report.Variables.IndexOf(Variables.Items[i].Name);
        if k > -1 then
          Report.Variables.Items[k].Value := Variables.Items[i].Value
        else
        begin
          with Report.Variables.Add do
          begin
            Name := Variables.Items[i].Name;
            Value := Variables.Items[i].Value;
          end;
        end;
      end;
   ....
end;

Lemmy 4. Mai 2012 10:13

AW: Fastreport - Variable übergeben
 
Zitat:

Zitat von user0815 (Beitrag 1164820)
FR4.6.ProgrammerManual-en:

Adds a variable to the specified category
Delphi-Quellcode:
  procedure AddVariable(const ACategory, AName: String; const AValue: Variant);

ja - nur ehrlich gesagt der SInn dahinter erschließt sich mir noch nicht, da ich so auf die Variable während des Reportdesigns keinen Zugriff habe. Deshalb leg ich die im Report immer an...

Iwo Asnet 4. Mai 2012 12:03

AW: Fastreport - Variable übergeben
 
Es soll auch Anwendungen geben, die die Möglichkeit bieten, den Report erst zur Laufzeit designen zu lassen lassen. Und da ist es auch praktisch, dynamisch einzelne Variablen zur Laufzeit zu deklarieren.

mm1256 28. Jul 2016 13:34

AW: Fastreport - Variable übergeben
 
Hallo,

normalerweise verwende ich List&Label aber jetzt habe ich ein sehr kleines Projekt mit einer einzigen Liste, und da ist L&L etwas overkill. Weil FR bei Delphi dabei ist, habe ich es mal damit probiert, und bin aufgrund der Anforderung zusätzlich eigene Variablen deklarieren zu müssen über Google auf diesen Thread gestoßen.

So deklariere ich die Variablen:

Delphi-Quellcode:
procedure TForm1.AddVariable(aName, aValue: string);
begin
  FR.Script.AddVariable(aName, '', aValue);
end;

...
  AddVariable('USERNAME', FUserName);
  AddVariable('DRUCKMONAT', cbDruck.Text+' ' + cbJahr.Text);
  AddVariable('GESAMTSTUNDEN', FormatDateTime('hh:mm', FGesamtStunden));
Das funktioniert auch. Aber, wenn ich bereits einmal gedruckt habe, und sich der Wert einer dieser definierten Variablen ändert, z.B. die GESAMTSTUNDEN, und ich nochmals drucke, wird nicht der neue Wert gedruckt, sondern immer der Wert den die Variable beim ersten Ausdruck hatte. Erst wenn ich das Programm neu starte, wird der richtige Wert wieder gedruckt.

Weiß jemand, woran das liegen könnte?

BTW das Handbuch ist in dieser Hinsicht wirklich nicht zu gebrauchen :pale:

himitsu 28. Jul 2016 13:54

AW: Fastreport - Variable übergeben
 
Warum?

Man könnte natürlich erstmal in den Quellcode gucken und sieht das Warum. :zwinker:
Delphi-Quellcode:
procedure TfsScript.AddVariable(const Name, Typ: String; const Value: Variant);
var
  v: TfsVariable;
begin
  if Find(Name) <> nil then Exit; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

  v := TfsVariable.Create(Name, StrToVarType(Typ, Self), Typ);
  v.Value := Value;
  v.OnGetVarValue := FOnGetVarValue;
  Add(v.Name, v);
end;
Entweder du suchst eine Set-Funktion (Ich hab Keine in TfsScript gesehn)
oder du machst vorher ein "Clear".

Wir machen es so, wobei wir Clear nur aufrufen, da auch innerhalb der Scripte weitere Variablen angelegt werden,
die Zuweisung an Variables überschreibt auch so Werte, wenn die Variable vorher schonmal zugewiesen wurde.
Delphi-Quellcode:
FR.Variables.Clear;//alles alte Zeug löschen
FR.Variables['USERNAME'] := FUserName;
...
Aber eigentlich machen wir das so
Delphi-Quellcode:
FR.Variables['USERNAME'] := '''' + FUserName + '''';
, wobei ich grade nicht mehr weiß, warum die "Strings" unbedingt als "String" gequotet werden mussten.
(bin bei uns nicht für die Reports zuständig, aber irgendeinen "wichtigen" Grund hatte es)


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