PDA

View Full Version : سوال: قرار دادن تاریخ شمسی در کریستال ریپورت



javad_dam
سه شنبه 30 فروردین 1390, 17:14 عصر


من می خوام در بالای گزارش خودم تاریخ شمسی رو نشون بدم باید چکار کنم؟


اگه میشه یه برنامه ساده ای که این کار رو انجام میده و سراغ دارید در اینجا ضمیمه کنید و لطفا این کار رو تئوری توضیح ندید چون هر کاری می کنم متوجه نمیشم. لطفا کمکم کنید.


فرصتم کم هستش .


با تشکر از دوستان

rt3073
سه شنبه 30 فروردین 1390, 18:03 عصر
من همیشه تاریخ گزارشگیری رو به صورت پارامتر به کریستال ارسال می کنم.

68933

javad_dam
سه شنبه 30 فروردین 1390, 18:29 عصر
من همیشه تاریخ گزارشگیری رو به صورت پارامتر به کریستال ارسال می کنم.

68933

میشه ازتون خواهش کنم اگه امکانش هست تو ورژن 2008 دات نت برنامه رو آپ کنی. آخه مثل اینکه این ورژن 2010 هستش و من هم 2010 تو سیستمم نصب ندارم.

لطفا کمکم کنید.

با تشکر فراوان

rt3073
چهارشنبه 31 فروردین 1390, 22:45 عصر
ببین این باز میشه، ممکنه Crystal reportاش هم برات باز نشه. ولی روند کار اینطوریه که وقتی یه report به برنامت اضافه می کنی در Field explorer روی parameter fields کلیک راست کرده و new رو می زنی. یه اسمی به پارامترت می دی مثلا من اینجا اسمش رو Date گذاشتم. حالا یه پارامتر جدید با اسم Date در زیر Parameter fields اضافه میشه. اون رو با موس بگیر و به هر جای گزارشت که می خوای اضافه کن. توی برنامه هم به اینصورت مقدارش رو پاس می کنی:


crystalReportViewer1.ReportSource = CrystalReport11;
CrystalReport11.SetParameterValue("Date", "هر تاریخی که می خواهید");


68964

mohammad_2039
پنج شنبه 01 اردیبهشت 1390, 01:12 صبح
سلام

من این کارو انجام دادم و خیلی خوب بود.
اول یه Function تو کریستال درست کن و این کد رو توش کپی کن


Function (datevar MyDate)
(
numbervar MyYear:=year(MyDate);
numbervar MyMonth:=month(MyDate);
numbervar MyDay:=datepart('D',MyDate);
numbervar array DaysToMonth365 := [ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 ];
numbervar array DaysToMonth366 := [ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 ];
numbervar array DaysToMonth := [ 0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336 ];
numbervar array LeapYears33 := [ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 ];
booleanvar IsLeapYear;
if ((myyear mod 4) <> 0) then
IsLeapYear := false
else if ((myyear mod 100) = 0) then
IsLeapYear := ((myyear mod 400) = 0)
else
IsLeapYear := true;
numbervar array numArray1;
if (IsLeapYear) then
numArray1 := DaysToMonth366
else
numArray1 := DaysToMonth365;

numberVar num1 := int( myyear - 1);
numberVar num2 := int(((((((num1 * 365) + (num1 / 4)) - (num1 / 100)) + (num1 / 400)) + numArray1[mymonth]) + myday) - 1);
numberVar num4 := num2 + 1;
numberVar PersianYear := int((((num4 - 226894) * 33) / (12053)))+ 1;
numberVar numtmp2 :=int( (PersianYear - 1) / 33);
numberVar yeartmp := int((PersianYear - 1) mod 33);
numberVar num5 := (numtmp2 * 12053) + 226894;
while (yeartmp > 0) do
(
num5 := num5 + 365;
if (LeapYears33[(yeartmp Mod 33)+1] = 1) then
num5 := num5 + 1;
yeartmp := yeartmp - 1
);
numberVar num6;
num5;
if (PersianYear = 9378) then
num6 := DaysToMonth[10] + 10
else if (LeapYears33[(PersianYear Mod 33)+1] <> 1) then
num6 := 365
else
num6 := 366;
if (num4 < num5) then
(
num5 := num5 - num6;
PersianYear := PersianYear - 1;
)
else if (num4 = num5) then
(
PersianYear := PersianYear - 1;
numberVar temp;
if (PersianYear = 9378) then
temp := DaysToMonth[10] + 10
else if (LeapYears33[(PersianYear mod 33)+1] <> 1) then
temp := 365
else
temp := 366;
num5 := num5 - temp
)
else if (num4 > (num5 + num6)) then
(
num5 := num5 + num6;
PersianYear:=PersianYear+1
);

num4:= num4 - num5;
numberVar num12 := 0;
while ((num12 < 12) and (num4 > DaysToMonth[num12+1])) do
(
num12:=num12+1;
);
numberVar num3 := int(num4) - DaysToMonth[num12];
Stringvar Text :=Cstr( PersianYear,'0000')+'/'+Cstr(num12,'00')+'/'+Cstr(num3,'00');
)



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


ConvertDatetoPersianDate(CurrentDate);


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