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

مطلوب دالة جمع ايام الحضور

بدأه ناصر المصلح في 6 ديسمبر 2013 · 26 رد · 2,030 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تحية عطره للجميع

 

ارجو عمل داله تقوم بجمع ايام الحضور " P " حسب الصورة التالية

 

1386283730661.jpg

 

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

DCount("*";"tbl2";"[1]='P'")

Microsoft Access قاعدة بيانات جديد.rar

تم تعديل هذه المشاركة بواسطة ناصر المصلح في 6 ديسمبر 2013 في 03:34

#2

برأيي طريقة تصميم الجدول الثاني خاطئه لانه المفروض يكون

*اسم الموظف

*تاريخ اليوم

*الحاله  " حضور - غياب - وغيره"

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

"قال رب اشرح لي صدري *ويسر لي امري*واحلل عقدة من لساني يفقهوا قولي" سورة طه
اللهم صل على سيدنا محمد
وعلى آل سيدنا محمد

http://rasoulallah.net/index.php/ar

#3

كل الشكر اخي اكرم

 

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

 

والنموذج الموضح به حالة الموظف من حضور وغيياب وخلافة هو نموذج فرعي

 

1386343674171.jpg

 

كل ماريده هو جمع ايام الحضور فقط

تم تعديل هذه المشاركة بواسطة ناصر المصلح في 6 ديسمبر 2013 في 18:28

#4

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

رقم الموظف                التاريخ              الحاله

 1                           1/12/2013       p

  2                          1/12/2013        p

 

وهكذا حتى اذا جئت تجمع عدد السجلات بشرط الموظف 1 والحاله تكون "p" يعطيك نتيجه

اما الان مسوي سجل واحد طريقه خاطئه

"قال رب اشرح لي صدري *ويسر لي امري*واحلل عقدة من لساني يفقهوا قولي" سورة طه
اللهم صل على سيدنا محمد
وعلى آل سيدنا محمد

http://rasoulallah.net/index.php/ar

#5
اكرم العريقي كتب:

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

رقم الموظف                التاريخ              الحاله

 1                           1/12/2013       p

  2                          1/12/2013        p

 

وهكذا حتى اذا جئت تجمع عدد السجلات بشرط الموظف 1 والحاله تكون "p" يعطيك نتيجه

اما الان مسوي سجل واحد طريقه خاطئه

 

ليس سجل واحد اخي العزيز هو اكثر من سجل عند اضافة اكثر من موظف

#6

شوف العلاقه حقك غلط لازم تكون من الموظفين الى الغياب

شوف جدول الغياب لازم يكون بهاذي الصوره

ويدخل فيه تواريخ الايام وحالات الغياب وشوف في النموذج تيبل واحد افتحه

وشوف بايعطيك بحق عدد الحضور عدد ايام الحضور للموظف اتمنى يكون المطلوب وبالتوفيق

Microsoft Access قاعدة بيانات جديد.rar

1

"قال رب اشرح لي صدري *ويسر لي امري*واحلل عقدة من لساني يفقهوا قولي" سورة طه
اللهم صل على سيدنا محمد
وعلى آل سيدنا محمد

http://rasoulallah.net/index.php/ar

#7

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

 

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

 

بانتضار الحل من احد الاخوان

#8

استخدمت هذه الداله ولكنها طويله جدا وتعطي عدد الايام  صحيحا بس ( -)

 

فلا اعلم ماهوا الخطاء ارجو المساعدة

=Sum(Nz([1])="p")+Sum(Nz([2])="p")+Sum(Nz([3])="p")+Sum(Nz([4])="p")+Sum(Nz([5])="p")+Sum(Nz([6])="p")+Sum(Nz([7])="p")+Sum(Nz([8])="p")+Sum(Nz([9])="p")+Sum(Nz([10])="p")+Sum(Nz([11])="p")+Sum(Nz([12])="p")+Sum(Nz([13])="p")+Sum(Nz([14])="p")+Sum(Nz([15])="p")+Sum(Nz([16])="p")+Sum(Nz([17])="p")+Sum(Nz([18])="p")+Sum(Nz([19])="p")+Sum(Nz([20])="p")+Sum(Nz([21])="p")+Sum(Nz([22])="p")+Sum(Nz([23])="p")+Sum(Nz([24])="p")+Sum(Nz([25])="p")+Sum(Nz([26])="p")+Sum(Nz([27])="p")+Sum(Nz([28])="p")+Sum(Nz([29])="p")+Sum(Nz([30])="p")+Sum(Nz([31])="p")
#9

عزيزي

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

لكن انا اعطيتك الحل التالي لكي نثبت مقولة الاستاذة زهرة "ياليت نشغل البطيخة اللي فوقنا شوي" وانا متاكد انها سهلة .

سوي عمود جديد من نوع calculated وبه المعادلة التالية

 

Abs(([1]='p')+([2]='p')+([3]='p'))

وهكذا حتى العمود 31

 

بالتوفيق

1

خبير تحليل النظم

خبير Business Process ونظم ERPs

خبير قواعد بيانات وبرمجة اكسس

 

abc_2_me@hotmail.com

#10

كل الشكر من الاعماق

 

تم العمل حسب شرحك وضهرت النتيجة بشكل صحيح

 

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

 

1386372500072.jpg

 

1386372500011.jpg

=Abs(([1]='p')+([2]='p')+([3]='p')+([4]='p')+([5]='p')+([6]='p')+([7]='p')+([8]='p')+([9]='p')+([10]='p')+([11]='p')+([12]='p')+([13]='p')+([14]='p')+([15]='p')+([16]='p')+([17]='p')+([18]='p')+([19]='p')+([20]='p')+([21]='p')+([22]='p')+([23]='p')+([24]='p')+([25]='p')+([26]='p')+([27]='p')+([28]='p')+([29]='p')+([30]='p')+([31]='p'))

تم تعديل هذه المشاركة بواسطة ناصر المصلح في 7 ديسمبر 2013 في 02:36

#11

استخدم دالة nz  كالتالي

=([1]='p')+(Nz([2];0)='p')

لاحظ استخدمتها فقط مع العمود2

طبقها عالكل

لاحظ وضع الصفر ما هو الا اي حرف او رقم غير حرف p

بالتوفيق

 

=Abs(nz(([1];0)='p')+(nz([2];0)='p')+(nz([3];0)='p')+([4]='p')+([5]='p')+([6]='p')+([7]='p')+([8]='p')+([9]='p')+([10]='p')+([11]='p')+([12]='p')+([13]='p')+([14]='p')+([15]='p')+([16]='p')+([17]='p')+([18]='p')+([19]='p')+([20]='p')+([21]='p')+([22]='p')+([23]='p')+([24]='p')+([25]='p')+([26]='p')+([27]='p')+([28]='p')+([29]='p')+([30]='p')+([31]='p'))
 

تم تعديل هذه المشاركة بواسطة ramhan في 7 ديسمبر 2013 في 02:57

خبير تحليل النظم

خبير Business Process ونظم ERPs

خبير قواعد بيانات وبرمجة اكسس

 

abc_2_me@hotmail.com

#12

طبقتها على الكل ولكن يضهر الاجمالي بالسالب ( - )

 

1386374372721.jpg

تم تعديل هذه المشاركة بواسطة ناصر المصلح في 7 ديسمبر 2013 في 03:00

#13

تمام

استخدم دالة abs

او الجميع بين قوسين ثم الضرب بسالب واحد

تم تعديل هذه المشاركة بواسطة ramhan في 7 ديسمبر 2013 في 03:00

خبير تحليل النظم

خبير Business Process ونظم ERPs

خبير قواعد بيانات وبرمجة اكسس

 

abc_2_me@hotmail.com

#14

Abs(nz(([1];0)='p'))

 

لايقبل عزيزي 

عند وضع هذا الكود وتطبيقة على الكل وحفضة وعند فتحة يتوقف النظام عن العمل عند فتحة البرنامج بكل مره

#15

عزيزي

فعلا يقوم النظام بالاغلاق . يالله هذي ميكروسوفت مش غريبه منهم

الصق الكود التالي وبالاحداث المبينة

بعد التعديل في اي عمود اضغط حفظ او كنترول مع اس

بالتوفيق

Private Sub Form_AfterUpdate()
xsum = 0
For i = 1 To 31
If Me.RecordsetClone.Fields(i) = "p" Then
xsum = xsum + 1
End If
Next i
Me.نص88 = xsum
End Sub

Private Sub Form_Current()
xsum = 0
For i = 1 To 31
If Me.RecordsetClone.Fields(i) = "p" Then
xsum = xsum + 1
End If
Next i
Me.نص88 = xsum

End Sub

تم تعديل هذه المشاركة بواسطة ramhan في 7 ديسمبر 2013 في 04:16

خبير تحليل النظم

خبير Business Process ونظم ERPs

خبير قواعد بيانات وبرمجة اكسس

 

abc_2_me@hotmail.com

#16

الجميلicon_share.png ramhan top.pngللاسف لايعمل بشكل جيد

 

كل الشكر على جميع ماقدمته لي من اضافات

 

ولك مني اجمل التحايا

#17

ممكن تحدد اين بالضبط لا يعمل بشكل جيد.

عندي تمام.

سارفع القاعدة لاحقا .

خبير تحليل النظم

خبير Business Process ونظم ERPs

خبير قواعد بيانات وبرمجة اكسس

 

abc_2_me@hotmail.com

#18

السلام عليكم 

قمت بتجربة الكود واعتقد ان لحرف P  علاقة بالمشكلة 

ففي الكود هو هكذا p وفي الفورم P

والله اعلم

حسابي على الفيسبوك

 

حسابي على التويتـــر

 

صفحتي الشخصية في منتدى أوفيسنا

 

اعذروني ففي الفترة القادمة سيكون تواجدي في المنتدى ضيق جداً وذلك للانشغال في دورة لمدة 6 شهور بعد الدوام

#19

عند الانتقال لسجل موظف ثاني او عمل تحديث  تضهر رساله خطاء

 

1386444597421.jpg

 

1386444687051.jpg

#20

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

تفضل اخي ناصر ثانيا

قلت لك الحلول كثيرة سابقا

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

ولعلك فهمت عمل الكود

Private Sub Form_Current()
ii = 0
For Each ctr In Me.Controls
If ctr.ControlType = acComboBox Then
If ctr = "p" Then
ii = ii + 1
End If
End If
Next ctr
Me.نص88 = ii
End sub

اعطنا الفيدباك وبالتوفيق

تم تعديل هذه المشاركة بواسطة ramhan في 8 ديسمبر 2013 في 01:18

1

خبير تحليل النظم

خبير Business Process ونظم ERPs

خبير قواعد بيانات وبرمجة اكسس

 

abc_2_me@hotmail.com

#21

ماشاء الله عليك

 

بالكود الاخير يعمل 100% بدون اي مشاكل

 

كلمة شكر ماتوفيك

#22

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

 

مرفق القاعدة مع التقرير لتعديل عليها

 

مع فائق الووود

Microsoft Access قاعدة بيانات جديد.rar

تم تعديل هذه المشاركة بواسطة ناصر المصلح في 8 ديسمبر 2013 في 20:54

#23

عزيزي

الصق الكود التالي في موديول التقرير

Public Function xramhan()
ii = 0
For Each ctr In Me.Detail.Controls
If ctr.ControlType = acComboBox Then
If ctr = "P" Then
ii = ii + 1
End If
End If
Next ctr
xramhan = ii
End Function

ثم اذهب الى العنصر وعند خاصية المصدر واكتب

=xramhan()

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

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

همسة : سؤالك هنا ما هو الا الكلام الثاني الذي ذكرته لك لو كان الطلب على داتا شيت والتقرير ما هو الا داتا شيت .

جرب واعطنا الفيد باك وبالتوفيق .

1

خبير تحليل النظم

خبير Business Process ونظم ERPs

خبير قواعد بيانات وبرمجة اكسس

 

abc_2_me@hotmail.com

#25

عزيزي ناصر

انا قلت في موديول التقرير وليس موديل عامة

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

عن طريق ايقونة عرض الكود من شريط الادوات ومن تبويب تصميم بالتحديد وانت في وضع التصميم للتقرير.

بالتوفيق

خبير تحليل النظم

خبير Business Process ونظم ERPs

خبير قواعد بيانات وبرمجة اكسس

 

abc_2_me@hotmail.com

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