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

بتاريخ:

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

بنيت تقرير صحيح ولكن عند اظهاره عملت اخفاء لبعض السجلات التي قمت بتحديدها من خلال وضع شرط على المخرجات يرجع لي بي True اذا كان كذا وكذا وغير ذلك False

لكن عندما قمت بجمع مبلغ عمود من الأعمدة عن طريق استخدام الدوال الموجدودة عند استخدام التقرير sum , count, avgm ..... المعروفة اجد انه اعطى لي مبلغ غير مجموع المبلغ الظاهر (المبالغ الفعليه) وانما اضاف ايضا السجلات المستبعدة فعندما حذفت الشرط على الاخراج وجدت ان المجموع صحيح

فهل من طريقة تستثني السجلات المخفية من عملية الجمع

علما انني لجات لاخفاء بعض السجلات لضرورة عمل ذلك ولايمكن وضع شرط على مستوى الاستعلام

التقرير يحتوي ايضا على قروب

أرجو إفادتي في عملية حساب مجموع السجلات الظاهرة في التقرير وليس المستعلم عنها

بتاريخ:

اخي الكريم
ممكن عمل ذلك بوضع Formula تقوم بتصفير القيم حسب الشرط او تضع فيه نفس الشرط الذي تضعه في الاخفاء وتضع هذه Formula بنفس المجموعة
وللتوضيح اكثر
مثلا انت تضع في جملة الاخفاء الشرط التالي
هذه الجملة تقوم بفحص اذا كان حالة الموظف نشط اظهره واذا كان غير ذلك اخفيه
طبعا تضعها على trigger ال repeater

if :emp_status='A' then
return (true);
else
return(false);
end if;


اما بالنسبة للفورميلا
تضع نفس المكود مع تغيير بسيط هو تصفير القيمة بالشكل التالي

function f_resultFormula return Number is
begin
if :emp_status='A' then
 :emp_salary:=0;
  return(:emp_salary);
else
   return(0);
end if;
end;


حيث :emp_salary هو راتب الموظف

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

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

السلام عليكم أخي أسامة

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

الخطأ
Error 902
A READ-ONLY bind variable used OUT or IN-OUT context

هذا بالنسبة لعملية الجمع لكن كيف تكون لعملية عد السجلات Count

واسف على الاطالة

بتاريخ:

السلام عليكم
كلامك صحيح اخي بالنسبة للخطأ
وهذا التصحيح بالنسبة للكود الثاني

function f_resultFormula return Number is
begin
if :emp_status='A' then
 return(:emp_salary);
else
  return(0);
end if;
end

;
حيث استثنيت
:emp_salary:=0;

بالنسبة للرقم المسلسل نفس الفكرة ضع
اتبع الخطوات التاليه
ضع ال placeholder column مستوى المجموعة او خارجها ما ابتفرق
اجعل ال data type عبارة عن number
الخطوة الثانية
ضع formula من نوع number في نفس مجموعة ال counter
بعدها ضع الكود التالي

function CF_COUNTERFormula return Number is
TEMP NUMBER:=1;
begin
   IF :emp_status='A' THEN
  TEMP:=:CP_1+1;
   :CP_1:=TEMP;
 END IF;
   RETURN(TEMP);  
 end;


طبعا ضع ال source كلوم اسم الفورميلا عشان تعرض الرقم المسلسل
حيث :CP_1 هو الplaceholder
مع ملاحظة ان تضع قيمة صفر لل placeholder اذا كانت قيمته NULL وهذه تجدها بالخصائص

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

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

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

وألف شكر ياعزيزي

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

عزيزي أسامة هناك من المحتمل خطا لايمكن حله الا اذا هناك ادوات تجهلني

عندما عملت الخطوات بالنسبة للرقم المسلسل والفورميلا لاتعمل الا اذا كانت بنفس المجموعة ومعنى هذا ان كل سجل راح يظهر راح يظهر تحت رقم التسلسلي بمعنى آخر
id name status
--------------------------------------------------
السجل الأول
1
السجل الثاني
2
السجل الثالث
3

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

id name status
--------------------------------------------------
السجل الأول
السجل الثاني
السجل الثالث

3

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

بتاريخ:

الاخ الكريم
بالنسبة لسؤالك انك تريد المجموعة فممكن ان تضع ال placeholder خارج المجموعة مع الابقاء على الفورميلا موجودة ضمن المجموعة اي تحذف ال placeholder الموجودة داخل المجموعة وتنشئ واحده اخرى بنفس الاسم وونفس نوع ال data type ولكن خارج المجموعة
بعدها تنشئ فوميلا خارج المجموعة تضع فيها هذا الكود لتعرضها بالنهاية

function CF_CTotalFormula return Number is
TEMP NUMBER:=1;
begin
TEMP:=:CP_1;
  RETURN(TEMP);  
end;  



حيث ان الفورميلا الاولى تغير القيمة في placeholder حسب المجموعة
مع ملاحظة انه ليس شرط ان يكون ال palceholder بنفس المجموعة وهذه هي وظيفته الاساسة ويستخدم لوضع قيمة او نتيجة نستطيع استخدامها لأكثر من مجموعة مختلفة في التقرير
ارجو ان تكون الصورة قد وضحة مع ملاحظة انه في layout يجب ان يكون الاجمالي خارج ال repeater او ما يسمى ب R_1 مثلا لتكون بمستوى الفورميلا الثاني والذي يعرض القيمة النهائية :D

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

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

فقمت بالتعديل على الفورميلا الأخيرة وتكون بالشكل التالي


function CF_CTotalFormula return Number is
begin
 RETURN(:CP_1);  
end;  





ويكون العمل صحيح 100% على مجموعة وحدة لكن كيف يمكن ان يكون كل مجموعة يعمل لها حساب لسجلاتها كل مجموعة على حدة فعملها أصبح كالتالي جمع المجموعة الأولى بطريقة صحيحة ثم أحتفظ بالمجموع وأضاف عليه مجموع المجموعة الثانية فأصبح مجموع المجموعة الثانية المجموع الأول + الثاني :D :)

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

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

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

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

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

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

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.