در محیط Design فست ریپورت دارم کد نویسی میکنم
ساعت را به شکل am و pm نشون میده ، اما من نمیخوام اینجوری باشه مثلا 07:00 ق.ظ را باید به 19:00 تبدیل کنم ، همینطور باید تاریخ میلادی را به شمسی تبدیل کنم چکار کنم ؟
در محیط Design فست ریپورت دارم کد نویسی میکنم
ساعت را به شکل am و pm نشون میده ، اما من نمیخوام اینجوری باشه مثلا 07:00 ق.ظ را باید به 19:00 تبدیل کنم ، همینطور باید تاریخ میلادی را به شمسی تبدیل کنم چکار کنم ؟
روی کنترل نمایش دهنده متن دابل کلیک کنید، در پنجره باز شده، به تب Format برید، گروه Date\Time را انتخاب کنید، و Format string را روی hh:mm تنظیم کنید.ساعت را به شکل am و pm نشون میده ، اما من نمیخوام اینجوری باشه مثلا 07:00 ق.ظ را باید به 19:00 تبدیل کنم
باید یه تابع تبدیل تاریخ میلادی به شمسی بنویسید. دلفی یا فست ریپورت به خودی خود تاریخ میلادی شما را تبدیل به شمسی نمی کنند.همینطور باید تاریخ میلادی را به شمسی تبدیل کنم چکار کنم ؟
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
مرسی توی دلفی از کامپوننت برای تبدیل تاریخ استفاده میکردم اینجا چی ؟! خوب حتما یکی قبلا این تابع را نوشته دیگه
راه های مختلفی برای تبدیل وجود دارند، شامل:توی دلفی از کامپوننت برای تبدیل تاریخ استفاده میکردم اینجا چی ؟! خوب حتما یکی قبلا این تابع را نوشته دیگه
1- ایجاد یک فیلد Calculated در دیتاست، و تبدیل مقدار فیلد تاریخ میلادی به شمسی توسط یک تابع یا کامپوننت یا هر چیز دیگه، و قرار دادن نتیجه در داخل این فیلد. اینطوری اون فیلد محاسباتی در فست ریپورت هم در دسترس خواهد بود.
2- استفاده از رویدادهای OnSetText و OnGetText فیلد تاریخ مربوطه، برای تبدیل تاریخ میلادی به شمسی و بالعکس.
3- رجیستر کردن یک تابع آماده تبدیل تاریخ میلادی به شمسی دلفی در موتور اسکریپت فست ریپورت، و فراخوانی آن تابع در داخل فست ریپورت.
4- نوشتن یک تابع تبدیل میلادی به شمسی با استفاده از PascalScript در داخل فست ریپورت.
5- در صورتی که از بانک اطلاعاتی استفاده می کنید که امکان تعریف توابع کاربر را داره (مثل MS SQL Server)؛ تعریف یک تابع کاربر در بانک اطلاعاتی، برای تبدیل تاریخ میلادی به شمسی. البته این حالت بیشتر به درد زمانی میخوره که مقدار اون فیلد که توسط کوئری برگشت داده میشه، فقط-خواندنی باشه، و قصد نداشته باشید که مقدارش را در برنامه تغییر بدید.
برای هر کدوم از حالت های فوق (به غیر از حالت 4) در این سایت تاپیک هایی وجود داره.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
مرسی مشکل اینجاست که برنامه مال من نیست و فقط یک فایل اجرایی دارم توی برنامه میشه گزارش خصوصی درست کرد که با محیط فست ریپورت هست پس باید از همون گزینه 4 استفاده کنم ! بانک هم اکسس
کسی تابع تبدیل تاریخ میلادی به شمسی را نداره ؟
اینم از تایع تاریخ شمسی :
Function SHDate:String;
Const
D : Array [0..11] of integer=(20, 19, 20, 20, 21, 21, 22, 22, 22, 22, 21, 21);
P : Array [0..11] of integer=(11, 12, 10, 12, 11, 11, 10, 10, 10, 9, 10, 10);
Mon: Array [0..11]of String=('01','02','03','04','05','06','07','08','0 9','10','11','12');
Var DateLocal:_SYSTEMTIME;
Dm,Mm,Ym:Word;
P1,D1,I,U,Rp,Ys,Ms,Ds,X:Integer;
Sal,Mah,Roz:String;
begin
GetLocalTime(DateLocal);
Ym:=DateLocal.wYear;
Mm:=DateLocal.wMonth;
Dm:=DateLocal.wDay;
Dm := Dm;
U := 0;
Rp:= 0;
If (Ym Mod 4) = 0 Then U := 1;
If ((Ym Mod 100 = 0) AND (Ym Mod 400 <> 0)) Then U := 0;
Ys := Ym - 622;
X := Ys - 22;
X := X Mod 33;
If ((X Mod 4 = 0) AND (X <> 32)) Then Rp := 1;
I := Not(Rp-2) + NOT(U - 2) * 2;
X := 0;
If (I = 0) AND (Mm = 3) Then X := 1;
If I = 0 Then I := 3;
Ms := (9 + Mm) Mod 13;
If Ms < 10 Then Ms := Ms + 1;
D1 := D[Mm - 1];
If (I = 1) AND (Mm > 2) Then D1 := D1 - 1;
If (I = 2) AND (Mm < 3) then D1 := D1 - 1;
P1 := P[Mm - 1];
If (I = 1) AND (Mm > 2) Then P1 := P1 + 1;
If (I = 2) AND (Mm < 4) Then P1 := P1 + 1;
If (Dm > 0) AND (Dm <= D1) Then
Begin
Ds := P1 + Dm + X - 1;
X := 1;
End
Else
Begin
Ds := Dm - D1;
Ms := Ms + 1;
If Ms = 13 Then Ms := 1;
X := 2;
End;
If ((Mm = 3) AND (X = 2)) OR (Mm > 3) Then Ys := Ys + 1;
Sal:=IntToStr(Ys);
If Length(Sal)=1 then Insert('0',Sal,1);
Mah:=Mon[Ms-1];
Roz:=IntToStr(Ds);
If Length(Roz)=1 then Insert('0',Roz,1);
Result:=Sal+'/'+Mah+'/'+Roz;
Delete(Result,1,2);
end;
مرسی توی فست ریپورت نوشتم به خط 3 ایراد میگیره
باز هم تست کردم اما نمیشه !
اینو تست کردم.کامپایل میشد.
میتونی از توابع DateTimeToStr و StrToDate و ... خود پاسکال اسکریپت استفاده کنی.
کد HTML:function shamsi(tt:tdatetime):string; var str,y,m,d:string; yi,mi,di:integer; begin str:=datetostr(tt); y:=copy(str,1,4); m:=copy(str,6,2); d:=copy(str,9,2); yi:=strtoint(y); mi:=strtoint(m); di:=strtoint(d); if (yi mod 4=0) then if mi>2 then begin tt:=tt+1; str:=datetostr(tt); y:=copy(str,1,4); m:=copy(str,6,2); d:=copy(str,9,2); yi:=strtoint(y); mi:=strtoint(m); di:=strtoint(d); end; if ((mi<3) or ((mi=3) and (di<21))) then begin yi:=yi-622; end else begin yi:=yi-621; end; case mi of 1: if di<21 then begin mi:=10; di:=di+10; end else begin mi:=11; di:=di+10; end; 2: if di<20 then begin mi:=11; di:=di+11; end else begin mi:=12; di:=di-19; end; 3: if di<21 then begin mi:=12; di:=di+9; end else begin mi:=1; di:=di-20; end; 4: if di<21 then begin mi:=1; di:=di+11; end else begin mi:=2; di:=di-20; end; 5: if di<22 then begin mi:=mi-3; di:=di+10; end else begin mi:=mi-2; di:=di-21; end; 6: if di<22 then begin mi:=mi-3; di:=di+10; end else begin mi:=mi-2; di:=di-21; end; 7: if di<23 then begin mi:=mi-3; di:=di+9; end else begin mi:=mi-2; di:=di-22; end; 8: if di<23 then begin mi:=mi-3; di:=di+9; end else begin mi:=mi-2; di:=di-22; end; 9: if di<23 then begin mi:=mi-3; di:=di+9; end else begin mi:=mi-2; di:=di-22; end; 10: if di<23 then begin mi:=7; di:=di+8; end else begin mi:=8; di:=di-22; end; 11: if di<22 then begin mi:=mi-3; di:=di+9; end else begin mi:=mi-2; di:=di-21; end; 12: if di<22 then begin mi:=mi-3; di:=di+9; end else begin mi:=mi-2; di:=di-21; end; end; y:=inttostr(yi); m:=inttostr(mi); if (length(m)=1) then m:='0'+m; d:=inttostr(di); if length(d)=1 then d:='0'+d; result:=y+'/'+m+'/'+d end;