التخطي إلى المحتوى الرئيسي

احتساب ايام العمل الفعلية بين تاريخين

احتساب ايام العمل الفعلية بين تاريخين
لاحتساب ايام العمل الفعلية بين تاريخين يجب الانتباه الى صيغة التاريخ المستخدمة في جهاز الكمبيوتر واذا كان البرنام الذي يتم العمل علية سيستخدم في اكثر من جهاز فانه يجب الانتباه الى اعدادات الاجهزة والسبب هو ان برنامج الاكسس سيتعامل مع التاريخ بصيغة التاريخ المستخدم في امريكا (mm/dd/yyyy)  وبالتالي فان تاريخ 7 فبراير سيتم قرأته على انه 2 يوليو ومن هنا يجب الانتباه جيدا لهذا الموضوع في بناء البرنامج.
ان الطريقة التي سنعمل بها هي كما يلي:
  1. سيتم احساب عدد الايام بين تاريخ البداية وتاريخ النهاية
  2. سيتم احتساب عدد ايام اجازة نهاية الاسبوع بين التاريخين (ايام الجمعة والسبت)
  3. سيتم احتساب ايام العطل الرسمية عدا ايام نهاية الاسبوع وهذا سيتطلب انشاء جدول للمناسبات والعطل الرسمية
لا بد من انشاء جدول باسم (tblHolidays) ويحتوي على الحقول التالية :
  1. HolidayDate وهذا الحقل يخص تاريخ العطلة
  2. HolidayDescription وهذا التاريخ يخص اسم العطلة وهو اختياري
  3. 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 )




تعليقات

المشاركات الشائعة من هذه المدونة

انشاء الجداول في اكسس

انشاء الجداول في اكسس بعد انشاء ملف اكسس جديد فان الخطوة الاولى ستكون انشاء الجداول، ولانشاء الجداول نتبع ما يلي: 1- اختيار create  كما في الصورة 2- نقوم باختيار Table او Table Design والامر متروك للمستخدم، وانا بشكل شخصي افضل Table Design 3- بعد اختيار Table Design ستفتح لنا نافذة تصميم الجدول كما في الصورة 4- الحقل الاول Field Name يتم فية ادخال عناوين الاعمدة (الحقول) 5- الحقل الثاني Data Type يتم فية تحديد نوع المتغير (رقم ، نص ، تاريخ ...الخ) 6- الحقل الثالث Description وهو حقل اختياري ويتم فية ادخال وصف لهذا العمود 7- في كل جدول يجب تحديد المفتاح الاساسي ويجب ان يحتوي هذا الحقل على قيمة فريدة لا تتكرر مع اي حقل اخر. 8 - بعد الانتهاء نقوم باغلاق الجدول وعندها ستظهر نافذة لتحديد اسم الجدول وحفظة . 9- بعد فتح الجدول سيكون شكله كما في الصورة 10- نلاحظ ان عنوان العمود الاول ظهر كما تم كتابتة في التصميم اما العمود الثاني فقد ظهر اسمة باللغة العربية والسبب انه تم اضافة تسمية للعمود من خصائص الحقل اثناء تصميم الجدول كما في الصورة وبذلك يكو...

انشاء نموذج للدخول باسم مستخدم وكلمة مرور الى برنامج اكسس

انشاء نموذج للدخول باسم مستخدم وكلمة مرور الى برنامج اكسس عندما يكون البرنامج متاح لاكثر من شخص للعمل علية فلا بد من حماية البرنامج من المستخدمين غير المصرح لهم من خلال اضافة نموذج للدخول الى قاعدة الببيانات، ولانشاء نموذج الدخول الى البرنامج نتبع الخطوات التالية: انشاء جدول للمستخدمين يتم فيه تخزين اسماء المستخدمين وكلمات مرورهم ويحتوي على حقل لاسم المستخدم وحقل لكلمة المرور انشاء نموذج للدخول ويحتوي على مربعي نص غير مستندة الى مصدر بيانات، وزري امر واحد للالغاء والثاني للدخول  اضافة الكود التالي في حدث عند النقر في زر موافق   VBA   If pas = DLookup("userpass", "tusers", "usernam='" & [usr] & "'") Then DoCmd.OpenForm "Form1" Else MsgBox "يوجد خطأ في اسم المستخدم او كلمة المرور" End If

الشروط في الاستعلامات

الشروط في الاستعلامات يمكن اضافة الشروط في تصميم الاستعلام وعند اضافة الشرط فان الاستعلام سيقوم باظهار السجلات التي ينطبق عليها الشرط فقط، ويجب الانتباه الى انواع الحقول في الجدول قبل و ض ع الشرط لان صيغة الشرط في النص يختلف عنة اذا كنا نتعامل مع ارقام او تاريخ وسنتطرق الى هذة الانواع في هذا الموضوع. الصورة ادناة تخص تصميم الجدول الذي سنتعامل معه حيث يحتوي على اربع حقول من ظمنها اسم الطالب ونوعه نص قصير، وتاريخ الميلاد ونوعه تاريخ ووالنتيجة ونوعه رقم تم انشاء المثال اعلاة وتم تسميه الحقول باللغة العربية لتسهيل فهم الموضوع ، مع التاكيد على استخدام اللغة الانجليزية لكتابة المسميات يمكنك مشاهدة الفيديو للحصول على ايضاحات اكثر او الاستمرار بقراءة الموضوع 1-     الشروط في الحقل الذي يحتوي على نص او ارتباط تشعيبي: حسب الصورة اعلاة  لتصميم الجدول الخاص بنتائج الطلاب نلاحظ ان نوع البيانات في الحقل الثاني (اسم الطالب)    هو نص " Short Text "  وللتعامل مع هذا الحقل في الاستعلامات ،   في تصميم الاستعلام يمكننا ان نظع الشروط وكم...