الانتقال إلى المحتوى

شرح تفصيلي...طريقة إستدعاء التقرير عن طريق الفورم 10g


iyad2006

Recommended Posts

بسم الله الرحمن الرحيم


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


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

طبعا انا مبتدأ فى الاوراكل :) ...تعلمت طريقة تصميم التقارير ومن ثم طريقة الربط مع الفورم وطريقة الاستدعاء ...سأحاول شرح الطريقة بالكامل لكي يسفيد الأعضاء :rolleyes: .

-------------------------------------------------------------

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


CREATE TABLE EMP
(
 EMPNO NUMBER (4,0) NOT NULL,
 ENAME VARCHAR2 (10),
 JOB VARCHAR2 (9),
 MGR NUMBER (4,0),
 HIREDATE DATE,
 SAL NUMBER (7,2),
 COMM NUMBER (7,2),
 DEPTNO NUMBER (2,0)
)




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


rep2.jpg w721.png


زي ما هوا واضح الفورم تحتوي على تكست لإدخال رقم الموظف علشان نستعلم او نطبع تقرير عن موظف معين...
وأيضا يوجد على الفورم ....الزر الاول (run rep with param)علشان أستدعي التقرير مع إرسال باريميتر للتقرير ....يعني لازم أدخل رقم الموظف فى التكست الى عاوز أطبع تقرير فى بياناته الخاصة.
الزر الثاني(run rep with out param) طبعا هاد الزر علشان استدعي تقرير بدون باريميتر ...علشان هيك فى التقرير راح يعرض كل الموظفين الى فى الشركة.



الكود الخاص بالزر الأول (run rep with param)

DECLARE
v_rep_id		REPORT_OBJECT;
v_repjob		VARCHAR2(100);
v_job_id		VARCHAR2(100);
v_rep_status		VARCHAR2(100);	
v_reportsrvr		VARCHAR2(50) := 'rep10g';
v_runformat		vARCHAR2(50) := 'HTMLCSS';--HTML HTMLCSS PDF	

BEGIN IF :NUM_REP_PRM IS NULL THEN
  RAISE FORM_TRIGGER_FAILURE;
END IF;



v_rep_id := FIND_REPORT_OBJECT('TMP_REPORT');
SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_COMM_MODE, SYNCHRONOUS);
SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_DESTYPE, CACHE);

--SET_REPORT_OBJECT_PROPERTY(V_rep_id, REPORT_DESTYPE, PRINTER);
--SET_REPORT_OBJECT_PROPERTY(v_rep_id,REPORT_DESNAME,'ID_CARD');

SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_SERVER, v_reportsrvr);
SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_DESFORMAT, v_runformat);	

SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_OTHER, 'per_id=' || :NUM_REP_PRM ||' paramform=no');	

SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_FILENAME, 'd:\rep_emp.rdf');

v_repjob := RUN_REPORT_OBJECT(v_rep_id);
v_job_id := SUBSTR(v_repjob, LENGTH(v_reportsrvr) + 2, LENGTH(v_repjob) );
v_rep_status := REPORT_OBJECT_STATUS(v_repjob);

IF v_rep_status = 'FINISHED' THEN
	WEB.SHOW_DOCUMENT('/reports/rwservlet/getjobid' || v_job_id ||'?server=' || v_reportsrvr || '', '_blank');
ELSE
		message('Report failed with error message ');

END IF;

CLEAR_FORM;


   END;



الكود الخاص بالزر الثاني(run rep with out param)

DECLARE
v_rep_id		REPORT_OBJECT;
v_repjob		VARCHAR2(100);
v_job_id		VARCHAR2(100);
v_rep_status		VARCHAR2(100);	
v_reportsrvr		VARCHAR2(50) := 'rep10g';
v_runformat		vARCHAR2(50) := 'HTML';--HTML HTMLCSS PDF	

   BEGIN v_rep_id := FIND_REPORT_OBJECT('TMP_REPORT');
SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_COMM_MODE, SYNCHRONOUS);
SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_DESTYPE, CACHE);

--SET_REPORT_OBJECT_PROPERTY(V_rep_id, REPORT_DESTYPE, PRINTER);
--SET_REPORT_OBJECT_PROPERTY(v_rep_id,REPORT_DESNAME,'ID_CARD');

SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_SERVER, v_reportsrvr);
SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_DESFORMAT, v_runformat);	

SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_OTHER, 'paramform=no');	

SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_FILENAME, 'D:\rep_emp.rdf');

v_repjob := RUN_REPORT_OBJECT(v_rep_id);
v_job_id := SUBSTR(v_repjob, LENGTH(v_reportsrvr) + 2, LENGTH(v_repjob) );
v_rep_status := REPORT_OBJECT_STATUS(v_repjob);

IF v_rep_status = 'FINISHED' THEN
	WEB.SHOW_DOCUMENT('/reports/rwservlet/getjobid' || v_job_id ||'?server=' || v_reportsrvr || '', '_blank');
ELSE
		message('Report failed with error message ');

END IF;

CLEAR_FORM;


END;



--------------------------------------------------------

راح أتكلم فى الأول عن إستدعاء التقرير بدون باريمتر ...

طبعا فى الكود فى شغلات لازم يغيرها المستخدم حسب ماهوا مشتغل التقرير بتاعه....

راح نطلع للصورة فى الاول...
rep3.jpg w1121.png

REP10G

فى أول مربع ...لازم أغير إسم السيرفر الى أنا شغال عليه التقارير ...وهاد الكود الى انا مستخدمه علشان أشتغل السرفير الخاص بالتقارير....

rwserver server=rep10g start



هاد الكود ممكن تشغله عن طريق ...تدخل على RUN ثم CMD تم تكتب هادا الكود.


--------------------------------------------------------


تاني مربع هادا إسم التقرير المؤقت الى راح أقوم بإنشاءه فى الفورم ...

طريقة إنشاءه...

من القائمة أقوم بالضغط على REPORTS ....لكي تظهر لي هذه الشاشة...
rep13.jpg w871.png



أقوم بإختيار التقرير الى قمت بتصميمه على Report Bulider

بعد ما أختار التقرير ...أدخل على خصائصه بالضغط على F4 ....لكي تظهر لي هذه الصورة ....



rep14.jpg w585.png



بعدين بأقوم بمسح خانة الFilename ...لكي يصبح مثل هذه الصورة



rep15.jpg w494.png

---------------------------------------------------------------------------

ثالث مربع راح يكون فى إسم التقرير الى قمت بتصميمه...ويفضل يكون التقرير زي منا عامل مباشر على البارتشن ..لانه أعتقد 10G بعمل مشاكل إذا كان إسم المجلد فيه فراغات.

بهيك بكون أنا خلصت من إعداد الفورم الخاصة بإستدعاء التقرير.

-----------------------------------------------------------------------------------

بظل علينا إنه نعد التقرير الى عاوزينه يظهر ...

قمت بإعداد تقرير سريع يعرض لكي كافة الموظفين فى الشركة...


-------------------------------------------------------------------------------


حاليا....الفورم هيك بكون جاهز إني لو ضغطت على(run rep with out param) راح يشتغل ويعرض لكي كل الموظفين الى فى الشركة ....


ملفات الفورم ....و التقرير .... والكود ..... والصور ....موجودة فى المرفقات.

-----------------------------------------------------------------------------

يتبع--------------->>>>>

Test_Form.rar

Test_report.rar

Picture.rar

code.rar

رابط هذا التعليق
شارك

  • بعد 1 شهر...
  • بعد 4 شهور...

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

الأخ / iyad

شكرا لك ... وجزاك الله خيرا

سيتم التثبيت ... لأهمية الموضوع واسلوب العرض الوافي

تتنظر مشاركات اخرى متميزه

رابط هذا التعليق
شارك

  • بعد 1 شهر...

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

رابط هذا التعليق
شارك

  • بعد 2 أسابيع...
  • بعد 2 أسابيع...

شكرا جزيلا لك
لكن ممكن تساعدني

عندما انقر على الزر ييفتح المستعرض وبه خطا
ممكن تشاهد الصوره المرفقه
:rolleyes:

يا ريت تساعدني بسرعه لاني محتاج كثير

New_Bitmap_Image.zip

رابط هذا التعليق
شارك

شكراً جزيلاً لك

رابط هذا التعليق
شارك

السلام عليكم
لقد قمت بعمل تقرير باستخدام كريستال ريبورت 10 من النعروف ان الكريستال ربيورت يخرج امتداد RPT
السوال هل يمكن استخدام الامتداد RPT بدلا من RDF عند استدعاء التقرير من فورم 10 G
هذا السوال الى جميع الخبراء فى هذا المنتدى
وشكرا جزيلا

رابط هذا التعليق
شارك

  • بعد 2 شهور...

شكرا اخي الكريم علي هذا الشرح المستفيض ولكن اخي الكريم ممكن لو تكرمت نغير الاستدعاء عن طريق رقم الموظف الي تاريخ تعيين الموظف حيث انني عدلت في المثال الي تاريخ تعيين الموظف ولكن الريبورت يعطي error وهو frm-41214: unable to run report علي الرغم من انني عدلت في جملة الكويري الخاصه بالريبورت وعند تمرير البارميتر الخاص بالتاريخ الي اريبورت يظهر هذا الخطاء لماذا ارجو ان توضح لي علي هذا المثال العملي الجميل
ولكم جزيل الشكر
وهذا التعديل في الكود الخاص بالفورمه

DECLARE
v_rep_id		REPORT_OBJECT;
v_repjob		VARCHAR2(100);
v_job_id		VARCHAR2(100);
v_rep_status		VARCHAR2(100);	
v_reportsrvr		VARCHAR2(50) := 'rep10g';
v_runformat		vARCHAR2(50) := 'HTMLCSS';--HTML HTMLCSS PDF	
BEGIN	
IF :NUM_REP_PRM IS NULL THEN
RAISE FORM_TRIGGER_FAILURE;
END IF;
v_rep_id := FIND_REPORT_OBJECT('TMP_REPORT');
SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_COMM_MODE, SYNCHRONOUS);
SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_DESTYPE, CACHE);

SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_SERVER, v_reportsrvr);
SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_DESFORMAT, v_runformat);	

SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_OTHER, 'per_date2=' || :NUM_REP_PRM ||' paramform=to_char(dd-mm-yyyy)');	

SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_FILENAME, 'd:\rep_emp.rdf');

v_repjob := RUN_REPORT_OBJECT(v_rep_id);
v_job_id := SUBSTR(v_repjob, LENGTH(v_reportsrvr) + 2, LENGTH(v_repjob) );
v_rep_status := REPORT_OBJECT_STATUS(v_repjob);

IF v_rep_status = 'FINISHED' THEN
	WEB.SHOW_DOCUMENT('/reports/rwservlet/getjobid' || v_job_id ||'?server=' || v_reportsrvr || '', '_blank');
ELSE
		message('Report failed with error message ');
END IF;
CLEAR_FORM;
END;


والجمله الخاصه بالكويري الخاص بالريبورت

SELECT ALL EMP.EMPNO, 
EMP.ENAME, EMP.JOB, EMP.MGR, EMP.HIREDATE, EMP.SAL, EMP.COMM
FROM EMP where hiredate =:per_date2; 

رابط هذا التعليق
شارك

  • بعد 3 شهور...

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


رابط هذا التعليق
شارك

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


فكيف احدد المستعرض
وخاصة انني حاولت ان احدده كما في الform builder لكن لم اتمكن


وعند تشغيل التقرير من الفورم لا يظهر اي شيء ولا حتى رسالة خطأ
وشكراً

رابط هذا التعليق
شارك

  • بعد 1 شهر...
  • بعد 1 شهر...
  • بعد 1 شهر...
  • بعد 1 شهر...

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

اخي العزيز
شكرا لك على هذا الموضوع والذي كنت بامس الحاجة اليه
ولكن هناك بعض النقاط التي لم افهمها ولم اتوصل الى نتيجه
فانا مازلت مبتدئة في عالم الاوراكل..الذي اعتقد انه لاتوجد نهاية اليه
اخي العزيز
في الكود بعض العبارات قمت بتاشيرها بمربع احمر
منها ....
- Rep10g وهو امس السيرفر وقلت يجب ان يتم تغيره..كيف يتم ذلك؟ واذا كنت اعمل على نفس الحاسبة Database and Clint ماذا افعل؟
- ماذا تقصد بـ tmp_report ؟؟
- كيف اقوم بخزن التقرير بالامتداد rdf and rep ؟؟

ولك مني جزيل الشكر
اختك
اتمنى ان اجد الاجابة عندكم
سؤال اخير الا توجد دروس للتقارير 10g مثل الدروس المثبته للـ 6i
hولكم مني جزيل الشكر
اختكم

رابط هذا التعليق
شارك

  • بعد 4 شهور...

توجد طريقه لتصيب ريبورت سيرفر بحيث لا اشغله من امر ال
run -->rwserver server=repsrv
وهي
rwserver -install repsrv autostart=yes
بس للاسف تطلعلي رساله الخطا
plese contact your administrator

رابط هذا التعليق
شارك

  • بعد 1 شهر...

السلام عليكم
بس عني كم سؤال
1- اسم الريبورت سيرر اضيله اسم الحاسبه الي راح يعمل عليها الريبورت سيرر حتى تعر الكلاينت اين هو مثلا
repsrv10\server\\
2-ربت الكو بس تظهر حاله الريبورت Quead
اي الكيو

رابط هذا التعليق
شارك

  • بعد 2 شهور...

سؤال للأخ الكريم
iyad2006

كيف أبعت ( أباصى ) أكتر من قيمة لكذا باراميتر

SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_OTHER, 'p_pono='||:PONO||' paramform=no');
فى هذا الجملة بنباصى براميتر واحد
لو عاوز أباصى قيمتين لعدد 2 باراميترز تكون الجملة إزاى

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

تم تعديل بواسطة abdulrahman_o
رابط هذا التعليق
شارك

  • بعد 1 شهر...

شكرا على المجهود الرائع



لكن ماذا لو كان لدينا اكثر من باراميتر
وليكن ايضا
hiredate > 11/11/2005
and
salary > 3000

في انتظار الرد

رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

شكرا على المجهود الرائع لكن ماذا لو كان لدينا اكثر من باراميتر وليكن ايضا hiredate > 11/11/2005 and salary > 3000 في انتظار الرد


SET_REPORT_OBJECT_PROPERTY(v_rep_id, REPORT_OTHER, 'p_pono='||:PONO||' paramform=no||'&hiredate='||h);

رابط هذا التعليق
شارك

  • بعد 1 شهر...

السلام عليكم


شكرا اخي الكريم على هذا المجهود الكبير تحياتي لك


اخي الكريم انا حاولت ان انفذ هذه الطريقة ولكن هنالك رسالة خطأ تظهر لي وهي



FRM-41213: غير قادر على الوصول الى خادم التقارير rep10g



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

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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