الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

طلب مساعدة في تسجيل بيانات Form

Featured Replies

بتاريخ:

السلام عليكم

انا جديد في مجال النماذج و خبرتي كلها علي لغة COBOL فارجو المساعدة حتي لو كانت السؤال بسيط و شكرا

========

عندي نموذج خاص بتحويل اصناف بين مستودعات الشركة  المشكلة ان طريقة تسجيل البيانات علي Table كالتالي

لكل سجل موجود في الفورم يتم تسجيل 2 سجلات علي Table

الأول برقم الفرع المحمول منه و الثاني برقم الفرع المحول اليه مع اختلاف الاشارة في الكمية و القيمة فقط اما باقي حقول السجل فمتماثلة

-------------------------------------

قمت بعمل LOOP   لجميع سجلات النموذج و تسجيلها بالنسبة للفرع المحول منه 

ثم تكرار LOOP  أخر لقراءة جميع سجلات النموذج مرة اخري و تعديل ال 3 حقول المختلفة و تسجيلها علي Table

-----------------

كررت المحاولة بعمل Commit  في نهاية كل lOOP

مرة اخري بعمل commit بعد نهاية كل سجل في النموذج 

و النتيجة واحدة يقوم بتسجيل بيانات الفرع المحول اليه loop number 2

و لا يسجل بيانات loop  الأول

-----------------------------------

عند مسح سطور loop رقم 2 يقوم بتسجيل بيانات الخاصة بالفرع المحول منه lopp number 1

------------------

فهل هناك انكانية لتسجيل عدد 2 سجل في Table من سجل واحد من الشاشة؟

====

هل يمكنني القيام بتسجيل بيانات الفرع المحول منه فقط ثم عمل Procedure في نهاية النموذج يقرأ البيانات التي تم تسجيلها ثم يضيف بيانات الفرع المحول لبه؟

 

شكرا للجميع

بتاريخ:

السلام عليكم ورحمة الله 

 

طالما أن بيانات الكمية المنقوله والقيمة ثابته وغير مجزأه بين جهات المستودعات المختلفه ....

يمكنك ان تسجل كل البيانات في سجل واحد يحتوى عمود الجهة المنقول منها وعمود الجهة المنقول اليها 

 

وان اردت الإحتفاظ بسجلين متشابهين لكل حركة تتم ... يمكنك استخدام database trigger >> ينفذ عند تنفيذ  الكتابه مع كل أمر insert  في الجدول

ويمكن ايضا

من داخل الفورم وعلى مستوى بلوك البيانات

تنفيذها مع trigger

pre insert  

بتاريخ:
  • كاتب الموضوع

السلام عليكم ورحمة الله 

الأخ الفاضل امجد قمت بكتابة الكود التالي في 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;
بتاريخ:

لازم تروح للبلوك الاول وتعمل لووب 

begin 

go_block('your_block'); 

while :system.last_record = 'FLASE' loop

insert into ...........

end loop; 

exception

when others.......

end; 

بتاريخ:
  • كاتب الموضوع

لازم تروح للبلوك الاول وتعمل لووب 

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;
 -------------------------------------------------------------------
بتاريخ:

 انا كنت بصلحلك اللوب بس مكنتش قرأت الموضوع. 

قرأته دلوقتى. 

- لو موضوع الاشارة ضرورى ليك وعايز تسجل سجلين زى ما بتقول, فتقدر تستخدم 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; لان الجمل دى هتتنفذ قبل عملية الحفظ ما تنتهى ( الى هتبدأ عن طريق انك تدوس على زرار الحفظ).

بتاريخ:

متهيألى انت بتتكلم في موضوعين مختلفين .

ايه الرد الاخير ليك وعلاقته بالموضوع؟

بتاريخ:
  • كاتب الموضوع

لازم تروح للبلوك الاول وتعمل لووب 

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 كانت هي الحالة الاولي التي قمت بها

بتاريخ:
  • كاتب الموضوع

 انا كنت بصلحلك اللوب بس مكنتش قرأت الموضوع. 

قرأته دلوقتى. 

- لو موضوع الاشارة ضرورى ليك وعايز تسجل سجلين زى ما بتقول, فتقدر تستخدم 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 مرة اخري بالبيانات الجديدة

بتاريخ:

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 ;

تم تعديل بواسطة eslam elbyaly

بتاريخ:

في جملة الانسرت التانية تقدر تستخدم (0- :item_name) عشان تدخل القيمة بالسالب.

بتاريخ:

السلام عليكم ورحمة الله 

 

 

 

السلام عليكم ورحمة الله 

الأخ الفاضل امجد قمت بكتابة الكود التالي في 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 

 

----------------

سؤال :

الشاشة المطلوبه ستتعامل مع حالة الإضافة فقط للبيانات الخاصه بالنقل من مستودع لأخر 

ولكن كيف ستتعامل في حالة التعديل للبيانات المسجلة

أو

اذا اردت الغاء بيانات حركة النقل بين المستودعين 

بتاريخ:
  • كاتب الموضوع

السلام عليكم ورحمة الله 

 

 

 

السلام عليكم ورحمة الله 

الأخ الفاضل امجد قمت بكتابة الكود التالي في 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 

 

----------------

سؤال :

الشاشة المطلوبه ستتعامل مع حالة الإضافة فقط للبيانات الخاصه بالنقل من مستودع لأخر 

ولكن كيف ستتعامل في حالة التعديل للبيانات المسجلة

أو

اذا اردت الغاء بيانات حركة النقل بين المستودعين 

السلام عليكم

الشاشة ستكون للادخال فقط لا يوجد تعديل و انما يتم الالغاء عن طريق ادخال رقم المستند و يتم الغاء البيانات و اعادة تعديل الارصدة

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.