PDA

View Full Version : سوالات مربوط به فرمول نویسی در کریستال ریپورت



علی جباری
چهارشنبه 06 خرداد 1388, 13:03 عصر
سوالات این تاپیک با توجه به مباحث مطرح شده در تاپیک زیر هستند:
فرمول نویسی در کریستال ریپورت (http://www.barnamenevis.org/forum/showthread.php?t=147134)


با سلام از فرمول تبديل تاريخ ميلادي به شمسي كه زحمت كشيده بوديد استفاده كردم ولي دو مشكل داشتم كه اگه ممكنه ميخواستم كمكم كنيد:
1- اينكه چطور يك تاريخ ميلادي را از بانك بخواند و آن را به تاريخ شمسي تبديل كند. (فرمول فعلي تاريخ جاري سيستم را تبديل به تاريخ شمسي مي‌نمايد.)
2- پس از تبديل تاريخ ميلادي به شمسي در قالب يك آيتم مي‌آيد كه جنس آن Text‌است ولي اعداد داخل Text‌را بصورت عدد مي‌آورد.(شكل زير)

farrokhi
جمعه 08 خرداد 1388, 11:57 صبح
مشکل منم اینه که می خوام فیلد تاریخ بانکم رو تبدیل کنم

farrokhi
جمعه 08 خرداد 1388, 11:58 صبح
اون تابع تبدیل تاریخ چندتا صفر اضافه قرار می ده

علی جباری
جمعه 08 خرداد 1388, 17:50 عصر
اون تابع تبدیل تاریخ چندتا صفر اضافه قرار می ده

براي روز دو صفر اضافي
براي ماه دو صفر اضافي و
براي سال هم دو صفر اضافي

علی جباری
یک شنبه 17 خرداد 1388, 09:21 صبح
اصلاح تاريخ و خواند از بانك
فقط اين نكته را بگم كه در اينجا فيلد تاريخ (SodooreChek.TarikheDarkhast) از جنس Text با طول 10 مي‌باشد.


numbervar iMiladiMonth:=numbervar iMiladiMonth:=tonumber(mid(totext({SodooreChek.Tar ikheDarkhast}),6,2));
numbervar iMiladiDay:=numbervar iMiladiDay:=tonumber(mid(totext({SodooreChek.Tarik heDarkhast}),9,2));
numbervar iMiladiYear:=numbervar iMiladiYear:=tonumber(mid(totext({SodooreChek.Tari kheDarkhast}),1,4));
numbervar shamsiDay;
numbervar shamsiMonth;
numbervar shamsiYear;
numbervar dayCount;
numbervar farvardinDayDiff;
numbervar deyDayDiff;
numberVar array sumDayMiladiMonth :=[0,31,59,90,120,151,181,212,243,273,304,334];
numberVar array sumDayMiladiMonthLeap := [0,31,60,91,121,152,182,213,244,274,305,335];
numberVar farvardinDayDiff:=79;
numbervar miladiYear1:=int(imiladiYear mod 100);
numbervar miladiYear2:=int(imiladiYear mod 4);
numbervar miladiYear3:=int(imiladiYear mod 100);
numbervar miladiYear4:=int(imiladiYear mod 400);
if (((miladiYear1 <> 0 )and (miladiYear2 =0))or((miladiYear3=0)and (miladiYear4=0))) then
dayCount := sumDayMiladiMonthLeap[iMiladiMonth] + iMiladiDay
else
dayCount := sumDayMiladiMonth[iMiladiMonth] + iMiladiDay;

miladiYear1:=int((imiladiYear-1) mod 100);
miladiYear2:=int((imiladiYear-1) mod 4);
miladiYear3:=int((imiladiYear-1) mod 100);
miladiYear4:=int((imiladiYear-1) mod 400);
if (((miladiYear1 <> 0 )and (miladiYear2 =0))or((miladiYear3=0)and (miladiYear4=0))) then
deyDayDiff := 11
else
deyDayDiff := 10;
if (dayCount > farvardinDayDiff) then
(
dayCount := dayCount - farvardinDayDiff;
if (dayCount <= 186) then
(
select int(dayCount mod 31)
case 0:(
shamsiMonth :=int( dayCount / 31);
shamsiDay := 31;
)
default:(
shamsiMonth := int(dayCount / 31) + 1;
shamsiDay :=int(dayCount mod 31);
);
shamsiYear := iMiladiYear - 621;
)
else
(
dayCount := dayCount - 186;
select dayCount mod 30
case 0:(
shamsiMonth := int(dayCount / 30) + 6;
shamsiDay := 30;
)
default:(
shamsiMonth := int(dayCount / 30) + 7;
shamsiDay := int(dayCount mod 30);
);
shamsiYear := iMiladiYear - 621;
)
)
else
(
dayCount := dayCount + deyDayDiff;
select int(dayCount mod 30)
case 0 :(
shamsiMonth := int(dayCount / 30) + 9;
shamsiDay := 30;
)
default:(
shamsiMonth := int(dayCount / 30) + 10;
shamsiDay := int(dayCount mod 30);
);
shamsiYear := iMiladiYear - 622;
);
stringvar exitmy:=totext(shamsiYear,0,"")+' / '+totext(shamsiMonth,0,"")+' / '+totext(shamsiDay,0,"");
exitmy;

aminpourazadeh
یک شنبه 08 شهریور 1388, 13:50 عصر
جمع مبلغ یک فیلد از رکورد های یک صفحه و چاپ در انتهای صفحه
شما برای این کار سه فرمول ایجاد می کنید از پنجره filed explorer

فرمول اولی را در در قسمت page header قرار داده و کد زیر را در ان درج کنید


Shared numberVar sum1;
WhilePrintingRecords;
sum1:=0;

فرمول دومی را در details قرار داده و کد زیر را در آن درج نماید


Shared numberVar sum1;
WhilePrintingRecords;
sum1:={Table11.id}+sum1;


فرمول سومی را در pagefooter قرار داده و کد زیر را در ان درج کنید


Shared numberVar sum1;
WhilePrintingRecords;
sum1;


برای این که فرمول اولی و دومی هنگام اجرا نمایش داده نشوند در پنجره propertis خاصیت Suppress هر کدام را برابر با true کنید


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

aminpourazadeh
دوشنبه 09 شهریور 1388, 16:18 عصر
برخی از توابع موجود در کریستال

حذف فضا های خالی ابتدای فیلد


TrimLeft ({tb1.firstname});

حذف فضا های خالی انتهای فیلد


TrimRight ({tb1.firstname});

حذف فضا های خالی ابتدای و انتهای فیلد


Trim ({tb1.firstname});

انتخاب قسمتی از اخر فیلد مثلا ali را li


Right ({tb1.firstname},2 );

انتخاب قسمتی از اول فیلد مثلا ali را al


Left ({tb1.firstname},2 );

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


Mid ({tb1.firstname},2 ,4 );

بدست اوردن طول یک فیلد که خروجی آن مقدارعددی است


Length ({tb1.firstname});




کریستال ریپورت تابعی مثل PadLeft دات نت داره؟
چه جوری میشه این تابع رو نوست؟