AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Werkzeuge Funktionen aus Crystal Reports im Report Builder anwenden

Funktionen aus Crystal Reports im Report Builder anwenden

Ein Thema von Metallicwar · begonnen am 25. Mär 2011 · letzter Beitrag vom 13. Apr 2011
Antwort Antwort
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#1

AW: Funktionen aus Crystal Reports im Report Builder anwenden

  Alt 11. Apr 2011, 11:20
Hi, bin gerade dabei Funktionen aus Delphi in den Report Builder zu importieren.
Ich möchte zunächst die Funktion RoundTo importieren, um auf zwei Nachkommastellen zu runden:
Code:
totext(truncate({B_Ergebnisse.Tagesbrutto}/60),"00",2)
Delphi-Quellcode:
unit Import;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, Math, raFunc, ppRTTI, raIDE, DateUtils;

type
  TmyRoundToFunction = class (TraStringFunction)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: String; override;
  end;

implementation

{------------------------------------------------------------------------------}
{ TmyRoundToFunction.GetSignature }

class function TmyRoundToFunction.GetSignature: String;
begin
  Result := 'function RoundTo(const AValue: Extended; const ADigit: TRoundToEXRangeExtended): Extended;';
end;

{------------------------------------------------------------------------------}
{ TmyRoundToFunction.ExecuteFunction }

procedure TmyRoundToFunction.ExecuteFunction(aParams: TraParamList);
var
 varAValue, varRueckgabe: Extended;
 varADigit: TRoundToEXRangeExtended;
begin
  GetParamValue(0, varAValue);
  GetParamValue(1, varADigit);

  varRueckgabe := RoundTo(varAValue, varADigit);

  SetParamValue(2, varRueckgabe);

end;

initialization
  raRegisterFunction('RoundTo', TmyRoundToFunction);

finalization
  raUnRegisterFunction('RoundTo');

end.
Da ich leider nicht weiß, wie ich Functionen aus Delphi zur Designzeit im Report Builder verwenden kann, habe ich die Unit raIDE eingebunden, damit ich zur Laufzeit, Variablenberechnungen durchführen kann. Sobald ich aber den Reiter "Sprache" unter Berechnungen aufrufe erhalte ich folgende Fehlermeldung:
Zitat:
"Cannot compile Signature for Zeichenkette function: RoundTo"
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.359 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Funktionen aus Crystal Reports im Report Builder anwenden

  Alt 11. Apr 2011, 12:30
Hi,

mir fallen ein paar Dinge auf.

1. Du leitest von TraStringFunction ab. TraSystemFunction ist IMHO besser geeignet.
2. RoundTo hast du einmal für RAP und dann noch mal in Delphi als normale Funktion integriert. Das könnte Probleme bereiten.
[EDIT]
3. Ganz nützlich ist auch noch die Kategorie - zur Übersichtlichkeit
Code:
class function TmyRoundToFunction.Category: string;
begin
  Result := 'Crystal Reports';
end;
Frank
Frank Reim

Geändert von dataspider (11. Apr 2011 um 12:32 Uhr)
  Mit Zitat antworten Zitat
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#3

AW: Funktionen aus Crystal Reports im Report Builder anwenden

  Alt 11. Apr 2011, 12:52
Hallo,
Zitat:
1. Du leitest von TraStringFunction ab. TraSystemFunction ist IMHO besser geeignet.
ok, hab ich abgeändert.
2. RoundTo hast du einmal für RAP und dann noch mal in Delphi als normale Funktion integriert. Das könnte Probleme bereiten.
Habe alle TmyRoundToFunction. .... durch TmyRundenFunction ersetzt,
[EDIT]
3. Ganz nützlich ist auch noch die Kategorie - zur Übersichtlichkeit
markieren
Code:
class function TmyRoundToFunction.Category: string;
begin
Result := 'Crystal Reports';
end;
hab nochmal im Developer Guide nachgeschaut! Danke, das hab ich auch seit langem gesucht, wie ich eigene Kategorien anlegen kann.
Hmmn, trotz der Änderungen besteht der Fehler weiterhin. Ich könnte mir vorstellen, dass er mit den Datentypen nicht klarkommt. (TRoundToEXRangeExtended)
oder an was könnte es noch liegen?
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.359 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Funktionen aus Crystal Reports im Report Builder anwenden

  Alt 11. Apr 2011, 13:22
Habe alle TmyRoundToFunction. .... durch TmyRundenFunction ersetzt, [/B]
Ich meinte:
Code:
...
  varRueckgabe := RoundTo(varAValue, varADigit); // Hier Funktion RoundTo
...
initialization
  raRegisterFunction('RoundTo', TmyRoundToFunction); // und hier noch mal für RAP
TRoundToEXRangeExtended wird wohl auch nicht funktionieren.
Wobei ich aus dem Hut auch nicht weiss, wie man Typen registriert. Kannst du hier keinen Standard Typ nehmen?

Frank
Frank Reim
  Mit Zitat antworten Zitat
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#5

AW: Funktionen aus Crystal Reports im Report Builder anwenden

  Alt 11. Apr 2011, 13:39
ich hab vor einiger Zeit schonmals eine Function (DaysInAMonth) aus Delphi importiert.
Beim importieren, habe ich auch keine Funktion anderst genannt.
Delphi-Quellcode:
unit Monatstage;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, raFunc, ppRTTI, DateUtils;

type
  TmyDaysInAMonthFunction = class (TraStringFunction)
  public
    procedure ExecuteFunction(aParams: TraParamList); override;
    class function GetSignature: String; override;
  end;

implementation

uses U_DataModule, U_Main;

{------------------------------------------------------------------------------}
{ TmyDaysInAMonthFunction.GetSignature }

class function TmyDaysInAMonthFunction.GetSignature: String;
begin
  Result := 'function DaysInAMonth(iJahr: Integer; iMonat: Integer): Integer;';
end;

{------------------------------------------------------------------------------}
{ TmyDaysInAMonthFunction.ExecuteFunction }

procedure TmyDaysInAMonthFunction.ExecuteFunction(aParams: TraParamList);
var
 iJahr, iMonat, iRueckgabe: Integer;
begin
  GetParamValue(0, iJahr);
  GetParamValue(1, iMonat);

  //iRueckgabe := DaysInMonth(EncodeDate(iJahr, iMonat, 1));
  iRueckgabe := DaysInAMonth(iJahr, iMonat);

  SetParamValue(2, iRueckgabe);

end;

initialization
  raRegisterFunction('DaysInAMonth', TmyDaysInAMonthFunction);

finalization
  raUnRegisterFunction('DaysInAMonth');

end.
Diese Funktion hab ich dann einfach nur abgeändert auf RoundTo, also wird es vermutlich an den Parametern liegen und nicht an den Funktionsnamen. Bin am ausprobieren, aber ich bekomms einfach nicht hin .
  Mit Zitat antworten Zitat
Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#6

AW: Funktionen aus Crystal Reports im Report Builder anwenden

  Alt 11. Apr 2011, 14:35
Hi, also hab's in die Newsgroup gepostet und recht zügig eine Antwort bekommen.

Zitat:
Hi David,

You are correct, RAP is not going to be able to resolve the TRoundToEXRangeExtended type. Perhaps try using a simpler type (String or Integer) and convert to the TRoundToEXRangeExtended type inside the Execute routine.
versteh aber leider nicht genau wie ich das anstellen soll.

Delphi-Quellcode:
class function TmyRoundToFunction.GetSignature: String;
begin
  Result := 'function RoundTo(const AValue: Extended; const ADigit: TRoundToEXRangeExtended): Extended;';
end;
wo soll ich den Datentyp ändern und wie kann ich bsp. von Int nach Extended umwandeln?

Geändert von Metallicwar (11. Apr 2011 um 14:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.359 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Funktionen aus Crystal Reports im Report Builder anwenden

  Alt 11. Apr 2011, 14:59
Hi,

so sollte es gehen:
Delphi-Quellcode:
Uses
  SysUtils, raFunc, ppRTTI, Math;

type
  TmyRoundToFunction = class(TraSystemFunction)
  public
    class function Category: string; override;
    procedure ExecuteFunction(AParams: TraParamList); override;
    class function GetSignature: string; override;
  end;

implementation

class function TmyRoundToFunction.Category: string;
begin
  Result := 'Crystal Reports';
end;

procedure TmyRoundToFunction.ExecuteFunction(AParams: TraParamList);
var
  AValue: Extended;
  AResult: Extended;
  ATempDigit: Integer;
  ADigit: TRoundToEXRangeExtended; // [-20 .. 20]
begin
  GetParamValue(0, AValue);
  GetParamValue(1, ATempDigit);
  try
    ADigit := ATempDigit; // prüfen auf TRoundToEXRangeExtended
    AResult := RoundTo(AValue, ADigit);
    SetParamValue(2, AResult);
  except
    raise Exception.Create('ADigit ist kein TRoundToEXRangeExtended');
  end;
end;

class function TmyRoundToFunction.GetSignature: string;
begin
  Result := 'function RoundTo(const AValue: Extended; const ADigit: Integer): Extended';
end;

initialization
  raRegisterFunction('RoundTo', TmyRoundToFunction);

finalization
  raUnRegisterFunction('RoundTo');

end.
Frank
Frank Reim

Geändert von dataspider (11. Apr 2011 um 15:10 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

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 20:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz