![]() |
Funktionen aus Crystal Reports im Report Builder anwenden
Hallo zusammen, ich muss einen Report der mit Crystal Reports erstellt worden ist, mit dem Report Builder nachbauen.
Mein Problem ist es, dass ich für manche Funktionen die bei Crystal angewandt worden sind, einfach keine passenden Funktionen im Report Builder finde. Einige Beispiele: Crystal:
Code:
Report Builder (die ,2 aus Crystal Syntax wird nicht berücksichtigt):
totext(truncate({B_Ergebnisse.Tagesbrutto}/60),"00",2)
+ ":" + totext(abs(remainder({B_Ergebnisse.Tagesbrutto},60)),"00",2)
Code:
weitere Berechnungen aus Crystal Report:
Value := FormatString(IntToStr(Trunc(dbPipelineAktuellerMonat['Tagesbrutto'] div 60)), '00')
+ ':' + FormatString(IntToStr(dbPipelineAktuellerMonat['Tagesbrutto'] mod 60 * (-1)), '00');
Code:
Bei dieser Berechnung, bin ich völlig ratlos^^ ("0,00",2,",","."???)
totext(Truncate({B_Ergebnisse.Tagesbrutto}/60,2))
Code:
zum Schluss eine kleine Auflistung, der Funktionen die ich im Report Builder benötige:
if {Monatswerte_Report.KRANKSTUNDENBEZAHLT} = 0 then
totext(Truncate({Monatswerte_Report.KRANKSTUNDENBEZAHLT}/60,2),"0,00",2,",",".") else totext(Truncate({Monatswerte_Report.KRANKSTUNDENBEZAHLT}/60,2),2,".",",") -totext -abs -remainder oder mit welchen Funktionen aus Delphi, könnte ich meine Berechnungen wie bei Crystal umsetzen? (könnte diese Funktionen, dann ja in den Report Builder importieren) |
AW: Funktionen aus Crystal Reports im Report Builder anwenden
kann mir keiner weiterhelfen?
|
AW: Funktionen aus Crystal Reports im Report Builder anwenden
Du kannst beim Reportbuilder doch im OnGetText-Event jede Druckausgabe so formatieren wie du möchtest. Auch hier gilt wie eigentlich immer: Übersetze nicht von einer(CR) in die andere (RB) "Sprache" sondern baue die Funktionalität nach. Du wirst ja wissen wie der Report aussehen soll, oder?
Offensichtlich handelt es ich bei den Formeln aus CR um eher triviale Formatierungen von Minutenwerten. Wo genau ist das Problem? Suche in der Delphi Hilfe nach Format, Formatfloat, trunc, abs, mod, div Zitat:
"Sprichst" du Delphi? |
AW: Funktionen aus Crystal Reports im Report Builder anwenden
Hi,
vielleicht ist es einfacher, wenn du auch ein paar Beispile der Ausgabe mit listest. Also, welcher Wert sieht im Report dann wie aus. Ich kenn z.B. totext scheint wie to_char von Oracle (z.B. aus "1" "001"). Dann kann man die Funktion in Delphi nachbauen und dann über RAP (wenn du die Enterprise von RB hast) einbinden. Frank |
AW: Funktionen aus Crystal Reports im Report Builder anwenden
danke für die Antworten!!
Mal schauen ob ich es hinbekomme. P.S. Ja ich habe die Enterprise Version. MfG David |
AW: Funktionen aus Crystal Reports im Report Builder anwenden
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:
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:
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. Zitat:
|
AW: Funktionen aus Crystal Reports im Report Builder anwenden
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:
Frank
class function TmyRoundToFunction.Category: string;
begin Result := 'Crystal Reports'; end; |
AW: Funktionen aus Crystal Reports im Report Builder anwenden
Hallo,
Zitat:
oder an was könnte es noch liegen? |
AW: Funktionen aus Crystal Reports im Report Builder anwenden
Zitat:
Code:
TRoundToEXRangeExtended wird wohl auch nicht funktionieren.
...
varRueckgabe := RoundTo(varAValue, varADigit); // Hier Funktion RoundTo ... initialization raRegisterFunction('RoundTo', TmyRoundToFunction); // und hier noch mal für RAP Wobei ich aus dem Hut auch nicht weiss, wie man Typen registriert. Kannst du hier keinen Standard Typ nehmen? Frank |
AW: Funktionen aus Crystal Reports im Report Builder anwenden
ich hab vor einiger Zeit schonmals eine Function (DaysInAMonth) aus Delphi importiert.
Beim importieren, habe ich auch keine Funktion anderst genannt.
Delphi-Quellcode:
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 .
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 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