اذهب الي المحتوي
أوفيسنا

طلب مساعده في تحديث جميع السجلات في النموذج والتقرير عند فتحه


imad2024
إذهب إلى أفضل إجابة Solved by سامي الحداد,

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

السلام عليكم 

طلب مساعده في تحديث جميع بيانات السجلات في النموذج عند فتحه حيث انه يوجد عملية حسابيه لكل سجل ، تعتمد العملية الحسابيه على تاريخ اليوم

مثلاً عند فتح البرنامج يوم غدا يجب ان تتغير احتساب الايام المتبقيه للعقد  

عند فتح بعد اسبوع يجب ان تتغير ايام الاحتساب تلقائياً للمده المتبقية للعقد 

 

حيث ان البرنامج عند الادخال وتغير تاريخ نهاية عقد العمل  فقط يتم التغير واحتساب مدة نهاية العقد

 

انا بحاجه عند فتح النموذج ( نموذج1)ان يتم تغير جميع الاحتسابات لجميع السجلات ويقوم بحساب المده المتبقيه للعقد بناء

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

 

مع الشكر

 

التاريخ.accdb

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

شكرا لك على الرد وعلى اهتمامك

المطلوب ان يتم تحديث كافة السجلات عند فتح البرانامج بناء على تاريخ الكمبيوتر ويقوم بالاحتساب وليس للسجل الاول فقط

عند عمل تقرير بالعمال والموظفين يجب ان اعرف المده المتبقيه له وكم بقي له لانتهاء عقد العمل

حاليا يجب ان اقوم بالدخول على السجلات ( سجل سجل ) والضعط على الرز ( do it )  حتى يقوم بالاحتساب وعدد السجلات كثير

 

عند تشغيل التقرير يعطني المده المتبقيه خاطئة اذا لم اقم بتحديث جميع السجلات بشكل يدوي

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

مثال اذا كان عندي عامل اسمه ( احمد )  بداية عقد العمل 2023/1/1 نهاية عقد العمل 2024/1/8 

وتاريخ اليوم هو 2023/12/8 يجب عند فتح البرنامج ان يكون نهاية العقد ( 0 years, 1 months, 0 days  )

واذا قمت بفتح البرنامج بتاريخ 2023/12/13 يجب ان يكون نهاية العقد ( 0 years, 0 months, 26 days  )

وهكذا واسف على الاطاله

 

 

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

تفضل أخي المحاولة الثانية .

نصيحه اجعل أسماء الجداول والنماذج والتقارير وحقولهم باللغة الانجليزية وبدون فواصل بين الكلمات .

تم عمل استعلام وتم التحديث من خلالة. تفضل المرفق وجرب ووافني بالرد .:fff:

التاريخ-2.rar

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

شكرا لك كثيرا على اهتمامك وصبرك معي

ارفقت صوره 

يوجد مشكله وهي المده المتبقيه يوجد بها خطا

قمت بادخال اسم جديد حيث يجب ان يعطني ان المده المتبقيه هي ثلاثة ايام فقط على نهاية العقد لان تاريخ اليوم هو 12/29

 

بعد التدقيق في المده تبين

انها المده التي عمل بها وهي 11 شهر و 28 يوم وهي صحيحه

انا اريد المده المتبقيه وهي 3 ايام - شهر 0 - سنه 0 

حتى اعلم انه بقي له فقط 3 ايام على نهاية العقد

وشكرا لك مره اخرى

 

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

 السلام عليكم

بالاضافة لما تفضل به الاستاذ @kkhalifa1960 جزاه الله خيرا

اليك التعديل 

في 29‏/12‏/2023 at 15:57, imad2024 said:

يوجد مشكله وهي المده المتبقيه يوجد بها خطا

يوجد خطاء في هذا الفانكشن


remainingDays = Day(DateSerial(Year(currentDate), Month(currentDate) + 1, 0)) + remainingDays

التعديل هنا 

Function CalculateRemainingPeriod(startDate As Date, endDate As Date) As String
    Dim remainingYears As Integer
    Dim remainingMonths As Integer
    Dim remainingDays As Integer
    Dim currentDate As Date

    currentDate = Date

    remainingYears = Year(endDate) - Year(currentDate)
    remainingMonths = Month(endDate) - Month(currentDate)
    remainingDays = Day(endDate) - Day(currentDate)

    If remainingDays < 0 Then
        remainingMonths = remainingMonths - 1
        remainingDays = DateDiff("d", DateSerial(Year(currentDate), Month(currentDate) + 1, 0), endDate)
    End If

    If remainingMonths < 0 Then
        remainingYears = remainingYears - 1
        remainingMonths = remainingMonths + 12
    End If

    CalculateRemainingPeriod = remainingYears & " years, " & remainingMonths & " months, " & remainingDays & " days"
End Function

تم إضافة صندوق  للرسائل لكل موظف بتاريخ انتهاء العقد بامكانك الاستغناء عنه إذا كان عدد الموظفين كثير والاكتفاء فقط برسائل العقود التي قاربت على الانتهاء. 

الرسالة تختفي بعد ثانيتين لكل موظف. وهذا الكود هنا.


Opt = MesgBox(rs![الاسم] & ": " & remainingDays & " يوم/ أيام ", 1, vbInformation, "الأيام المتبقية لإنتهاء عقد السيد")

وهذا الكود للعقود التي قاربت على الانتهاء بامكانك التعديل عليها بما يناسبك .

Private Sub Form_Current()
    UpdateFields
    Dim rs As DAO.Recordset
    Set rs = Me.RecordsetClone
    
    If Not rs.EOF Then
        rs.MoveFirst
        Do Until rs.EOF
            If rs![نهاية عقد العمل] <= (Date + 1) Then

                If rs![نهاية عقد العمل] = (Date + 1) Then
                    MsgBox "سينتهي عقد العمل يوم غد للسيد / " & rs!الاسم, 0 + 48, " !!! تنبيــــــــــــــــــــــــــــــــــه"
                ElseIf rs![نهاية عقد العمل] = Date Then
                    MsgBox "اليوم هو أخر يوم لعقد العمل للسيد / " & rs!الاسم, 0 + 64, " !!! تنبيــــــــــــــــــــــــــــــــــه"
                ElseIf rs![نهاية عقد العمل] < Date Then
                    MsgBox " إنتهى عقد العمل قبل (" & Str(Date - rs![نهاية عقد العمل]) & ") يوم / أيام للسيد / " & rs!الاسم, 48, "!!! إنتهى التاريخ المحدد لعقد العمل "
                End If
            End If
            
            rs.MoveNext
        Loop
    End If
    
    rs.Close
    Set rs = Nothing
End Sub

واخيرا اليك الملف عسى ان يكون هو المطلوب.

بالتوفيق

التاريخ.accdb

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

شكرا لك على المساعده

يوجد مشكله في المده المتبقيه للايام .

اذا كان نهاية العقد اقل من تاريخ اليوم كما في الصوره الاولى يعطني باقي المده المتبقيه بالايام خطأ وهي ( 340 يوم متبقي )

اذا كان نهاية العقد يساوي تاريخ اليوم او اكثر يعطي المده المتبقيه بالايام صحيحه ( 1 يوم )

ولك الشكر على الاهتمام 

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

اخي الكريم وكما ذكر الاستاذ @kkhalifa1960جزاه الله خيرا

في 29‏/12‏/2023 at 00:31, kkhalifa1960 said:

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

اليك التعديل ووافني بالنتيجة.

التاريخ.accdb

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

شكرا لك مره اخرى على صبرك معي

اذا كان تاريخ اليوم

2024/1/7 وكان تاريخ نهاية العقد ليس في نفس السنه واقل من تاريخ اليوم 2025/1/6 سوف يعطني باقي الايام خطأ ( 365 )

2024/1/7 وكان تاريخ نهاية العقد في نفس السنه واقل من تاريخ اليوم 2024/3/6 سوف يعطني باقي الايام خطأ متبقي ( 59 يوم و شهر واحد )

اذا كان تاريخ اليوم 2024/1/7 وكان تاريخ نهاية العقد ليس في نفس السنه وتاريخ اليوم اكبر او يساوي من ( 7 وهو تاريخ اليوم )  2025/1/9 سوف يعطني النتيجة صحيحه

اذا كان تاريخ اليوم 2024/1/7 وكان تاريخ نهاية العقد في نفس السنه تاريخ اليوم اكبر او يساوي من ( 7 وهو تاريخ اليوم ) 2024/1/13 سوف يعطني باقي الايام صحيحه

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

image.png.2585ac594958ba29581ecb711494354e.png

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

أخي الكريم @imad2024

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

اذا كان تاريخ اليوم

2024/1/7 وكان تاريخ نهاية العقد ليس في نفس السنه واقل من تاريخ اليوم 2025/1/6 سوف يعطني باقي الايام خطأ ( 365 )

 

يمكنك التأكد من حساب الايام  يوجد العديد من المواقع يهذا الخصوص وعلى سبيل المثال هذا الموقع  Date Calculator - Calculate Duration Between Two Dates (indiatimes.com) بامكانك التأكد ضع اي تاريخ وقارن النتيجة مع البرنامج.

التعديل الاخير صحيح اخي الكريم  لقد اجريت الكثير من التجارب على التعديل الاخير وتاكدت من عدة مواقع بخصوص حساب التاريخ .

تحياتي

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

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

2024/1/7 وكان تاريخ نهاية العقد في نفس السنه واقل من تاريخ اليوم 2024/3/6 سوف يعطني باقي الايام خطأ متبقي ( 59 يوم و شهر واحد )

ساتحقق من  هذا فقط امهلني بعض الوقت.

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

  • أفضل إجابة

السلام عليكم اخي الكريم

نعم معك حق .. الدالة لم تكن تعمل بشكل صحيح اليك التعديل

وبالنسبة الى إرجاع الدالة شهرين و-1 يوم بدلاً من 59 يومًا هو أنها تستخدم الدالة DateDiff مع الفاصل الزمني "m"، الذي يحسب عدد أشهر التقويم بين تاريخين وهذا يعني أنه يتجاهل العدد الفعلي للأيام في كل شهر وينظر فقط إلى الفرق بين أجزاء الشهر من التواريخ. على سبيل المثال، الفرق بين 01/07/2024 و01/08/2024 هو شهر واحد، على الرغم من وجود 31 يومًا بينهما.

Function CalculateRemainingPeriod(StartDate As Date, EndDate As Date) As String
    Dim Years As Long
    Dim Months As Long
    Dim Days As Long
    Dim Result As String
    Dim TodayDate As Date
    TodayDate = Date
    Years = DateDiff("yyyy", TodayDate, [نهاية عقد العمل])
    TodayDate = DateAdd("yyyy", Years, TodayDate)
    Months = DateDiff("m", TodayDate, [نهاية عقد العمل])
    TodayDate = DateAdd("m", Months, TodayDate)
    Days = DateDiff("d", TodayDate, [نهاية عقد العمل])

    Result = Years & " years, " & Months & " months, " & Days & " days"
    CalculateRemainingPeriod = Result

End Function

الملف بعد التعديل 

التاريخ.accdb

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

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