View Full Version : سوال: آیا خود کریستال ریپورت ابزار یا توابعی برای محاسبه زمان دارد ؟
امیر مهرشاد
یک شنبه 01 دی 1392, 21:10 عصر
سلام . با فرض اینکه یکی از فیلدها در دیتابیس زمان های گوناگون را در خودش نگهداری کند حالا نوع فیلد یا همون دیتاتایپش میخواد string باشه یا datetime ؛؛
میشه بدون اینکه از اول خودمونو درگیر کد نویسی اضافه کنیم از ابزارهای خود کریستال برای بدست آوردن مجموع زمانهای ذخیره شده در دیتابیس اقدام کنیم یا کریستال اصلا چنین قابلیتی نداره ؟
یک روش اینه قبل از insert داده ها همونجا اونا رو به دقیقه تبدیل کنیم و یه سری کارهای دیگه ولی دنبال قابلیتی در خود کریستال میگردم لطفا اگر مطلبی دارید ارائه بدید تا بقیه هم استفاده کنند .
متشکرم
fakhravari
دوشنبه 02 دی 1392, 00:32 صبح
فکر کنم
http://stackoverflow.com/questions/14196081/crystal-reports-grouping-sum-by-date
امیر مهرشاد
دوشنبه 02 دی 1392, 08:54 صبح
فکر کنم
http://stackoverflow.com/questions/14196081/crystal-reports-grouping-sum-by-date
ممنون ولی من گفتم بدست آوردن مجموع زمانهای ذخیره شده ولی با همین سولوشن باید تست کنم ببینم جواب میده یا خیر (جواب نداد فقط باید فرمول نویسی در کریستال انجام بشه) اگر کریستال کارهای حرفه ای میتونند راهکاری ارائه بدن که مجموع زمانهای ذخیره شده در DB به اینصورت در گزارشاتمون نمایش بدیم (روز و ساعت و دقیقه)بسیار ممنون میشم
مثلا در تیبلمون داریم
12:00
1:00
12:30
4:00
که خروجی که باید با اسکریپت یا ... بدست بیاوریم به این صورت باشه :مجوع زمان کارکرد شخص = 1 روز و 5 ساعت و 30 دقیقه
کریستال کارا کجان ؟:متفکر:
امیر مهرشاد
دوشنبه 02 دی 1392, 11:29 صبح
این فرمولو برای بدست آوردن سامیشن تایم در کریستال گیر آوردم ولی ظاهرا یه خطایی داره لطفا یکی پاسخ بده
local stringvar array completetime;
local numbervar totalseconds;
completetime:=split({TIME.time},":");
totalseconds:= (3600*cdbl(completetime[1])) + (60*cdbl(completetime[2]));
replace(cstr(Sum ({TIME.time})\3600),".00","") + ":" + replace(cstr((Sum ({TIME.time}) mod 3600)/60),".00","")
اینم خطا :
114294
fakhravari
دوشنبه 02 دی 1392, 14:17 عصر
خب من زیاد کریستال کار نکردم اما برای جمع ساعت
یه تابع داشتم اینا رو حساب میکرد ساعاتی که دادی.
باید پیداش کنم
امیر مهرشاد
دوشنبه 02 دی 1392, 17:16 عصر
خب من زیاد کریستال کار نکردم اما برای جمع ساعت
یه تابع داشتم اینا رو حساب میکرد ساعاتی که دادی.
باید پیداش کنم
ممنون دوست عزیز منتظرم والا من دیگه کلافه شدم اون اسکریپت بالا چه اشکالی داره ؟ فیلد ها که درست بهش داده شده خب اون تابعی که فرمودید رو باید تست کرد آیا جواب میده یا نه ؟:متفکر:
fakhravari
چهارشنبه 04 دی 1392, 00:28 صبح
مثلا
CREATE TABLE [dbo].[Table_1](
[ID] [int] IDENTITY(1,1) NOT NULL,
[time] [nvarchar](50) NULL)
درج
01:20:00
02:50:00
03:08:00
نتیجه
7:18
query
select cast(SUM(DateDiff(MINUTE, CAST('0:00' as time), Time))/60 as nvarchar(3)) + ':' + cast(SUM(DateDiff(MINUTE, CAST('0:00' as time), Time))%60 as nvarchar(2))AS Total from Table_1
hasan_esfahan
چهارشنبه 04 دی 1392, 17:01 عصر
سلام ببین تو کریستال همچین تابعی نداریم که دوتا زمان را با هم جمع کنه پس با یک فانکشن دور میزنیم اول دوتا متغیر تعریف می کنیم local stringvar array completetime; local numbervar totalseconds بعد فیلد یا هر چیز دیگه را از دیتا بیس می گیریم که و اسپلیتش می کنیم یعنی میشگنیمش با : خوب completetime:=split({@combinetime},":"); بعد ساعت ضربدر 3600 دقیقه را ضربدر 60 و با ثانیه جمع می کنیم. totalseconds:= (3600*cdbl(completetime[1])) + (60*cdbl(completetime[2]))+(cdbl(completetime[3])); در ادامه جواب نهایی ثانیه را به ساعت و دقیقه و ثانیه بر می گردانیم replace(cstr(floor(Sum ({@totalseconds})/3600)),".00","") + ":" + replace(cstr(floor((Sum ({@totalseconds}) mod 3600)/60)),".00","") + ":" + replace(cstr(floor(Sum ({@totalseconds}) mod 60)),".00","")
امیر مهرشاد
یک شنبه 08 دی 1392, 18:18 عصر
مثلا
CREATE TABLE [dbo].[Table_1](
[ID] [int] IDENTITY(1,1) NOT NULL,
[time] [nvarchar](50) NULL)
درج
01:20:00
02:50:00
03:08:00
نتیجه
7:18
query
select cast(SUM(DateDiff(MINUTE, CAST('0:00' as time), Time))/60 as nvarchar(3)) + ':' + cast(SUM(DateDiff(MINUTE, CAST('0:00' as time), Time))%60 as nvarchar(2))AS Total from Table_1
با تشکر از جواب دوست عزیزم fakhravari این کد تست شد نوع تایم رو هم nvarchar بگیرید کسانی که استفاده میکنند لطفا تشکر از fakhravari یادشون نره
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.