PDA

View Full Version : اضافه کردن تابع و یونیت به محیط FastReport



Mahdi_S_T
پنج شنبه 03 شهریور 1384, 17:14 عصر
چطوری میشه به محیط FastReport یه تابع یا یه یونیت مثل محیط دلفی اضافه کرد چون در حالت عادی این امکان نیست و باید حتما تابع مورد نظر را بنویسی مثلا وقتی در رویداد OnAfterData یه Memo لازم است از یه تابع که قبلا نوشتی استفاده کنی . نمی تونی ! و باید اون تابع رو در محیط FastReport بنویسی . راه حل لطفا ؟

مهدی کرامتی
پنج شنبه 03 شهریور 1384, 18:46 عصر
توصیه میکنم راهنمای Developers Guide مجموعه FastReport رو نگاهی بیاندازی. موردی رو که دنبالش هستی در اون راهنما کامل توضیح داده.
میتونی راهنمای فوق رو بصورت رایگان از سایت مربوطه دریافت کنی.

sasan_vm
جمعه 04 شهریور 1384, 09:40 صبح
TfrxReport.OnUserFunction

Mahdi_S_T
شنبه 05 شهریور 1384, 15:29 عصر
این کد رو کجا باید نوشت؟ و در ادامه چطور تابع رو به اون بدهیم ؟

sasan_vm
شنبه 05 شهریور 1384, 17:46 عصر
دوست عزیز OnUserFunction یکی از event های TfrxReport می باشد در هر unit ی که شامل
object TfrxReport است می توانید این کد را بنویسید.
ولی در ابتدای برنامه مثلا constructor form باید معرفی تابع (تابع شما که میخواهید در FR ...)را با
تابع AddFunction به FR معرفی کنید .



frxReport1->AddFunction("function MYFUNC(s : String) : Integer");
.
.
.
.
.
Variant __fastcall TForm1::frxReport1UserFunction(
const AnsiString MethodName, Variant &Params)
{
Variant Result;
if (MethodName == "MYFUNC")
{
AnsiString str;
str = Params.GetElement(0);
str = str.UpperCase();
Result = str;
}
return Result;
}

Mahdi_S_T
دوشنبه 07 شهریور 1384, 16:41 عصر
من اینکارو کردم ولی جواب نداد . شاید یه جای کارم مشکل داشته . اگه ممکنه یه نمونه مثال برام آپلود کنید . خیلی ممنون

sasan_vm
دوشنبه 07 شهریور 1384, 18:08 عصر
سلام
دوست عزیز اگر کدی رو که براتون فرستادم درست بکار برده باشید
باید جواب بگیرید مضاف بر اینکه شما در گزارشتان باید تابع را درست
استفاده کنید.

فرضا در گزارش یک شیء TfrxMemoView برای نمایش دارید
حالا باید property Memo ان را مقدار بدهید مانند :


[MYFUNC(<FRXDBDATASET1."CITY">)]




تابع MUFUNC با ارگومان فیلد City از DB فراخوانی میشود
این ارگومان می تواند یک مقدار قابل شناسائی در FR باشد
فیلد - متغیر - ...

اگر جواب نگرفتید بگوئید تا یک مثال برایتان بفرستم
البته مثال با C++ است.

sasan_vm
دوشنبه 07 شهریور 1384, 18:22 عصر
این هم مثال :)

Mahdi_S_T
چهارشنبه 09 شهریور 1384, 12:12 عصر
از زحمتی که کشیدید ممنونم . میرم تست کنم

Mahdi_S_T
چهارشنبه 09 شهریور 1384, 12:27 عصر
دوست من . متاسفانه من ++C بلد نیستم اگه ممکنه به زبان دلفی باشه ؟

sasan_vm
چهارشنبه 09 شهریور 1384, 12:51 عصر
سلام
من با delphi کار نمی کنم ولی حتما مثال delphi رو اینجا پیدا میکنی.

http://www.fast-report.com/pbc_download/DeveloperManual-en.chm

موفق باشید

Mahdi_S_T
چهارشنبه 09 شهریور 1384, 18:31 عصر
توضیح کامل داده ، میرم ببینم ازش چیزی مفهمم یا نه ؟ باز هم ممنون

Mahdi_S_T
پنج شنبه 10 شهریور 1384, 14:34 عصر
من یه کد نمونه مانند راهنما نوشتم ولی کار نمی کنه ! نمی دونم اشکال من چیه ؟ ( در ضمن من با روش اول این کارو کردم) . کد نمونه را گذاشتم لطفا دوستان راهنمایی کنند در این کد من خواستم یه عدد رو به حروف بصورت مبلغی بنویسه .

sasan_vm
پنج شنبه 10 شهریور 1384, 15:06 عصر
سلام
دوست عزیز کد شما چند ایراد دارد که برایتان مینویسم :



procedure TForm1.Button1Click(Sender: TObject);

begin

frxReport1.AddFunction('function FloatToRialFarsi(i:Extended):string', 'ctString', 'The function always returns FloatToRialFarsi');

frxReport1.ShowReport;

end;

end.



1- گزارش باید load شود
2- سپس از AddFunction استفاده کنید
3- گزارش باید آماده شود ( قبل از نمایش )



frxReport1.LoadFromFile('...');
frxReport1.AddFunction('...');
.
.
.
frxReport1.PrepareReport();
frxReport1.ShowReport();



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

:)

Mahdi_S_T
جمعه 11 شهریور 1384, 08:44 صبح
ساسان عزیز از اینکه در پاسخگویی به من تلاش می کنی بسیار ممنونم
تغییرات گفته شده را در کد دادم و فایل گزارش رو هم گذاشتم .
واقعا این فست ریپورت خیلی گیج کننده است وگرنه کارهای عادی یه گزارش رو که همه کامپوننت های گزارش انجام میدند. راستی ReportBuilder این کارهارو راحت تر انجام نمیده ؟
منتظرم

Mahdi_S_T
جمعه 11 شهریور 1384, 08:51 صبح
نمی دونم چرا فایلو پیوست نکرد در پست قبلی !

sasan_vm
جمعه 11 شهریور 1384, 11:25 صبح
سلام
من با Report Builder کار نکردم ولی اگر نگاهی به Delphi Magazine بندازی ...



Best Reporting Tool

Race to the swift. It's been a long time coming, but FastReport (FastReports) has finally taken first place (42%), from Digital Metaphors' ReportBuilder (33%).



http://delphizine.com/newsletterarticle/2004/08/di200408jc_l/di200408jc_l_image016.gif

http://delphizine.com/newsletterarticle/2004/08/di200408jc_l/di200408jc_l.asp


...خوب و ایراد گزارش :
نام تابع را در گزارش و AddFunction با حروف بزرگ بنویسید FLOATTORIALFARSI :چشمک:

موفق باشید

Mahdi_S_T
شنبه 12 شهریور 1384, 07:32 صبح
مگه به حروف حساسه ! آقا تست کردم ولی فرقی نکرد و جواب نداد ( ای خدا ! )

راه دیگری به جز اضافه کردن تابع نیست که من بتونم یه مقداری رو بصورت عددی حروفی در فیش ها چاپ کنم ( اطلاعات از یه جدول گرفته میشه و رکوردها رو برای چاپ به فست ریپورت ارسال می کنم)

sasan_vm
شنبه 12 شهریور 1384, 14:34 عصر
سلام
من نمیدونم مشکلت چیه چون گزارشی رو که فرستادی تست کردم و مشکلی نداشت
( البته با حروف بزرگ ).

خوب یک راه ساده تر هم هستش به جای تابع از متغیر استفاده میکنی:

1- در گزارش قسمت متغیرها یک متغیر با نام دلخواه تعریف میکنی دقت کن که همنام با توابع یا
متغیرهای FR نباشه.
2- event OnGetValue را از frxReport بصورت زیر بکار میبری :



void __fastcall TForm1::frxReport1GetValue(const AnsiString VarName,
Variant &Value)
{
if ( VarName == "Your_Variable" )
Value = "Your_Value";
}


:لبخندساده

Mahdi_S_T
شنبه 12 شهریور 1384, 21:39 عصر
نه نمیشه چون من که رکوردها را یکی یکی برای چاپ نمی فرستم و در ضمن در هنگام نمایش برگه چاپی من چند فیلد را با هم جمع و تفریق کردم که فیلد مبلغ بدست آمده و آنوقت باید به مبلغ عددی حرفی تبدیل کنم. ظاهرا چاره فقط همون تابع است

اگه آقای کرامتی مشکل رو بررسی می کرد خیلی عالی بود حتما به جواب می رسیدم ( البته کمک های دوست عزیز آقا ساسان پوشیده نیست فقط مشکل اینجاست که آقا ساسان با دلفی کار نمی کنه )

Mahdi_S_T
یک شنبه 13 شهریور 1384, 15:36 عصر
من نمی دانم چرا باید این سوال بی جواب بمونه !؟ این همه اساتید برنامه نویس اینجا باشند ولی این کسی جوابی نده !

Mahdi_S_T
سه شنبه 15 شهریور 1384, 07:08 صبح
اقلا یه کسی رو معرفی کنید تا کار من راه بیفته یا یه وبلاگی که در زمینه آموزش کار می کند ؟ متشکر

Mahdi_S_T
پنج شنبه 17 شهریور 1384, 12:33 عصر
استاد کرامتی یه حالی به این مشکل بده لطفا .

JavanSoft
پنج شنبه 17 شهریور 1384, 14:11 عصر
راستش من هم نتوانستم با بخش متغیر ها کار کنم بنظر می رسد در Design مشکلی نیست اما در Run مشکل بوجود می آید

Mahdi_S_T
پنج شنبه 17 شهریور 1384, 22:22 عصر
آقای وکیلی میگی چیکار کنم ؟ برم سربخت یه کامپوننت دیگه ؟
در ضمن یه مشکل دیگه هم با این کامپوننت دارم که یه تاپیک در قسمت کامپونننت های چاپ ایجاد کرده ام با عنوان چاپ نشدن بعضی Memo ها . اون رو هم لطف کنید یه نگاهی بندازید. ممنون

JavanSoft
شنبه 19 شهریور 1384, 14:47 عصر
نمی دونم تا چه حد مشکل شما به تعریف متغییر ها وابسته است اما من برای جل این مشکل با استفاده از یک بانک مفروضات نه تنها ثابتها که متغیر ها و فرمولها را نیز در FastRep بدون مشکل حل کردم

Mahdi_S_T
یک شنبه 20 شهریور 1384, 07:33 صبح
با تشکر فراوان از استاد وکیلی

عرض کنم که من باید پس از جمع و تفریق چند فیلد در محیط فست ریپورت ( که این کار به راحتی انجام می شود و مشکلی ندارم) مقدار حاصل از آن را به مقدار حرفی ریالی تبدیل کنم ( راحت تر بگم این یه برنامه برای چاپ قبوض مصرفی مخابرات است) و در هنگام چاپ مبلغ باید آنرا به صورت حرفی ریالی هم بنویسد ( 1250 ==> هزارو دویست و پنجاه ریال) و مشکل در همین جاست که تابعی که لازم است اینکارو انجام بده را نمی توانم در محیط فست ریپورت بنویسم چون به تعریف آرایه ها - int64 - و .... اشکال می گیرد و در تنیجه باید در محیط دلفی آنرا تعریف کنم و سپس در محیط فست ریپورت از آن استفاده کنم و این کارو انجام دادم ولی در هنگام اجرا و پیش نمایش هیچ عملی انجام نمی دهد در مورد تبدیل به حرفی ریالی ( قبلا مثال را آپلود کردم)

و این شرح کامل مشکل من بود ؟ اگه امکان دارد من را راهنمایی نمایید ( شاید هم یه اشکال پیش پا افتاده باشد که من متوجه نمی شم)

JavanSoft
یک شنبه 20 شهریور 1384, 13:32 عصر
ابتدایی ترین راه حل اینست که شما در بانک خروجی خود یک فیلد هم برای تلفظ ها ایجاد کنید
به دوستان همکار نیز گفتم که مساله را پیگیری کنند اگر جوابی حاصل شد در همین تاپیک قید می کنم

Mahdi_S_T
یک شنبه 20 شهریور 1384, 16:43 عصر
ممنون مهندس . منتظر می مانم.

در ضمن این مشکل دوم هم همراه همین مشکل برام پیش آمده اگه ممکنه یه نگاه بندازید
http://www.barnamenevis.org/forum/showthread.php?t=28133

Mahdi_S_T
دوشنبه 21 شهریور 1384, 07:33 صبح
(من دیروز یه پاسخ دادم ولی امروز که بازدید کردم اون جواب غیب شده)

مهندس از توجه شما بسیار متشکرم . منتظر می مانم. در ضمن یه مشکل دیگه که در همین راستا پیش آمده در این تاپیک مطرح کردم که در صورت امکان لطفا یه نگاه به اون بندازید
http://www.barnamenevis.org/forum/showthread.php?t=28133

Mahdi_S_T
سه شنبه 22 شهریور 1384, 17:30 عصر
بلاخره این مشکل و حل کردم اما جالب توجه اینکه از موقعی که تابع را در محیط FastReport استفاده می کنم . تاثیر روی اندازه فونت های Memo ها کرده مثلا قبلا اندازه 8 بوده و الان با اندازه 6 باز هم حالت bold داره و این حالت هم درست نمیشه . فعلا خدا را شکر...

امان از FastReport .... خیلی ها می گفتن معرکه ست !!!

Mah6447
شنبه 17 اسفند 1387, 20:12 عصر
سلام
آقا به ما هم یاد بدهید من مثال قبلی را دانلود کردم ولی نتیجه نکردم
چطور اینکار را انجام دادید لطفا با مثال توضیح دهید