PDA

View Full Version : راهنمایی برای محاسبه کارکرد پرسنل شیفت 14/14



m_ah19
دوشنبه 21 مرداد 1398, 19:05 عصر
با سلام بنده قصد دارم سیستم محاسبه ساعت کارکرد برای شیفت کاری 14 روز کار و 14 روز استراحت بنویسم

شرایط شیفت ها به صورت زیره

4 شیفت ABCD هست که کل ماه رو پوشش میدن
همیشه دو شیفت باهم سرکار هستن یه شبفت روزکار یه شیفت شبکار
روز شروع شیفت همیشه شنبه هست
تایم کار شیفت ها به این صورته که دو شیفت سرکار روز کار 12 ساعت و شبکار هم 12 ساعت هست
با توجه به چرخشی بودن شیفت الزاما از اول ماه شروع نمیشه و اخر ماه هم تموم نمیشه


ساعت کارکرد برای من اهمیتی نداره و شبکار و روزکار و هم نمیخوام متاثر کنم

فقط میخوام روزکارکرد هر شیفت رو در هر ماه شمسی حساب کنم
در تصویر زیر وضعیت شیفت ها نسبت به هم رو مشخص کردم
ممنون میشم دوستان اگر تجربه ای در این زمینه داشتن راهنمایی کنند


150583

mazoolagh
سه شنبه 22 مرداد 1398, 09:27 صبح
خوبه که همه مثل شما پرسش را گویا و دقیق بیان کنن!

قبل از هر چیز بگین که آیا برنامه از یک تاریخ معین شروع شده و همچنان ادامه داره (بدون توجه به سال یا فصل) یا اینکه پس از یک دوره معین ریست میشه (مثلا اولین شنبه هر سال)

از اون به بعد ساده است و روشهای مختلفی هم برای رسیدن به جواب هست

هر یک از دو حالت بالا که باشه میتونین یکبار برای یک بازه زمانی دلخواه محاسبات رو انجام بدین، و بعد از اون فقط با مشخص کردن سال و ماه، روزهای کاری هر شیفت رو استخراج کنین

m_ah19
چهارشنبه 30 مرداد 1398, 07:30 صبح
ممنونم که جواب دادید و عذر میخوام که من دیر جواب دادم
بله روز های ابتدایی رو میتونیم مفروض بگیریم چون همیشه 14 روز کار و 14 روز استراحت هست و هیچ تعطیلی نداره

ممنون میشم اگر راهکاری به ذهنتون رسید منو راهنمایی کنید

mazoolagh
چهارشنبه 30 مرداد 1398, 15:07 عصر
در واقع خیلی ساده است و فقط یک حلقه نیاز داره

شما یک سیکل 28 روزه دارین که درون خودش 4 سیکل هفت روزه داره، کافی هست یک شمارنده بسازین که از اولین شنبه تا پایان تقویم شیفت یکی یکی بشماره و با توجه به اینکه کدوم هفته در سیکل 28 روزه هست مقادیر گروه های کاری رو مشخص کنه.

اول یک جدول میسازین با فیلدهای (بعنوان نمونه) :
id,y,m,d,doy_of_week,shift1,shift2,rest1,rest2

بعضی از فیلدها مثل day_of_week ممکنه نیازی بهشون نباشه ولی برای درک بهتر روش کار یا چک کردن نتایج میتونه مفید باشه
یا اینکه بجای سه فیلد y,m,d شاید ترجیح بدین یک فیلد yyyymmdd داشته باشین
اینها مهم نیست و سلیقه ای هست

فعلا فقط لاجیک کار رو میارم و به روش نوشتن دیتا در جدول کاری ندارم چون به اندازه کافی کد نمونه براش هست.
فقط باید اولین روز تقویم کاری رو حتما مطمئن باشید که شنبه است! مثل همین تاریخ که در کد پایین هست.

کد شما چیزی شبیه این میشه:


dim pc as persiancalendar
dim schedule_start as datetime=new datetime(1398,3,11,pc) ' 1398/03/11
dim schedule_end as datetime=new datetime(1398,12,29,pc) ' 1398/12/29
dim pdate as datetime=schedule_start
dim i as long=0
do while pdate <= schedule_end
i=i + 1
id <-- i
y <-- pc.getyear(pdate)
m <-- pc.getmonth(pdate)
d <-- pc.getdayofmonth(pdate)
day_of_week <-- pc.getdayofweek(pdate)
select case (i-1) mod 28
case 0 to 6 ' week 1
shift1 <-- "a"
shift2 <-- "b"
rest1 <-- "d"
rest2 <-- "c"
case 7 to 13 ' week2
...
case 14 to 20 ' week 3
...
case 21 to 27 ' week 4
...
end select
pdate=pc.adddays(pdate,1)
loop