ورود

View Full Version : فراخوانی تابع در فست ریپورت



saeed_82
سه شنبه 05 آبان 1388, 20:32 عصر
من یه برنامه دارم که گزارشش رو قبلا با کوییک ریپورت طراحی کردم و الان تبدیل به فست ریپورت میکنم
بعنوان مثال من یه تابع تبدیل رقم به کاراکتر رو در زمان اجرای گزارش در رویداد OnBeforDetail فراخوانی میکنم تا یک مقدار عددی رو به حروف تبدیل کنه . خوب توی کوییک ریپورت اون مشکلی نداشت و راحت فراخوانی میشد ولی نمیدونم فست ریپورت یه همچین امکانی میده که بشه یه تابع رو از داخل برنامه فراخوانی کرد.
چون اعداد بصورت داینامیک موقع اجرای گزارش تغییر میکنه نمیشه قبل از نمایش فست ریپورت اونو به فست ارسال کرد و حتما باید زمان اجرا فراخوانی بشه
امیدوارم راه حل مناسبی باشه؟
* من معمولا برای سوالهام جوابی در این فروم پیدا نمیکنم * نمیدونم چرا؟؟؟؟؟ *

MOJTABAATEFEH
سه شنبه 05 آبان 1388, 21:52 عصر
دوست عزيز بهتره شما عددتون ر و بيا دستورات SQL داخل برنامه بدست بياوريد و با كد زير اون رو موقع نمايش فست به فست ار سال كنيد

نام MEMO مور د نظر تون موقع طراحي گزارش رو بجاي MEMO مثال قرار بدين



var
memo0:TfrxMemoView;

memo0 := frxReport1.FindObject('Memo0')as TfrxMemoView;
memo0.Text:='مقدار مور د نظر';
frxReport1.ShowReport(true);


موفق باشي
كد دلفي
http://www.mojtabaie.persianblog.ir

saeed_82
چهارشنبه 06 آبان 1388, 21:23 عصر
با این راه حل آشنایی دارم
ولی گاهی توی گزارش تعداد این متغیرها اون قدر زیاد میشه و بصورت پویا حاصل میشه که نمیشه قبل از ایجاد گزارش اونها رو ارسال کرد؟

vcldeveloper
پنج شنبه 07 آبان 1388, 00:08 صبح
ولی گاهی توی گزارش تعداد این متغیرها اون قدر زیاد میشه و بصورت پویا حاصل میشه که نمیشه قبل از ایجاد گزارش اونها رو ارسال کرد؟
می تونید تابع مورد نظر را به موتور اسکریپت نویسی فست ریپورت معرفی کنید، و سپس در داخل Designer فست ریپورت مثل یک تابع معمولی فست ریپورت از آن استفاده کنید.

saeed_82
پنج شنبه 07 آبان 1388, 23:20 عصر
می تونید تابع مورد نظر را به موتور اسکریپت نویسی فست ریپورت معرفی کنید، و سپس در داخل Designer فست ریپورت مثل یک تابع معمولی فست ریپورت از آن استفاده کنید.

یعنی اینکه من میتونم با این روش تابع داخل کد برنامه دلفی را از داخل دیزاینر فست ریپورت فراخوانی کنم؟
میتونم ازتون بخوام یه مثال کوچیک راجع به چگونگی انجام این کار بیارید
قبلا از وقتی که بابت این مطلب میزارید متشکرم

vcldeveloper
جمعه 08 آبان 1388, 02:06 صبح
یعنی اینکه من میتونم با این روش تابع داخل کد برنامه دلفی را از داخل دیزاینر فست ریپورت فراخوانی کنم؟
بله؛ ولی باید تابع مربوطه در موتور اسکریپت مورد استفاده رجیستر بشه. نحوه انجام این کار به همراه مثال در فایل راهنمای FastScript Manual موجود هست. این فایل را می تونید بطور رایگان از بخش دانلود سایت FastReport دانلود کنید.

saeed_82
پنج شنبه 14 آبان 1388, 14:40 عصر
من Fastreport 3.0 User's Manual رو دانلود کردم ولی هرچی میگردم راجع به مشکل خودم مطلبی پیدا نمیکنم
کل قسمت Script و Engine رو هم نگاه کردم ولی چیزی راجع به نحوه فراخوانی توابع از دلفی ندیدم میتونید اشاره ای کنید که کدوم قسمته؟

vcldeveloper
جمعه 15 آبان 1388, 00:18 صبح
کل قسمت Script و Engine رو هم نگاه کردم ولی چیزی راجع به نحوه فراخوانی توابع از دلفی ندیدم میتونید اشاره ای کنید که کدوم قسمته؟
من نگفتم راهنمای FastReport را دانلود کنید، بلکه گفتم راهنمای FastScript را دانلود کنید.

merced
جمعه 15 آبان 1388, 00:23 صبح
فكر كنم بتوني از رويداد OnGetValue اون استفاده كني.

afsoon_k77
یک شنبه 17 آبان 1388, 14:21 عصر
برای این کار اول باید header تابع مورد نظرت از طریق تابع AddFunction به fastreport معرفی کنی
برای مثال تابع ساده زیرو در نظر بگیر




function TForm1.AddDigit(a, b: Real): Real;
begin
Result:=a+b;
end;


برای فراخوانی این تابع در Fastreport به صورت زیر عمل می کنی
1_ قبل از Showکردن گزارش کد زیر رو می نویسی
یا به خواهش دوستان در رویداد OnBeginDoc




frxReport1.AddFunction('function ADDDIGIT(a, b: Real): Real;','','') ;



سپس در رویداد ONUserFunction frxreport1 کد زیرو می نویسی




if MethodName='ADDDIGIT' then
Result:= AddDigit(Params[0],Params[1]);



حالا می تونی در هر جا داخل Script fastreport نام تابع را همراه با پارامترهاش فراخوانی کنی
نکته : حتما تابع را با حروف بزرگ فراخوانی کن همون طور که در کد گذاشتم
موفق باشی

saeed_82
جمعه 13 آذر 1388, 12:45 عصر
من اینکار هارو انجام دادم ولی چطور تابعی که در کد برنامه دلفی تعریف کردیم رو داخل اسکریپت فست فراخوانی کنیم
مثلا من میخواستم خروجی یک تابع بنام DIGIT رو که استرینگ هست رو به یک شی Memo بدم ولی خطا میده که تابع رو نمیشناسه درحالی که من اونرو هم تو ONUserFunction تعریف کردم هم از AddFunction استفاده کردم

saeed_82
شنبه 14 آذر 1388, 13:20 عصر
مشکل حل شد
ممنون از راهنمایی های مفیدتون