بتاريخ: 30 أبريل 200916 سنة comment_155360 بسم الله الرحمن الرحيماخواني الاعزاء قمت بتصميم شاشة تقوم بعرض ارقام المواد وتفاصيلها بشكل TABULAR ويوجد في البداية Check box بحيث انني اقوم باختيار جميع ارقام المواد المطلوب عرضها في التقرير عن طريق وضع ال check box والغريب في الموضوع اننا قمت باستخدام طريقتين وكلاهما لم ينجح .طبعا لتقريب الصورة اكثر يمكنكم مراجعة هذا الرابطhttp://www.araboug.org/ib/index.php?showtopic=17676وحيث اننتي طبقت الفكرتين في الملف المرفق .... ولكن للاسف بدون اي فائدة .لماذا لم تنجح الطريقتين وما هما :-1- الطريقة الاولى تعتمد على عمل function يتم بعثه للتقرير عن طريق باراميتر يقوم بتخزين جميع ارقام المواد وعرضها وذلك باستخدام جملة in طبعا هذا هو الكود للتنفيذ REPORT2('JABR','P_SEQ='||get_seq_check); وهذا هو الفانكشن الموجود داخل الفورم FUNCTION get_seq_check RETURN varchar2 IS Cond4 varchar2(8000) ; slash PLS_INTEGER; BEGIN go_block('FIX_MASTER_FILE'); first_record; Loop If :CHECK_SELECT=1 Then Cond4:=Cond4||:seq||','; End if; Exit when :system.last_record = 'TRUE'; next_record; End loop; slash := instr(Cond4,',',-1); Return (substr(Cond4,1,(slash-1))); EXCEPTION WHEN OTHERS THEN MESSAGE(SQLERRM||:seq); MESSAGE(SQLERRM||:seq); END; وهذا هو البروسيجر المستخدم REPORTS2) PROCEDURE REPORT2 (p_report VARCHAR2,p_report_otherparam VARCHAR2 default null) IS repid REPORT_OBJECT; v_rep VARCHAR2(8000); rep_status VARCHAR2(8000); vcFile VARCHAR2(8000); vcOtherParam VARCHAR2(8000); BEGIN /* Generate a pseudo-unique filename */ vcFile := get_application_property(USERNAME)||TO_CHAR(SYSDATE,'YYYYMMDDHHMISS'); /* We will be producing Postscript output in this case so add a .rrpp extension */ vcFile := vcFile||'.rrph'; repid := find_report_object('QMSREP'); SET_REPORT_OBJECT_PROPERTY(repid,REPORT_EXECUTION_MODE,BATCH); SET_REPORT_OBJECT_PROPERTY(repid, REPORT_FILENAME ,p_report); SET_REPORT_OBJECT_PROPERTY(repid,REPORT_DESTYPE,CACHE); SET_REPORT_OBJECT_PROPERTY(repid,REPORT_DESFORMAT,'PDF'); SET_REPORT_OBJECT_PROPERTY(repid,REPORT_SERVER,'JABALI'); vcOtherParam := 'paramform=no '||p_report_otherparam; SET_REPORT_OBJECT_PROPERTY(repid,REPORT_OTHER,vcOtherParam); v_rep := RUN_REPORT_OBJECT(repid); rep_status := REPORT_OBJECT_STATUS(v_rep); WHILE rep_status in ('RUNNING','OPENING_REPORT','ENQUEUED') LOOP rep_status := report_object_status(v_rep); END LOOP; IF rep_status = 'FINISHED' THEN /*Display report in the browser*/ WEB.SHOW_DOCUMENT('http://oracle_in:8889/reports/rwservlet/getjobid'|| substr(v_rep,instr(v_rep,'_',-1)+1)||'?'||'server=JABALI','_blank'); ELSE message('Error when running report'); END IF; END; وبالنسبة للتقرير بكل بساطة هذا هو الكود SELECT SEQ ,INPUT_DATE ,DESC_EN ,DESC_AR ,SERIAL_NO ,PURCHASE_PRICE ,STATUS ,DESC_OF_UPDATE ,REASON_OF_DELETE ,NOTES ,SCM_ID ,SLB_ID ,SCD_ID ,HMF_ID ,SDV_ID ,USR_ID ,OWNER ,TRANSFER_TYPE ,TRANSFER_DATE ,USR_ID2 ,END_DATE_WARRANTY FROM FIX_MASTER_FILE FMF WHERE SEQ IN (&P_SEQ) طبعا بعد اختيار 2000 ريكورد وتنفيذ التقرير تفاجأت ان جملة IN لا تقبل اكثر من 1000 وبتالي عند اختياري ل 1000 ريكورد او اقل لا مشكلة 2- الطريقة الثانية هي باستخدام جملة OR وايضا وصلت الحد الاقصى المسموح به لل URL للاكسبلورر وبتالي لم استطع عرض جميع البياناتالتي تم اختيارها .وهذا هو الكود للتنفيذ WEB.SHOW_DOCUMENT('http://oracle_in:8889/reports/rwservlet?userid=scott/TIGER@orcl&report=C:\reports\reports\REP1.rdf&server=aljabali&destype=cache&desformat=PDF&P_SEQ='|| GET_SEQ_CHECK2,'_blank'); وهذا هو الفانكشن FUNCTION GET_SEQ_CHECK2 RETURN VARCHAR2 IS count1 varchar2(30000) :='(1=2)'; BEGIN :global.found :='N'; GO_BLOCK('FIX_MASTER_FILE'); FIRST_RECORD; LOOP IF :CHECK_SELECT=1 THEN :global.found :='Y'; count1 := count1 || ' OR seq=' || :seq; END IF; EXIT when :system.last_record ='TRUE'; NEXT_RECORD; END LOOP; :all_check :=1; Return ('Where ' || count1); EXCEPTION WHEN OTHERS THEN MESSAGE(SQLERRM||:seq); MESSAGE(SQLERRM||:seq); END; وبالنسبة للتقرير SELECT SEQ ,INPUT_DATE ,DESC_EN ,DESC_AR ,SERIAL_NO ,PURCHASE_PRICE ,STATUS ,DESC_OF_UPDATE ,REASON_OF_DELETE ,NOTES ,SCM_ID ,SLB_ID ,SCD_ID ,HMF_ID ,SDV_ID ,USR_ID ,OWNER ,TRANSFER_TYPE ,TRANSFER_DATE ,USR_ID2 ,END_DATE_WARRANTY FROM FIX_MASTER_FILE FMF P_SEQ& وايضا مشكلة وصول الحد القصى لل URL منعت ظهور باقي البيانات ....ما الحل برأيكم ......تعمدت وضع جميع الاكواد حتى تتم الاستفادة منهااريد المشاركة من الجميع .... تقديم بلاغ
بتاريخ: 30 أبريل 200916 سنة comment_155363 السلام عليكم ياجباليأه رأيك تربط الشيك بوكس في الجدول وعند الضغط عليها تخزن مثلا قيمة 1 واكتب في شرط الجملة where chk=1وطبعا الذي لم يتم اختياره تكون قيمته =0 أعتقد كلا الحلين الاي ذكرتهم بيعملوا عملية إرهاق للسيرفر تم تعديل 30 أبريل 200916 سنة بواسطة mustafagamiel تقديم بلاغ
بتاريخ: 30 أبريل 200916 سنة كاتب الموضوع comment_155378 اشكرك اخي مصطفى على الرد ,,,,,دعونا نفكر جميعا في الحل تقديم بلاغ
بتاريخ: 2 مايو 200916 سنة comment_155490 السلام عليكماخي الكريم ممكن تضيف حقل flag_on_off الي الجدول المذكور عندك و تكون القيمة الافتراضية هي 0 اي عدم اظهار اي بياناتهعند اختيار الشيك بوكس لاظهار المادة يتم عمل update لهذه المادة فيكون قيمة الحقل 1 و الحقل الذي سوف تتجاهل الضغط على الشيك بوك الخاص به سوف لا يتم عمل اي تأثيرو عند اظهار التقرير مثل سوف يكون هناك شرط اظهار البيانات where flag_on_off=1 اي اظهار المواد التي قيمتها 1 اي اظهارو العكس صحيحو يكون التحديث pre updateده فكرة مؤقتة لحل المشكلةلا تقف عند مشكلة و لكن استخدم الحل المتاح حتي يتثني لك معرفة حل افضلاظن قبل شرح هذه الطريق لم افهم فكرة الاخ مصطفي جميلولكن بعد ما شرحت قرأت فكرته و هي نفس الفكرة التي شرحتها و لكن انا فقط فصلت تقديم بلاغ
بتاريخ: 2 مايو 200916 سنة comment_155492 اخى العزيز السلام عليكمدون الدخول فى تفاصيل وتعب قلب وبالبلدى اصف حقل لجدول المواد وليكن show_in_rep number(1)قبل التقريرحدث الحقل بالقيمة واحد للمواد التى تريد اظهارها ف التقرير والقيمة صفر لما عدا ذلك وقم بتشغب التقرير باستخدامwhereمعتمدا على هذا الفلاج يكون التقرير اسرع ولا تتعب حالك وممكن تعتمدةعلى جدول موقت تبنيه بنفس الاسلوب وتستخرج منه التقرير اذا كان التقرير يطلب فى خلال نفس الدقائق من مستخدم آخر تحياتى تقديم بلاغ
بتاريخ: 2 مايو 200916 سنة comment_155494 الاخ العزيز wise هي الفكرة فعلا كما قلت تعتبر حل مؤقت وفعلا كما قلت انا سابقالكن للاسف لها عدة مشاكل1 - لو الجدول كبير كما في حالة أخينا الجبالي ألا تراها أنها من الصعب عمل update على الكم الهائل من السجلات2- ماذا لو هناك العديد من المستخدمين سيقوموا بطباعة نفس التقرير في نفس الوقت أكيد سيحدث مشكلة إذن عجبتني كلمتك عندما قلت إنها حل مؤقت أنتظر منك حل أخر وننتظر من جميع الاخوة المشاركة في هذا الموضوع المهم تقديم بلاغ
بتاريخ: 2 مايو 200916 سنة comment_155499 السلام عليكمارجو من الاخ الفاضل الجبالي باعطاء بعض البيانات عن الجدولبالنسبة للحل المؤقت ربما اضافة جدول موقت للطباعةيتم فيه اضافة نتيجة ال update مع اضافة حقل اضافي للمستخدم بحيث يتم عمل تحديث مبني على اساس استخدام المستخدم و هكذا حلنا مشكلة اذا قام اكثر من مستخدم بالطباعة طبعا هذا حل موقت ايضااما فكرة البطئ فلست خبيرا في تقليص وقت الطباعة و لكن .....ربما حل الاخت اسماء هو حل مناسب ايضاعلى اساس befor report trigger و انا لا اعرف استخدم هذا ال tirgger من داخل الريبورت بيلدرارجو المناقشة فالموضوع شيق حيث يعتمد على المنطق و البرمجة هي منطق و اذا كان هناك حل اخر ربما تشاركنا تقديم بلاغ
بتاريخ: 2 مايو 200916 سنة comment_155500 السلام عليكم محاولة للمساعدة Ask your dba to increase the maximum open cursors on the database. To check how many cursors are in use run this sql statement: SELECT v.value as numopencursors ,s.machine ,s.osuser,s.username FROM V$SESSTAT v, V$SESSION s WHERE v.statistic# = 3 and v.sid = s.sid تقديم بلاغ
بتاريخ: 2 مايو 200916 سنة كاتب الموضوع comment_155538 اخواني الاعزاء ( Wise , asmaa123 , mustafagamiel,Amgad ) اشكركم من كل قلبي على التواصل معي في هذا الموضوع وبالنسبة للجدول الذي لدياي جدول المواد يحتوي حوالي 8000 ريكورد وبتالي اعتقد ان :-1- فكرة عمل عمود وتخزين البيانات بالتحديث على الجدول كلما اردت الطباعة ( طريقة جيدة ولكن تخيلوا معي 10 مستخدمين كل واحد يختار 4000 ريكورشو بصير في السيرفر ..... )2- ايضا فكرة عمل جدول مؤقت ( فكرة جيدة ولكن ايضا عملية الاضافة على هذا الجدول ولهذه الريكورد واكثر من مستخدم .... شو بصير بالسيرفر البطء موووووجود 100%حتى اخي امجد بعض النظر عن عدد الكيرسر المفتوحة في قاعدة البيانات ... اعتقد البطء سيكون كبير جدالنحاول التفكير بطريقة اخرىشي والله بحير اشكركم جميعا من كل قلبييلا يا شباب .... بدها تفكير .... تقديم بلاغ
بتاريخ: 2 مايو 200916 سنة comment_155542 السلام عليكم ورحمة الله سؤال بطريقه اخرى هل المطلوب من المستخدم ان يقوم باختيار اكثر من 2000 سجل بطريقة يدوية ؟ كيف يتم ذلك ؟ هل يمكن اعادة التفكير بان يكون الاختيار على مستوى مجموعات مثل ( ادارة - قسم - ... ) من البيانات وليس على المستوى التفصيلي ؟ او ان الاختيار يجمع بين الاثنين معا المستوى الرئيسي ( ادارة مثلا ) + المستوى التفصيلي (السجلات ) لو امكن عرض فكرة عن نوعية البيانات بالجدول أويد فكرة الزملاء فى التعامل مع جدول جديد Temp مؤقت ( وليس التعديل فى الجدول الاساسى ) يحتوى ( اسم المستخدم - العمود المختار - التاريخ والوقت - او اى اعمدة اخرى ) على ان يتم الاضافة فيه قبل استدعاء التقرير وحذف السجلات ( المحدده ) بعد الانتهاء من الطباعة والله الموفق تقديم بلاغ
بتاريخ: 2 مايو 200916 سنة كاتب الموضوع comment_155546 اخي الغالي امجد اشكرك على المتابعة و اعتقد انه كلامك منطقي .... هل مطلوب من المستخدم اختيار 2000 سجل بشكل يدوي ؟؟؟؟؟اكيد لأ لكن وين المشكلة اخي امجد ..... عندما يقوم باختيار جميع السجلات 8000 والضغط على زر الطبارعة ( هنا المشكلة )ايضاافرض انني قمت بالاستعلام عن مادة معين وكان عدد السجلات 3000 فكل ما على المستخدم ان يضغط على خيار check all ثم الضغط على زر طباعة وهنا تحدث المشكلة وبتالي اخي امجد لا تتخيل ان يقوم المستخدم بالعمل اليدوي على سجلات تزيد عن 100ولكن بهذه الطريقة وبضغطة زر واحدة يظلل 3000 ريكورد مرة واحدة .الاختيار يجمع بين الاثنين معا المستوى الرئيسي ( ادارة مثلا ) + المستوى التفصيلي (السجلات ) والشاشة عبارة عن tabular يتم فيها عرض جميع البيانات بغض النظر عن المجموعاتفكرة الزملاء فى التعامل مع جدول جديد Temp مؤقت ( هي فكرة جيدة ولكن ليست المشكلة في عملية الاضافة قبل او بعد استدعاء التقرير المشكلة اخي امجد في عملية الاضافة نفسها وما تأخذه من وقت وهذا الامر قد ينطبق على 10 مستخدمين طل واحد بعمل اضافة ل 5000 ريكورد في نفس الوقت مثلا .ولا اعلم قد يكون هل الزملاء اكثر الحلول منطقية ........ ولكن ما زلت ابحث عن حل اخر .... تقديم بلاغ
بتاريخ: 2 مايو 200916 سنة comment_155549 الأخ / الجبالى يقوم باختيار جميع السجلات 8000 والضغط على زر الطباعة عند اختيار جميع السجلات ... فى هذه الحالة لن تحتاج لتمرير كل السجلات التى تم اختيارها ... الى التقرير وانما ستنقل فقط ( الشروط التى بناء عليها استرجاع البيانات بالشاشة) الى التقرير الاستعلام عن مادة معين وكان عدد السجلات 3000 فكل ما على المستخدم ان يضغط على خيار check all ثمالضغط على زر طباعة ايضا سيتم نقل شرط المادة المختارة فقط الى التقرير رجاء ان امكن عمل print screen للشاشة .... ان امكن تقديم بلاغ
بتاريخ: 3 مايو 200916 سنة comment_155575 السلام عليكماظن رأي الاخ امجد اقرب الى الصوابما دام انت النية عندك تطبع كل السجلات ففي هذه الحالة لا حاجة الي جدول مؤقت او الي تحديث في نفس الجدولفيكون العمل على الجدول الاساسي بدون اي مشاكلاما اذا كانت هناك احتمال طبع حوالي 100 او 200 سجل فحل الجدول المؤقت مناسب و ممكن تعمل جدول مؤقت لكل مستخدم فيتم انشاء في وقت التنفيذ ويتم حذفه مباشرة بعد تنفيذ التقرير تقديم بلاغ
بتاريخ: 3 مايو 200916 سنة كاتب الموضوع comment_155576 اخي العزيز امجد اكرر شكري الخاص لك على المتابعة , اريد توضيح بعض النقاط :-بالنسبة لاختيار جميع السجلات 8000 والضغط على زر الطباعة ( في هذه الحالة في العادة لا ضرورة ابدا لاستخدام جملة IN لان المطلوب عرضجميع البيانات ولكن المشكلة تكمن ان نفس التقرير يقوم باحضار جزء من البيانات حسب جمل الاستعلام المختلفة .- الان بالنسبة لطباعة التقرير حسب شروط الاستعلام ( حسب اعتقادي انه من الافضل الطباعة حسب رقم المادة الذي تم اختياره لان عملية الطباعة حسب الشروط لن تكون فعالة وذلك لانه يتم احيانا الاستعلام عن شروط مختلفة مع بعضها البعض وبتالي يصعب وضع ومراعاة جميعالشروط في التقرير وبتالي عملية تنفيذ التقرير حسب ما تم اختياره ستكون افضل .- لا اعلم قد يكون افضل حل ان اقوم بعمل تقرير جديد يقوم بعرض البيانات حسب التصنيف الرئيسي والفرعي للمواد وبتالي اجبار المستخدمعلى طلب نوع معين من التقارير , مع العلم انني اريد معرفة حل لهذه المشكلة .- واعتذر اخي امجد قد يصعب علي في الوقت الحالي عرض شاشة المواد .... ( اعتذر ) تقديم بلاغ
بتاريخ: 4 مايو 200916 سنة comment_155690 السلام عليكماخي الكريم الجباليهناك حل بسيطتعمل عدد 2 تقريرالتقرير الاول هو يعرض التقرير حسب الشروط التالية1-كل المواد لك التصنيفات2- المواد التي تخص كل تصنيف رئيسي او فرعيالتقرير الثانييقوم بعرض البيانات حسب عدد المواد المختارة و انت كما قلت لن تزيد عن 100 و العدد المتاح 1000 في جملة inالتقرير الثالثممكن تدمج تقريرن مع بعض و لكن فيها شغل عالي و فكرتها انك تعمل جملة استعلام union allالجملة الاولى في الاستعلام بها شروط خاصة اي مواد تخص قسم معينالجملة الثانية تخص جملة in في النهاية تستخدم خاصية distinct في حالة تكرار اختيار المواد في نفس التقريرطبع الموضوع ده فيه شغل كتير و محتاج تجربة حتى تصل لهدفك تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.