هذه المشكلة تتكرر في التعيين وفي المغادرة/الفصل وفي بداية الإجازة وفي المباشرة بعد العودة من الإجازة.
وهناك اقتراحين لتفادي هذه المشكلة.
إما بإستخراج متوسط الراتب اليومي بقسمة راتب الشهر على مدته دون التعديل في الأيام.
أو باستخراج متوسط الراتب اليومي بضرب الراتب في 12 ثم قسمته على 365 للسنة البسيطة أو 366 للسنة الكبيسة وبدون التعديل في الأيام، وهو الأفضل.
موفقين
اسمح لي أخي @محمد مرسي السيد الحل في الملف غير صحيح محاسبيا وإن طبقته راح تظلم فيه الموظفين.
حساب الأيام والمبالغ غير صحيحة.
إذا لا تستطيع أن تقيم الحلول المقدمة فاستعن بمحاسب.
ملاحظة صغيرة: أيام الخمس سنوات مدتها 1826 يوم وليس 1825.
يفترض أن تخبرنا بالرسالة
أعتقد أن المشكلة أنك تستخدم 64 بت.
أنا عدلت على المثال ليعمل على 32 و 64 بت.
علما المثال ليس لي.
وسؤال لك لو سمحت هل تستخدم هجري النظام أم تقويم أم القرى؟
Cal_20211231.rar
هذا الأرقام التسلسلية للتاريخ وهي الأصل كقيمة وكتخزين وما نراه على شكل تاريخ ما هو إلا تنسيق شكلي له.
عموما هذه القيمة أنا أبدلها بتمرير عبارة SQL عند أمر فتح التقرير باستخدام خاصية OpenArgs
دالة Nz ، دالة قوية وتغنيك عن استخدام عبارة الـ if ، أو دالة IIf
علما لم أطلع على كل الأكواد ولم أقرأ جميع الردود ولما علقت لم أركز على كاتبها ، ونحن في منتدى نتعلم كل يوم شيء جديد وكثير من الأحيان أبدل فيه طريقتي التي اعتدت عليها لما أرى طريقة جديدة دون التدقيق كثيرا في كاتبها.
لكم كل الود والتقدير.
لا أنصحك بالتعديل على عمل غيرك ، وإن اضطررت للتعديل فلا تقم بنشره وغالبا لن تستطيع فمع الوقت سوف تنسى وتقوم بنشر عمل "مشوه" إن صح التعبير قد يسيء إلى كاتبه.
المثال بعد التعديل
حتى أستطيع أن أتم العمل قمت بحدف كل الأكواد التي رأيتها أنا غير مطلوبة وبدلت جل الأسماء للجداول والأدوات وبدلت في تركيب الجداول وإعادة ربطها وكثير لا أتذكر كل شيئ الآن.
لم أفتح مثالك الأخير.
يمكن اختصار:
n = IIf(IsNull([Text0]), 0, [Text0])
إلى:
n = Nz(Me.Text0), 0)
ويمكن لمزيد من الاختراز تبديل:
If IsNull(fld.Value) Then
إلى:
If Trim(Nz(fld.Value, "")) = "" Then
مع الإعتذار لكاتب الأكواد فهي صحيحة ولكن صيغت أولها للإختصار والأخرى لمزيد من الإحتراز.