# Native Code > برنامه نویسی در Delphi > ابزارهای گزارش سازی در دلفی >  اضافه کردن تابع و یونیت به محیط FastReport

## Mahdi_S_T

چطوری میشه به محیط FastReport یه تابع یا  یه یونیت مثل محیط دلفی اضافه کرد چون در حالت عادی این امکان نیست و باید حتما تابع مورد نظر را بنویسی مثلا وقتی در رویداد OnAfterData یه Memo لازم است از یه تابع که قبلا نوشتی استفاده کنی . نمی تونی ! و باید اون تابع رو در محیط FastReport  بنویسی . راه حل لطفا ؟

----------


## مهدی کرامتی

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

----------


## sasan_vm

TfrxReport.OnUserFunction

----------


## Mahdi_S_T

این کد رو کجا باید نوشت؟ و در ادامه چطور تابع رو به اون بدهیم ؟

----------


## sasan_vm

دوست عزیز 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

من اینکارو کردم ولی جواب نداد . شاید یه جای کارم مشکل داشته . اگه ممکنه یه نمونه مثال برام آپلود کنید . خیلی ممنون

----------


## sasan_vm

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

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


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




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

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

----------


## sasan_vm

این هم مثال :)

----------


## Mahdi_S_T

از زحمتی که کشیدید ممنونم . میرم تست کنم

----------


## Mahdi_S_T

دوست من .  متاسفانه من ++C بلد نیستم اگه ممکنه به زبان دلفی باشه ؟

----------


## sasan_vm

سلام
من با delphi کار نمی کنم ولی حتما مثال delphi رو اینجا پیدا میکنی.

http://www.fast-report.com/pbc_downl...rManual-en.chm

موفق باشید

----------


## Mahdi_S_T

توضیح کامل داده ، میرم ببینم ازش چیزی مفهمم یا نه ؟ باز هم ممنون

----------


## Mahdi_S_T

من یه کد نمونه مانند راهنما نوشتم ولی کار نمی کنه ! نمی دونم اشکال من چیه ؟ ( در ضمن من با روش اول این کارو کردم) . کد نمونه را گذاشتم لطفا دوستان راهنمایی کنند در این کد من خواستم یه عدد رو به حروف بصورت مبلغی بنویسه .

----------


## sasan_vm

سلام
دوست عزیز کد شما چند ایراد دارد که برایتان مینویسم :


*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

ساسان عزیز از اینکه در پاسخگویی به من تلاش می کنی بسیار ممنونم
تغییرات گفته شده را در کد دادم و فایل گزارش رو هم گذاشتم . 
واقعا این فست ریپورت خیلی گیج کننده است وگرنه کارهای عادی یه گزارش رو که همه کامپوننت های گزارش انجام میدند. راستی ReportBuilder این کارهارو راحت تر انجام نمیده ؟
منتظرم

----------


## Mahdi_S_T

نمی دونم چرا فایلو پیوست نکرد در پست قبلی !

----------


## sasan_vm

سلام
من با 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/newsletterarti...200408jc_l.asp
 

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

موفق باشید

----------


## Mahdi_S_T

مگه به حروف حساسه ! آقا تست کردم ولی فرقی نکرد و جواب نداد ( ای خدا ! )

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

----------


## sasan_vm

سلام
من نمیدونم مشکلت چیه چون گزارشی رو که فرستادی تست کردم و مشکلی نداشت
( البته با حروف بزرگ ).

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

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

نه نمیشه چون من که رکوردها را یکی یکی برای چاپ نمی فرستم و در ضمن در هنگام نمایش برگه چاپی من چند فیلد را با هم جمع و تفریق کردم که فیلد مبلغ  بدست آمده و آنوقت باید به مبلغ عددی حرفی تبدیل کنم. ظاهرا چاره فقط همون تابع است

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

----------


## Mahdi_S_T

من نمی دانم چرا باید این سوال بی جواب بمونه !؟ این همه اساتید برنامه نویس اینجا باشند ولی این کسی جوابی نده !

----------


## Mahdi_S_T

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

----------


## Mahdi_S_T

استاد کرامتی یه حالی به این مشکل بده لطفا .

----------


## JavanSoft

راستش من هم نتوانستم با بخش متغیر ها کار کنم بنظر می رسد در Design مشکلی نیست اما در Run مشکل بوجود می آید

----------


## Mahdi_S_T

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

----------


## JavanSoft

نمی دونم تا چه حد مشکل شما به تعریف متغییر ها وابسته است اما من برای جل این مشکل با استفاده از یک بانک مفروضات نه تنها ثابتها که متغیر ها و فرمولها را نیز در FastRep بدون مشکل حل کردم

----------


## Mahdi_S_T

با تشکر فراوان از استاد وکیلی 

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

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

----------


## JavanSoft

ابتدایی ترین راه حل اینست که شما در بانک خروجی خود یک فیلد هم برای تلفظ ها ایجاد کنید 
به دوستان همکار نیز گفتم که مساله را پیگیری کنند اگر جوابی حاصل شد در همین تاپیک قید می کنم

----------


## Mahdi_S_T

ممنون مهندس . منتظر می مانم.

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

----------


## Mahdi_S_T

(من دیروز یه پاسخ دادم ولی امروز که بازدید کردم اون جواب غیب شده)

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

----------


## Mahdi_S_T

بلاخره این مشکل و حل کردم اما جالب توجه اینکه از موقعی که تابع را در محیط FastReport استفاده می کنم . تاثیر روی اندازه  فونت های Memo ها کرده مثلا قبلا اندازه 8 بوده و الان با اندازه 6 باز هم حالت bold  داره و این حالت هم درست نمیشه . فعلا خدا را شکر...

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

----------


## Mah6447

سلام
آقا به ما هم یاد بدهید من مثال قبلی را دانلود کردم ولی نتیجه نکردم
چطور اینکار را انجام دادید لطفا با مثال توضیح دهید

----------

