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

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


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

السلام عليكم ورحمة الله

اريد داله فى الاستعلام  لحساب الفرق بين تاريخين بالشهور فقط .... 

والمطلوب لو الايام فى الشهر الاخير اكتر من 22  يوم يتم احتسابها شهر كامل ولو اقل من 22 لا تحتسب

New Microsoft Access 11111.accdb

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

14 ساعات مضت, احمد حبيبه said:

السلام عليكم ورحمة الله

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

14 ساعات مضت, احمد حبيبه said:

اريد داله فى الاستعلام  لحساب الفرق بين تاريخين بالشهور فقط .... 

هذه هي 

Datediff("m",OldDate,NewDate)
'"m" = months
'"yyyy" = years
'"dd" = daies

 

14 ساعات مضت, احمد حبيبه said:

لو الايام فى الشهر الاخير اكتر من 22  يوم

أما عن هذه فلم أفهم ما المقصود بالشهر الأخير هل تعني التاريخ الأحدث أم الأقدم الذي تريد زيادته الي 1

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

اخى العزيز أبو عبدالله الحلوانى

اشكرك جدا جدا 

المقصود بالشهر الاخير ما يلى

المده من 1/7/2020   الى 22/9/2020   المعادله هتحسب الفرق بين التاريخين شهرين فقط مع انهم شهرين و 22 يوم

وهيتم تجاهل ال 22  يوم فى التاريخ الثانى لن يتم اعتبارهم شهر 

المطلوب ان الايام فى التاريخ الثانى لو اقل من 22 يوم يتم تجاهلهم

ولو 22 يوم او اكثر يتم اعتبارهم شهر كامل ويكون الفرق بين التاريخين 3 شهور مثلا

 

ملحوظه .... ال 22 يوم دول ممكن يكونو فى التاريخ الاحدث وممكن يكونو فى التاريخ الاقدم وممكن فى الاثنين مثلا

من 23/6/2020   الى 25/9/2020   كده المده دى اربع  شهور  لكن المعادله طلعتهم شهرين فقط

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

اخى العزيز 

تمت التجربه

لكن يتم حساب شهر كامل حتى لو التاريخ اقل من  22

بمعنى لو التاريخ الاول او الاخير 22 او 23  حتى 30 يتم احتسابه شهر كامل

لكن فى الملف الذى تفضلت به يحسب

يحسب  من يوم 11 حتى 30 شهر كامل

المطلوب يحسب شهر لو اليوم 22 او اكثر حتى 30 لو اصغر من 22 لا يحسبه 

اشكرك اخى الحبيب

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

25 دقائق مضت, احمد حبيبه said:

يحسب  من يوم 11 حتى 30 شهر كامل

اذا جرب هذا التعديل

 

New Microsoft Access 11111.accdb

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

اخى العزيز  اسف على الازعاج

لكن المعادله خاصه بحساب حقوق بعض الموظفين وأتمنى الا نظلم احد

هحاول ابسط الأمور

-  الشهر الاقدم  لو بيدأ من  يوم 1  الى يوم 8 يتم احتسابه شهر  ...  لو من يوم 9 حتى يوم 31 لا يتم احتسابه شهر

-  الشهر الاحدث لو بيدأ من  يوم 1  الى يوم 21 لا يتم احتسابه شهر  ...من يوم 22 حتى يوم 31  يتم احتسابه شهر

ويحسب كل تاريخ منفصلا عن الاخر

تحياتى لشخصم الكريم

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

منذ ساعه, احمد حبيبه said:

-  الشهر الاقدم  لو بيدأ من  يوم 1  الى يوم 8 يتم احتسابه شهر  ...  لو من يوم 9 حتى يوم 31 لا يتم احتسابه شهر

-  الشهر الاحدث لو بيدأ من  يوم 1  الى يوم 21 لا يتم احتسابه شهر  ...من يوم 22 حتى يوم 31  يتم احتسابه شهر

هذا الكلام يختلف عن كلامك السابق هنا

2 ساعات مضت, احمد حبيبه said:

بمعنى لو التاريخ الاول او الاخير 22 او 23  حتى 30 يتم احتسابه شهر كامل

وعلي كل هل جربت المرفق السابق وما هي المشكلة بالمرفق السابق بالتحديد أي اضرب لي مثال رقميا

يعني المرفق يحسب  التاريخ 1 - التاريخ 2 = النتيجة 1

في حين انك تريده يحسب هكذا التاريخ 1 - التاريخ 2 = النتيجة 2

وجزاكم الله خيرا

 

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

السلام عليكم

مشاركه لاخى واستاذى العزيز @أبو عبدالله الحلوانى جزاه الله خيرا

محاوله منى لانى كمان تهت فشرحك @احمد حبيبه

هل هذه النتيجه التى تريدها من واقع البيانات بالمثال تبعك ان لم تكن فبرجاء الشرح اكثر ع البيانات الموجوده بالمثال

وان شاء الله ربنا هيسرها بالحل

end_1.png.7089a24b169616c9cd67e4500fa3f5fa.png

بالتوفيق

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

السلام عليكم ورحمه الله

اخى العزيز انا لم افهم الصوره المرفقه

لكن ما اريده هو

انا بحاول استخرج مده معينه بالشهور لاحد الموظفين ... لان له مستحقات على هذه المده والشروط كالاتى

التاريخ القديم... شرط حصول الموظف على حافز الشهر   هو ان يعمل 22 يوم او اكثر  فى الشهر بمعنى ان يبدأ العمل فى احد الايام من 1 الى 8 فى الشهر 

ولو بدأ العمل يوم 9 او 10 او اى يوم بعد ذلك لن يكمل 22 يوم بالتالى لن يستحق حافز فلو بدأ التاريخ القديم بيوم من 1 الى 8 يحتسب شهر ويستخرج مع عدد الشهور 

غير ذلك لا يحتسب شهر 

والتاريخ الاحدث نفس الكلام لكن الفرق ان يعمل الموظف حتى يوم 22 من الشهر ليستحق الحافز ولذلك ان قل تاريخ اليوم  عن 22 لا يستحق وبالتالى تقل المده شهر كامل

ارجو ان اكون وففت فى الشرح

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

35 دقائق مضت, احمد حبيبه said:

السلام عليكم ورحمه الله

اخى العزيز انا لم افهم الصوره المرفقه

الصوره المرفقه

هى بيانات الجدول اللى بالمثال حقلى المده من والى

وحقل T  هو عدد الاشهر من واقع البيانات المرفقه بمثالك

ده الجدول المرفق بمثالك ممكن تحسبلى كل سجل وتقلى الفرق من واقع السجلات اللى انت وضعتها بمثالك

image.png.3809c805d9674a936e539d8f612a5a0d.png

 

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

الشرح

1- الصف الاول ... الموظف بدأ العمل يوم 1 فى الشهر .. عمل 22 يوم  ... احتسب له شهر .... وانهى العمل يوم 1 فى الشهر التالى لم يكمل 22 يوم لم يحتسب شهر

2- الصف الثانى ... الموظف بدأ العمل يوم 12 فى الشهر .. لم يعمل 22 يوم  ... لم يحتسب له شهر .... وانهى العمل يوم 25 فى الشهر التالى أكمل 22 يوم لذلك يحتسب شهر

3- الصف الثالث... الموظف بدأ العمل يوم 26 فى الشهر .. لم يعمل 22 يوم  ... لم يحتسب له شهر .... وانهى العمل يوم 25 فى الشهر التالى أكمل 22 يوم لذلك يحتسب شهر

4- الصف الرابع... الموظف بدأ العمل يوم 26 فى الشهر .. لم يعمل 22 يوم  ... لم يحتسب له شهر .... وانهى العمل يوم 2 فى الشهر التالى لم يكمل 22 يوم لذلك لا يحتسب شهر

 

 

Capture.JPG

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

9 دقائق مضت, احمد حبيبه said:

1- الصف الاول ... الموظف بدأ العمل يوم 1 فى الشهر .. عمل 22 يوم  ... احتسب له شهر .... وانهى العمل يوم 1 فى الشهر التالى لم يكمل 22 يوم لم يحتسب شهر

طيب راجع السجل الاول تانى المفروض ع حساباتك يبقى 13 شهر وليس 1 شهر

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

بالاضافة الى ما تفضل به الاخوة ولهم الشكر

تفضل اخي الكريم

اضف هذه الوحدة النمطية

Option Compare Database
Option Explicit

Function CalcAgeY(vDate1 As Date, vdate2 As Date)
    Dim vYears As Integer, vMonths As Integer, vDays As Integer
    vMonths = DateDiff("m", vDate1, vdate2)
    vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
    If vDays < 0 Then
        vMonths = vMonths - 1
        vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
    End If
    vYears = vMonths \ 12
    vMonths = vMonths Mod 12
    CalcAgeY = vYears
    
End Function
Function CalcAgeM(vDate1 As Date, vdate2 As Date)

    Dim vYears As Integer, vMonths As Integer, vDays As Integer
    vMonths = DateDiff("m", vDate1, vdate2)
    vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
    If vDays < 0 Then
        vMonths = vMonths - 1
        vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
    End If
    vYears = vMonths \ 12
    vMonths = vMonths Mod 12
    CalcAgeM = vMonths
    
End Function
Function CalcAgeD(vDate1 As Date, vdate2 As Date) As String
    Dim vYears As Integer, vMonths As Integer, vDays As Integer
    vMonths = DateDiff("m", vDate1, vdate2)
    vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
    If Day(vDate1) = 31 Then vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2) - 1

    If vDays < 0 Then
        vMonths = vMonths - 1
        vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
        
    End If
    vYears = vMonths \ 12
    vMonths = vMonths Mod 12
    CalcAgeD = vDays
    End Function



ثم في الاستعلام ادرج التالي

Frook3: DateDiff("m";[AGAM1];[AGAM2])+IIf(CalcAgeD([AGAM1];[AGAM2])>22;1;0)

UP-New Microsoft Access 11111.rar

تحياتي

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

 اخى العزيز / محمد أبوعبدالله

جزاك الله خيرا 

كل حاجه تمام وكل الشروط تحققت ....

عدا شرط واحد 

راجع الصف الثالث  من  2020/02/26  الى 2020/04/25 ....

الموظف بدأ العمل يوم 26 اى انه لم يكمل 22 اذن الشهر كله غير محسوب

المعادله احتسبت شهر 2  واستخرجت عدد الشهور 3 وهم فى الحقيقه 2 لان شهر 2 غير محسوب

واكرر اسفى اساتذتى واخوانى الاعزاء .... ارهقتكم معى

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

منذ ساعه, احمد حبيبه said:

راجع الصف الثالث  من  2020/02/26  الى 2020/04/25 ....

اذن نقوم بتعديل الوحدة النمطية ونجعلها لا تقسم على 12 كالتالي

Option Compare Database
Option Explicit

Function CalcAgeY(vDate1 As Date, vdate2 As Date)
    Dim vYears As Integer, vMonths As Integer, vDays As Integer
    vMonths = DateDiff("m", vDate1, vdate2)
    vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
    If vDays < 0 Then
        vMonths = vMonths - 1
        vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
    End If
    vYears = vMonths \ 12
    vMonths = vMonths Mod 12
    CalcAgeY = vYears
    
End Function
Function CalcAgeM(vDate1 As Date, vdate2 As Date)

    Dim vYears As Integer, vMonths As Integer, vDays As Integer
    vMonths = DateDiff("m", vDate1, vdate2)
    vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
    If vDays < 0 Then
        vMonths = vMonths - 1
        vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
    End If
    vYears = vMonths \ 12
    vMonths = vMonths 'Mod 12
    CalcAgeM = vMonths
    
End Function
Function CalcAgeD(vDate1 As Date, vdate2 As Date) As String
    Dim vYears As Integer, vMonths As Integer, vDays As Integer
    vMonths = DateDiff("m", vDate1, vdate2)
    vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
    If Day(vDate1) = 31 Then vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2) - 1

    If vDays < 0 Then
        vMonths = vMonths - 1
        vDays = DateDiff("d", DateAdd("m", vMonths, vDate1), vdate2)
        
    End If
    vYears = vMonths \ 12
    vMonths = vMonths 'Mod 12
    CalcAgeD = vDays
    End Function




ويكون في الاستعلام كالتالي

Frook3: CalcAgem([AGAM1];[AGAM2])+IIf(CalcAgeD([AGAM1];[AGAM2])>22;1;0)

UP-New Microsoft Access 11111.rar

تحياتي

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

8 ساعات مضت, محمد أبوعبدالله said:

ويكون في الاستعلام كالتالي


Frook3: CalcAgem([AGAM1];[AGAM2])+IIf(CalcAgeD([AGAM1];[AGAM2])>22;1;0)

UP-New Microsoft Access 11111.rar 28.95 kB · 3 downloads

 

اخى الحبيب جزاك الله خيرا ......

هذا ما اردته .... اشكرك جدا جدا جدا

والشكر ايضا لجميع الزملاء الاعزاء الذين ساعدونى كثيرا

اخى الحبيب احمد الفلاحجي

اخى الحبيب أبو عبدالله الحلوانى

جزاهم الله خيرا

ـــــــــــــــــــــــــــــــــــــــــــــــ

ملحوظه صغيره اخى الحبيب ... الحقول الفارغه التى ليس بها تاريخ ... المعادله فى الاستعلام تظهر بها خطأ

هل يوجد لها تعديل فى الاستعلام يظهرها فارغه او صفر

 

 

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

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