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

كيف اتعامل من العناصر المكرره


nan740

Recommended Posts

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

المطلوب لو ان المزبون بعد قراءة الباركود لصنف معين وقبل طباعة الفاتورة اشترى حبه اخرى من الصنف ذاته فاريد طريقة بدون التعديل اليدوي للكمية انه في حالة كان الباركود الذي يتم قراءة قد تم قراءته من قبل فقط يزيد الكمية واحد بشكل الي

بحيث لا يكرر قراءة الصنف من اخرى مثلا

تم قراءة الصنف 1111221       قلم      الكمية 1

في حالة تم قراءة الباركود مره اخرى لنفس الصنف سوف يظهر كالتالي

1111221    قلم       الكمية  1

1111221    قلم       الكمية  1

الا اذا تم تعديل الكمية بشكل يدوي

لكن اريدة ان يعمل زيادة اليه للكمية

يعني لو تم قراءة الباركود 4 او 5 مرات يظهر الاتي

1111221    قلم       الكمية  5

 

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

هذا االأمريتعلق بمدى تصميم قاعدة البيانات الخاصة بمشروعك ...

 

مثلاً في قاعدة البيانات DBs

ليكن لديك جدول  الفاتواتير Bills يحتوي على (رقم الفاتورة Bil_No، تاريخها ، ..... الخ)

وجدول الأصناف Items ويحتوي على (رقم الفاتورة Bil_No (مفتاح ثانوي) ، رقم الصنف Itm_No، الكمية Qty ، السعر ، .... الخ)

 

في الشاشة Form 

يتم حفظ بيانات الفاتورة في جدول الفواتير Bills كلما اضفت فاتورة جديدية يتم تعريفها برقم تسلسلي في Bil_No 

وعلى افتراض انك كلما أدخلت صنف جديد يتم حفظه في جدول الأصناف Items مرتبط برقم الفاتورة Bil_No الحالية

 

فعند اظافة صنف جديد يتم وضع الاستعلام التالي في تريجر PRE-INSERT على مستوى بولك الأصناف Itms كما يلي

DECLARE
 gt_Qty number;
BEGIN
select nvl(Qty,0) into Gt_Qty from Items
where Itm_No = :Itm_No And Bil_No = :Bills.Bil_No;
-- تعيد الكمية السابقة من نفس الصنف لهذه الفاتورة
if Gt_Qty > 0 then
update Items set QTY = Gt_Qty + :Qty 
where Itm_No = :Itm_No 
and Bil_No = Bills.Bil_No;
-- العملية السابقة لتحديث كمية الصنف 

RAISE Form_Trigger_Failure;  
-- لمنع عملية حفظ الصنف الحالي
end If;
END;
 

 

 

والله الموفق

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

المقصد يا اخ فيصل انه في اشاشة فقط اثناء قراءة الباركود لو تم قراءة الباركود لنفس الصنف اكثر من مره فقط يقرا للمره الاولى وبعجين يزيد حقل الكمية اللي في اشاشة بعدد المرات اما الحفظ وزيادة الكمية فيعمل بالشكل الصحيح

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

المقصد يا اخ فيصل انه في اشاشة فقط اثناء قراءة الباركود لو تم قراءة الباركود لنفس الصنف اكثر من مره فقط يقرا للمره الاولى وبعجين يزيد حقل الكمية اللي في اشاشة بعدد المرات اما الحفظ وزيادة الكمية فيعمل بالشكل الصحيح

 

هذا ما قمت بشرحه لك بالضبط

 

عندما يتم قرأت الباركود لنفس الصنف في الفاتورة الواحدة لا يتم حفظ الصنف وإنما يتم اضافة كمية الصنف الى الكمية المسجلة مسبقاً

 

الخوارزمية كالتالي

 

1. عندما يتم اظافة صنف جديد يتم الاستعلام (هل تم اضافة الصنف لهذه الفاتورة من قبل) اذا الاجابة نعم أذهب الى الخطوة 3

2. اذا لم تتم اظافة الصنف ، قم بحفظ بيانات الصنف والكمية بشكل إعتادي ، اذهب الى الخطوة الأخير 5.

3. اذا تم اظافة الصنف من قبل ، قم بحفظ الكمية التي تم تسجيها من قبل الى متغير (الكمية السابقة).

4- قم بتعديل بيانات كمية الصنف بحيث = الكمية الحالية  + الكمية الحالية ,

5 - أحفظ البيانات

 انتهى

 

 

يتم وضع هذا التريجر على مستوى البلوك وقبل عملية الحفظ الحفظ  Pre_Insert

 

DECLARE
gt_Qty number;
BEGIN
select nvl(Qty,0) into Gt_Qty from Items
where Itm_No = :Itm_No And Bil_No = :Bills.Bil_No;
-- تعيد الكمية السابقة من نفس الصنف لهذه الفاتورة


if Gt_Qty > 0 then -- هل هناك كميات سابقة لهذا الصنف
update Items set QTY = Gt_Qty + :Qty 
where Itm_No = :Itm_No 
and Bil_No = Bills.Bil_No;
-- العملية السابقة لتحديث كمية الصنف

RAISE Form_Trigger_Failure;
 -- لمنع عملية حفظ الصنف الحالي
end If;

-- مالم قم بحفظ الصنف من جديد بالشكل الإعتيداي

END;
 

 

والله الموفق

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

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

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

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

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

جاري التحميل
×
×
  • أضف...

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

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