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

تحريك بيانات من الform الى الreport


Amgad

Recommended Posts

السلام عليكم ورحمة الله وبركاته،،
الزملاء الاعزاء
لدي form بها بعض بيانات الموظفين تظهر بطريقة ال tabular . اريد أن اختار بعض ارقام الموظفين من هذه الشاشة وارسلها الى report لطباعة بيانات تخص ارقام الموظفين المحددة والمختاره من الform.
اي السؤال بطريقة اخرى كيف يتم طباعة تقرير( يحتوى على مجموعه من بيانات الموظف ) بمعلومية رقم موظف واحد أو مجموعة ارقام موظفين مختارة ومحدده من الشاشه .
مع تمنياتى لجميع افراد المنتدى بالتوفيق .

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

  • الردود 53
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

  • Amgad

    9

  • عمر باسلم

    5

  • msh

    3

  • khaled

    2

أكثر المشاركين في هذا الموضوع

الصور المنشورة

Guest عادل الشهري

تحياتي

عزيزي لتمرير قيمة من الـ Form إلى الـ Report مثلاً مثل رقم الدائرة او رقم موظف .
كالتالي :
سنأخذ مثال عن تمرير رقم الدائرة من الـForm الى الـ Report من جدول الموظفين للمستخدم SCOTT .

  • إبدأ بعمل Report وعندما تصل إلى الــ SQLQuery Statment
    اكتب التالي

Select * From Emp Where deptno =: P1;



P1 = Parameter سنقوم بإنشائه لاحقاً

احفظ التقرير بهذا الإمتداد مثلاً C:\Rep\Rep.rdf

  • إعمل Form جديد يحتوي على جدول الـEmp .... واعمل في داخله زر (BUTTON) لكي نقوم بتمرير القيمه منه واستدعاء التقرير .

قم بتغيير الخاصية التالية للزر


Muse Navigate = No



ثم قم بإضافة الكود التالي : عند ضغط الزر طبعاً


When Button Pressed



Declare
PL paramlist;
Begin
PL:=create_parameter_List('p1');
add_parameter(PL,'p1',text_parameter,to_char(:deptno));
Run_product(Reports,'c:\rep\rep.rdf',asynchronous,RunTime,FileSystem,PL);
Destroy_Parameter_List(PL);
End;



الآن بمجرد الضغط على الزر ستظهر لك نافذه صغيرة تطلب منك ادخال رقم الدائرة وهي تسمى الــ ParamForm ومن أجل إلغائها وأخذ القيمة مباشرة من الــDeptno الموجود في الشاشة قم بإضافة الجملة التالية قبل جملة الـ Run_product وبعد جملة Add_Parameter

add_parameter(PL,'PARAMFORM',text_parameter,'NO');

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

السلام عليكم ورحمة الله وبركاته،،
الأخ / عادل
شكرا جزيلا على الرد السريع والمتميز فى عرض طريقه الحل للمشكلة .
المطلوب هو الاتي :
1- الشاشه التى اتعامل معها بها 10 سجلات لموظفين مختلفين معروضه بطريقه الtabular ( سجلات تكراريه ) .
2- اريد ان اختار ارقام محدده منها .
3- بالضغط على مفتاح معين يتم استدعاء التقرير .
4- هذا التقريريقوم بطباعة بيانات الموظفين المختارين فقط .
الملخص : اختيار مجموعه من ارقام الموظفين من الشاشه وبالضغط على المفتاح مره واحده فقط يتم استدعاء التقرير لطباعة بياناتهم .
وشكرا لتعاونكم معنا ..

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

السلام عليكم
أخي أمجد هناك طريقة أسهل من عملية تمرير البيانات من النموذج الى التقرير خصوصا إذا كانات هذه البيانات مختلفة مثلا اختيار موظفين من اكثر من قسم فقط جرب المثال التالي وحمل الملفات المرفقة :
1- هذا المثال سوف يكون على جدول الموظفين ال EMP لنضيف عامود جديد على هذا الجدول ونسميه S

ALTER TABLE EMP 
ADD(S NUMBER(1));



2-نقوم بإنشاء نموذج عادي يحتوي على بلوك الموظفين مع العامود الجديد S وسنمثل هذا العامود بصندوق اختيار CheckBox يحتمل احدى القيمتين 1 موظف مختار 0 موظف غير مختار .

3-عند تشغيل النموذج سوف نقوم بإختيار الموظفين المراد ظهور معلوماتهم في التقرير وذلك بالضفط على صندوق الإختيار المقابل لكل موظف وعمل حفظ لهذه التغيييرات .

3-نقوم ببناء تقرير عادي حيث سيكون شرط جملة الإستعلام فيه هو اظهار اي موظف يحتوي عامود S له على 1 اي انه موظف مختار .

4-يمكننا ايضا اضافة "زر امر" في النموذج وتكون وظيفته هي مسح جميع التغييرات التي قمنا بها وذلك لإجل عملية اختيار جديدة

BEGIN	
UPDATE EMP
SET S=0;
COMMIT;	
END;



جرب المثال واخبرني بالنتيجة ....
تحياتي :rolleyes:

PickEmp.zip

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

شكراً للاخ عادل والاخ msh
فكره الاخ msh هي فكره رائعة جداً ولكن لدي بعض الملاحظات عليها
1- عمل تعديل في الtable structure
هذا لا يفضل غالباً حيث انه يقوم بتعديل الtable structure في كل مره تحتاج فيها الى حل مشكله معينه في الform وذلك لعده اسباب
انه عندما تقوم بتعديل الtable structure كان تقوم بحذف او ايضافه columen فانه سوف يؤثر على الdatabase objects المعتمده على هذا الجدول مثل الـ views ,procedures , functions , packages وغيرها بحيث تصبح invalidate .
عملية ان تقوم بعمل commit من الـ form فانه سوف يعمل end لل tracsaction الخاص بهذا الsession مما قد يؤدي الى حفض بعض البيانات او حذفها .

طريقة الاخ عادل هي الطريقة الغالب استخدامها في حالة تمرير بيانات من فورم الى تقرير .
ولذلك اقترح بان نستخدم فكره الاخ msh ولكن باستخدام طريقه الاخ عادل وذلك لان الفكره التي استخدمها الاخ msh هي فعلاً حلى لسؤال الاخ امجد بحيث يتم عرض الموظفين الذين نختارهم عن طريقه الـcheck box.
والان ندمج الطريقتين الرائعتين للاخوين msh و عادل
1- نقوم بعمل check box ولكن لا يكون database item بحيث ان نعمله في الـ emp block ولكن نغير خاصية database item الى no
2- نعمل function تقوم بارجاع الـwhere cluse بحث يتم ارسالها باستخدام الـ parameter الى الreport
وهذه الـfunction


FUNCTION Get_Cond RETURN VARCHAR2
IS
Cond varchar2(2000) := '(1=2)';
BEGIN
go_block('emp');
first_record;
 Loop
 	If :is_select=1 Then 
   Cond:=Cond || ' OR empno=' || :empno;
 	End if;
 	next_record;
 	Exit when :system.last_record = 'TRUE';
 End loop;
Return ('Where ' || Cond) ;
END;



3- في زر استدعا التقرير نستخدم نفس الكود الخاص بالاخ عادل مع تبديل قيمة الـparameter المسمى p1 الى قيمة الـfunction كالاتي

Declare
PL paramlist;
Begin
PL:=create_parameter_List('p1');
add_parameter(PL,'p1',text_parameter,get_cond);
add_parameter(PL,'PARAMFORM',text_parameter,'NO');
Run_product(Reports,'c:\rep\rep.rdf',asynchronous,RunTime,FileSystem,PL);
Destroy_Parameter_List(PL);
End;


4-الان نعدل الـQuery الموجود في الـReport الى الاتي

Select * From Emp &p1;



الاخوه msh و عادل شكراً لكم وتقبلوا تحياتي ومتظرين المزيد من الابداع

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

السلام عليكم
أخي خالد جزاك الله خيرا ، خطرت لي الفكرة بحيث أعمل loop على البلوك لكن لم أعرف كيفية كتابة الكود الخاص بالعملية :rolleyes: ، وملاحظاتك صحيحة 100% والطريقة التي ذكرتها أفضل فعلا من التعديل على data structure خصوصا مع وجود عدد كبير من السجلات شكرا لك وهذا هو المطلوب .
تحياتي

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

السلام عليكم ,
الزملاء الثلاثه الاخ / عادل والاخ / msh والاخ / خالد
ابعث اليكم بشكر خاص ثلاثى لكم جميعا على هذه المشاركة الايجابيه والهادفه والتى لا تتواجد فى كثير من المنتديات الاخرى .
بداية اشكر الاخ / عادل على المبادرة السريعه فى حل الحاله التى طرحتها
ثانيا اشكر الاخ/ msh على الفكرة الجديده التى عرضها للحل مع اضافة ملاحظه عليها انه فى حالة طباعة التقرير من اكثر من مستخدم فى نفس التوقيت ستحدث مشكلة لوجود اكثر من تعديل فى حقل الاختيار( الجديد ) بالجدول .
ثالثا : شكرا للأخ / خالد على الاضافه المتميزه للحل , مع الفهم العميق لطبيعة وابعاد الفكره المطروحه للحل .
عموما فى الختام اضافتي بسيطة جدا وهى وضع الحل النهائى فى خدمة اعضاء المنتدى للاستفاده من الافكار المطروحه للمناقشة .
وشكر اخير للثلاثى المتميز.
وجزاكم الله خيرا .

PickEmpNew.zip

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

وعليكم السلام
أخي أمجد شكرا على الملاحظة وكما ذكر العضو المتميز الأخ خالد فالأفضل عدم التعديل على البيانات وحل المشكلة من داخل النموذج ، وشكرا :rolleyes: على طرح المثال المعدل ....
تحياتي

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

شكراً لكم اخواني الجميع وانا الصراحه لا استطيع ان اعبر عن مدى شكري وتقديري لكم الذي يزداد يوماً بعد يوم , وكل ما نقوم بتقديمه ما هو الى واجب علينا كمسلمين ان نتعاون ونفيد بعضنا البعض .
احب ان انوه ان مشاركاتكم تفيدنا اكثر مما نفيدكم وجزاكم الله الف خير .

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

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

السلام عليكم ,
الاخ / عمر
لقد تم اختبار البرنامج من قبل , ولم ترد اية ملاحظات خلال ال10 ايام الماضية, بعد تجهيزه للتحميل , من الاخوه الذين حملوا البرنامج ولم تظهر الحاله التى ذكرتها ..
الرجاء اعادة التحميل والتجربه مره اخرى .
وشكرا لك .

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

السلام عليكم
الاخ امجد
اذا تم اختيار سجلين يتم الذهاب الى التقرير
اما اذا تم اختيار اكثر من اثنين تظهر الرساة التالية
Rep-0091 : Invalid value for parameter 'p1'
:rolleyes: :) :)
المعذرة على التأخيـــــــــر في المشاركة

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

السلام عليكم ,
الاخ / عمر
الرسالة التى ظهرت لك من الreport وليس من الform - وهىrep-0091
المفروض ما يتم تحريكة فى الparamter هو الشرط بالكامل مثل
Where (1=2) OR empno=7369 OR empno=7521 OR empno=7654
عموما سارسل لك نسخه اخرى مع الForm + report
مع امكانية عرض الشرط الذي سيتم تحريكه الى التقرير داخل الp1
جرب مره اخرى وبلغنى بالنتيجه

New.zip

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

السلام عليكم ورحمة الله وبركاته
الاخ امجد
مشكورييــــــــــــــــــــــــــــــــــــــــــــن
وجزاك الله خير
وربنا يوفق
المشكلة التي كانت عندي في خصائص البرميتر لم اغير شي
:) :D :D :D :D :D :D

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

  • بعد 6 شهور...
  • بعد 1 شهر...
  • بعد 1 سنة...

السلام عليكم ورحمة الله.
مثال جميل جدا. وبارك الله في كل المشاركين وتقبل الله صيامكم جميعا

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

  • بعد 5 أسابيع...
  • بعد 3 أسابيع...
  • بعد 1 شهر...
  • بعد 4 أسابيع...

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

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

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

×   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.

جاري التحميل



×
×
  • أضف...

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

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