بتاريخ: 18 مارس 201213 سنة comment_221937 انا عندي فورم يقوم المستخدم اختيار الاصناف منه وانا مسوي حقل نصي يضع فيه ارقام الاصناف اللي اختارها بالطريقة هذي 1,2,3,65,7, اسم هذا الحقل النصي dis_noوبعدين امرر القيمه للتقرير ويطلع لي بيانات بناء على اللي اختارها المستخدم في الاستعلام حق التقرير مسوي انه قيمة الصنف تكون بين القيم اللي اختارها المستخدم وقمت باستخدامactiv_no n(act_no);كود استعداء التقرير في الفورم DECLARE P_LIST PARAMLIST; act_c char; act_r char; -- act_c2 char; BEGIN act_c:=:dis_no; --act_nu:=:dis_no; --act_c2:=:t2; --act_nu:=to_number(act_c); --act_r:=replace('act_c', ','); P_LIST := CREATE_PARAMETER_LIST('MY_PLIST'); add_parameter(P_LIST,'PARAMFORM',TEXT_PARAMETER,'NO'); add_parameter(P_LIST,'MAXIMIZE',TEXT_PARAMETER,'YES'); ADD_PARAMETER(P_LIST,'act_1',TEXT_PARAMETER,act_c); -- ADD_PARAMETER(P_LIST,'act_2',TEXT_PARAMETER,act_c2); RUN_PRODUCT(REPORTS,'form_pass_activ_to',SYNCHRONOUS,RUNTIME,FILESYSTEM,P_LIST,NULL); DESTROY_PARAMETER_LIST(P_LIST); END; والكود في التقرير هو SELECT ALL DEMARCATION.DEMR_NAME, ACTIVITIES.ACTV_NAME, NEW_BUILDING.FILE_NO, NEW_BUILDING.RENTAL_NAME, NEW_BUILDING.CONTRACT_START, NEW_BUILDING.CONTRACT_END, NEW_BUILDING.YEARLY_RENT, NEW_BUILDING.LAST_PAY_DATE FROM NEW_BUILDING, ACTIVITIES, DEMARCATION WHERE ((NEW_BUILDING.DEMR_CODE = DEMARCATION.DEMR_CODE AND NEW_BUILDING.ACTV_NO = ACTIVITIES.ACTV_NO)) --AND new_building.MAIN_MUNC_CODE not in (1,9,10) and [b]new_building.actv_no in (:act_1[/b]); تم تعديل 18 مارس 201213 سنة بواسطة Ahmad.Hasan تنسيق الأكواد تقديم بلاغ
بتاريخ: 18 مارس 201213 سنة comment_221948 السلام عليكم و رحمة الله و بركاتهيمكن عمل ذلك باستخدام الـ Lexical Parameterفي الفورم قم بكتابة التالي DECLARE P_LIST PARAMLIST; act_c char; act_r char; BEGIN act_c := ' AND NEW_BUILDING.ACTV_NO IN (' || :dis_no || ')'; P_LIST := CREATE_PARAMETER_LIST('MY_PLIST'); add_parameter(P_LIST,'PARAMFORM',TEXT_PARAMETER,'NO'); add_parameter(P_LIST,'MAXIMIZE',TEXT_PARAMETER,'YES'); ADD_PARAMETER(P_LIST,'act_1',TEXT_PARAMETER,act_c); RUN_PRODUCT(REPORTS,'form_pass_activ_to',SYNCHRONOUS,RUNTIME,FILESYSTEM,P_LIST,NULL); DESTROY_PARAMETER_LIST(P_LIST); END; و في التقرير قم بكتابة التالي SELECT ALL DEMARCATION.DEMR_NAME, ACTIVITIES.ACTV_NAME, NEW_BUILDING.FILE_NO, NEW_BUILDING.RENTAL_NAME, NEW_BUILDING.CONTRACT_START, NEW_BUILDING.CONTRACT_END, NEW_BUILDING.YEARLY_RENT, NEW_BUILDING.LAST_PAY_DATE FROM NEW_BUILDING, ACTIVITIES, DEMARCATION WHERE ((NEW_BUILDING.DEMR_CODE = DEMARCATION.DEMR_CODE AND NEW_BUILDING.ACTV_NO = ACTIVITIES.ACTV_NO)) &act_l تقديم بلاغ
بتاريخ: 19 مارس 201213 سنة كاتب الموضوع comment_221975 اخي جزااك الله خير بس جربت الطريقة وما نفع ما ادري ايش المشكله تقديم بلاغ
بتاريخ: 19 مارس 201213 سنة كاتب الموضوع comment_221976 يطلع خطا ora ولا يستدعي الريبورتاما في الريبورت يقول لي انه جملة sql لم تنتهي بشكل صحيح تقديم بلاغ
بتاريخ: 19 مارس 201213 سنة كاتب الموضوع comment_221977 جربت حطيت في الريبورت نفس الكود اللي قلت لي عليه بس سويت في النهايةACTIVITIES.ACTV_NO IN('&act_1'وبرضوا ما اشتغل تقديم بلاغ
بتاريخ: 19 مارس 201213 سنة comment_221983 السلام عليكم و رحمة الله و بركاتهالمثال المرفق يحتوي على تطبيق عملي للفكرةالمستخدم هو SCOTT TEST_REP.rar تقديم بلاغ
بتاريخ: 20 مارس 201213 سنة كاتب الموضوع comment_222032 اخوي اسف على ازعاجك هذي اكواد الفورم والريبوت تبعي تفذت فيه اللي قلت لي عليه بس ما نفع ممكن تشوف وين الخطامع العلم اني حاولت ارسل لك الملف بالمرفقات بس ما عرفتكود الفورم DECLARE PL_ID PARAMLIST; BEGIN PL_ID := GET_PARAMETER_LIST('MY_LIST'); IF NOT ID_NULL(PL_ID) THEN DESTROY_PARAMETER_LIST(PL_ID); END IF; PL_ID := CREATE_PARAMETER_LIST('MY_LIST'); :ACTIVITIES.DIS_NO := SUBSTR(:ACTIVITIES.DIS_NO, 1, LENGTH(:ACTIVITIES.DIS_NO) - 1); -- To remove the last comma from the text. :ACTIVITIES.DIS_NO := 'AND WHERE ACTIVITIES.ACTV_NO IN (' || :ACTIVITIES.DIS_NO || ')'; add_parameter(PL_ID,'PARAMFORM',TEXT_PARAMETER,'NO'); add_parameter(PL_ID,'MAXIMIZE',TEXT_PARAMETER,'YES'); ADD_PARAMETER(PL_ID, 'ACT_1', TEXT_PARAMETER, :ACTIVITIES.DIS_NO); RUN_PRODUCT(REPORTS, 'form_pass_activ_to', SYNCHRONOUS, RUNTIME, FILESYSTEM, PL_ID, NULL); END -----------------------------------------------------------------------------------------------كود الريبورت SELECT ALL DEMARCATION.DEMR_NAME, ACTIVITIES.ACTV_NAME, NEW_BUILDING.FILE_NO, NEW_BUILDING.RENTAL_NAME, NEW_BUILDING.CONTRACT_START, NEW_BUILDING.CONTRACT_END, NEW_BUILDING.YEARLY_RENT, NEW_BUILDING.LAST_PAY_DATE FROM NEW_BUILDING, ACTIVITIES, DEMARCATION WHERE ((NEW_BUILDING.DEMR_CODE = DEMARCATION.DEMR_CODE AND NEW_BUILDING.ACTV_NO = ACTIVITIES.ACTV_NO)) &act_1; --------------------------------------------------------------------------هذا كود زر الاضافه اللي مسويه begin if :dis_no is null then :dis_no:=:actv_no; :dis_name:=:actv_name; else :dis_no:=:dis_no ||','||:actv_no; :dis_name:=:dis_name ||',' ||:actv_name; end if; تم تعديل 20 مارس 201213 سنة بواسطة nan740 تقديم بلاغ
بتاريخ: 20 مارس 201213 سنة comment_222041 اخوي اسف على ازعاجك هذي اكواد الفورم والريبوت تبعي تفذت فيه اللي قلت لي عليه بس ما نفع ممكن تشوف وين الخطامع العلم اني حاولت ارسل لك الملف بالمرفقات بس ما عرفتكود الفورم DECLARE PL_ID PARAMLIST; BEGIN PL_ID := GET_PARAMETER_LIST('MY_LIST'); IF NOT ID_NULL(PL_ID) THEN DESTROY_PARAMETER_LIST(PL_ID); END IF; PL_ID := CREATE_PARAMETER_LIST('MY_LIST'); :ACTIVITIES.DIS_NO := SUBSTR(:ACTIVITIES.DIS_NO, 1, LENGTH(:ACTIVITIES.DIS_NO) - 1); -- To remove the last comma from the text. :ACTIVITIES.DIS_NO := 'AND WHERE ACTIVITIES.ACTV_NO IN (' || :ACTIVITIES.DIS_NO || ')'; add_parameter(PL_ID,'PARAMFORM',TEXT_PARAMETER,'NO'); add_parameter(PL_ID,'MAXIMIZE',TEXT_PARAMETER,'YES'); ADD_PARAMETER(PL_ID, 'ACT_1', TEXT_PARAMETER, :ACTIVITIES.DIS_NO); RUN_PRODUCT(REPORTS, 'form_pass_activ_to', SYNCHRONOUS, RUNTIME, FILESYSTEM, PL_ID, NULL); END -----------------------------------------------------------------------------------------------كود الريبورت SELECT ALL DEMARCATION.DEMR_NAME, ACTIVITIES.ACTV_NAME, NEW_BUILDING.FILE_NO, NEW_BUILDING.RENTAL_NAME, NEW_BUILDING.CONTRACT_START, NEW_BUILDING.CONTRACT_END, NEW_BUILDING.YEARLY_RENT, NEW_BUILDING.LAST_PAY_DATE FROM NEW_BUILDING, ACTIVITIES, DEMARCATION WHERE ((NEW_BUILDING.DEMR_CODE = DEMARCATION.DEMR_CODE AND NEW_BUILDING.ACTV_NO = ACTIVITIES.ACTV_NO)) &act_1; --------------------------------------------------------------------------هذا كود زر الاضافه اللي مسويه begin if :dis_no is null then :dis_no:=:actv_no; :dis_name:=:actv_name; else :dis_no:=:dis_no ||','||:actv_no; :dis_name:=:dis_name ||',' ||:actv_name; end if; سلام عليكم اخي اعلزيز اتوقع الخطاء هنا:ACTIVITIES.DIS_NO := 'AND WHERE ACTIVITIES.ACTV_NO IN (' || :ACTIVITIES.DIS_NO || ')';لانو بالتقرير يوجد كلمة where وشكر لااخ a_disi تقديم بلاغ
بتاريخ: 20 مارس 201213 سنة comment_222042 السلام عليكم و رحمة الله و بركاتهلا يوجد أي إزعاج أخي الكريمأولا إجعل الكود في زر الإضافة كالتالي: :dis_no := :dis_no || :actv_no || ','; :dis_name := :dis_name || :actv_name || ','; ثم الكود في زر استدعاء التقرير كالتالي: DECLARE PL_ID PARAMLIST; X_DIS_NO VARCHAR2(4000) := :ACTIVITIES.DIS_NO; BEGIN PL_ID := GET_PARAMETER_LIST('MY_LIST'); IF NOT ID_NULL(PL_ID) THEN DESTROY_PARAMETER_LIST(PL_ID); END IF; PL_ID := CREATE_PARAMETER_LIST('MY_LIST'); :ACTIVITIES.DIS_NO := SUBSTR(:ACTIVITIES.DIS_NO, 1, LENGTH(:ACTIVITIES.DIS_NO) - 1); -- To remove the last comma from the text. :ACTIVITIES.DIS_NO := ' AND ACTIVITIES.ACTV_NO IN (' || :ACTIVITIES.DIS_NO || ')'; -- This sentence will be appended to the where clause in the report. add_parameter(PL_ID,'PARAMFORM',TEXT_PARAMETER,'NO'); add_parameter(PL_ID,'MAXIMIZE',TEXT_PARAMETER,'YES'); ADD_PARAMETER(PL_ID, 'ACT_1', TEXT_PARAMETER, :ACTIVITIES.DIS_NO); RUN_PRODUCT(REPORTS, 'form_pass_activ_to', SYNCHRONOUS, RUNTIME, FILESYSTEM, PL_ID, NULL); :ACTIVITIES.DIS_NO := X_DIS_NO; END و الكود المكتوب في التقرير صحيح ليس فيه خطأ.إذا لم يعمل معك الحل، قم بضغط الفورم و التقرير و إرساله مع الجداول المستخدمة.و شكراً أيضاً للأخ يزن تم تعديل 20 مارس 201213 سنة بواسطة a_disi تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.