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

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

قام بنشر

السلام عليكم 

لو سمحتم عندي مشكة في دالة DLOOKUP باكثر من شرط عند البحث اريد شرطين (UNIT = UNIT) و (ShiftType = ShiftType) لكي اجد قيمة ساعة البداية وساعة النهاية

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

وشكرا لكم 

MO.rar

قام بنشر (معدل)

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

بالنسبة لسؤالك الاول ..الدالة بتشتغل معاك كويس ومافيهاش مشكلة

الشطر الثاني من السؤال ... يمكنك عمل مربع نص بأسم Ds ومربع نص ثاني باسم De ويمكنك ان تخفيهما في النموذج ..وتجعل مصد السجلات لهما هكذا

Ds

=DLast("[strDate]";"[TblLeaveRegistrationOrdinary]";"[Emp]='" & [Emp] & "'")

De

=DLast("[EndDate]";"[TblLeaveRegistrationOrdinary]";"[Emp]='" & [Emp] & "'")

وفي حدث بعد التحديث للحقل DateShift في النموذج تضع الكود التالي

Private Sub DateShift_AfterUpdate()
If Me.DateShift >= Me.Ds And Me.DateShift <= Me.De Then
MsgBox "الموظف في اجاؤة"
DoCmd.CancelEvent
Me.DateShift = ""
End If
End Sub

 

تم تعديل بواسطه Eng.Qassim
  • Like 1
قام بنشر
39 دقائق مضت, Eng.Qassim said:

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

بالنسبة لسؤالك الاول ..الدالة بتشتغل معاك كويس ومافيهاش مشكلة

الشطر الثاني من السؤال ... يمكنك عمل مربع نص بأسم Ds ومربع نص ثاني باسم De ويمكنك ان تخفيهما في النموذج ..وتجعل مصد السجلات لهما هكذا

Ds

=DLast("[strDate]";"[TblLeaveRegistrationOrdinary]";"[Emp]='" & [Emp] & "'")

De

=DLast("[EndDate]";"[TblLeaveRegistrationOrdinary]";"[Emp]='" & [Emp] & "'")

وفي حدث بعد التحديث للحقل DateShift في النموذج تضع الكود التالي

Private Sub DateShift_AfterUpdate()
If Me.DateShift >= Me.Ds And Me.DateShift <= Me.De Then
MsgBox "الموظف في اجاؤة"
DoCmd.CancelEvent
Me.DateShift = ""
End If
End Sub

 

@Eng.Qassimشكرا جدا لحضرتك علي الرد بالنسبه للدالة عند تسجيل كل المجموعات تعطي أرقام خطا اول التصميم كان المجموعات باللغه العربية قولت ممكن السبب منها وغيرتها للانجليزي وما زال الخطأ ممكن حضرتك لو تجرب كل المجموعات هتلاقي معظم اللي شفته بيبدأ من الساعه ٧ أو ٧.٣٠ لا يظهر ومعظم الأرقام خطا

انا اسف جدا على الازعاج سامحني

  • أفضل إجابة
قام بنشر (معدل)
15 ساعات مضت, MO87 said:

لو تجرب كل المجموعات هتلاقي معظم اللي شفته بيبدأ من الساعه ٧ أو ٧.٣٠ لا يظهر ومعظم الأرقام خطا

طيب جرب الان بالنسبة للخطأ الحاصل

 

 

 

MO.rar

تم تعديل بواسطه Eng.Qassim
  • Like 1
قام بنشر
3 ساعات مضت, Eng.Qassim said:

طيب جرب الان بالنسبة للخطأ الحاصل

 

 

 

MO.rar 51.79 kB · 4 downloads

الف مليون شكرا لحضرتك @Eng.Qassim  انا كنت حليت المشكلة بعمل نموذج فرعي ياخد القيمة منه مباشرة

جزاك الله خير  ده مشروع خيري وفي مشكلة ثانية سوف ارفقها فس سوال جديد والف شكرا لكرمك 

  • Like 1
قام بنشر

@Eng.Qassimاسف 

في 24‏/12‏/2022 at 23:14, Eng.Qassim said:

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

بالنسبة لسؤالك الاول ..الدالة بتشتغل معاك كويس ومافيهاش مشكلة

الشطر الثاني من السؤال ... يمكنك عمل مربع نص بأسم Ds ومربع نص ثاني باسم De ويمكنك ان تخفيهما في النموذج ..وتجعل مصد السجلات لهما هكذا

Ds

=DLast("[strDate]";"[TblLeaveRegistrationOrdinary]";"[Emp]='" & [Emp] & "'")

De

=DLast("[EndDate]";"[TblLeaveRegistrationOrdinary]";"[Emp]='" & [Emp] & "'")

وفي حدث بعد التحديث للحقل DateShift في النموذج تضع الكود التالي

Private Sub DateShift_AfterUpdate()
If Me.DateShift >= Me.Ds And Me.DateShift <= Me.De Then
MsgBox "الموظف في اجاؤة"
DoCmd.CancelEvent
Me.DateShift = ""
End If
End Sub

 

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

قام بنشر (معدل)
1 ساعه مضت, MO87 said:

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

ولهذا استخدمت Dlast ..فهي تأخذ اخر اجازة

يمكنك ان تستخدم هذا الكود ايضا

Private Sub DateShift_AfterUpdate()
Dim startDate As Date
Dim endDate As Date
Dim vacationDate As Date

startDate = DLast("[strDate]", "[TblLeaveRegistrationOrdinary]", "[Emp]='" & [emp] & "'")
endDate = DLast("[EndDate]", "[TblLeaveRegistrationOrdinary]", "[Emp]='" & [emp] & "'")
vacationDate = Me.DateShift

If vacationDate >= startDate And vacationDate <= endDate Then
    MsgBox "الموظف في اجازة"
    Me.DateShift = ""
End If
End Sub

 

تم تعديل بواسطه Eng.Qassim
قام بنشر

أقترح باستخدام DMax بدلا من DLast تفاديا لأخطاء ادخالات الموظفين، فـ DLast تأخذ القيم حسب ترتيب اضافتها للجداول.
والمعذرة لكم.

قام بنشر
15 ساعات مضت, AbuuAhmed said:

أقترح باستخدام DMax بدلا من DLast تفاديا لأخطاء ادخالات الموظفين، فـ DLast تأخذ القيم حسب ترتيب اضافتها للجداول

كلامك صحيح استاذي @AbuuAhmed لكني افترضت ان ادخال التواريخ يومي او عامل Ascending للتاريخ

تبقى DMax  افضل تفاديا للاخطاء

احسنت استاذ

  • Like 1
قام بنشر
21 ساعات مضت, Eng.Qassim said:
Dim startDate As Date
Dim endDate As Date
Dim vacationDate As Date

startDate = DLast("[strDate]", "[TblLeaveRegistrationOrdinary]", "[Emp]='" & [emp] & "'")
endDate = DLast("[EndDate]", "[TblLeaveRegistrationOrdinary]", "[Emp]='" & [emp] & "'")
vacationDate = Me.DateShift

If vacationDate >= startDate And vacationDate <= endDate Then
    MsgBox "الموظف في اجازة"
    Me.DateShift = ""
End If

تعطيني خطا الدالة في السابق كانت تعمل

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