الانتقال إلى المحتوى
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

بتاريخ:

السلام عليكم
في شاشة من شاشات المشروع قمت بادراج سبعة حقول
الحقل الأول يعرض تاريخ اليوم
الثاني تاريخ غداً
الثالث تاريخ بعد غد ....الخ

:CONTROL.DATE1:=GET_SYSDATE;
:CONTROL.DATE2:=GET_SYSDATE+1;
:CONTROL.DATE3:=GET_SYSDATE+2;
:CONTROL.DATE4:=GET_SYSDATE+3;
:CONTROL.DATE5:=GET_SYSDATE+4;
:CONTROL.DATE6:=GET_SYSDATE+5;
:CONTROL.DATE7:=GET_SYSDATE+6;



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

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

بتاريخ:

هذه الفنكشن للاخ مصطفى تستثني ايام الجمع من بين تاريخين
اتمنى منك ان تعدل فيها لما تريده انت

create or replace function fri_bet (date1 date,date2 date ) return number as day_bet number;
day number;
fri_count number :=0;
begin select date2-date1 into day_bet from dual;
for i in 1.. day_bet+1 loop
select to_char(date1-1+i,'d') into day from dual;
if day=7 then
fri_count:=fri_count+1;
end if;
end loop;
return(fri_count);
end;

بتاريخ:

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

بتاريخ:

طيب بغض النظر عن اجابة سؤاللي اللي فوق
اتفضل ياسيدي

ده الحل من وجهة نظري

هتكريت TYPE وهتكريت FUNCTION_TABLE على الداتا بيز

CREATE OR REPLACE TYPE CLND_TEST AS TABLE OF DATE ;

CREATE OR REPLACE FUNCTION GET_CLND   RETURN CLND_TEST PIPELINED
IS
BEGIN FOR i IN 0 .. 6
 LOOP
    IF TRIM(TO_CHAR(SYSDATE+I,'DAY')) NOT IN(TRIM('FRIDAY'),TRIM('SATURDAY'))
     THEN 
       PIPE ROW (SYSDATE+I);
      end if;
 END LOOP;

 RETURN;
end;
/



وده السكلتاية اللي هتجيب النتائج ان شاء الله

SELECT  * FROM  TABLE(GET_CLND())




اه ملحوظة لو اللغة عندك عربي يبقى بدل

NOT IN(TRIM('FRIDAY'),TRIM('SATURDAY'))


هتيبقى

NOT IN(TRIM('الجمعة'),TRIM('السبت'))



اتمنى ان يكون حل مناسب

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

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

بتاريخ:

معلش ياباشا
هنعمل تعديل عشان نعرف نعرضها على الفورمة

معلش انا كنت فاكرك عايزه في الداتا بيز
على العموم ده التعديلات

CREATE OR REPLACE TYPE CLND_OBJ AS OBJECT( RECID INTEGER , MY_DATE DATE );

CREATE OR REPLACE TYPE CLND_TYPE AS TABLE OF CLND_OBJ;

CREATE OR REPLACE FUNCTION GET_CLND  RETURN CLND_TYPE PIPELINED
IS
V_CONUT INTEGER :=0; 
BEGIN FOR I IN 0 .. 6
 LOOP
    IF TRIM(TO_CHAR(SYSDATE+I,'DAY')) NOT IN(TRIM('FRIDAY'),TRIM('SATURDAY'))
     THEN  
        V_CONUT := V_CONUT +1;
        PIPE ROW (CLND_OBJ (V_CONUT,SYSDATE+I));
      end if;
 END LOOP;

 RETURN;
end;
/



وهتعرضها في الفورمة كده

SELECT MY_DATE INTO :CONTROL.DATE1 FROM TABLE(GET_CLND()) WHERE RECID=1;
SELECT MY_DATE INTO :CONTROL.DATE2 FROM TABLE(GET_CLND()) WHERE RECID=2;
 SELECT MY_DATE INTO :CONTROL.DATE3 FROM TABLE(GET_CLND()) WHERE RECID=3;
 SELECT MY_DATE INTO :CONTROL.DATE4 FROM TABLE(GET_CLND()) WHERE RECID=4;
 SELECT MY_DATE INTO :CONTROL.DATE5 FROM TABLE(GET_CLND()) WHERE RECID=5;



جرب ياباشا وقولي

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

أخي عبدالله ظهر الخطأ التالي
تحذير: تم تكوين نوع مع أخطاء ترجمة

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

تم تكوين وظيفة ..
سأقوم بالتجربة الأن والرد

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

ألف ألف ألف شكر لك أخي عبدالله أنا مش عارف أقولك ايه
تمت العملية بنجاح
ولكن أخي عبدالله هناك سؤال آخر
لو صادف الحقل الثاني ( على سبيل المثال ) تاريخ آخر الشهر أريده أن لا يقوم بتعبئة باقي الحقول( الثالث , الرابع , الخامس ) بأي تاريخ وأن تكون فارغة ..كيف يمكن عمل ذلك ..؟
وألف شكر لك أخي عبدالله على المساعدة الكبيرة

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

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

وأخي عبدالله أريد أن أعرض في الحقول الخمسة السابقة التاريخ + اليوم .. هل يمكن عمل ذلك ..؟
ليس شرط أن أقوم بعرضهم في نفس الحقل ..
أريد مثلا عرض اليوم في حقول مستقلة كيف يمكن عمل ذلك ..؟
وتحياتي أخي عبدالله

بتاريخ:

ياباشا ... لاشكر على واجب

بالنسبة للسؤال بتاعك ... هنحتاج نعدل الفانكشن
وتبقى بالشكل ده

CREATE OR REPLACE FUNCTION GET_CLND  RETURN CLND_TYPE PIPELINED
IS
V_CONUT INTEGER :=0;
V_DATE DATE ; 
BEGIN FOR I IN 0 .. 6
 LOOP
    IF TRIM(TO_CHAR(SYSDATE+I,'DAY')) NOT IN(TRIM('FRIDAY'),TRIM('SATURDAY'))
     THEN  
       V_CONUT := V_CONUT +1;
       IF TRIM(TO_CHAR(SYSDATE+I,'MM')) <> TRIM(TO_CHAR(SYSDATE,'MM'))
         THEN
        V_DATE :=  NULL ;
        ELSE
          V_DATE := SYSDATE+I;
        END IF ;
          
        PIPE ROW (CLND_OBJ (V_CONUT,V_DATE));
      end if;
 END LOOP;

 RETURN;
end;
/



جرب ياباشا وانا تحت امرك

بتاريخ:

بالنسبة لسؤال اظهار اليوم
براحتك ياباشا لو عايز تظهر اليوم في نفس الحقل
هتغير الفانكشن لتالت مرة
وهتزود اليوم ... بس كده هنعدل في النوع بتاع الاوبجكت هنخلليه بدل ما يكون تاريخ هيبقى VARCHAR2
ونكريت PL_TABLE تاني
وبعد كده نكريت الفانكشن

لو انت مش فارقه معاك في نفس الايتم ولا لأ

يبقى هتعمل 5 ايتم تاني على الفورم .... وليكن ITEM1 , ITEM2 ,ITEM3,ITEM4,ITEM5

وفي نفس الكود اللي كنت بتنادي فيه الفانكشن اللي فاتت هتكتب الكود ده ... بس طبعا لكل ايتم ، انا عملته على ايتم واحد ، كمل بأه انت باقي اللايتم

SELECT TO_CHAR(:CONTROL.DATE1,'DAY','nls_date_language=arabic') INTO :CONTROL.ITEM11 FROM DUAL ;



وبالمثل على الاربعة الايتم التانين ، مع الاربع تواريخ التانين
جرب ياباشا ... وانا تحت امرك يافندم

معلش بأه لو حبيت يظهر اليوم في نفس الايتم ... هتستنى عليا بأه لبكرة ، عشان عندي شوية شغل

بتاريخ:

أخي العزيز فقط استخدم في الwhere clause هذا الشرط


 
where to_char(your_date,'d') <= 5

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

لا أعلم كيف أشكرك أخي عبدالله
تم الحل كما أريد بالضبط
ألف شكر لك أخي على هذه المساعدة الكبيرة

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

والشكر الجزيل لأخي أحمد
لقد قام أخي عبدالله بالحل الكلي كما أريد بالضبط

بتاريخ:

السلام عليكم ورحمة الله

شكرا لجميع الأخوه ( ماهر - عبدالله - احمد ) على المشاركات المثمرة... السريعة... وعلى روح التعاون لحل تساؤل الأخ / PrisonBreak

وهذا ليس بغريب على اعضاء منتدانا الحبيب ... الكرام

لقد استفدنا من هذه المشاركة ... وسيتسفيد منها اخرين

جزاكم الله خيرا

------------
أعجبنى توقيع الأخ / عبده

قال رسول الله صلى الله عليه وسلم "إن لله عز وجل عباداً أختصهم بقضاء حوائج الناس ، حببهم إلي الخير وحبب الخير إليهم
هم الاّمنون من عذاب الله يوم القيامة " أوكما قال صلى الله عليه وسلم

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

فعلا أن هذا المنتدى مليئ بالأعضاء المميزين والذين يمتلكون روح التعاون
ألف شكر لأعضاء هذا المنتدى الرائع
وألف شكر لمشرفنا المميز أمجد
تحياتي

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

بتاريخ:

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

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

---------------------------------------------------------------
اخي PrisonBreak
الحمد لله ان مشكلتك اتحلت ...
وتحياتي إلي أهل غزة العظام ... وربنا يحرر الاقصى الاسير ، اللهم ءامين
اخوك : عبدالله

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

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

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

---------------------------------------------------------------
اخي PrisonBreak
الحمد لله ان مشكلتك اتحلت ...
وتحياتي إلي أهل غزة العظام ... وربنا يحرر الاقصى الاسير ، اللهم ءامين
اخوك : عبدالله

جزاك الله كل خير اخوي عبدالله
وانت دائما سباق في الحلول الرهيبة
وبارك الله فيك ووسع لك رزقك
شكرا لكم جميعا
بتاريخ:
  • كاتب الموضوع
جزا الله خيراً كل من ساهم ولو بكلمة بسيطة في حل مشكلة من مشكلات احد الاعضاء
واتمنى اي واحد داخل يجاوب او يساهم في الحل ... انه يجدد النية لله عز وجل ، مين عارف قد تكون الاجابة ده سبب عتق رقبتك من النار ... قال رسول الله صلي الله عليه وسلم " من نفث عن مؤمن كربة من كرب الدنيا نفث الله عنه كربة من كرب يوم القيامة ، ومن يسر على معسر يسر الله عليه في الدنيا والاخرة ، والله في عون العبد ما دام العبد في عون اخيه " .... او كما قال صلي الله عليه وسلم..

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

---------------------------------------------------------------
اخي PrisonBreak
الحمد لله ان مشكلتك اتحلت ...
وتحياتي إلي أهل غزة العظام ... وربنا يحرر الاقصى الاسير ، اللهم ءامين
اخوك : عبدالله


آمين يا رب
جزاك الله كل خير أخي عبد الله
ألف شكر لك ولكل الأعضاء
تحياتي
  • بعد 1 شهر...
بتاريخ:

أخي Prison Break جرب هذا الحل ولو أني أعلم أني متأخر جداً ولعلك قد حللت المشكلة بالفعل ولكن محاولة

select sysdate + decode(to_char(sysdate  ,'d'), 6, null, 7, null, 0) into :CONTROL.DATE1 from dual;
select sysdate + decode(to_char(sysdate+1,'d'), 6, null, 7, null, 1) into :CONTROL.DATE1 from dual;
select sysdate + decode(to_char(sysdate+2,'d'), 6, null, 7, null, 2) into :CONTROL.DATE1 from dual;
select sysdate + decode(to_char(sysdate+3,'d'), 6, null, 7, null, 3) into :CONTROL.DATE1 from dual;
select sysdate + decode(to_char(sysdate+4,'d'), 6, null, 7, null, 4) into :CONTROL.DATE1 from dual;
select sysdate + decode(to_char(sysdate+5,'d'), 6, null, 7, null, 5) into :CONTROL.DATE1 from dual;
select sysdate + decode(to_char(sysdate+6,'d'), 6, null, 7, null, 6) into :CONTROL.DATE1 from dual;

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

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

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

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

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

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.