بتاريخ: 6 فبراير 20179 سنة comment_282682 السلام عليكم انا جديد في مجال النماذج و خبرتي كلها علي لغة COBOL فارجو المساعدة حتي لو كانت السؤال بسيط و شكرا ======== عندي نموذج خاص بتحويل اصناف بين مستودعات الشركة المشكلة ان طريقة تسجيل البيانات علي Table كالتالي لكل سجل موجود في الفورم يتم تسجيل 2 سجلات علي Table الأول برقم الفرع المحمول منه و الثاني برقم الفرع المحول اليه مع اختلاف الاشارة في الكمية و القيمة فقط اما باقي حقول السجل فمتماثلة ------------------------------------- قمت بعمل LOOP لجميع سجلات النموذج و تسجيلها بالنسبة للفرع المحول منه ثم تكرار LOOP أخر لقراءة جميع سجلات النموذج مرة اخري و تعديل ال 3 حقول المختلفة و تسجيلها علي Table ----------------- كررت المحاولة بعمل Commit في نهاية كل lOOP مرة اخري بعمل commit بعد نهاية كل سجل في النموذج و النتيجة واحدة يقوم بتسجيل بيانات الفرع المحول اليه loop number 2 و لا يسجل بيانات loop الأول ----------------------------------- عند مسح سطور loop رقم 2 يقوم بتسجيل بيانات الخاصة بالفرع المحول منه lopp number 1 ------------------ فهل هناك انكانية لتسجيل عدد 2 سجل في Table من سجل واحد من الشاشة؟ ==== هل يمكنني القيام بتسجيل بيانات الفرع المحول منه فقط ثم عمل Procedure في نهاية النموذج يقرأ البيانات التي تم تسجيلها ثم يضيف بيانات الفرع المحول لبه؟ شكرا للجميع تقديم بلاغ
بتاريخ: 6 فبراير 20179 سنة comment_282687 السلام عليكم ورحمة الله طالما أن بيانات الكمية المنقوله والقيمة ثابته وغير مجزأه بين جهات المستودعات المختلفه .... يمكنك ان تسجل كل البيانات في سجل واحد يحتوى عمود الجهة المنقول منها وعمود الجهة المنقول اليها وان اردت الإحتفاظ بسجلين متشابهين لكل حركة تتم ... يمكنك استخدام database trigger >> ينفذ عند تنفيذ الكتابه مع كل أمر insert في الجدول ويمكن ايضا من داخل الفورم وعلى مستوى بلوك البيانات تنفيذها مع trigger pre insert تقديم بلاغ
بتاريخ: 7 فبراير 20179 سنة كاتب الموضوع comment_282714 السلام عليكم ورحمة الله الأخ الفاضل امجد قمت بكتابة الكود التالي في pre insert trigger و لكن النتيجة كماهي يكتب السجل الاول فقط و يلا يعطي اي خطأ ع في امر insert فما هو الخطا الذي اقوم به او تعديل في الكود المكتوب و شكرا declare v_mcu varchar2(12); v_qty number; v_cst number; begin v_qty := :f41111.iltrqt * -1; v_cst := v_qty * :f41111.iluncs; v_mcu := :f4111.tomcu; insert into f4111(ildct,ildoc,ilmcu,ilpaid,iltrqt) values(:f41111.ildct,:f41111.ildoc,v_mcu,v_cst,v_qty); exception when others then message('error in insert' ||SQLCODE||' -ERROR- '||SQLERRM); end; تقديم بلاغ
بتاريخ: 7 فبراير 20179 سنة comment_282715 لازم تروح للبلوك الاول وتعمل لووب begin go_block('your_block'); while :system.last_record = 'FLASE' loop insert into ........... end loop; exception when others....... end; تقديم بلاغ
بتاريخ: 7 فبراير 20179 سنة كاتب الموضوع comment_282721 لازم تروح للبلوك الاول وتعمل لووب begin go_block('your_block'); while :system.last_record = 'FLASE' loop insert into ........... end loop; exception when others....... end; الاخ الافضل السلام عليكم يوجد trigger عند بداية تسجيل البيانات فيه الكود التالي و كنت اقوم بتكرارة مرتين كما في المشاركة الاولي و بالنسبة pre-insert قرات انه يتم تكرارة مع كل ريكورد اصليه يتم ادخالها في الملف و سؤالي هل اقوم بتكرار نفس اللوب مرة اخري داخل pre-insert trigger? هل هذا هو المقصود من ردك و شكرا لك ---------------------------end of new journal data ---------------------------- go_block('F41111'); first_recordك ----------------------------------------------------------------------- :f41111.ildct := :f4111.ildct; :f41111.ilmcu := :f4111.ilmcu; :f41111.illnid := :system.cursor_record; :f41111.ilpaid := :f41111.iluncs * :f41111.iltrqt; :f41111.iltrex := :f4111.iltrex; :f41111.ildoc := v_jrn_no; :f41111.ilicu := v_batch; :f41111.iltrdj := :f4111.iltrdj; :f41111.ildgl := 0; :f41111.ildgl := v_dtt; :f41111.iluser := get_application_property(username); :f41111.ilkco := '00001'; :f41111.ilpid := :system.Current_form; :f41111.iltday := to_char(sysdate, 'HH24:MI:SS'); :f41111.ilcrdj := sysdate; :f41111.illocn := ' '; :f41111.ilstun := 0; :f41111.illdsq := 0; :f41111.ilan8 := 0; :f41111.ilkit := 0; :f41111.iljeln := 0; upd_qty_oh(:f4111.ilmcu,:f41111.illitm,:f41111.illotn,:f41111.iltrqt); v_frm := 1; upd_qty_oh1(:f4111.tomcu,:f41111.illitm,:f41111.illotn,:f41111.iltrqt,v_frm,:f41111.iluncs,:f41111.scprc,:f41111.scexp,:f41111.ilpid,:f41111.iluser); v_frm := 0; ------------------------ end if; ------------------------ EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE'; NEXT_RECORD; END LOOP; ------------------------------------ if v_flag = 1 then rollback; go_item('f41111.illitm'); end if; ----------------- form after all validation ------------ commit; clear_form; :f4111.ildoc := v_jrn_no; ------------------------------------------------------------------- تقديم بلاغ
بتاريخ: 7 فبراير 20179 سنة comment_282725 انا كنت بصلحلك اللوب بس مكنتش قرأت الموضوع. قرأته دلوقتى. - لو موضوع الاشارة ضرورى ليك وعايز تسجل سجلين زى ما بتقول, فتقدر تستخدم post-insert مش pre-insert, لان الطبيعى انك عاوز الداتا تنزل في الجداول بعد ما تنزل في الجدول الى بتسجل فيه عملية التحويل الى الفورمه بتعتك قائمة عليه. - تقدر تستخدم loop واحد كده. begin go_block('your_block'); first_record; while :system.last_record = 'FALSE' loop insert into table1..... insert into table2...... end loop ; end ; اظنك مش هتحتاج commit; لان الجمل دى هتتنفذ قبل عملية الحفظ ما تنتهى ( الى هتبدأ عن طريق انك تدوس على زرار الحفظ). تقديم بلاغ
بتاريخ: 7 فبراير 20179 سنة comment_282727 متهيألى انت بتتكلم في موضوعين مختلفين . ايه الرد الاخير ليك وعلاقته بالموضوع؟ تقديم بلاغ
بتاريخ: 7 فبراير 20179 سنة كاتب الموضوع comment_282728 لازم تروح للبلوك الاول وتعمل لووب begin go_block('your_block'); while :system.last_record = 'FLASE' loop insert into ........... end loop; exception when others....... end; حاولت و لكن Go_blockداخل pre-insert trigge is restricted و في حالة وضعة في when-button-pressed كانت هي الحالة الاولي التي قمت بها تقديم بلاغ
بتاريخ: 7 فبراير 20179 سنة كاتب الموضوع comment_282732 انا كنت بصلحلك اللوب بس مكنتش قرأت الموضوع. قرأته دلوقتى. - لو موضوع الاشارة ضرورى ليك وعايز تسجل سجلين زى ما بتقول, فتقدر تستخدم post-insert مش pre-insert, لان الطبيعى انك عاوز الداتا تنزل في الجداول بعد ما تنزل في الجدول الى بتسجل فيه عملية التحويل الى الفورمه بتعتك قائمة عليه. - تقدر تستخدم loop واحد كده. begin go_block('your_block'); first_record; while :system.last_record = 'FALSE' loop insert into table1..... insert into table2...... end loop ; end ; اظنك مش هتحتاج commit; لان الجمل دى هتتنفذ قبل عملية الحفظ ما تنتهى ( الى هتبدأ عن طريق انك تدوس على زرار الحفظ). المشكلة عندي انها one table و ليس 2 و اريد اسجل سجلين في نفس ال table هل يمكن في post-insert ان اقرا ما تم تسجيلة قي %rowtype ثم اعدل البيانات و اعمل insert مرة اخري بالبيانات الجديدة تقديم بلاغ
بتاريخ: 7 فبراير 20179 سنة comment_282744 go_block ملهاش لزمة فعلا, معلش مختش بالى. اكتب begin while :system.last_record = 'FALSE' loop insert into your_table(column1,column2) values(:item1, :item2); insert into same_table(column1,column2) values(:item1,:item2); end loop ; end ; تم تعديل 7 فبراير 20179 سنة بواسطة eslam elbyaly تقديم بلاغ
بتاريخ: 7 فبراير 20179 سنة comment_282746 في جملة الانسرت التانية تقدر تستخدم (0- :item_name) عشان تدخل القيمة بالسالب. تقديم بلاغ
بتاريخ: 7 فبراير 20179 سنة comment_282768 السلام عليكم ورحمة الله السلام عليكم ورحمة الله الأخ الفاضل امجد قمت بكتابة الكود التالي في pre insert trigger و لكن النتيجة كماهي يكتب السجل الاول فقط و لا يعطي اي خطأ ع في امر insert فما هو الخطا الذي اقوم به او تعديل في الكود المكتوب و شكرا declare v_mcu varchar2(12); v_qty number; v_cst number; begin v_qty := :f41111.iltrqt * -1; v_cst := v_qty * :f41111.iluncs; v_mcu := :f4111.tomcu; insert into f4111(ildct,ildoc,ilmcu,ilpaid,iltrqt) values(:f41111.ildct,:f41111.ildoc,v_mcu,v_cst,v_qty); exception when others then message('error in insert' ||SQLCODE||' -ERROR- '||SQLERRM); end; اضف امر commit ---------------- سؤال : الشاشة المطلوبه ستتعامل مع حالة الإضافة فقط للبيانات الخاصه بالنقل من مستودع لأخر ولكن كيف ستتعامل في حالة التعديل للبيانات المسجلة أو اذا اردت الغاء بيانات حركة النقل بين المستودعين تقديم بلاغ
بتاريخ: 8 فبراير 20179 سنة كاتب الموضوع comment_282784 السلام عليكم ورحمة الله السلام عليكم ورحمة الله الأخ الفاضل امجد قمت بكتابة الكود التالي في pre insert trigger و لكن النتيجة كماهي يكتب السجل الاول فقط و لا يعطي اي خطأ ع في امر insert فما هو الخطا الذي اقوم به او تعديل في الكود المكتوب و شكرا declare v_mcu varchar2(12); v_qty number; v_cst number; begin v_qty := :f41111.iltrqt * -1; v_cst := v_qty * :f41111.iluncs; v_mcu := :f4111.tomcu; insert into f4111(ildct,ildoc,ilmcu,ilpaid,iltrqt) values(:f41111.ildct,:f41111.ildoc,v_mcu,v_cst,v_qty); exception when others then message('error in insert' ||SQLCODE||' -ERROR- '||SQLERRM); end; اضف امر commit ---------------- سؤال : الشاشة المطلوبه ستتعامل مع حالة الإضافة فقط للبيانات الخاصه بالنقل من مستودع لأخر ولكن كيف ستتعامل في حالة التعديل للبيانات المسجلة أو اذا اردت الغاء بيانات حركة النقل بين المستودعين السلام عليكم الشاشة ستكون للادخال فقط لا يوجد تعديل و انما يتم الالغاء عن طريق ادخال رقم المستند و يتم الغاء البيانات و اعادة تعديل الارصدة تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.