ورود

View Full Version : سوال: جمع اعداد کوچکتر از 0 در فست ریپورت



hamid_14
یک شنبه 18 خرداد 1393, 12:43 عصر
سلام
آیا در فست ریپورت میشه برای جمع شرط گذاشت.مثلا جمع اعداد کوچکتر از 0 یک فیلد نمایش بده.ممنون

یوسف زالی
دوشنبه 19 خرداد 1393, 09:53 صبح
سلام.
بله.
با تابع sum و ترکیب اون با شرط.
قبلش باید یک تابع دیگه رو از سمت دلفی به فست معرفی کنید.

hadisalahi2
دوشنبه 19 خرداد 1393, 19:04 عصر
قبلش باید یک تابع دیگه رو از سمت دلفی به فست معرفی کنید.
این تیکش رو بلد نیستم
میشه بهم بگی چطوری؟

یوسف زالی
دوشنبه 19 خرداد 1393, 21:09 عصر
unit Unit1;


interface


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, frxDesgn, frxClass, StdCtrls;


type
TForm1 = class(TForm)
frxReport1: TfrxReport;
frxDesigner1: TfrxDesigner;
Button1: TButton;
function frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;


implementation


uses StrUtils;


{$R *.dfm}


function Test1(Arg1, Arg2: string): string;
begin
Result := 'You gave me ' + Arg1 + ' and ' + Arg2 + ' !';
end;


function Test2(Arg1: extended): extended;
begin
Result := Arg1 * Arg1;
end;


function Test3: string;
begin
Result := Application.ExeName;
end;


procedure Test4(S: string);
begin
ShowMessage(S);
end;



function TForm1.frxReport1UserFunction(const MethodName: String;
var Params: Variant): Variant;
begin
if SameText(MethodName, 'Test1') then
Result := test1(Params[0], Params[1])
else if SameText(MethodName, 'Test2') then
Result := Test2(Params[0])
else if SameText(MethodName, 'Test3') then
Result := Test3
else if SameText(MethodName, 'Test4') then
Test4(Params[0]);


end;


procedure TForm1.Button1Click(Sender: TObject);
begin
frxReport1.DesignReport;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
frxReport1.AddFunction('function Test1(Arg1, Arg2: string): string' , 'MyFunctions', 'this function takes 2 string and show you both');
frxReport1.AddFunction('function Test2(Arg1: extended): extended' , 'MyFunctions', 'this function square a number');
frxReport1.AddFunction('function Test3: string' , 'MyFunctions', 'this function returns Exe Name');
frxReport1.AddFunction('procedure Test4(S: string)' , 'MyFunctions', 'this procedure shows string');
end;


end.


اینجا رو هم ببینید:
http://www.fast-report.com/public_download/html/DevMan/index.html?custom_functions_connection_to_report.h tm

farshid_82
سه شنبه 20 خرداد 1393, 11:04 صبح
اینم یه راه دیگه جمع کردنه


[SUM(IIF(<Field> < 0,<Field>,0))]

hadisalahi2
سه شنبه 20 خرداد 1393, 12:02 عصر
داش یوسف اینا رو همونطوری راحت توی فست میشه فراخوانی کرد دیگه
یعنی یه جورایی میشه مثل توابع خود فست؟

یوسف زالی
سه شنبه 20 خرداد 1393, 12:26 عصر
با تابع sum و ترکیب اون با شرط.



شما هم همین کار رو کردید.



قبلش باید یک تابع دیگه رو از سمت دلفی به فست معرفی کنید.



حواسم به IIF نبود. برای همین گفتم از دلفی معرفی بشه.
به هر حال خالی از لطف هم نشد!




اینا رو همونطوری راحت توی فست میشه فراخوانی کرد دیگه



در لیست توابع خود فست دیده می شه در Category که شما تعیین می کنید.
اگر در پارامترها رعایت قوانین رو کنید مشکلی پیش نمیاد. برای مثال من توابعی مثل سه رقم سه رقم جدا کردن، یا تبدیل تاریخ به شمسی رو در خود فست هم گذاشتم.