بتاريخ: 11 يونيو 200619 سنة comment_71795 السلام عليكم ورحمة الله وبركاتهبنيت تقرير صحيح ولكن عند اظهاره عملت اخفاء لبعض السجلات التي قمت بتحديدها من خلال وضع شرط على المخرجات يرجع لي بي True اذا كان كذا وكذا وغير ذلك Falseلكن عندما قمت بجمع مبلغ عمود من الأعمدة عن طريق استخدام الدوال الموجدودة عند استخدام التقرير sum , count, avgm ..... المعروفة اجد انه اعطى لي مبلغ غير مجموع المبلغ الظاهر (المبالغ الفعليه) وانما اضاف ايضا السجلات المستبعدة فعندما حذفت الشرط على الاخراج وجدت ان المجموع صحيح فهل من طريقة تستثني السجلات المخفية من عملية الجمععلما انني لجات لاخفاء بعض السجلات لضرورة عمل ذلك ولايمكن وضع شرط على مستوى الاستعلامالتقرير يحتوي ايضا على قروبأرجو إفادتي في عملية حساب مجموع السجلات الظاهرة في التقرير وليس المستعلم عنها تقديم بلاغ
بتاريخ: 11 يونيو 200619 سنة comment_71808 اخي الكريمممكن عمل ذلك بوضع 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 هو راتب الموظف طبعا المجموع يكون مجموع الفورميلاارجو ان يساعدك هذا الحل وتكون قد وصلت الفكرة تقديم بلاغ
بتاريخ: 12 يونيو 200619 سنة كاتب الموضوع comment_71860 السلام عليكم أخي أسامةالفكرة ممتازة جدا ولكن عند تطبيقها ومحاولة تصفير العمود أظهر لي رسالة خطأ علما أنني حاولت حل الخطا لكن دون فائدةالخطأError 902A READ-ONLY bind variable used OUT or IN-OUT contextهذا بالنسبة لعملية الجمع لكن كيف تكون لعملية عد السجلات Countواسف على الاطالة تقديم بلاغ
بتاريخ: 12 يونيو 200619 سنة comment_71928 السلام عليكمكلامك صحيح اخي بالنسبة للخطأوهذا التصحيح بالنسبة للكود الثاني 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 وهذه تجدها بالخصائص تقديم بلاغ
بتاريخ: 13 يونيو 200619 سنة كاتب الموضوع comment_71985 السلام عليكم ورحمة الله وبركاتهتسلم يدينك يا أخ أسامة بصراحة وبدون أي مجاملة قليل الذين مثلك وصراحة اتمنى إنك بالسعودية وبالأخ بالرياض لكي أقابلك مو علشان حل المسألة لا.. لأني بصراحة كل مشاركاتك بالمنتدى اطلعت عليها وتنم عن شخص فاهم وأتمنى التواصل الدائم معاكوألف شكر ياعزيزي تقديم بلاغ
بتاريخ: 13 يونيو 200619 سنة كاتب الموضوع comment_71994 عزيزي أسامة هناك من المحتمل خطا لايمكن حله الا اذا هناك ادوات تجهلنيعندما عملت الخطوات بالنسبة للرقم المسلسل والفورميلا لاتعمل الا اذا كانت بنفس المجموعة ومعنى هذا ان كل سجل راح يظهر راح يظهر تحت رقم التسلسلي بمعنى آخرid name status--------------------------------------------------السجل الأول1السجل الثاني2السجل الثالث3عملها صحيح بالجمع لكن يذكر لي بعد كل سجل رقمه انا لا أحتاج لهذه الطريق أنا أريد مجموع السجلات مرة واحدة نهاية كل مجموعة والمشكلة لو وضع خارج مجموعة كيف سيستدل على الشرط الموضوع في الدالةid name status--------------------------------------------------السجل الأولالسجل الثانيالسجل الثالث3هناك فكرة خطرت ببالي لكن لم تعمل وهي انني لا اقوم بإظهار الفورميلا واعمل فورميلا أخرى تأخذ اعلى قيمة في الفورميلا الأساسية للمسلسلوتكون نهاية كل مجموعة لكن لم تعمل هل هناك حل آخر؟؟ تقديم بلاغ
بتاريخ: 13 يونيو 200619 سنة comment_72012 الاخ الكريمبالنسبة لسؤالك انك تريد المجموعة فممكن ان تضع ال 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 مثلا لتكون بمستوى الفورميلا الثاني والذي يعرض القيمة النهائية تقديم بلاغ
بتاريخ: 13 يونيو 200619 سنة كاتب الموضوع comment_72045 شكرا لك يا أخ أسامه لكن هناك تعديل بسيط لابد منه وهو انني عملت التغيير مع إضافة الفورميلا الاخيرة لكن لم تكن صحيحةفقمت بالتعديل على الفورميلا الأخيرة وتكون بالشكل التالي function CF_CTotalFormula return Number is begin RETURN(:CP_1); end; ويكون العمل صحيح 100% على مجموعة وحدة لكن كيف يمكن ان يكون كل مجموعة يعمل لها حساب لسجلاتها كل مجموعة على حدة فعملها أصبح كالتالي جمع المجموعة الأولى بطريقة صحيحة ثم أحتفظ بالمجموع وأضاف عليه مجموع المجموعة الثانية فأصبح مجموع المجموعة الثانية المجموع الأول + الثاني تم تعديل 13 يونيو 200619 سنة بواسطة Amateur تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.