بتاريخ: 2 أغسطس 20169 سنة comment_276823 انا عندي فورم ماستير ديتيل و ادخل اصناف عن طريق قراءة الباركود ويعمل بشكل صحيح لكن مثلا لو ان الصنف يوجد منه اكثر من حبه يتم قراءة الباركود مره واحدة ومن ثم تغير الكمية المطلوب لو ان المزبون بعد قراءة الباركود لصنف معين وقبل طباعة الفاتورة اشترى حبه اخرى من الصنف ذاته فاريد طريقة بدون التعديل اليدوي للكمية انه في حالة كان الباركود الذي يتم قراءة قد تم قراءته من قبل فقط يزيد الكمية واحد بشكل الي بحيث لا يكرر قراءة الصنف من اخرى مثلا تم قراءة الصنف 1111221 قلم الكمية 1 في حالة تم قراءة الباركود مره اخرى لنفس الصنف سوف يظهر كالتالي 1111221 قلم الكمية 1 1111221 قلم الكمية 1 الا اذا تم تعديل الكمية بشكل يدوي لكن اريدة ان يعمل زيادة اليه للكمية يعني لو تم قراءة الباركود 4 او 5 مرات يظهر الاتي 1111221 قلم الكمية 5 تقديم بلاغ
بتاريخ: 2 أغسطس 20169 سنة comment_276835 هذا االأمريتعلق بمدى تصميم قاعدة البيانات الخاصة بمشروعك ... مثلاً في قاعدة البيانات 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; والله الموفق تم تعديل 2 أغسطس 20169 سنة بواسطة Faisal Matari تقديم بلاغ
بتاريخ: 3 أغسطس 20169 سنة كاتب الموضوع comment_276849 المقصد يا اخ فيصل انه في اشاشة فقط اثناء قراءة الباركود لو تم قراءة الباركود لنفس الصنف اكثر من مره فقط يقرا للمره الاولى وبعجين يزيد حقل الكمية اللي في اشاشة بعدد المرات اما الحفظ وزيادة الكمية فيعمل بالشكل الصحيح تقديم بلاغ
بتاريخ: 4 أغسطس 20169 سنة comment_276879 المقصد يا اخ فيصل انه في اشاشة فقط اثناء قراءة الباركود لو تم قراءة الباركود لنفس الصنف اكثر من مره فقط يقرا للمره الاولى وبعجين يزيد حقل الكمية اللي في اشاشة بعدد المرات اما الحفظ وزيادة الكمية فيعمل بالشكل الصحيح هذا ما قمت بشرحه لك بالضبط عندما يتم قرأت الباركود لنفس الصنف في الفاتورة الواحدة لا يتم حفظ الصنف وإنما يتم اضافة كمية الصنف الى الكمية المسجلة مسبقاً الخوارزمية كالتالي 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; والله الموفق تم تعديل 4 أغسطس 20169 سنة بواسطة Faisal Matari تقديم بلاغ
بتاريخ: 8 أغسطس 20169 سنة كاتب الموضوع comment_276985 مش الافضل وضعه في كود قراءة الباركود تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.