بتاريخ: 29 مارس 201016 سنة comment_188582 إخواني الكرامالسلام عليكم ورحمة الله وبركاتهفي الواقع إن موضوع استدعاء التقارير من الفورم موضوع مهم جدا والأسئله فيه كثيرة ومن ضمن هذه الأسئله سؤال عجبني جدا من الأخ العزيز أمجد عن كيفية عمل تقرير يحتوي علي مجموعة من بيانات الموظف بمعلومية أرقام موظفين مختارة من الشاشة والأخوه جزاهم الله كل الخير أجابوا عن السؤال بطرق متعدده تعكس وجهات نظر مختلفه وانا اطلعت عليها وعجبني المجهود المبذولوأنا النهارده حابب أقدم إجابه بسيطه ومش معقده وتحقق هدفنا اللي هوه (إزاي أختار أرقام موظفين معينين وأطبع تقرير عنهم)بداية أنا حشتغل علي جدول الموظفين EMP بتاع SCOTT أولا: حنعمل جدول جديد فارغ عند SCOTT ونسميه EMP_NUMBER كما يلي create table emp_number (empno number(4)) وزاي منتو شايفين الجدول مكون من عمود واحد علشان يشيل أرقام الموظفينثانيا: نعمل التقرير بتاعنا علي جدول EMP بتاع SCOTT لكن نخلي ال SQL QUERY بتاعته كالتالي select * from emp where empno in (select * from emp_number) ونعمل SAVE للتقرير ونسميه REP_TEST ونحفظه بصيغه RDF في أي مكانثالثا: نعمل الفورمه (الشاشه) بتاعتنا علي جدول EMP ونخلي ال STYLE بتاعها TABULAR رابعا : نعمل CHECKBOX ونسميه EMPNO_CHECK وندخل علي ال PROPERTY PALLETE بتاعته ونخليها كما يلي VALUE WHEN CHECKED YVALUE WHEN UNCHECKED NCHECK BOX MAPPING OF OTHER VALUES UNCHECKEDDATABASE ITEM NODATA TYPE CHARبعدين نعمل عليه تريجر اسمه WHEN-CHECKBOX-CHANGED ونكتب فيه الكود ده if checkbox_checked('empno_check') then insert into emp_number values (:emp.empno); commit; else delete from emp_number where empno = :emp.empno; commit; end if; خامسا: نعمل تريجر علي مستوي الفورمه اسمه WHEN-NEW-FORM-INSTANCE ونكتب فيه الكود ده execute_query; :system.message_level := '5'; delete from emp_number; commit; سادسا: في ال REPORT NODE اللي في OBJECT NAVIGATOR نعمل ريبورت ونسميه REPORT_SPEC طبعا هيكون مبني علي التقرير اللي سبق عملناهسابعا:في ال PROGRAM UNITS NODE اللي في OBJECT NAVIGATOR نمل PROCEDURE ونسميه RUN_REPORT_OBJECT_PROC ونكتب فيه الكود ده PROCEDURE run_report_object_proc (VC_REPORTOJ VARCHAR2, VC_REPORTSERVER VARCHAR2, vc_runformat varchar2) IS v_report_id Report_Object; vc_ReportServerJob VARCHAR2(100); vc_rep_status VARCHAR2(100); vjob_id VARCHAR2(100); BEGIN v_report_id:= FIND_REPORT_OBJECT(vc_reportoj); SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_COMM_MODE,SYNCHRONOUS); SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_DESTYPE,CACHE); SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_DESFORMAT,vc_runformat); SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_SERVER,vc_reportserver); SET_REPORT_OBJECT_PROPERTY(v_report_id,REPORT_OTHER,' paramform=no'); vc_ReportServerJob:=RUN_REPORT_OBJECT(V_report_id); VJOB_ID := SUBSTR(VC_REPORTSERVERJOB, LENGTH(VC_REPORTSERVER)+ 2,LENGTH(VC_REPORTSERVERJOB)); vc_rep_status := REPORT_OBJECT_STATUS(vc_ReportServerJob); IF vc_rep_status='FINISHED' THEN WEB.SHOW_DOCUMENT('/reports/rwservlet/getjobid'||VJOB_ID||'?server='||VC_REPORTSERVER,'_BLANK'); ELSE message ('Report failed with error message '||vc_rep_status); END IF; END; ثامنا: نعمل PUSH BUTTON ونخلي ال LABEL بتاعه RUN REPORT ونعمل عليه تريجر WHEN-BUTTON-PRESSED ونكتب الكود ده RUN_REPORT_OBJECT_PROC('REPORT_SPEC','rep10g','htmlcss'); وزي منتو شايفين السيرفر بتاعي اسمه REP10G وممكن تسمو أي إسم للسيرفر وطبعا هتشغلوا عن طريق START MENU بعدين RUN CMD وتكتبوا الكود ده RWSERVER SERVER=REP10G START وبكده بعد ما نعمل RUN للشاشه نقدر نختار الموظفين اللي إحنا عايزنهم ونطبع تقرير عنهموفي النهايه دي محاوله مني وأتمني تنال إعجابكم يا ريت تجربوا الطريقه وفي انتظار تعقيباتكم وبالتوفيق أخوكم خالد حسن codes.zip تقديم بلاغ
بتاريخ: 29 مارس 201016 سنة comment_188594 وعليكم السلام ورحمة الله الأخ / خالد بداية اشكرك لك على حرصك على افادة الأخوة الأعضاء واعادة صياغة حل لمشكلة كتبت بالمنتدى منذ حوالي 6 سنوات إضغط هنا : تحريك بيانات من الform الى الreport ولكن هناك استفسار عن الحل الذى عرضته ... من خلال استخدام جدول يستخدم مؤقتا فى حفظ ارقام الموظفين المطلوب طباعة بياناتهم ... ثم يتم حذف البيانات بعد استدعاء التقرير عندما يكون لديك اكثر من مستخدم يستخدم نفس التقرير ... فى نفس الوقت ... كيف يمكن معالجة حدوث هذا الإحتمال ؟اعتقد انه سيتم اجراء تعديل على الحل السابق ... لمعالجة هذا الإحتمال الممكن حدوثه شكرا لك مرة اخرى تقديم بلاغ
بتاريخ: 29 مارس 201016 سنة كاتب الموضوع comment_188599 الأخ العزيز أمجدالسلام عليكم ورحمة اللهأنا لما كتبت الموضوع كنت عارف كويس أنه طرح من ست سنين وأنا حاولت أقدم وجهة نظر جديده لا أكثر ولا أقل وأنا مهما ساهمت وعقبت في هذا المنتدي فسأظل بقعة ضوء صغيره بجوار الشموس الكبيره التي أضاءت المنتدى وأنت واحد منهم يا أمجد دى حاجهالحاجه التانيه ملاحظتك في محلها ونحتاج لعمل تعديل كما يليممكن نعمل عمود جديد في الجدول المؤقت يشيل أسماء ال users بعد كده نعمل where condition علي العمود الجديد بحيث لما نعمل insert يدخل إسم الuser ورقم الموظف ولما يعمل delete يحذف فقط ما أدخله ال user وطبعا هنعدل في ال sql query report أتمنى تكون الفكره وصلت ياأخي الحبيب أمجد وأنا أشكرك جدا علي تواصلك والشكر موصول للمنتدي أخوك خالد حسن تقديم بلاغ
بتاريخ: 29 مارس 201016 سنة comment_188622 وعليكم السلام ورحمة الله شكرا لك على هذه الكلمات الطيبة ... والمشاعر الصادقة ... وهذه من صفات اعضاء منتدانا الحبيب ... الذى يجمعهم حب التعاون والمساعدة بارك الله فيك ... وجزاك الله خيرا شكرا لك على الاقتراح فى تعديل اسلوب الحل السابق واعتقد ان هناك اساليب اخرى .... للتعامل مع فكرة الموضوع واعتقد انه ستوجد مشاركات اخرى من الأعضاء ... لعرض افكار الحلول والله الموفق تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.