اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

حساب اقدمية من تاريخ بالسنة والشهر واليوم


كريمو2

الردود الموصى بها

السلام عليكم اساتذة

المطلوب المساعدة بخصوص حساب اقدمية من تاريخ التوظيف بالسنة والشهر واليوم

علما ان حساب اقدمية الجنوب تحسب كل اربعة اشهر في السنة بشهر واحد فقط

واذا كان تاريخ التوظيف ليس في اول الشهر تدخل فيها التكملة بحساب الأيام

ملاحظة : أقدمية الجنوب في حدود 06 سنوات اي الموظف يلزمه 18 سنة عمل لكي يتحصل على 06 سنوات كاملة

*- اما الخدمة الفعلية تحسب تلقائيا منذ تاريخ التوظيف والمرفق يوضح المطلوب

اتمنى مد يد المساعدة

وشكرا

حساب اقدمية.rar

رابط هذا التعليق
شارك

سلام عليكم    وجدت هدا الاستلام   ربما يساعدك

DatePart ("yyyy", #15/10/1998#)
Result: 1998   حساب السنوات   من بداية  الخدمة

DatePart ("m", #15/10/2003#)
Result: 10

DatePart ("d", #15/10/2003#)
Result: 15


PartDate("t", [DateVente]) = 1
  
   لكل  ثلاثي أول  مهما تكن السنة  خاص   بالتسجيلات
DatePart ("yyyy", #15/10/1998#)
Result: 1998   حساب السنوات   من بداية  الخدمة

DatePart ("m", #15/10/2003#)
Result: 10

DatePart ("d", #15/10/2003#)
Result: 15


PartDate("t", [DateVente]) = 1
  
   لكل  ثلاثي أول  مهما تكن السنة  خاص   بالتسجيلات


DatePart ("yyyy", #15/10/1998#)
Result: 1998   حساب السنوات   من بداية  الخدمة

DatePart ("m", #15/10/2003#)
Result: 10

DatePart ("d", #15/10/2003#)
Result: 15


PartDate("t", [DateVente]) = 1
  
   لكل  ثلاثي أول  مهما تكن السنة  خاص   بالتسجيلات

 DiffDate("aaaa";[date_n];Maintenant())   حساب عدد السنوات الى يومنا هذا
DiffDate("m";[date_n];Maintenant()) الشهور

 

تم تعديل بواسطه kamel2711
رابط هذا التعليق
شارك

السلام عليكم أخي كريمو :rol:

 

في الواقع انا انزلت مرفقك قبل يومين ، ولكن للأسف لم يكن فيه بيانات كافية اجرب عليها ، والاهم انه لم اجد المثال المتكامل الذي يجب ان احتذي به :blink:

رجاء تعمل مثال تكون فيه النتائج الصحيحة ، وتشرح لماذا النتائج صحيحة ، وعليه نحاول ان نلوي يد البرنامج ونجعله يعطينا نفس النتائج ان شاء الله :wink2:

 

 

جعفر

رابط هذا التعليق
شارك

25 دقائق مضت, jjafferr said:

السلام عليكم أخي كريمو :rol:

في الواقع انا انزلت مرفقك قبل يومين ، ولكن للأسف لم يكن فيه بيانات كافية اجرب عليها ، والاهم انه لم اجد المثال المتكامل الذي يجب ان احتذي به :blink:

رجاء تعمل مثال تكون فيه النتائج الصحيحة ، وتشرح لماذا النتائج صحيحة ، وعليه نحاول ان نلوي يد البرنامج ونجعله يعطينا نفس النتائج ان شاء الله :wink2:

جعفر

وعليكم السلام استاذي العزيز جعفر

الصحيح :
تحسب من 2013/5/1 الى غاية 2015/12/31 ..... 02 سنة , 08 أشهر , 00 يوم هذه تسمى الخدمة الفعلية للموظف
تحسب من 2013/5/1 الى غاية 2015/12/31 ..... 00 سنة , 10 أشهر , 20 يوم هذه تسمى أقدمية الجنوب للموظف حسب .....01
المجموع : 03 سنة , 06 أشهر , 20 يوم
كيفية استنتاج هذه
الحل :
خلال سنة 2013 له 08 اشهر
        سنة 2014 له 12 شهر وهو 01 سنة
        سنة 2015 له 12 شهر وهو 01 سنة
القاعدة تقول :
كل 01 سنة تحسب فيها 04 اشهر
كل 06 اشهر تحسب فيها 02 اشهر
كل شهر تحسب فيها 10 ايام
كل 10 ايام تحسب فيها 03 ايام

145301817028581.png
آمل اني قد وضحت ماهو كان غامضا

رابط هذا التعليق
شارك

اعجزتم ايها الاساتذة الكرام عن حل ماهو المطلوب

حساب أقدمية الجنوب

القاعدة تقول :
كل 01 سنة تحسب فيها 04 اشهر
كل 06 اشهر تحسب فيها 02 اشهر
كل شهر تحسب فيها 10 ايام
كل 10 ايام تحسب فيها 03 ايام

رابط هذا التعليق
شارك

السلام عليكم أخي كريمو :rol:

 

الموضوع بالنسبة لي كان أصعب مما تصورت :blink:

 

على العموم ، هذا الكود يقوم بالعمل ، وهو حدث على الحالي ، وحدث بعد تحديث التاريخ ،

وبما انه لا يوجد تاريخ "الى" في النموذج ، لذلك فانا وضعته في الكود باسم D2 :rol:

 

حاولت ان اترك ملاحظات على الكود قدر الامكان:


Public Sub Calculate_Diff()

'1
'الخدمة الفعلية
    
    'D1 ealier, D2 later
    
    Dim D1, D2 As Date
    
    D1 = Me.date_recrut
    D2 = #12/31/2015#
    
    'leave if No date entered
    If Len(D1 & "") = 0 Then Exit Sub
    
    'don't check get values unless D2 is populated
    If Len(D2 & "") = 0 Then Exit Sub
    
        Call YMDDif3(D1, D2, Y, M, D)
        
        Me.Année2 = Y
        Me.Mois2 = M
        Me.Jours2 = D
        
    

'2
'أقدمية الجنوب
    
  'Convert Years, Months, Days to southern
    'Convert Years to sMonth
    sM = Y * 4
    
    'Convert every 6 months to sMonths
    sM2 = Int(M / 6) * 2
    'Convert Remaining months to sDays
    sD = (M - Int(M / 6) * 6) * 10
    
    'Convert Days to sDays
    sD2 = Int(D / 10) * 3
 
    
  'Add the sM, sD
    'add the sMonths
    sM = sM + sM2
    
    'add the sDays
    sD = sD + sD2
    
    
  'Finalizing
    'Convert sD more than 30days to sM
    sM3 = Int(sD / 30)
    '# Final sD
    sD3 = sD - Int(sD / 30) * 30
    'add the extra months from sD to sM
    sM3 = sM + sM3
    '# Final sY
    sY3 = Int(sM3 / 12)
    '# Final sM
    sM3 = sM3 - Int(sM3 / 12) * 12

    
        Me.Année1 = sY3
        Me.Mois1 = sM3
        Me.Jours1 = sD3
        
        
'3
'المجموع
    'add the Years, Months, Days
    sY4 = sY3 + Y
    sM4 = sM3 + M
    sD4 = sD3 + D
    
    'Convert more than 30days to Months
    sM5 = Int(sD4 / 30)
    '# Final Days
    sD5 = sD4 - Int(sD4 / 30) * 30
    'add the extra months from the Days
    sM5 = sM4 + sM5
    '# Final Years
    sY5 = Int(sM5 / 12) + sY4
    '# Final Months
    sM5 = sM5 - Int(sM5 / 12) * 12
    
        Me.Année4 = sY5
        Me.Mois4 = sM5
        Me.Jours4 = sD5
    
End Sub

Private Sub date_recrut_AfterUpdate()

    Call Calculate_Diff
End Sub

Private Sub Form_Current()

    Call Calculate_Diff
End Sub

 

 

هذه الوحدة النمطية تقوم بحساب السنة ، الشهر ، اليوم ، بين تاريخين:

Option Compare Database

Public Sub YMDDif(sDate1, sDate2, Y, M, D)

    'sdate1 earliest date sdate2 later

    Dim iYear As Integer
    Dim iMonth As Integer
    Dim iDay As Integer
    Dim dInterim1 As Date

    iMonth = DateDiff("m", sDate1, sDate2)
    If Day(sDate1) > Day(sDate2) Then
        iMonth = iMonth - 1
    End If
    dInterim1 = DateAdd("m", iMonth, sDate1)
    iDay = DateDiff("d", dInterim1, sDate2)
    
    D = iDay
    M = iMonth Mod 12
    Y = iMonth \ 12

End Sub

Public Function YMDDif2(sDate1, sDate2)
On Error GoTo err_YMDDif2

    'sDate1 earliest date
    'sDate2 later date

    
    Dim dInterim1 As Date
    
    
    iMonth = DateDiff("m", sDate1, sDate2)
        
    If Day(sDate1) > Day(sDate2) Then
        iMonth = iMonth - 1
    End If
    
    dInterim1 = DateAdd("m", iMonth, sDate1)
    iDay = DateDiff("d", dInterim1, sDate2)
    
    D = iDay
    M = iMonth Mod 12
    Y = iMonth \ 12
    'YMDDif2 = CStr(Y) & " Years " & CStr(M) & " months " & CStr(D) & " days"
    'YMDDif2 = CStr(Y) & " س /" & CStr(M) & " ش /" & CStr(D) & " ي"
    YMDDif2 = CStr(Y) & " س/" & CStr(M) & " ش/" & CStr(D) & " ي"

Exit Function
err_YMDDif2:

    If Err.Number = 94 Then
        'ignor, null
        Resume Next
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
    
End Function


'Public Sub YMDDif3(sDate1, sDate2, ByRef y As Integer, ByRef M As Integer, ByRef D As Integer)
Public Sub YMDDif3(sDate1, sDate2, Y, M, D)

    'sdate1 earliest date sdate2 later

    Dim iYear As Integer
    Dim iMonth As Integer
    Dim iDay As Integer
    Dim dInterim1 As Date

    iMonth = DateDiff("m", sDate1, sDate2)
    If Day(sDate1) > Day(sDate2) Then
        iMonth = iMonth - 1
    End If
    dInterim1 = DateAdd("m", iMonth, sDate1)
    iDay = DateDiff("d", dInterim1, sDate2)
    
    D = iDay
    M = iMonth Mod 12
    Y = iMonth \ 12

End Sub

 

وصدقني اني صار لي يومين احاول الوصول للنتيجة ، وعملت اكثر من برمجة ولم تفلح ، وقد عبّأت ورقتين مِلئُها ارقام :blink:

فلهذا السبب ، رجاء بسرعة اذا عندك اي استفسار ،فانا محتاج الى هذه الاوراق ان تكون امامي ، وقبل ان اتخلص منها :rol:

 

 

جعفر

237.حساب اقدمية.accdb.zip

237.حساب اقدمية.pdf.zip

رابط هذا التعليق
شارك

4 ساعات مضت, jjafferr said:

السلام عليكم أخي كريمو :rol:

الموضوع بالنسبة لي كان أصعب مما تصورت :blink:

على العموم ، هذا الكود يقوم بالعمل ، وهو حدث على الحالي ، وحدث بعد تحديث التاريخ ،

وبما انه لا يوجد تاريخ "الى" في النموذج ، لذلك فانا وضعته في الكود باسم D2 :rol:

وصدقني اني صار لي يومين احاول الوصول للنتيجة ، وعملت اكثر من برمجة ولم تفلح ، وقد عبّأت ورقتين مِلئُها ارقام :blink:

فلهذا السبب ، رجاء بسرعة اذا عندك اي استفسار ،فانا محتاج الى هذه الاوراق ان تكون امامي ، وقبل ان اتخلص منها :rol:

جعفر

 

وعليكم السلام أخي حعفر

شكرا لك اخي على المجهودات المبذولة من اجل مساعدة جميع الإخوة

ربي يجعلها في ميزان حسانتك ان شاء الله

فيه بعض الملاحظات واتمنى ان تصحيحها يكون بسيط

دائما في اقدمية الجنوب

*- إذا افترضنا ان تاريخ التعيين 2014/01/01 وان D2 هو 2015/12/31 فأقدمية الجنوب تكون 08 أشهر وليس 07 أشهر و 29 يوم حسب التعديل

بالنسبة للأيام في الأقدمية اذا كانت تساوي 30 فتلقائيا تجمع مع مربع نص الأشهر وتصبح زيادة بشهر ولا تكتب 30 يوم

ملاحظة1 : بالنسبة للباقي في الأيام في الأقدمية : من وجهة نظري ارى انها صعبة الحساب وخاصة لما يكون يوم بداية التعيين لا يبدأ بـ 01/YY/MM او 10/YY/MM او 20/YY/MM

ملاحظة 2 : أقدمية الجنوب في حدود 06 سنوات فقط اي لا تفوق هذا العدد ابدا وبعد هذا العدد تظهر في مربع نصها ولا تحسب في الزيادة مع الخدمة الفعلية اي المجموع

 

 

 

 

 

تم تعديل بواسطه كريمو2
رابط هذا التعليق
شارك

وعليكم السلام

 

جرب هذا التغيير لوسمحت:


Public Sub Calculate_Diff()

'1
'الخدمة الفعلية
    
    'D1 ealier, D2 later
    
    Dim D1, D2 As Date
    
    D1 = Me.date_recrut
    D2 = #12/31/2015#
    
    'leave if No date entered
    If Len(D1 & "") = 0 Then Exit Sub
    
    'don't check get values unless D2 is populated
    If Len(D2 & "") = 0 Then Exit Sub
    
        Call YMDDif3(D1, D2, Y, M, D)
        
    '**change 1
    'if D >= 30, then make it 1 month
    If D >= 30 Then
        D = D - 30
        M = M + 1
    End If
    '**1
    
        Me.Année2 = Y
        Me.Mois2 = M
        Me.Jours2 = D
        
    

'2
'أقدمية الجنوب
    
  'Convert Years, Months, Days to southern
    'Convert Years to sMonth
    sM = Y * 4
    
    'Convert every 6 months to sMonths
    sM2 = Int(M / 6) * 2
    'Convert Remaining months to sDays
    sD = (M - Int(M / 6) * 6) * 10
    
    'Convert Days to sDays
    sD2 = Int(D / 10) * 3
 
    
  'Add the sM, sD
    'add the sMonths
    sM = sM + sM2
    
    'add the sDays
    sD = sD + sD2

    
  'Finalizing
    'Convert sD more than 30days to sM
    sM3 = Int(sD / 30)
    '# Final sD
    sD3 = sD - Int(sD / 30) * 30
    'add the extra months from sD to sM
    sM3 = sM + sM3
    '# Final sY
    sY3 = Int(sM3 / 12)
    '# Final sM
    sM3 = sM3 - Int(sM3 / 12) * 12

    
        Me.Année1 = sY3
        Me.Mois1 = sM3
        Me.Jours1 = sD3
        
        
'3
'المجموع
    'add the Years, Months, Days
    sY4 = sY3 + Y
    sM4 = sM3 + M
    sD4 = sD3 + D
    
    'Convert more than 30days to Months
    sM5 = Int(sD4 / 30)
    '# Final Days
    sD5 = sD4 - Int(sD4 / 30) * 30
    'add the extra months from the Days
    sM5 = sM4 + sM5
    '# Final Years
    sY5 = Int(sM5 / 12) + sY4
    '# Final Months
    sM5 = sM5 - Int(sM5 / 12) * 12
    
    '**change 2
    'No more than 6 years
    If sY5 >= 6 Then
        Me.Année4 = 6
        Me.Mois4 = 0
        Me.Jours4 = 0
    Else
        Me.Année4 = sY5
        Me.Mois4 = sM5
        Me.Jours4 = sD5
    End If
    '**2
    
End Sub

 

جعفر

رابط هذا التعليق
شارك

شكرا استاذي الكريم

الان بقيت الخدمة الفعلية ايضا تحسب 12 شهر اليست تساوي 01 سنة

استاذي العزيز جعفر

06 سنوات تقف في اقدمية الجنوب وليست في المجموع الذي يجمع اقدمية الجنوب مع الخدمة الفعلية

حسب التعديل تقف في المجموع

رابط هذا التعليق
شارك

تفضل:


Public Sub Calculate_Diff()

'1
'الخدمة الفعلية
    
    'D1 ealier, D2 later
    
    Dim D1, D2 As Date
    
    D1 = Me.date_recrut
    D2 = #12/31/2015#
    
    'leave if No date entered
    If Len(D1 & "") = 0 Then Exit Sub
    
    'don't check get values unless D2 is populated
    If Len(D2 & "") = 0 Then Exit Sub
    
        Call YMDDif3(D1, D2, Y, M, D)
        
    '**change 1
    'if D >= 30, then make it 1 month
    If D >= 30 Then
        D = D - 30
        M = M + 1
    End If
    If M >= 12 Then
        M = M - 12
        Y = Y + 1
    End If
    '**1
    
        Me.Année2 = Y
        Me.Mois2 = M
        Me.Jours2 = D
        
    

'2
'أقدمية الجنوب
    
  'Convert Years, Months, Days to southern
    'Convert Years to sMonth
    sM = Y * 4
    
    'Convert every 6 months to sMonths
    sM2 = Int(M / 6) * 2
    'Convert Remaining months to sDays
    sD = (M - Int(M / 6) * 6) * 10
    
    'Convert Days to sDays
    sD2 = Int(D / 10) * 3
 
    
  'Add the sM, sD
    'add the sMonths
    sM = sM + sM2
    
    'add the sDays
    sD = sD + sD2

    
  'Finalizing
    'Convert sD more than 30days to sM
    sM3 = Int(sD / 30)
    '# Final sD
    sD3 = sD - Int(sD / 30) * 30
    'add the extra months from sD to sM
    sM3 = sM + sM3
    '# Final sY
    sY3 = Int(sM3 / 12)
    '# Final sM
    sM3 = sM3 - Int(sM3 / 12) * 12

    
        Me.Année1 = sY3
        Me.Mois1 = sM3
        Me.Jours1 = sD3
        
        
'3
'المجموع
    'add the Years, Months, Days
    sY4 = sY3 + Y
    sM4 = sM3 + M
    sD4 = sD3 + D
    
    'Convert more than 30days to Months
    sM5 = Int(sD4 / 30)
    '# Final Days
    sD5 = sD4 - Int(sD4 / 30) * 30
    'add the extra months from the Days
    sM5 = sM4 + sM5
    '# Final Years
    sY5 = Int(sM5 / 12) + sY4
    '# Final Months
    sM5 = sM5 - Int(sM5 / 12) * 12
    
    '**change 2
    'No more than 6 years
    If sY5 >= 6 Then
        Me.Année4 = 6
        Me.Mois4 = 0
        Me.Jours4 = 0
    Else
        Me.Année4 = sY5
        Me.Mois4 = sM5
        Me.Jours4 = sD5
    End If
    '**2
    
End Sub

 

جعفر

رابط هذا التعليق
شارك

تفضل


Public Sub Calculate_Diff()

'1
'الخدمة الفعلية
    
    'D1 ealier, D2 later
    
    Dim D1, D2 As Date
    
    D1 = Me.date_recrut
    D2 = #12/31/2015#
    
    'leave if No date entered
    If Len(D1 & "") = 0 Then Exit Sub
    
    'don't check get values unless D2 is populated
    If Len(D2 & "") = 0 Then Exit Sub
    
        Call YMDDif3(D1, D2, Y, M, D)
        
    '**change 1
    'if D >= 30, then make it 1 month
    If D >= 30 Then
        D = D - 30
        M = M + 1
    End If
    If M >= 12 Then
        M = M - 12
        Y = Y + 1
    End If
    '**1
    
        Me.Année2 = Y
        Me.Mois2 = M
        Me.Jours2 = D
        
    

'2
'أقدمية الجنوب
    
  'Convert Years, Months, Days to southern
    'Convert Years to sMonth
    sM = Y * 4
    
    'Convert every 6 months to sMonths
    sM2 = Int(M / 6) * 2
    'Convert Remaining months to sDays
    sD = (M - Int(M / 6) * 6) * 10
    
    'Convert Days to sDays
    sD2 = Int(D / 10) * 3
 
    
  'Add the sM, sD
    'add the sMonths
    sM = sM + sM2
    
    'add the sDays
    sD = sD + sD2

    
  'Finalizing
    'Convert sD more than 30days to sM
    sM3 = Int(sD / 30)
    '# Final sD
    sD3 = sD - Int(sD / 30) * 30
    'add the extra months from sD to sM
    sM3 = sM + sM3
    '# Final sY
    sY3 = Int(sM3 / 12)
    '# Final sM
    sM3 = sM3 - Int(sM3 / 12) * 12

    '**change 2
    'No more than 6 years
    If sY3 >= 6 Then
        Me.Année4 = 6
        Me.Mois4 = 0
        Me.Jours4 = 0
    Else
        Me.Année4 = sY3
        Me.Mois4 = sM3
        Me.Jours4 = sD3
    End If
    '**2
    
    
        
'3
'المجموع
    'add the Years, Months, Days
    sY4 = sY3 + Y
    sM4 = sM3 + M
    sD4 = sD3 + D
    
    'Convert more than 30days to Months
    sM5 = Int(sD4 / 30)
    '# Final Days
    sD5 = sD4 - Int(sD4 / 30) * 30
    'add the extra months from the Days
    sM5 = sM4 + sM5
    '# Final Years
    sY5 = Int(sM5 / 12) + sY4
    '# Final Months
    sM5 = sM5 - Int(sM5 / 12) * 12
    

        Me.Année4 = sY5
        Me.Mois4 = sM5
        Me.Jours4 = sD5

    
End Sub

 

جعفر

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information