PDA

View Full Version : سوال: تبدیل عدد به حروف در Fast Report



ByRoad
چهارشنبه 20 آذر 1387, 13:50 عصر
سلام دوستان

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

برای هر رکورد در فست ریپورت می خواییم مقدار عدد را به حرف تبدیل کننه !!!

تابع رو بچه ها گذاشتن توی سایت ولی چطوری میشه از فست ریپورت از اون استفاده کنیم !؟؟؟

( جمع اعداد داخل ریپورت انجام میشه )

ByRoad
چهارشنبه 20 آذر 1387, 15:33 عصر
یعنی اینقدر مشکله ؟؟؟؟؟!

vcldeveloper
چهارشنبه 20 آذر 1387, 16:16 عصر
ابتدا من سرچ کردم و این تاپیک وجود داشت ولی جواب درستی داده نشده بود !!!
باید در همان تاپیک پست جدید ارسال می کردید تا تاپیک بالا بیاد، نه اینکه تاپیک جدید ایجاد کنید.


تابع رو بچه ها گذاشتن توی سایت ولی چطوری میشه از فست ریپورت از اون استفاده کنیم !؟؟؟
FastReport خودش قابلیت اسکریپت نویسی داره. در داخل Designer فست ریپورت تب Code وجود داره که می تونید توش اسکریپت تان را بنویسید.

delphiprog3000
چهارشنبه 20 آذر 1387, 16:26 عصر
با سلام. در ادامه صحبت جناب کشاورز. شما امکان اسال پارامتر به Fastreport را از طریق برنامه نیز دارید.

میتوانید هر مقدار دلخواه به گزارش خود اضافه نمایید.

موفق باشید.............

ByRoad
چهارشنبه 20 آذر 1387, 17:05 عصر
مچکرم مرسی

در جواب دوستم delphiprog3000 : بله حق با شماست میشه مقادیری رو ارسال کرد ولی باید به تعداد رکوردها مقادیر را ارسال کرد که بهینه نیست ! در ضمن جمع مقادیری را که می خواهیم در FastReport جمع میشه.یعنی باید 1 مقدار به دلفی و بعذ از تبدیل به ریپورت انتقال بدم , که سرعت در رکورد های بالا پایین میاد .

خدمت استاد ارجمند کشاورز : بله از قسمت کد استفاده کردم ولی حالا که Unit این بخش یعنی عدد به حرف اماده هست راه سریع تری هست که از unit استفاده کنم ! که شما هم گفته بودید کار راحتی نیست استفاده از Unit در FastReport !

ByRoad
پنج شنبه 21 آذر 1387, 09:55 صبح
من واقعا احتیاج به راه حل مناسبی دارم که سریع جوابمو بده !

مرشی اگه Help بدید!!!

vcldeveloper
پنج شنبه 21 آذر 1387, 17:01 عصر
در FastReport نمی تونید همینطوری از توابع تعریف شده در دلفی استفاده کنید، بلکه باید تابع را برای FastReport رجیستر کنید. نحوه انجام این کار هم در راهنمای اسکریپت نویسی FastReport توضیح داده شده، که می تونید از سایتش بصورت مجانی دانلود کنید.

pooyeshpajooh
دوشنبه 25 آذر 1387, 19:38 عصر
اقایون اساتید

لطفا همینجا یه مثال بزنید

خواهشا داونلد و اینحرفا رو بی خیال شین

من هم چنین مشکلی دارم حتی تو فاست رپورت نتونستم کد تابع رو بنویسم
ارور می ده

pad_kay
سه شنبه 26 آذر 1387, 10:11 صبح
سلام دوستان

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

برای هر رکورد در فست ریپورت می خواییم مقدار عدد را به حرف تبدیل کننه !!!

تابع رو بچه ها گذاشتن توی سایت ولی چطوری میشه از فست ریپورت از اون استفاده کنیم !؟؟؟

( جمع اعداد داخل ریپورت انجام میشه )

با سلام
اگر مدیران سایت ایراد نگیرنند شما می توانید با مراجعه به این لینک http://www.vwgco.com/showthread.php?tid=130 اقدام دانلود کامپوننتی با نام VWGCOFastReportTools نمائید که حاوی 5 تابع زیر است

DateToFarsiFull : جهت تبديل تاريخ ميلادي به شمسي به طور كامل
DateToFarsi : جهت تبديل تاريخ ميلادي به شمسي
TodayNameFarsi : نام روز به فارسي
MonthNameFarsi : نام ماه به فارسي
Number2Str(Num: integer) : جهت تبديل عدد به حروف فارسي
موفق باشید

khoshblagh
یک شنبه 13 بهمن 1387, 09:45 صبح
جناب pad_kay
با سلام
من کامپوننت را دانلود کردم ولی روش استفاده از اون را نمیدانم. درصورت امکان راهنمایی و مثالی بزنید. متشکرم

khoshblagh
سه شنبه 15 بهمن 1387, 09:22 صبح
با سلام خدمت دوستان
با توجه به اینکه معمولا در برنامه گزارش سازی مانند فست ریپورت معمولا به جای درج عدد ما از متغیر جهت ذخیره اطلاعات استفاده میکنیم. و میدانیم در فست ریپورت از memo جهت این کار استفاده میشود. من در برنامه خود یک memo دارم که با sum جمع ستونی را نمایش میدهد.سعی کردم از تابع زیر جهت تبدیل اعداد به حروف استفاده کنم ولی برنامه خطای عدم تبدیل نوع variant به string میدهد.سئوال این است که چگونه قبل ارسال memo به تابع زیر آنرا بهinteger تبدیل نمایم. با تشکر

(Number2Str(Num: integer)

rainstorm
شنبه 23 دی 1391, 19:41 عصر
با سلام
اگر مدیران سایت ایراد نگیرنند شما می توانید با مراجعه به این لینک http://www.vwgco.com/showthread.php?tid=130 اقدام دانلود کامپوننتی با نام VWGCOFastReportTools نمائید که حاوی 5 تابع زیر است

DateToFarsiFull : جهت تبديل تاريخ ميلادي به شمسي به طور كامل
DateToFarsi : جهت تبديل تاريخ ميلادي به شمسي
TodayNameFarsi : نام روز به فارسي
MonthNameFarsi : نام ماه به فارسي
Number2Str(Num: integer) : جهت تبديل عدد به حروف فارسي
موفق باشید

سلام این کامپوننت رو از کجا دانلود کنیم؟ آدرس کار نمیکنه

سعید صابری
شنبه 23 دی 1391, 19:53 عصر
برای نسخه های قدیمی است در نسخه جدید کار نمیده

benyaminrahimi
چهارشنبه 25 بهمن 1391, 13:59 عصر
1.


frrep.AddFunction('function NUMSTR(a: double):string;', 'سفارشي',
'معادل رشته اي يک عدد را بر ميگرداند');



2

function tpatern.repUserFunction(const MethodName: string;
var Params: Variant): Variant;
begin
if MethodName = 'NUMSTR' then
Result := patern.adad(Params[0]);
end


3
function num2str(snum: string): string;

// تابع تبديل عدد سه رقمي به حروف

function getnum3(num3: integer): string;

var

s: string;

d1, d2, d3, d12: integer;

begin

d12 := num3 mod 100; // دو رقم اول

d3 := num3 div 100; // صدگان

if d3 <> 0 then

s := sadgan[d3] + ' و ';

// نام گذاري اعداد 10 تا 19 در بين

// اعداد دو رقمي استثنا است

if (d12 >= 10) and (d12 <= 19) then

begin

s := s + dahyek[d12];

end

else

begin

d2 := d12 div 10; // دهگان

if d2 <> 0 then

s := s + dahgan[d2] + ' و ';

d1 := d12 mod 10; // يکان

if d1 <> 0 then

s := s + yekan[d1] + ' و ';

// حذف حرف <و> اضافي

s := copy(s, 1, length(s) - 3);

end;

getnum3 := s;

end;

var

L, i, b: integer;

stotal: string;

begin

// اگر عدد صفر بود، يکراست نتيجه را برگردان

if snum = '0' then

result := yekan[0]

else

begin

// براي اينکه بتوان عدد را به قسمت هاي سه رقمي تقسيم کرد

// به سمت چپ عدد، به اندازه کافي صفر مي افزاييم

for i := Length(snum) to ((Length(snum) - 1) div 3 + 1) * 3 - 1 do

snum := '0' + snum;

L := Length(snum) div 3 - 1; // تعداد قسمت هاي سه رقمي منهاي يک

// سه رقم سه رقم حلقه را تکرار کن

// از چپ به راست

for i := 0 to L do

begin

// به دست آوردن سه رقم مورد نظر

b := strtoint(copy(snum, i * 3 + 1, 3));

// اگر سه رقم به دست آمده صفر باشد، در نام عدد تاثيري ندارد

// نام قسمت سه رقمي را بدست مي آوريمgetnum3 با استفاده از تابع

// پسوند را به آن اضافه مي کنيمbase با استفاده از آرايه

if b <> 0 then

stotal := stotal + getnum3(b) + ' ' + base[L - i] + ' و ';

end;

// حذف حرف <و> اضافي

stotal := copy(stotal, 1, length(stotal) - 3);

result := stotal;

end;

end;