در واقع خیلی ساده است و فقط یک حلقه نیاز داره
شما یک سیکل 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