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

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

احتساب ايام العمل الفعلية بين تاريخين
لاحتساب ايام العمل الفعلية بين تاريخين يجب الانتباه الى صيغة التاريخ المستخدمة في جهاز الكمبيوتر واذا كان البرنام الذي يتم العمل علية سيستخدم في اكثر من جهاز فانه يجب الانتباه الى اعدادات الاجهزة والسبب هو ان برنامج الاكسس سيتعامل مع التاريخ بصيغة التاريخ المستخدم في امريكا (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

Combo Box & List Box القائمة المنسدلة / مربع التحرير والسرد / مربع قائمة في اكسس خطوة بخطوة

 القائمة المنسدلة /  مربع التحرير والسرد / مربع القائمة   في مايكروسوفت اكسس  Combo Box & List Box ملاحضة : ما ينطبق على القائمة المنسدلة (Combo Box) ينطبق على مربع القائمة (List Box) في هذا الموضوع القائمة المنسدلة اومربع التحرير والسرد هي احدى الكائنات التي تستخدم في نماذج الاكسس وتظهر فيها مجموعة من القيم يحددها المبرمج للتسهيل على المستخدم في عملية الاختيار او لاجبارة على مجموعة من الخيارات فقط توجد اكثر من طريقة لاضافة قائمة منسدلة الى النماذج ومنها: الطريقة الاولى: - من خلال خصائص الحقل في الجدول، فاذا تم تغيير نوع الحلقل الى Combo Box في الجدول فانه عند اضافة هذا الحقل الى النماذج  سيقوم الاكسس باضافة قائمة منسدلة الى النموذج وبشكل تلقائي ولها نفس الخصائص الموجودة في الجدول.   الطريقة الثانية :- من خلال اضافة قائمة منسدلة من خلال تصميم النموذج ،ويتم ذلك من خلال اضافة القائمة المنسدلة من القائمة Design  ومن ثم ادراج القائمة في النموذج  1- بعد ادراج القائمة المنسدلة سيفتح المعالج وذلك للتحكم بخصائص...