الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أريد برنامج إجازات

بدأه الغضنفر2 في 18 نوفمبر 2009 · 5 رد · 960 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

إخواني الكرام

السلام عليكــم ورحمـة الله وبركاتــه ،،

أريد عمل برنامج يقوم بحساب الإجازات حيث أعمل في دائرة حكومية

ونظام الإجازات التابع للخدمة المدنية نظامه كما يلي :

من 14/5/1426 للموظف في السنة 30 يوما

ومن 15/6/1426 إلى 14/3/1429 للموظف 35 يوما في السنة

ومن 15/3/1429 إلى نهاية الإجازة المطلوبة له 36 يوما في السنة

فأفيدوني رعاكم الله كيف أعمل برنامج يحسب لي هذه الطريقة ؟؟

المعذرة أخطات في أحد التواريخ ، النظام كما يلي :

من 14/5/1426 وما قبل للموظف في السنة 30 يوما

ومن 15/5/1426 إلى 14/3/1429 للموظف 35 يوما في السنة

ومن 15/3/1429 إلى نهاية الإجازة المطلوبة له 36 يوما في السنة

فأفيدوني حفظكم الله كيف أعمل برنامج يحسب لي هذه الطريقة ؟؟

#2

من 14/5/1426 وما قبل للموظف في السنة 30 يوما

ومن 15/5/1426 إلى 14/3/1429 للموظف 35 يوما في السنة

ومن 15/3/1429 إلى نهاية الإجازة المطلوبة له 36 يوما في السنة

فأفيدوني حفظكم الله كيف أعمل برنامج يحسب لي هذه الطريقة ؟؟

تكفون بسرعة ساعدوني .. لهذي الدرجة طلبي صعب عليكم .. ما أعتقد !

تم تعديل هذه المشاركة بواسطة الغضنفر2 في 20 نوفمبر 2009 في 00:15

#3

لم افهم ماذا تقصد في هذه التواريخ

post-157080-12622582839684.jpg

#4

استفسار :

هل أستطيع أن أضع هذه التواريخ في كود ؟؟

#5

الأخ غضنفر اعمل مربعين نص وضع هذا الكود

If Me![Text0] > 1426 / 5 / 14 Then

Me![Text2] = 30

ElseIf Me![Text0] < 1429 / 3 / 15 Then

Me![Text2] = 36

End If

إذاأدخلت التاريخ في مربع النص الأول اضغط انتر تطلع النتيجة في المربع الثاني

أولا -- لست أرى السعادة جمع مال ** ولكن التقي هو السعيد

ثانيا-- وإن ضاق رزق اليوم فاصبر إلى غد *** عسى نكبات الدهر عنك تزول

ثالثا-- أصون عرضي بمالي لا أدنسه *** لا بارك الله بعد العرض بالمال

وأخيرا -- قال تعالى ( يوم لا ينفع مال ولا بنون إلا من أتى الله بقلب سليم )

#6

بســم الله الـرحمــن الرحيــم

أخي الكريم الأمر سهل

يجب أن تحسب إستحقاق الموظف قبل 15/6/1426 كأنه إنتهى عمله في هذا التاريخ

ومن 15/6/1426 إلى 14/3/1429 يحسب لوحده

وبعد 14/3/1429 إعتبر أن الموظف بدأ عمله بعد هذا التاريخ .

ثم إجمع المدد الثلاثة .

يجب أن تجمع الايام وإذا زادت عن 30 يوم تزود الاشهر شهر وكذلك الاشهر إذا زادت عن 12 شهرا يجب أن تزود السنوات سنة.

جواب مختصر لعله يفيد.

هذا الكود خذ منه ماتحتاجه

Private Function duo() ' حساب مدة الاجاز والخدمة عن

On Error GoTo err_duo

' lendp مدة الإعارة

' last_vac_date تاريخ آخر إجازة

' last_vac_dur مدة آخر إجازة

' durp مدة الاجازات التي تمتع بها الموظف

' durp1 الاجازات في سنة يجب أن لا تزيد عن 90 يوما

' vac_day عدد ايام الاجازات المستحقة عن الاجازات الاستثنائية والاعارة

' vac_dayp عدد ايام الاجازات الاستثنائية والاعارة

' vac عددالايام الاجازان التي تمتع بها

' net_vac صافي الايام المستحقة للاجازات

' yearp سنة نهاية التاريخ

' datec تاريخ نهاية الاجازة

' datep تاريخ نهاية الاجازة ناقص سنة

' daten حقل لحساب نهاية الاجازة

' dates حقل لحساب سنة بداية العمل

' yy1, yy2, yy3 حقل لحساب السنوات

' mm1 ,mm2 ,mm3 حقل لحسلب الاشهر

' dd1 ,dd2 ,dd3 حقل لحساب الايام

' yys حقل لحفظ السنة كنص

' mms حقل لحفظ الشهر كنص

' dds حقل لحفظ اليوم كنص

' empl_no1 = رقم ملف الموظف

' dd بداية التاريخ يوم

' mm بداية التاريخ شهر

' yy بداية التاريخ سنة

' dn نهاية التاريخ يوم

' mn نهاية التاريخ شهر

' yn نهاية التاريخ سنة

' dw المدة الصافية يوم

' mw المدة الصافية شهر

' yw المدة الصافية سنة

' 01 = اجازه عادية والراتب مع العموم

' 02 = اجازه عادية براتب مقدم

' 17 = العاء جازة

' 20 = تعديل إجازة

' 30 = اجازة مرافقة مع العلم أن إجازة

' المرافقة تحسب اذا كان له رصيد ولا تحسب اذا لم يكن له رصيد

' 03 = الاجازة الاستثنائية

' 35 = الاعارة للمؤسسات الخاصة

'********************** start program ***************************

vac_day = 0: vac = 0: mess = " "

If Len(Nz(duration1)) = 0 Then duration1 = 0

Dim rec, hejry, dec, filterdec, des1 As Recordset

Dim dd1, dd2, dd3, mm1, mm2, mm3, yy1, yy2, yy3, vac_dayp, vac_dayp1 As Integer

Dim dd, mm, yy, dn, mn, yn, dw, mw, yw, lendp As Integer

Dim mms, dds, yys, datep, datec, last_vac_date As String

Dim page, COUNT, msgp, x, yearp, bb, net_vac, last_vac_dur As Integer

Dim dates, daten, durp, durp1 As Long

If duration1 = 0 Then 'إذا كانت المدة صفر يجب أن يخرج من البرنامج

msgp = MsgBox("المدة يجب أن لاتقل عن 15 يوماً", 5, "ادارة شئون الموظفين")

Forms![decision vac]![name] = " "

If msgp = 4 Then 'اعادة

Exit Function

Else ' الغاء

SendKeys "{ESC}"

Exit Function

End If

End If

'ملف المعلومات الأساسية للموظفين

Set des1 = db().OpenRecordset("decisions") 'القرارات للبحث عن الاجازات الملغات

Set rec = db().OpenRecordset("SELECT * FROM employee " _

& "WHERE empl_no = '" & empl_no1 & "'and( status < '45' or status > '50');")

' ملف القرارات

Set dec = db().OpenRecordset("SELECT * FROM decisions " _

& "WHERE empl_no = '" & empl_no1 & "' and( ref_code = '01' or" _

& " ref_code = '02' or ref_code = '17' or ref_code = '30' or " _

& " ref_code = '03' or ref_code = '35') ORDER BY ref_date asc;")

Set hejry = db().OpenRecordset("date") 'ملف التاريخ المقارن

hejry.Index = "dateh"

hejry.Seek "=", Format(Right(start_date, 6), "00/00/00")

If hejry.NoMatch Then

MsgBox " التاريخ غير موجود " & Right(start_date, 8), 0, "شئون الموظفين"

Exit Function

End If

x = 1

Do While x < duration And Not hejry.EOF 'حساب نهاية الاجازة

hejry.MoveNext

x = x + 1

Loop

If Not hejry.EOF Then

end_date = "14" + hejry!dateh

End If

lendp = 0

dd3 = 0: mm3 = 0: yy3 = 0 'حساب المدة قبل 1397/9/20 للمستخدمين وهي 15 يوم عن السنة

des1.Index = "ref_no_old"

If rec.NoMatch Then

msgp = MsgBox("هذا الموظف غير موجود", 5, "ادارة شئون الموظفين")

Forms![decision vac]![name] = " "

If msgp = 4 Then 'اعادة

DoCmd.CancelEvent

Else

SendKeys "Event Procedure"

DoCmd.GoToControl "exp1"

Exit Function

End If

Else

If IsNull(rec![work_start]) Then

rec.Edit

rec!work_start = rec!work_start_m

rec.Update

End If

dates = Val(Left(rec![work_start], 4))

If rec!class = "03" Then GoTo exit_duo ' 03 = المتعاقدين

If rec!class = "01" Or rec!class = "04" Or (rec!class = "02" And rec!work_start >= "97/09/20") Then

' الموظفين والعمال

'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

' الموظفين والعمال

'--------------------------------------------------------------

' 3.5 = الحالة الأولى من قبل 15/05/1426

' 2.917 = الحالة الثانية من 15/05/1426 إلى 15/03/1429

' 3 = الحالة الثالثة من 15/03/1429

'-------------------------------------------------

'--------------- الحالة الأولى ---------------

'-------------------------------------------------

If rec!work_start < "14260515" Then

' ------------- الحالة الأولى من الأولى ----------

dn = 15 'Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = 5 ' Val(Mid(start_date, 5, 2))

yn = 1426 ' Val(Left(start_date, 4))

dd = Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = Val(Mid(rec![work_start], 5, 2))

yy = Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = Format(((yw * 12) + mw + (dw / 30)) * 2.5, "0")

' ------------- الحالة الثانية من الأولى ----------

dn = 15 ' Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = 3 ' Val(Mid(start_date, 5, 2))

yn = 1429 ' Val(Left(start_date, 4))

dd = 15 ' Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = 5 ' Val(Mid(rec![work_start], 5, 2))

yy = 1426 ' Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = vac_dayp1 + Format(((yw * 12) + mw + (dw / 30)) * 2.9166666666, "0")

' ------------- الحالة الثالثة من الأولى ----------

dn = Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = Val(Mid(start_date, 5, 2))

yn = Val(Left(start_date, 4))

dd = 15 ' Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = 3 'Val(Mid(rec![work_start], 5, 2))

yy = 1429 'Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = vac_dayp1 + Format(((yw * 12) + mw + (dw / 30)) * 3, "0")

End If

'-------------------------------------------------

'--------------- الحالة الثانية ---------------

'-------------------------------------------------

' ------------- الحالة الأولى من الثانية ----------

If rec!work_start < "14260515" Then

dn = 15 ' Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = 3 ' Val(Mid(start_date, 5, 2))

yn = 1429 ' Val(Left(start_date, 4))

dd = Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = Val(Mid(rec![work_start], 5, 2))

yy = Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = Format(((yw * 12) + mw + (dw / 30)) * 2.9166666666, "0")

' ------------- الحالة الثانية من الثانية ----------

dn = Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = Val(Mid(start_date, 5, 2))

yn = Val(Left(start_date, 4))

dd = 15 ' Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = 3 'Val(Mid(rec![work_start], 5, 2))

yy = 1429 'Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = vac_dayp1 + Format(((yw * 12) + mw + (dw / 30)) * 3, "0")

End If

'-------------------------------------------------

'--------------- الحالة الثالثة ---------------

'-------------------------------------------------

If rec!work_start >= "14290315" Then

dn = Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = Val(Mid(start_date, 5, 2))

yn = Val(Left(start_date, 4))

dd = Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = Val(Mid(rec![work_start], 5, 2))

yy = Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = Format(((yw * 12) + mw + (dw / 30)) * 3, "0")

End If

vac_day = vac_dayp1

Else ' العمال

'-------------- المستخدمين المعينين قبل 1397/9/20 يحسب لهم 15 يوماً اجازة عن السنة

'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

' الموظفين والعمال

'--------------------------------------------------------------

' 1.25 = الحالة الأولى من قبل 1397/9/20

' 3.5 = الحالة الثانية من 1397/9/20 إلى 1426/05/15

' 2.917 = الحالة الثالثة من 1426/05/15 إلى 1429/03/15

' 3 = الحالة الرابعة من 1429/03/15

'-------------------------------------------------

'--------------- الحالة الأولى ---------------

'-------------------------------------------------

If rec!work_start <= "13970920" Then

' ------------- الحالة الأولى من الأولى ----------

dn = 20 'Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = 9 ' Val(Mid(start_date, 5, 2))

yn = 1397 ' Val(Left(start_date, 4))

dd = Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = Val(Mid(rec![work_start], 5, 2))

yy = Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = Format(((yw * 12) + mw + (dw / 30)) * 1.25, "0")

' ------------- الحالة الثانية من الأولى ----------

dn = 15 ' Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = 5 ' Val(Mid(start_date, 5, 2))

yn = 1426 ' Val(Left(start_date, 4))

dd = 20 ' Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = 9 ' Val(Mid(rec![work_start], 5, 2))

yy = 1397 ' Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = Format(((yw * 12) + mw + (dw / 30)) * 2.5, "0")

' ------------- الحالة الثالثة من الأولى ----------

dn = 15 ' Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = 5 ' Val(Mid(start_date, 5, 2))

yn = 1426 ' Val(Left(start_date, 4))

dd = 15 ' Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = 5 ' Val(Mid(rec![work_start], 5, 2))

yy = 1426 ' Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = vac_dayp1 + Format(((yw * 12) + mw + (dw / 30)) * 2.9166666666, "0")

' ------------- الحالة الرابعة من الأولى ----------

dn = Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = Val(Mid(start_date, 5, 2))

yn = Val(Left(start_date, 4))

dd = 15 ' Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = 3 'Val(Mid(rec![work_start], 5, 2))

yy = 1429 'Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = vac_dayp1 + Format(((yw * 12) + mw + (dw / 30)) * 3, "0")

End If

'-------------------------------------------------

'--------------- الحالة الثانية ---------------

'-------------------------------------------------

If rec!work_start < "14260515" And rec!work_start < "13970920" Then

' ------------- الحالة الأولى من الثانية ----------

dn = 15 ' Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = 5 ' Val(Mid(start_date, 5, 2))

yn = 1426 ' Val(Left(start_date, 4))

dd = Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = Val(Mid(rec![work_start], 5, 2))

yy = Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = Format(((yw * 12) + mw + (dw / 30)) * 2.5, "0")

' ------------- الحالة الثانية من الثانية ----------

dn = 15 ' Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = 5 ' Val(Mid(start_date, 5, 2))

yn = 1426 ' Val(Left(start_date, 4))

dd = 15 'Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = 3 'Val(Mid(rec![work_start], 5, 2))

yy = 1429 'Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = Format(((yw * 12) + mw + (dw / 30)) * 2.9166666666, "0")

' ------------- الحالة الثالثة من الثانية ----------

dn = Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = Val(Mid(start_date, 5, 2))

yn = Val(Left(start_date, 4))

dd = 15 ' Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = 3 'Val(Mid(rec![work_start], 5, 2))

yy = 1429 'Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = vac_dayp1 + Format(((yw * 12) + mw + (dw / 30)) * 3, "0")

End If

'-------------------------------------------------

'--------------- الحالة الثاثة ---------------

'-------------------------------------------------

If rec!work_start < "14290315" And rec!work_start < "14260515" Then

' ------------- الحالة الأولى من الثانية ----------

dn = 15 ' Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = 5 ' Val(Mid(start_date, 5, 2))

yn = 1426 ' Val(Left(start_date, 4))

dd = Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = Val(Mid(rec![work_start], 5, 2))

yy = Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = Format(((yw * 12) + mw + (dw / 30)) * 2.9166666666, "0")

' ------------- الحالة الثانية من الثالثة ----------

dn = Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = Val(Mid(start_date, 5, 2))

yn = Val(Left(start_date, 4))

dd = 15 ' Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = 3 'Val(Mid(rec![work_start], 5, 2))

yy = 1429 'Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = vac_dayp1 + Format(((yw * 12) + mw + (dw / 30)) * 3, "0")

End If

'-------------------------------------------------

'--------------- الحالة الرابعة ---------------

'-------------------------------------------------

If rec!work_start >= "14290315" Then

dn = Val(Right(start_date, 2)) 'تاريخ بداية الاجازة

mn = Val(Mid(start_date, 5, 2))

yn = Val(Left(start_date, 4))

dd = Val(Right(rec![work_start], 2)) 'تاريخ بداية العمل

mm = Val(Mid(rec![work_start], 5, 2))

yy = Val(Left(rec![work_start], 4))

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd)

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm)

yw = yn - Val(yy)

vac_dayp1 = Format(((yw * 12) + mw + (dw / 30)) * 3, "0")

End If

vac_day = vac_dayp1

'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

End If

durp = 0

yearp = Val(Left(start_date, 4))

yearp = yearp - 1

datep = Format(Trim(Str(yearp) & Right(start_date, 4)), "0000/00/00")

If Not dec.NoMatch Then

Do While Not dec.EOF 'حساب مدة الاجازات والإعارات

datec = Format(dec!date_start, "0000/00/00")

If dec!ref_code = "01" Or dec!ref_code = "02" _

Or dec!ref_code = "17" Or dec!ref_code = "30" Then

'حساب مدة الاجازة في سنة مع العلم أنه لايجوز للموظف أن يتمتع في أكثر من تسعين يوماً في السنة

If datep < datec Then

If dec!ref_code = "17" Then

durp1 = durp1 - dec!duration

Else

durp1 = durp1 + dec!duration

End If

End If

If dec!ref_code = "17" Then

durp = durp - dec!duration

Else

durp = durp + dec!duration

End If

End If

If dec!ref_code = "03" Or dec!ref_code = "35" Then

'اعارة للمؤسسات الخاصة و الاجازات الإستثنائية

dd = Val(Right(dec!date_start, 2))

mm = Val(Mid(dec!date_start, 5, 2))

yy = Val(Left(dec!date_start, 4))

dn = Val(Right(dec!date_end, 2))

mn = Val(Mid(dec!date_end, 5, 2))

If dec!ref_code = "35" Or dec!ref_code = "03" Then

yn = Val(Left(dec!date_end, 4))

Else

yn = Val(Left("14" & dec!date_end, 4))

End If

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd) ' المدة باليوم

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm) 'المدة بالشهر

yw = yn - Val(yy) 'المدة بالسنة

'******************************************

vac_day = vac_day - Format(((yw * 12) + mw + (dw / 30)) * 2.5, "0")

lendp = lendp + ((yw * 12) + mw) * 30 + dw

mess = " يوجد له إعارة أو استثنائية مدتها " & lendp & " يوماً"

End If

If dec!ref_code = "01" Or dec!ref_code = "02" Or _

dec!ref_code = "30" Then 'Or dec!ref_code = "17" Then

'آخر اجازة تمتع بها

des1.Seek "=", dec!ref_no, dec!ref_date

If des1.NoMatch Then

last_vac_date = dec!date_start

last_vac_dur = dec!duration

End If

End If

dec.MoveNext

Loop

If durp1 + duration > 90 And ref_code <> "17" Then

MsgBox ("لايحق للموظف أن يتمتع بإجازة أكثر من 90 يوماً في السنة الإجازات السابقة خلال هذه السنة لهذا الموظف " & durp1 & " يوماً والإجازة المطلوبة الان " & duration & " يوماً المجموع " & durp1 + duration & " يوماً")

SendKeys "{Esc}", True

SendKeys "+{tab}"

Exit Function

End If

year_net = 90 - durp1

v_date_old = last_vac_date 'بداية آخر اجازة تمتع بها

v_duration_o = last_vac_dur 'مدة آخر اجازة تمتع بها

' تعديل الاجازة لاتحسب مدة الخدمة

If [ref_code] = 20 Then durp = durp - duration1

End If

vac = durp

If vac_day < duration1 Then

bb = MsgBox("هذا الموظف لايستحق إجازة ورصيده = " & Format(net_vac, "0.00") & " يوماً", 5, "شــئون الموظفين")

If bb = 4 Then

SendKeys "{esc}"

SendKeys "+{tab}"

Exit Function

Else

SendKeys "{esc}"

DoCmd.CancelEvent

Exit Function

End If

Else 'حساب مدة الخدمة عن الاجازات

dd1 = Val(Right(rec!work_start, 2))

mm1 = Val(Mid(rec!work_start, 5, 2))

yy1 = Val(Left(rec!work_start, 4))

End If

'المستخدمين المعينين قبل 1397/9/20

If rec!class = "02" And rec!work_start < "1397/09/20" Then

yy3 = 1397

mm3 = 9

dd3 = 20

dd3 = dd3 - dd1

mm3 = mm3 - mm1

yy3 = yy3 - yy1

If dd3 < 1 Then

dd3 = dd3 + 30

mm3 = mm3 - 1

End If

If mm3 < 1 Then

mm3 = mm3 + 12

yy3 = yy3 - 1

End If

mm3 = mm3 + ((yy3 Mod 2) * 12)

yy3 = Int(yy3 / 2)

dd3 = Int((dd3 + ((mm3 Mod 2) * 30)) / 2)

mm3 = Int(mm3 / 2)

If dd3 < 1 Then

dd3 = dd3 + 30

mm3 = mm3 - 1

End If

If mm3 < 1 Then

mm3 = mm3 + 12

yy3 = yy3 - 1

End If

'MsgBox ("start = " & rec!work_start & " dd3 = " & dd3 & " mm3 = " & mm3 & " yy3 = " & yy3)

End If 'نهاية المستخدمين المعينين قبل 1397/9/20

yy2 = Int(durp / 30)

mm2 = Int((durp Mod 30) / 2.5)

dd2 = ((durp Mod 30) Mod 2.5) * 12

yy1 = yy1 + yy2 + yy3

mm1 = mm1 + mm2 + mm3

dd1 = dd1 + dd2 + dd3

If dd1 > 30 Then

dd1 = dd1 - 30

mm1 = mm1 + 1

End If

If mm1 > 12 Then

mm1 = mm1 - 12

yy1 = yy1 + 1

End If

start = rec!work_start

lastp = Trim(Str$(yy1)) & "/" & Left("0" & Trim(Str(mm1)), 2) & "/" & Left("0" & Trim(Str(dd1)), 2)

dd1 = dd1 + 1

If dd1 > 30 Then

dd1 = dd1 - 30

mm1 = mm1 + 1

End If

If mm1 > 12 Then

mm1 = mm1 - 12

yy1 = yy1 + 1

End If

dds = "0" & Trim(Str$(dd1))

dds = Right(dds, 2)

mms = "0" & Trim(Str$(mm1))

mms = Right(mms, 2)

yys = Trim(Str$(yy1))

'---- تحويل الايام الى سنوات وأشهر وأيام ثم حساب الخدمة الى

yy2 = Int(duration1 / 30)

mm2 = Int((duration1 Mod 30) / 2.5)

dd2 = (((duration1 Mod 30) * 2) Mod 5) * 6 - 1

yy1 = yy1 + yy2

mm1 = mm1 + mm2

dd1 = dd1 + dd2

If dd1 > 30 Then

dd1 = dd1 - 30

mm1 = mm1 + 1

End If

If mm1 > 12 Then

mm1 = mm1 - 12

yy1 = yy1 + 1

End If

dds = Right("0" & Trim(Str$(dd1)), 2)

If dds = "00" Then

dds = "30"

mm1 = mm1 - 1

End If

mms = Right("0" & Trim(Str$(mm1)), 2)

yys = Trim(Str$(yy1))

End If

'----------- حسم الاجازة الاستثنائية ولاعارة من الخدمة -----------

If Not dec.EOF Then

If Not dec.NoMatch Then

dec.MoveFirst

vac_dayp = 0

Do While Not dec.EOF

If dec!ref_code = "03" Or dec!ref_code = "35" Then

' حساب نهاية مدة الاجازة الاستثنائية أو الإعارة للمؤسسات الخاصة

dd = Val(Right(dec!date_start, 2))

mm = Val(Mid(dec!date_start, 5, 2))

yy = Val(Left(dec!date_start, 4))

dn = Val(Right(dec!date_end, 2))

mn = Val(Mid(dec!date_end, 5, 2))

'yn = Val(Left("14" & dec!date_end, 4))

'qqqqqqqqqqqqq

If dec!ref_code = "35" Then

yn = Val(Left(dec!date_end, 4))

Else

yn = Val(Left("14" & dec!date_end, 4))

End If

If dn < Val(dd) Then

mn = mn - 1

dn = dn + 30

End If

dw = dn - Val(dd) ' المدة باليوم

If mn < Val(mm) Then

yn = yn - 1

mn = mn + 12

End If

mw = mn - Val(mm) 'المدة بالشهر

yw = yn - Val(yy) 'المدة بالسنة

yy1 = yw: mm1 = mw: dd1 = dw

vac_dayp = vac_dayp + (yw * 12) + mw + Int(dw / 29)

End If

dec.MoveNext

Loop

End If

End If

'-------------------------------

If ref_code <> "17" And duration1 > [vac_day] - [vac] Then

MsgBox "لايستحق اجازة وصافي استحقاقه = " & [vac_day] - [vac] & " يوماً"

mess = "لايستحق اجازة وصافي استحقاقه = " & [vac_day] - [vac] & " يوماً"

SendKeys "{ESC}", True

End If

exit_duo:

On Error Resume Next

rec.Close ' Close employee table.

dec.Close ' Close decisions table.

hejry.Close ' Close date table.

Exit Function

err_duo:

MsgBox Err.Description, 0, "شـئون الموظفين"

Resume exit_duo

End Functionجمع الأشهر الهجرية متعب

تم تعديل هذه المشاركة بواسطة مفرج في 21 نوفمبر 2009 في 22:04

من سار على الدرب وصل

مواضيع مشابهة