تحية إجلال لأعضاء المنتدى على المجهود المبذول وأخص بالذكر الفاضلة الأخت زهرة خبيرة الأكسس على ما أبدعت فيه من حساب مدة خدمة الموظف أنا أحد موظفي أحد صناديق التقاعد كما معلوم لديكم بأن الموظف من تاريخ تعييه وهو يساهم بنسبة معينة من راتبه الشهري مقابل إستحقاق مستحقات تقاعدية بعد إحالته للتقاعد وحسباب المستحقات التقاعدية يتطلب حساب مدة الخدمة من تاريخ التعيين وحتى تاريخ الإحالة للتقاعد فملاحظي بالنسبة للبرنامج الذي أبدعت فيه الأخت زهرة يحسب الفرق بين سنة الإحالة وسنة التعيين وهذه المعادلة لا تحسب المدة بالضبط بس الطريقة المتبعة لدينا هي حساب الايام من شهر التعيين ثم نحسب الأشهر من سنة التعيين ثم نحسب الأيام في شهر الإحالة ونحسب الأشهر من سنة الإحالة فهذه المعادلة تطعي مدة الخدمة دقيقة 100%مثال 1 التعيين 5/4/1999 والإحالة 5/5/2001 يحتاج منا نعرف عدد أيام الشهر فشهر يناير ومارس ومايو ويوليو وأغسطس وأكتوبر وديسمبر بها 31 يوم وإبريل ويونيو وسبتمبر ونوفمبر بها 30 يوم وفبراير يعتمد على السنة فإذا قسمنا السنة على 4 وطلعت النتيجة عدد صحيح فشهر فبراير به 29 يوم وإذا قسمنا السنة على 4 وطلعت النتيجة كسر فشهر فبراير به 28 يوم أحتساب المثال الأول : سنة التعيين 30-4=26 12-4=8سنة الإحالة 4 أيام 4أشهر 2001-2000 1 إذن مدة الخدمة 26+4= 30 يوم و8+4=12 شهرإذن مدة الخدمة 2 سنتان كاملةمثال 2 التعيين 5/5/1999 والإحالة 5/5/2001سنة التعيين 31-4= 27يوم و12-5=7أشهرسنة الإحالة 4 أيام و4 أشهر و2001-2000=1مدة الخدمة 27+4=31يوم و7+4=11شهر و2001-2000=1 مدة الخدمة 1يوم 2 سنةمثال 3 التعيين 5/2/1999 والإحالة 5/5/2001سنة التعيين 1999/4=499.750 كسر إذن 28-4=24 و12-2=10سنة الإحالة 4أيام و1شهر و2001-2000=1 مدة الخدمة 24+4=28 و10+1شهر =11 المدة 28يوم و1سنةهل البيانات التالية التي عملتها الأخت زهرة في التعليمات البرمجية يحتاج من أتعلم لغة VISUAL bASICOption Compare DatabaseOption ExplicitPublic Function EndWork(ByVal DateFm As Variant, ByVal DateTo As Variant, DGP As Integer, MGP As Integer, YGP As Integer) Dim ddf As Byte, mmf As Byte, yyf As Integer Dim ddt As Byte, mmt As Byte, yyt As Integer DGP = 0: MGP = 0: YGP = 0 Select Case VarType(DateFm) Case vbDate, vbLong DateFm = DateFm - 1 DateFm = Format(DateFm, "dd/mm/yyyy") DateTo = Format(DateTo, "dd/mm/yyyy") Case vbString If DateFm Like "##[-/]##[-/]####" Then DateFm = Format(Val(Left(DateFm, 2)) - 1, "00") & Mid(DateFm, 3) ElseIf DateFm Like "####[-/]##[-/]##" Then DateFm = Format(Val(Right(DateFm, 2)) - 1, "00") & "/" & _ Mid(DateFm, 6, 2) & "/" & Left(DateFm, 4) DateTo = Right(DateTo, 2) & "/" & Mid(DateTo, 6, 2) & "/" & Left(DateTo, 4) Else Exit Function End If Case Else Exit Function End Select '------------------ ddf = Mid(DateFm, 1, 2) mmf = Mid(DateFm, 4, 2) yyf = Mid(DateFm, 7, 4) ddt = Mid(DateTo, 1, 2) mmt = Mid(DateTo, 4, 2) yyt = Mid(DateTo, 7, 4) If ddt < ddf Then ddt = ddt + 30: mmt = mmt - 1 End If If mmt < mmf Then mmt = mmt + 12: yyt = yyt - 1 End If DGP = ddt - ddf MGP = mmt - mmf YGP = yyt - yyfEnd FunctionPrivate Sub BWorkDate_AfterUpdate()Dim DGP As IntegerDim MGP As IntegerDim YGP As IntegerCall EndWork(Me.BWorkDate, Now(), DGP, MGP, YGP)Me.CWorkDate = YGP & " Óäå " & " æ " & MGP & " ÔåÑ " & " æ " & DGP & " íæã "Me.ZXY = YGPMe.ZXM = MGPMe.ZXD = DGPMe.RefreshEnd SubPrivate Sub REF_Click()DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70End Sub
سنوات الخدمة
معظم دوال التاريخ تأخذ الفرق بين التاريخ الأجد من التاريخ السابق أي بالنسبة للموظف تحسب مدة الخدمة تاريخ التقاعد - تاريخ التعيين لو أخذنا المثال التالي للتوضيحتاريخ التعيين 5/5/1999 وتاريخ التقاعد 5/4/2001دالة التاريخ = 5 4 2001 - 5 5 1999 = 0 11 1مدة الخدمة 1 سنة و11 شهرالمعادلة المتبفة لدينا تاريخ التعيين 5/5/1999 وتاريخ التقاعد 5/4/2001بداية نسحب سنة التعيين بما أن شهر 5 به 31 يوم إذن 31-4=27 وعدد الأشهر من سنة التعيين 12-5=7نحسب سنة التقاعد أشتغل 4 أيام من شهر 4 وأشتغل 4 أشهر من سنة التقاعدنحسب أيام السنتين 27+4=31 نحسب الأشهر 7+4=112001-2000=1إذن مدة الخدمة 1 سنة و11شهر و1يومشفت الفرق بين المعادلتين يوم وحدة فهذه اليوم تأثر على حساب المستحقات التقاعدية اللي أبحث عنه معادلة في الفرق بين تاريخين بحيث يأخذ في الإعتبار أيام سنة التعيين هل 31 يوم أو 30 يوم أو 29 يوم أو 28 يوم ، شهر يناير ومارس ومايو ويوليو وأغسطس وأكتوبر وديسمبر بها 31 يوم وإبريل ويونيو وسبتمبر ونوفمبر بها 30 يوم وفبراير يعتمد على السنة هل كبيسة أو بسيطة إذا قسمنا السنة على 4 وطلع الناتج عدد صحيح فشهر فبراير في هذه السنة به 29 يوم وإذا طلع الناتج كسر فشهر فبراير به 28 يوم في هذه السنة
مرفق ملف الأمثلة للتوضيح
جارى قرائه الموضوع ...

