AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fastreport - Variable übergeben

Ein Thema von user0815 · begonnen am 4. Mai 2012 · letzter Beitrag vom 28. Jul 2016
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#1

Fastreport - Variable übergeben

  Alt 4. Mai 2012, 08:42
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

Geändert von user0815 ( 4. Mai 2012 um 08:47 Uhr) Grund: en - dokumentation vorhanden
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Fastreport - Variable übergeben

  Alt 4. Mai 2012, 08:48
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
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Fastreport - Variable übergeben

  Alt 4. Mai 2012, 09:07
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.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Fastreport - Variable übergeben

  Alt 4. Mai 2012, 09:27
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
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Fastreport - Variable übergeben

  Alt 4. Mai 2012, 10:24
FR4.6.ProgrammerManual-en:

Adds a variable to the specified category
  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
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Fastreport - Variable übergeben

  Alt 4. Mai 2012, 10:50
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Fastreport - Variable übergeben

  Alt 4. Mai 2012, 11:13
FR4.6.ProgrammerManual-en:

Adds a variable to the specified category
  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...
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#8

AW: Fastreport - Variable übergeben

  Alt 4. Mai 2012, 13:03
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.
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

AW: Fastreport - Variable übergeben

  Alt 28. Jul 2016, 14:34
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
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen

Geändert von mm1256 (28. Jul 2016 um 14:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.125 Beiträge
 
Delphi 12 Athens
 
#10

AW: Fastreport - Variable übergeben

  Alt 28. Jul 2016, 14:54
Warum?

Man könnte natürlich erstmal in den Quellcode gucken und sieht das Warum.
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 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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.

Geändert von himitsu (28. Jul 2016 um 15:00 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 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