PDA

View Full Version : سوال: مشکل در محسابه زمان کارکرد



linktaz
پنج شنبه 02 آذر 1396, 12:08 عصر
با سلام
دوستان ،من یه مشکلی در فایلم برخوردم
تیبل من بدین شکله،اما وقتی زمان پایان رو میخواد از زمان شروع کم کنه در مواقعی که روز عوض میشه کلا اشتباه میکنه.درواقع 01:30 رو منهای 23 میکنه اشتباه میشه.
راهکارش چیه؟



تاریخ
شرح کار
زمان شروع
زمان پایان
میزان کارکرد


960902
جابجایی پالت
07:30
08:30
01:00


960902
جابجایی باکس
23:00
01:30
؟

n_ali27
پنج شنبه 02 آذر 1396, 12:38 عصر
یه تابع شرطی ایجاد کن بدین صورت که اگر ارقام ساعت پایان کوچکتر از ساعت شروع باشه مثل همین حالت که توضیح دادین زمان شروع را از ساعت 24:00 کم کنه و به ساعت پایان اضافه کنه
a = "زمان شروع"
b = "زمان پايان"
c = "مدت انجام"
If a < b Then
c = b - a
Else
c = 24 - a + b
End If

linktaz
پنج شنبه 02 آذر 1396, 13:13 عصر
یه تابع شرطی ایجاد کن بدین صورت که اگر ارقام ساعت پایان کوچکتر از ساعت شروع باشه مثل همین حالت که توضیح دادین زمان شروع را از ساعت 24:00 کم کنه و به ساعت پایان اضافه کنه
a = "زمان شروع"
b = "زمان پايان"
c = "مدت انجام"
If a < b Then
c = b - a
Else
c = 24 - a + b
End If
ممنونم از راهنماییتون،اما اینکارو کردم جواب نمیده،یعنی چون فرمت من زمان هستش به مشکل میخورم،اگر نمونه فایلم رو مشاهده بفرمائید و اطلاعاتی که در تیبل مربوطه ذخیره میشه متوجه میشید

n_ali27
شنبه 04 آذر 1396, 12:29 عصر
یه سری به این تایپیک بزن
http://barnamenevis.org/showthread.p...B9%D8%A7%D8%AA (http://barnamenevis.org/showthread.php?262597-%D8%AC%D9%85%D8%B9-%D8%AF%D8%B1%D8%B3%D8%A7%D8%B9%D8%A7%D8%AA)

mazoolagh
شنبه 04 آذر 1396, 13:14 عصر
یه تابع شرطی ایجاد کن بدین صورت که اگر ارقام ساعت پایان کوچکتر از ساعت شروع باشه مثل همین حالت که توضیح دادین زمان شروع را از ساعت 24:00 کم کنه و به ساعت پایان اضافه کنه
a = "زمان شروع"
b = "زمان پايان"
c = "مدت انجام"
If a < b Then
c = b - a
Else
c = 24 - a + b
End If

در حالت کلی صادق نیست مگر اینکه در شرایط خاصی باشیم که مطمئن هستیم پروسه ما هیچگاه بیشتر از 24 ساعت نیست.
ممکن هست شروع ساعت 7 و پایان ساعت 22 روز بعد باشه.

mazoolagh
شنبه 04 آذر 1396, 13:25 عصر
با سلام
دوستان ،من یه مشکلی در فایلم برخوردم
تیبل من بدین شکله،اما وقتی زمان پایان رو میخواد از زمان شروع کم کنه در مواقعی که روز عوض میشه کلا اشتباه میکنه.درواقع 01:30 رو منهای 23 میکنه اشتباه میشه.
راهکارش چیه؟



تاریخ
شرح کار
زمان شروع
زمان پایان
میزان کارکرد


960902
جابجایی پالت
07:30
08:30
01:00


960902
جابجایی باکس
23:00
01:30
؟




وقتی محاسبه روی تاریخ و ساعت نیاز دارین حتما باید تاریخ کامل رو ذخیره کنین (دیتا از نوع date-time)
یعنی علاوه بر تاریخ فارسی باید معادل میلادی رو هم ذخیره و محاسبات رو روی تاریخ میلادی انجام بدین.

مشکل شما این هست که بجای زمان واقعی (شامل تاریخ و ساعت) فقط ساعت ذخیره میکنین. بنابراین مجبور هستین بجای یک عملیات ساده، که خود اکسس انجام میده، خودتون ساعت ها رو مقایسه و عملیات اضافی انجام بدین که اون هم فقط و فقط وقتی نتیجه درست میده که مطمئن باشین پروسه بیشتر از 24 ساعت نیست.

در هر صورت،
روش این هست که یک تاریخ مرجع در نظر بگیرین، مثلا اول ژانویه 2000 ، و دو تاریخ بسازین بر اساس این تاریخ مرجع و ساعت های شروع و پایان.
حالا با datediff راحت میتونین محاسبه کنین.

linktaz
یک شنبه 05 آذر 1396, 13:34 عصر
وقتی محاسبه روی تاریخ و ساعت نیاز دارین حتما باید تاریخ کامل رو ذخیره کنین (دیتا از نوع date-time)
یعنی علاوه بر تاریخ فارسی باید معادل میلادی رو هم ذخیره و محاسبات رو روی تاریخ میلادی انجام بدین.

مشکل شما این هست که بجای زمان واقعی (شامل تاریخ و ساعت) فقط ساعت ذخیره میکنین. بنابراین مجبور هستین بجای یک عملیات ساده، که خود اکسس انجام میده، خودتون ساعت ها رو مقایسه و عملیات اضافی انجام بدین که اون هم فقط و فقط وقتی نتیجه درست میده که مطمئن باشین پروسه بیشتر از 24 ساعت نیست.

در هر صورت،
روش این هست که یک تاریخ مرجع در نظر بگیرین، مثلا اول ژانویه 2000 ، و دو تاریخ بسازین بر اساس این تاریخ مرجع و ساعت های شروع و پایان.
حالا با datediff راحت میتونین محاسبه کنین.
قطعا حق با شماست.پروسه که قطعا از 24 ساعت بیشتر نیست
اما آیا امکانش هست در یک فایل اکسس ،نمونه را اجرا فرمائید.ممنون میشم

linktaz
سه شنبه 07 آذر 1396, 13:36 عصر
سلام
جناب mazoolagh امکانش هس نمونه ارسال فرمائید؟

mazoolagh
پنج شنبه 09 آذر 1396, 10:33 صبح
CONST DX AS DATE = "1/1/2000 00:00:00"
FUNCTION TimeDiff(StartTime AS DATE , StopTime AS DATE) AS DATE
DIM T AS LONG
T = DATEDIFF("s" , DX , StopTime) - DATEDIFF("s" , DX , StartTime)
TimeDiff = TIMEVALUE(DATEADD("s" , T , DX))
END FUNCTION

linktaz
پنج شنبه 09 آذر 1396, 15:33 عصر
CONST DX AS DATE = "1/1/2000 00:00:00"
FUNCTION TimeDiff(StartTime AS DATE , StopTime AS DATE) AS DATE
DIM T AS LONG
T = DATEDIFF("s" , DX , StopTime) - DATEDIFF("s" , DX , StartTime)
TimeDiff = TIMEVALUE(DATEADD("s" , T , DX))
END FUNCTION

"s"رو تعریف نکردید/منظورتون همون starttime?

mazoolagh
شنبه 11 آذر 1396, 11:46 صبح
"s" متغیر نیست که نیاز به تعریف داشته باشه!
یک ثابت حرفی است که بعنوان پارامتر تابع استفاده شده.

مستندات توابع DATEDIFF و DATEADD رو ببینین.