أخذت فكرة هذا البرنامج من عمل الأخ فهد الدوسري والأخ أبو هادي فليعذراني
الشرح موضح بالمرفق
أخذت فكرة هذا البرنامج من عمل الأخ فهد الدوسري والأخ أبو هادي فليعذراني
الشرح موضح بالمرفق
مشكور وما قصرت برنامجك ممتاز جدا وذو تصميم جميل
ما شاء الله عليك
شكرا لك ممتاز فعلا
===
أستمد قوتي من ايماني بالله وأشعر بالراحه النفسية عندما اذكر اسم الله . الحمد لله
===
المشتاق الى الجنة
أبو صفاء - مسقط
===
الملف بعد التعديل اتمنى ان اكون قد وفقت
روووعة ماشاء الله تبارك الله
الله ينور بصيرتك وبصيرة من أخذت منهم فهد الدوسري و أبو هادي
وجميع من في المنتدى
الأستاذ mokhal15 الله يجزاك بالجنة
ولكن هناك بعض المشاكل مثلاً لو لم يكن هناك إجازة استثنائية فلن يظهر الرصيد
أيضاً إذا كانت الخدمة سنة فهو يستحق 30 يوماً فنفرض أنه أخذ إجازة استثنائية لمدة 30 أو 15 يوماً في هذه السنة التي هي مدة خدمته معنى ذلك أن خدمته سوف تقل فكيف أضع الرصيد الصحيح لمدة خدمته هذه بعد أن أخذ هذه الإجازة ... شاكرا لك تعاونك(f)(f)
أرجوك أن تعذرني على التثقيل عليك :'(
عاشق الأكسس
لدي سؤال ؟؟؟ هل يتم احتساب التاريخ بشكل صحيح في هذا البرنامج
افضل ان تعود الى موضوع احتساب التاريخ
ولك مني جزيل الشكر
===
أستمد قوتي من ايماني بالله وأشعر بالراحه النفسية عندما اذكر اسم الله . الحمد لله
===
المشتاق الى الجنة
أبو صفاء - مسقط
===
السلام عليكم
الاخ عاشق الاكسس
- المشكلة الاولى صحيحه وتم حلها
- المشكلة الثانية حول حساب مدة الخدمة الفعلية لمن كانت خدمته سنة واجازته الاستثنائية شهر تعمل في التعديل الاول لاحظ الرسائل التي تظهر في اثناء الحساب لتتعرف على الفرق بين الرصيدبن قبل الخصم وبعده الا اذا كنت تقصد شيئا اخر
الاخ ابو صفاء
اعتقد ان طريقة حساب التاريخ تأدي الغرض المطلوب منها في البرنامج وهو حساب مدة الخدمة الا اذا كان لحساب المدة طريقة معينة اخرى
السلام عليكم
الحقيقة أنا لم أستعرض الأمثلة ولكني فهمت المطلوب .
لذا أقترح أن تحسب الأيام لكل فترة خدمة وفترات الإجازات المراد استبعادها ثم إجراء عملية الطرح للحصول على صافي أيام الخدمة ثم تمرير النتيجة إلى دالة جديدة عملتها لهذا الخصوص للحصول على الفترة بشكل سنوات وشهور وأيام ولكنها قد تفقد الدقة الشيء البسيط جدا وحسب ظني أنها أكثر من كافية .
دالة الحصول على الأيام لأي فترة :
Function GetDays(ByVal DateFm As Variant, ByVal DateTo As Variant, Cal As Byte) as Long Const Gregorian = 1 Const Hijri = 2 Select Case Cal Case Gregorian GetDays = CDate(DateTo) - CDate(DateFm) + 1 Case Hijri GetDays = Hijri2Greg(DateTo) - Hijri2Greg(DateFm) + 1 End Select End Function
دالة احتساب الفترة بناء على صافي الأيام للخدمة :
Sub GetDaysPeriod(ByVal Days As Long, Cal As Byte, _ ByRef DGP As Integer, ByRef MGP As Integer, ByRef YGP As Integer) Const Gregorian = 1 Const Hijri = 2 Const GregDays = 365.24 Const HijDays = 354.3667 Dim YYP As Double Select Case Cal Case Gregorian YYP = Days / GregDays YGP = Int(YYP) YYP = (YYP - YGP) * 12 MGP = Int(YYP) YYP = (YYP - MGP) / 12 * GregDays DGP = Int(YYP) If DGP = 31 Then MGP = MGP + 1 DGP = 0 End If Case Hijri YYP = Days / HijDays YGP = Int(YYP) YYP = (YYP - YGP) * 12 MGP = Int(YYP) YYP = (YYP - MGP) / 12 * HijDays DGP = Int(YYP) If DGP = 30 Then MGP = MGP + 1 DGP = 0 End If End Select End Sub
آمل أن يكون مفيدا ويؤدي الغرض .
تحياتي .
تعديل في دالة الحصول على الأيام :
Function GetDays(ByVal DateFm As Variant, ByVal DateTo As Variant, Cal As Byte) as Long Const Gregorian = 1 Const Hijri = 2 Select Case Cal Case Gregorian GetDays = CDate(DateTo) - CDate(DateFm) + 1 Case Hijri GetDays = CDate(Hijri2Greg(DateTo)) - CDate(Hijri2Greg(DateFm)) + 1 End Select End Function
يا سلام على روح التعاون بيننا
استاذي أبو هادي هل من الممكن أن تقوم بالتعديل على مثال الأخ (عاشق الأكسس ) حسب شرحك وذلك لكي تحصل الفائدة الفعلية .
ولك مني جزيل الشكر والعرفان نيابة عني الأخ ( عاشق الأكسس )
وأتقدم بجزيل الشكر للأخ mokhal15 أيضا نيابة عن الأخ ( عاشق الأكسس )
وانا ايضا في الانتظار :)
السلام عليكم
تم التعديل على المثال الأصلي حيث لم أستطع استعمال الأمثلة المعدلة لعملها على أكسس 2002 .
وقد تم التالي :
1- تعديل في العلاقات بين الجداول .
2 - توحيد طول رقم الموظف في الجداول .
3 - لم يفتح معي النوذج الرئيس واضطررت لتبديل مصدر البيانات .
4 - تم إضافة موديولين .
الأخ أبو صفاء
اقتباسعاشق الأكسسلدي سؤال ؟؟؟ هل يتم احتساب التاريخ بشكل صحيح في هذا البرنامج
افضل ان تعود الى موضوع احتساب التاريخ
آمل التوضيح وما هو موضوع احتساب التاريخ ؟
تحياتي .
تعديل :
استبدل هذا السطر :
tDays = CDate(Hijri2Greg(Me.الرصيد_حتى)) - CDate(Hijri2Greg(Me.الخدمة_من))
بهذا السطر
tDays = GetDays(Me.الرصيد_حتى, Me.الخدمة_من, 2)
أو أضف يوم واحد على السطر الأول ليصبح كالتالي :
tDays = CDate(Hijri2Greg(Me.الرصيد_حتى)) - CDate(Hijri2Greg(Me.الخدمة_من)) + 1
تحياتي
آسف على التأخير :o
أشكرك كل من شارك في هذا الموضوع(f)(f)
الأستاذ أبو هادي هناك ملاحظة بسيطة على المثال الذي عملته وهي :
1-الرصيد لا يتأثر إذا كان نوع الإجازة هو (عادية ) والمفروض أنه ينقص دون تأثير على مدة الخدمة .
2-مدة الخدمة لا تتأثر أبداً في حالة كون نوع الإجازة هو ( استثنائية ) والمفروض أن مدة الخدمة تنقص إذا أخذ إجازة استثنائية .
3- عندما تنتقل إلى موظف جديد لكي تدرج إجازاته تكون تخرج رسالة تفيد بأن حقول التاريخ فارغة ولا يمكن عمل حساب عليها .
أكرر شكري وامتناني لك ولكل من تعب معي جعل الله ذلك في موازين حسناتكم جميعاً وندعو الله أن ينصر كل من تمسك بكتابه وسنة نبيه إنه على ذلك قدير .
السلام عليكم
مرفق الملف بعد التعديلات المطلوبة .
وأود أن أوصي بالتالي :
1 - استخدام أسماء انجليزية للحقول .
2 - استخدام التاريخ الميلادي في التخزين .
تحياتي .
اشكرك اخى العزيز ابو هادى
واشكر كل الأخوه الخبراء
فهد الدوسري عاشق الأكسس mokhal15
الأسماء العربيه للحقول افظل
و التاريخ الميلادى هو الأفظل
عندنا نستخدم التاريخ الميلادى ... شاكرين لكم افادتنا
راجيا الوصول الى عمل نهائى بمجهوداتكم مشكورين
فهو عمل مفيد جدا ....
ونشتاق لمعرفه اين وصل هذا العمل المفيد جداً
حيث انه لبساطه خبرتنا لا نستطيع تحديد اى مرفق فى الموجودين هو الكامل و النهائى
السلام عليكم
استعرضت نتائج المثال ولم تروق لي النتائج فأخدت أبحث عن السبب وقد أضعت وقت كثيرا وأنا أقوم بالحساب بالآلة الحاسبة ومرة أخرى باستخدام الأكسل ودائما النتائج سليمة دون الأكسس وأخيرا وقعت على المشكلة وهي متمثلة في دالة حساب الأيام GetDays ، حيث عند حساب الأيام يكون التقويم المستخدم وقتها هجري والمفترض أن يكون ميلادي . لذا قمت بتغيير التقويم إلى ميلادي قبل حساب الأيام ثم إعادته إلى أصله بعد عملية الحساب .
آمل أن يكون هذه المرة النتائج صحيحة 100% وهنا لي عتب على صاحب الموضوع لعدم تفاعله مع موضوعه حتى ولو كانت النتائج غير مرضية حيث الأخطاء ممكن أن تحدث من إنسان مهما كانت خبرته وخصوصا عندما لا يقوم المبرمج بالتجارب والتي تركتها أنا شخصيا لصاحب الموضوع وهكذا أنا دائما حيث أقتنع بالخطوات وأطمئن لها ولا أقوم بالتجارب والتمحيص للأمثلة التي من عمل غيري إلا ما ندر .
ملاحظة : يستطيع أخي محمد طاهر تعطيل الوصلات السابقة للأمثلة .
تحياتي .
الاستاذ أبو هادي لك مني وافر التحية والاحترام
وعتبك مقبول .. ولكن عذري أني لم أستخدم الجهاز بعد أن قمت بتحميل المثال السابق لظروف منعتني من ذلك فلم أتفحص المثال لكي أكتشف نواقصه وقد فعلت انت ذلك مشكوراً مأجوراً
ملاحظة :كتب هذا الكلام قبل أن أرى التعديل الأخير
ولك وافر تحياتي
السلام عليكم
استاذي الفاضل ابو هادي
شكرا على مجهودك الطيب وجعله الله في ميزان حسناتك
اتمنى منك ان تجرب البيانات التالية في سجل جديد وتعطيني رايك في حقل الرصيد الخاص بالاجازات
بداية الخدمة = 1/1/1423
نهاية الخدمة 30/12/1423
مدة الاجازة 15 نوعها استثنائية
شاكرا لك تعاونك وصبرك
السلام عليكم
الأخ mokhal15 :
لقد أعطى النتيجة 28 يوم وهي القيمة للـ 27.5 حسب Round up أي بالأكسس الـ Cint أو Clng وفي حالة ما أريد قيمة الـ Int أي تكون النتيجة 27 تضاف دالة Int بداية سطر حساب الرصيد ليصبح كالتالي :
الرصيد = Int((YGP + (MGP / 12)) * 30) - Nz(Me.م_عادية)
تحياتي .
السلام عليكم
اخي الفاضل ابو هادي
شكرا على تجاوبك
بقي امر وهو ان رصيد الموظف من الاجازات خلال العام الواحد شهر اي ثلاثون يوما وليس 28 او 27 هذا ما اعرفه ولا اجزم بصحته امل افادتي ان كان الامر خلاف ذلك.
ملاحظة الاخ عاشق الاكسس كان طلبه ان يتم انقاص الاجازة الاستثنائية من الرصيد واضن ان الكود يجتاج الى اضافة ذلك
لم ارغب في تعديل الكود الخاص بذلك وتركت ذلك لأناملك الذهبية .
الى لقاء قريب مع اطيب تحياتي
السلام عليكم
أخي الفاضل تستطيع التعديل .. لا توجد موانع ، لقد قمت بتنفيذ ما فهمته وهو كالتالي :
1- أن تنقص فترة الإجازات الإستثنائية من إجمالي فترة الخدمة .
2 - أن تحسب الإجازات للشهور المكتملة فقط وهي 11 شهرا ويحذف أيام الشهر الناقص وهي 15 يوم .
3 - أن تنقص جميع الإجازات ماعدا الإستثنائية من الرصيد .
الأمر لا يحتاج لكل هذا التعقيد .. ولكنه يحتاج إلى مشاركة فاعلة من الأخ عاشق الأكسس ليغلق هذا الموضوع الذي أخذ أكثر من حجمه .
أشكرك كثيرا على فاعليتك واهتمامك .
مع خالص تحياتي للجميع .
شكرا :)
أستأذنك أخي عاشق الأكسس للرد عنك
أستاذي العزيز أبو هادي نحن لدينا في العمل نفس الطريقة التي وضعها عاشق الأكسس تماماً وسوف أخبرك عن ما يتم بالضبط لكي تكون على علم ودراية من غرض من البرنامج .
1- أولاً نحسب خدمة الموظف كاملة من تاريخ مباشرته إلى التاريخ الذي نحدده نحن لغرض إخراج رصيده وهو ما أشار إليه عاشق الأكسس في برنامجه بحقل (الرصيد حتى تاريخ)
2-نحسب لكل موظف إجازته العادية طبعاً عن كل شهر (يومين ونصف اليوم) وهذه قاعدة من وزارة الخدمة في السعودية بمعنى أن السنة الواحدة يستحق عليها الموظف ( شهر كامل ) وعن ستة أشهر ( خمسة عشر يوماً ) وهكذا ..
3- إذا تمتع الموظف بإجازة ( استثنائية) فإنها تنقص من خدمته وبالتالي ينقص رصيده ..مثال (موظف خدم لمدة سنة واحدة وهو يستحق عليها شهر واحد فقط .. ولكنه تمتع خلال هذه السنة بإجازة استثنائية لمدة ستة أشهر فيكون بالتالي مدة خدمته ستة أشهر ورصيده من الإجازات خمسة عشر يوماً)
بمعنى أن رصيد الإجازة متعلق بمدة الخدمة ومدة الخدمة متعلق بالإجازات الاستثنائية لأنها تبعد من خدمته
أرجو أن أكون وضحت المقصود من البرنامج وأنا متأكد من أن هذا هو رأي صاحب الموضوع لأن النظام واحد في السعودية
ولكم خالص شكري
هذا الموضوع مغلق.