Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Funktionen aus Crystal Reports im Report Builder anwenden (https://www.delphipraxis.net/159387-funktionen-aus-crystal-reports-im-report-builder-anwenden.html)

Metallicwar 11. Apr 2011 14:35

AW: Funktionen aus Crystal Reports im Report Builder anwenden
 
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?

dataspider 11. Apr 2011 14:59

AW: Funktionen aus Crystal Reports im Report Builder anwenden
 
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

Metallicwar 11. Apr 2011 15:12

AW: Funktionen aus Crystal Reports im Report Builder anwenden
 
Hallo Frank,
danke für den Code, aber ich erhalte nachwievor die selbe Fehlermeldung.
Also Laut Aussage von Digital Metaphors einen einfacheren Typ verwenden (String oder Integer) und in der Execute Methode in den TRoundToEXRangeExtended umwandeln, aber wie?!? Steh auf dem Schlauch ...

dataspider 11. Apr 2011 15:16

AW: Funktionen aus Crystal Reports im Report Builder anwenden
 
Zitat:

Zitat von Metallicwar (Beitrag 1094434)
aber ich erhalte nachwievor die selbe Fehlermeldung.

Das kann nicht sein, da ich den Typ in der Signatur auf Integer geändert habe.

Frank

Metallicwar 11. Apr 2011 15:21

AW: Funktionen aus Crystal Reports im Report Builder anwenden
 
Zitat:

vor einer Minute
Zitat von Metallicwar:
aber ich erhalte nachwievor die selbe Fehlermeldung.
Das kann nicht sein, da ich den Typ in der Signatur auf Integer geändert habe.

Frank

Versteh ich nicht, hast du's mal bei dir getestet, habe deinen Code 1 zu 1 übernommen und bekommen trotzdem eine Fehlermeldung: 'Cannot compile signature for Crystal Reports function: RoundTo'

Wäre super, wenn wir das Problem heute noch lösen könnten.

dataspider 11. Apr 2011 15:26

AW: Funktionen aus Crystal Reports im Report Builder anwenden
 
Zitat:

Zitat von Metallicwar (Beitrag 1094439)
Versteh ich nicht, hast du's mal bei dir getestet, habe deinen Code 1 zu 1 übernommen und bekommen trotzdem eine Fehlermeldung:

Ne, sorry - hab es jetzt unter D2010 getestet mit dem selben Fehler...sollte zu finden sein...

Frank

dataspider 11. Apr 2011 15:33

AW: Funktionen aus Crystal Reports im Report Builder anwenden
 
Sorry,

bei der Signatur fehlte das Semikolon:

Delphi-Quellcode:
  Result := 'function RoundTo(AValue: Extended; ADigit: Integer): Extended;';

[Edit]
Seh gerade, dass ich das Const vor den Paramtern entfert habe. Kannst du wieder rein nehmen, spielt IMHO keine Rolle...[/EDIT]


Frank

Metallicwar 11. Apr 2011 15:50

AW: Funktionen aus Crystal Reports im Report Builder anwenden
 
Vielen Dank Frank.

Letzte Frage bis dahin:
Delphi-Quellcode:
begin
  Value := RoundTo(Trunc(dbPipelineAktuellerMonat['Tagesbrutto'] div 60), 2)
          + ':'
          + Roundto((-1) * (dbPipelineAktuellerMonat['Tagesbrutto'] mod 60),2);
Fehler: Inkompatible Typen..

Erwartet ja Extended und das Datenfeld ist ein Integer... IntTo???

Metallicwar 11. Apr 2011 16:16

AW: Funktionen aus Crystal Reports im Report Builder anwenden
 
:roteyes: ehm, ich kriegs nicht hin -.-
Kann mir bitte nochmal jmd bei der Typumwandlung helfen? :D

dataspider 11. Apr 2011 16:33

AW: Funktionen aus Crystal Reports im Report Builder anwenden
 
Ich nehme an, gleich gibt es was auf die Mütze!
Denn Pushen ist hier nicht gerade beliebt.

Und ich klink mich hier jetzt auch erst mal aus.

Du kommst so nicht weiter. Das nächste Problem ist mod und div und so weiter.

Und es geht wohl nur um die Formatierung eines Wertes (wurde ja schon erwähnt).

Vergiss einfach, die Funktionen 1 zu 1 nachbilden zu wollen.
Schau die den Wert an und die Ausgabe und mach eine Formatfunktion, die nur den Wert bekommt und den String zurückgibt.

Frank


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

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