احتساب ايام العمل الفعلية بين تاريخين
احتساب ايام العمل الفعلية بين تاريخين
لاحتساب ايام العمل الفعلية بين تاريخين يجب الانتباه الى صيغة التاريخ المستخدمة في جهاز الكمبيوتر واذا كان البرنام الذي يتم العمل علية سيستخدم في اكثر من جهاز فانه يجب الانتباه الى اعدادات الاجهزة والسبب هو ان برنامج الاكسس سيتعامل مع التاريخ بصيغة التاريخ المستخدم في امريكا (mm/dd/yyyy) وبالتالي فان تاريخ 7 فبراير سيتم قرأته على انه 2 يوليو ومن هنا يجب الانتباه جيدا لهذا الموضوع في بناء البرنامج.
ان الطريقة التي سنعمل بها هي كما يلي:
- سيتم احساب عدد الايام بين تاريخ البداية وتاريخ النهاية
- سيتم احتساب عدد ايام اجازة نهاية الاسبوع بين التاريخين (ايام الجمعة والسبت)
- سيتم احتساب ايام العطل الرسمية عدا ايام نهاية الاسبوع وهذا سيتطلب انشاء جدول للمناسبات والعطل الرسمية
لا بد من انشاء جدول باسم (tblHolidays) ويحتوي على الحقول التالية :
- HolidayDate وهذا الحقل يخص تاريخ العطلة
- HolidayDescription وهذا التاريخ يخص اسم العطلة وهو اختياري
- Ndat ملاحضات على العطلة وهو اختياري
وسيكون شكل الجدول كما يلي:
tblHolidays
| ||
HolidayDate
|
HolidayDescription
|
ndat
|
Tue 16/Aug/2016
|
عطلة رسمية
|
يتم و ضع الكود في وحدة نمطية ومن ثم استدعاؤة في الاستعلام او في النماذج او التقارير حسب الحاجة وسيكون الكود بهذا الشكل :
Option Compare Database
Option Explicit
Public Function WorkDays(Startdate As Date, EndDate As Date) As Integer
Dim intHolidays As Integer
Dim intTotalDays As Integer
Dim intWeekendDays As Integer
Dim rst As DAO.Recordset
Dim strSQL As String
Dim sTRD As Date, eNDD As Date
Dim ddz, mmz, yyyyz As Integer
Dim dds, mms, yyyys As Integer
ddz = Day(EndDate)
mmz = Month(EndDate)
yyyyz = Year(EndDate)
eNDD = DateValue(Format(ddz & "/" & mmz & "/" & yyyyz, "dd/mm/yyyy"))
dds = Day(Startdate)
mms = Month(Startdate)
yyyys = Year(Startdate)
sTRD = DateValue(Format(dds & "/" & mms & "/" & yyyys, "dd/mm/yyyy"))
strSQL = "Select Count(*) as HolidayCount From tblHolidays " & _
"Where HolidayDate BETWEEN #" & sTRD & "#" & _
" AND " & "#" & DateValue(eNDD) & "#;"
Set rst = CurrentDb.OpenRecordset(strSQL)
intHolidays = rst!HolidayCount 'Count Holidays between dates
intTotalDays = DateDiff("d", sTRD, eNDD) + 1 'Calc dif in days
intWeekendDays = DateDiff("ww", sTRD - 1, eNDD, vbFriday) + DateDiff("ww", sTRD - 1, eNDD, vbSaturday) 'Calc Count of Fryda + saturday
WorkDays = intTotalDays - intWeekendDays - intHolidays
Set rst = Nothing
End Function
وفي الاستعلام او النموذج او التقرير يتم استدعاء الوظيفة او الكود وكما يلي:
WorkDays (start date , end date )
تعليقات
إرسال تعليق