الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

احتساب الاجازات كل سنة كيف ؟؟؟؟

Featured Replies

بتاريخ:

اخواني الكرام موضوعي كالتالي :
لدي جدول فيه بيانات الاجازات لكل موظف فيه تاريخ بداية الاجازة وتاريخ نهاية كل اجازة
وفي جدول الموظفين يوجد تاريخ التعيين

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

  • الردود 57
  • المشاهدات 8.6k
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

الصور المنشورة

بتاريخ:

السلام عليكم
أخي الكريم
هل تريد مثلا عمل تقرير يكون به السنة الاولى له عدد الاجازات كده
السنة الثانية كده
والثالثة وهكذا
إذن اعتقد أنك لازم تستخدم تاريخ التعيين كما ذكرت
وتستخدم دالة add_months في جملة ال where
مثال ملحوظة الاعمدة من عندي

where to_char(holiday,'yyyy')=round(to_number(to_char(hiredate,'yyyy'))+(add_months(hiredate,12*:xx)/12),0);



طبعا ال xx سيكتبه به رقم السنة 1-2-3
الشرط ده اضبطه حسب ماعندك
اتمنى ان يحل لك الموضوع

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:

السلام عليكم
أرجو توضيح سؤالك هذا كان سؤالك في اول الموضوع

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


ممكن تشرح لنا الاسكربت الخاص بالجدول كي نتعرف على الشكل وبالتالي نعرف كيف سيكون الشرط
بتاريخ:
  • كاتب الموضوع

table description :

table name : leave
columns
الرقم المتسلسل للاجازات مربوط مع سيكونس leave.leave_id
leave.emp_id رقم الموظف مربوط مع جدول الموظفين
leave_date تاريخ الاجازة
وامور اخرى لاتهم في هذا الموضوع اريد ان اجلب كل الاجازات للموظف بشرط التاريخ ؟ يكون ضمن السنة الحالية يعني لنفرض ان موظف
عين في تاريخ 2-2-2007 الشاشة يجب ان تظهر اجازاته فقط في هذه السنة وهي من تاريخ 2-2-2008 وحتى 2-2-2009
لاحظ ان التاريخ ما بين 2-2-2007 - 2-2-2008 لا اريد جلبها وذلك لاني اريد الاجازات خلال اخر سنة له ؟؟؟ اتمنى ان تكون وصلت الفكرة

بتاريخ:

السلام عليكم
اخي الحبيب ماهر...
هل يوجد عندك جدول خاص بالاجازات ؟؟؟ اكيد انت عامله
ورح يكون جدول الاجازات مربوط بجدول الموظفين صح ؟
بامكانك عمل شاشة استعلام تقوم فيها بالاستعلام عند كل اجازات الموظف خلال السنه الحالية
بامكانك البحث او الاستعلام عن طريق السنه فقط متلا ( 2009 ) او تعمل من تاريخ ... الى تاريخ ولكن النتيجه نفسها اي الاجازات لسنه واحده فقط...

تم تعديل بواسطة PALI.ORACLE

بتاريخ:

السلام عليكم

اخى ماهر ,,

كلام الاخ Pali.oracle
صحيح .. حيث انه كيف سوف تحسب عدد الايام بدون ان يكون عند قيمه مخزنه .. و سوف اعرض عليك اخى فكرتين واحدة منها هى للاخ Pali.oracle و الثانيه حاصه بى
---------------------------
- جدول بيه .. 32 عمود خاص بايام الشهر .و رقم الموظف . و كل يوم تحط مثلا 1 و يوم الغياب يبقا بnull فى الاخر تحسب ال null لسجل واحد .. ده حيسعدك فى عرفه الايام بالظبط

- تعمل جدول فيه عمودين .. عمود فيه رقم الاجازات و رقم الموظق .. و كل يوم يغيب فيه .. تضيف رقم1 فوق القديم فتعرف التوتل فى الاخر مة واحدة

و بالتوفيق مش عارف انا افدتك ولا لا

بس ربنا يوفقك

بتاريخ:

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

بتاريخ:

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

select count(*) into :no_hloy from leave where emp_id=:emp_id and (to_char(leave_date  ,'yyyy') between round(to_number(to_char(hiredate,'yyyy'))+(add_months(hiredate,12*:xx-1)/12),0) and round(to_number(to_char(hiredate,'yyyy'))+(add_months(hiredate,12*:xx)/12),0));



طبعا على اساس انك بتحفظ السجلات من تاريخ بداية الاجازة إلى نهايتها سجل سجل في جدول ال leave يعني لو الاجازة 5 أيام ستكون عدد السجلات 5 أيام
وبكده سيكون العملية بسيطة
بالنسبة للايتم xx ده رقم السنة الاي بعد تعيينه فمثلا لو السنة ال 5 سيقوم الاستعلام السابق بجلب البيانات من السنة الرابعة الى الخامسة وهكذا
ويمكنك الحصول على قيمة xx تلقائيا من خلال طرح تاريخ اليوم -تاريخ التعيين والناتج تقسمه على 365 يوم وهكذا او يمكنك ادخالها يدويا
يمكنك التعديل فيه بحسب ماعندك
منتظر ردك

بتاريخ:
  • كاتب الموضوع

declare
x date;
y date;
z date;
	m number;
n number;
begin select to_number(to_date( sysdate,'dd/mm/yyyy')-to_date(CONTRACT_START_DATE,'dd/mm/yyyy'))
into n from contract;
select n / 365 into m from dual;

select leave.leave_id into :leave_id from leave , contract
where leave.leave_date between 
round(to_number(to_char(contract.CONTRACT_START_DATE,'yyyy'))+(add_months(contract.CONTRACT_START_DATE,12*m-1)/12),0) and round(to_number(to_char(contract.CONTRACT_START_DATE,'yyyy'))+(add_months(contract.CONTRACT_START_DATE,12*m)/12),0));
message(n);
 message(m);

end;




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

بتاريخ:
  • كاتب الموضوع

select to_number(to_date(sysdate,'dd/mm/yyyy')-to_date(CONTRACT_START_DATE,'dd/mm/yyyy')) /365-1
into v_diff
from contract;

اخي الكريم وضعت هذا الكود وهو يعطي الفرق بين تاريخ التعيين وتاريخ اليوم ناقص سنة
يعني لو انه موظف منذ 4 سنوات سيعطي 3 سنوات
الان ماذا لو عملنا بعد هذا الكود زيادة سنة باستخدام add_months
حاولت فيها ولكن بلا نتيجة لا ادري ما الحل؟

بتاريخ:

هو انا مش فاهم اوي المطلوب
انا هقولك وانت تقوللي انا فهمت صح ولا لأ ؟؟
انت عندك تاريخ اجازة مسجل في جدول ... صح ؟؟
وعايز تجيب رقم الموظف اللي تاريخ اجازته ده تقع ما بين تاريخ النهارده واخر تاريخ قام فيه باجازه ؟؟؟

وبفرض ان الاجازات سنوية ، يعني كل 365 يوم بياخد اجازة سنوية .... صح ؟؟؟

المهم : انا عملتلك مثال على جدول EMPLOYEES بتاع HR
رقم الموظف ، وتاريخ التعيين , وتاريخ اخر سنة ( المستحق فيه الاجازات ) بشرط ان يكون اخر سنة ده عبارة عن تاريخ التعيين مضاف اليه عدد سنين الاجازة ، يعني لو كان خد 5 اجازات ، كده معناه ان اخر تاريخ يستحق معه الاجازة ، تاريخ التعيين + 5 سنوات

مش عارف انا شخصيا مش عارف اوضح المثال ... بس يارب تكون الفكرة وصل

SELECT E.EMPLOYEE_ID ,E.HIRE_DATE ,ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31) LAST_YEER
FROM EMPLOYEES E 
WHERE :MY_DATE BETWEEN  (ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31) ) AND SYSDATE

بتاريخ:
  • كاتب الموضوع

يا اخوان مش معقول لحد الان ولا واحد فاهمني

انا عندي موظف له عدد اجازات معينة خلال السنة الواحدة
اريد الاستعلام عن اجازات اخر سنة
اخر سنة المقصود فيها على اعتبار انه مازال على راس عمله
مثال : موظف اشتغل في 1/2/2005 كم سنة له بيشتغل 4 سنين
انا بدي اجيب اجازات اخر سنة له يعني من الفترة 1/2/2008 الى تاريخ 1/2/2009
ولكن ظهرت مشكلة جديدة ماذا عن باقي الايام المتبقية من 1/2/2009 - اليوم ؟؟؟

بتاريخ:

يافندم المثال اللي انا وضعته لحضرتك يأدي الغرض اللي حضرتك عايزه واللي انت ذاكره بمالثال

لو واحد تاريخ تعين 1-2-2005 ، حضرتك اخر سنة بالنسبة لي ( على اعتبار ان اجزته سونيا منتظمة ) يعني هضيف سنة كل مرة

يبقى المفروض عايز تجيب الداتا بتاعته على اعتبار انا اخر سنة ده 1-2-2008 إلى تاريخ اليوم ، يا أما حضرتك عايز لحد 1-2-2009 ، وال5 شهور الباقيه مش يتحسبوا
.... ولو ده اللي الحضرتك تقصده يبقى المثال يوفي بالغرض ان شاء الله

****************************
لي ملاحظة : احسست من كلام سيدتك انك متنرفز من الاعضاء ان محدش فاهمك ، معذرة اي عضو بيخش بيشارك وبيحاول يرد على حضرتك اكيد مستقطع جزء من وقته عشان يرد ويحاول يساعد ، فأكيد كلمة الشكر اولى من العتاب حتى ولو الحل خطأ او مش مفهوم .... ده نصيحة اخوية ولا تحمل اي صفة تاني ، اخوية ولله

بتاريخ:
  • كاتب الموضوع

اخي الكريم ماذا تقصد ب WHERE :MY_DATE

بتاريخ:

معلشي على المقاطعة
أعتقد أن كلام أخي عبدالله صحيح

احسست من كلام سيدتك انك متنرفز من الاعضاء ان محدش فاهمك ، معذرة اي عضو بيخش بيشارك وبيحاول يرد على حضرتك اكيد مستقطع جزء من وقته عشان يرد ويحاول يساعد ، فأكيد كلمة الشكر اولى من العتاب حتى ولو الحل خطأ او مش مفهوم .... ده نصيحة اخوية ولا تحمل اي صفة تاني ، اخوية ولله

أنا لاحظت أن أخي ماهر يغير مطلوبه في كل مشاركة
أخي الكريم المفروض توضح مطلوبك بكل توضيح
بسي انت عايز الحل بدون ماتطرح مشكلتك بكل الوضوح
بتاريخ:

تاريخ الاجازة بس بشرط انه يكون ما بين تاريخ اخر سنة وتاريخ اليوم ... ده معنى الشرط

بتاريخ:
  • كاتب الموضوع

اخواني الكرام
مشكورين جميعا على جهودكم الجبارة ولكن لا اقبل اتهاماتكم الي بخصوص اني لا اشكر احدا او انني اغير المطلوب
انا اعرف ما اقول واتهاماتكم هذه لا اقبلها ابدا اتحداكم ان وجدتم لي مشاركة بدون ان اشكر صاحبها
ومع كل هذا مشكورين وحتى لو كان كلامكم صحيح ارجو ان تسامحوني وان كان كلامك خطـ فأنا مسامحكم
احنا اخوان وحبيايب يجمعنا دين واحد ومنتدى واحد يستظل الكل بظله ليتعلم ويعلم الاخرين
مشكورين مشكور كل من قرا الموضوع ومن رد عليه وسأجرب مشاركاتكم وخصوصا اخر مشاركة للاخabdu1_far
وشكرا

بتاريخ:

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

بتاريخ:
  • كاتب الموضوع

انا مش زعلان بالعكس انا كتير مبسوط وما صار شي وسامحنا
صحيح لسه الكود مش زابط بس مش مشكلة هاهاهاها حبيبي مشكور

بتاريخ:

مش فاهم ليه بس مش زابط ... على العموم انا هعملك ان شاء الله الكود على الجدول بتاعك

بتاريخ:
  • كاتب الموضوع

مشكور سلفا

بتاريخ:

ده الكود بعد ربطه بجدول الLEVE مع جدول EMPLOYEES الموجود في اسكيمة HR

في حالة اخر سنة عملية إلى تاريخ اليوم

SELECT E.EMPLOYEE_ID ,E.HIRE_DATE ,ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31)-365 LAST_YEER,L.LEAVE_DATE
FROM EMPLOYEES E ,LEAVE L
WHERE E.EMPLOYEE_ID=L.EMP_ID AND LEAVE_DATE BETWEEN  (ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31) )-365 AND SYSDATE



وده في حالة اخر سنة عملية لحد بداية السنة العملية الحالية ، يعني لو السنة الاخير العملية ليه 10-5-2008 ، يبقى بداية السنة الحالية بتاعته 10-5-2009 ، والشهرين الباقين من تاريخ اليوم شوف انت بأه عايز تعالجهم ازاي


SELECT E.EMPLOYEE_ID ,E.HIRE_DATE ,ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31)-365 LAST_YEER,L.LEAVE_DATE
FROM EMPLOYEES E ,LEAVE L
WHERE E.EMPLOYEE_ID=L.EMP_ID AND LEAVE_DATE BETWEEN  (ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31) )-365 AND (ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31) )



يارب يكون الحل صحيح ... وربنا يوفقك


رفق صورة بالبيانات الموجوده في جدول LEVE للاختبار

post-32961-1246790527_thumb.jpg

تم تعديل بواسطة abdu1_far

بتاريخ:

السلام عليكم

اخى ماهر و كل الاعضاء

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

هو ليه بنصعب الكود .. و بنصعب الفكرة .. ؟؟

ليه منحولش يبقا الحل بيسط و سهل

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

الله اعلم

ربنا يوفق الجميع

بتاريخ:
  • كاتب الموضوع
ده الكود بعد ربطه بجدول الLEVE مع جدول EMPLOYEES الموجود في اسكيمة HR

في حالة اخر سنة عملية إلى تاريخ اليوم

SELECT E.EMPLOYEE_ID ,E.HIRE_DATE ,ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31)-365 LAST_YEER,L.LEAVE_DATE
FROM EMPLOYEES E ,LEAVE L
WHERE E.EMPLOYEE_ID=L.EMP_ID AND LEAVE_DATE BETWEEN  (ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31) )-365 AND SYSDATE



وده في حالة اخر سنة عملية لحد بداية السنة العملية الحالية ، يعني لو السنة الاخير العملية ليه 10-5-2008 ، يبقى بداية السنة الحالية بتاعته 10-5-2009 ، والشهرين الباقين من تاريخ اليوم شوف انت بأه عايز تعالجهم ازاي


SELECT E.EMPLOYEE_ID ,E.HIRE_DATE ,ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31)-365 LAST_YEER,L.LEAVE_DATE
FROM EMPLOYEES E ,LEAVE L
WHERE E.EMPLOYEE_ID=L.EMP_ID AND LEAVE_DATE BETWEEN  (ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31) )-365 AND (ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31) )



يارب يكون الحل صحيح ... وربنا يوفقك


رفق صورة بالبيانات الموجوده في جدول LEVE للاختبار




اخي الكريم مشكووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووور
وفعلا هذا هو الكود المناسب في المكان المناسب
ولكن عندي تعليق بسيط على الكود
لماذا عندما يكون الموظف تعين في هذه السنة الحالية يرجع التاريخ سنة للاجازات وساوضح في الصورة ما اقصد
شرح الصورة : موظف تعين في 1/7/2009
لاحظ انه رجع سنة مع انه للعلم قام الكود بجلب اجازاته وهي صحيحة
شيء اخر وهو لماذا تظهر هذه الرسالة في الصورة علما ان البلوك ليس database
واخيرا اضع لكم الكود على الفورم :
declare

-----------leave-----------------------
cursor emp_leave is 
SELECT E.EMP_ID ,l.leave_id,E.HIRE_DATE ,ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31)-365 LAST_YEER,L.LEAVE_DATE
FROM EMPLOYEES E ,LEAVE L
WHERE E.EMP_ID=l.leave_emp_id AND LEAVE_DATE BETWEEN (ADD_MONTHS(E.HIRE_DATE,(TO_DATE(SYSDATE)-TO_DATE(E.HIRE_DATE))/31) )-365 AND SYSDATE;
---------------------------------------
begin -----------leave-----------------------
open emp_leave ;
loop 
next_record;
fetch emp_leave into :leave.emp_id,:leave.leave_id,:leave.hire_date,:leave.year,:leave.leave_date; exit when emp_leave%notfound;

end loop;
close emp_leave;
exception when no_data_found then
message('لا يوجد بيانات');
	message('لا يوجد بيانات');
end;

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.