الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استفسار في الأوراكل

مغلقاستطلاع
بدأه محمد محمد أنيس في 22 ديسمبر 2002 · 2 رد · 624 مشاهدة · في قواعد بيانات Oracle
مشاركة: واتساب X فيسبوك تيليجرام

استطلاع

1 مشارك في التصويت

??????? ?? ????????

??? ??? ?? ??????? ????? ?? ???????1 صوت · 100%
??????? ?? ?????? ??? ??????? ?????????0 صوت · 0%
????? ???????? ?? ??? ??????0 صوت · 0%
#1 صاحب الموضوع

:(بسم الله الرحمن الرحيم

اسمي محمد محمد أنيس من مصر وأعمل مدرس بمكة المكرمة ودرست الأوراكل وأقوم بتصميم برنامج للمخازن ولكن واجهتني عدة صعوبات وأهمها

هو كيفية جميع صنف من الاصناف يتم إدخاله إلى مخزن من المخازن عدة مرات ، ولقد قمت بكتابة كود في preinsert و PREUPDATE ولكن لم يعطي نتيجة حيث يتم إظهار الرقم بالنسبة للصنف في كل سجل دون عمل الجمع .

والكود على سبيل المثال كالتالي :

:i_q=:i_q1+:i_q;

أرجو أن تساعدوني في التوصل إلى حل هذه المسألة .

ولكم جزيل الشكر والعرفان .

موقعي في yahoo هو

oraem7@yahoo.com

#2

اهلا بك أخ محمد، ولا أدري كيف قمت ببناء سجلاتك، ولكن المنطق يقول انه لو قمت بشراء صنف أكثر من مرة، ففي كل مرة يجب ادخال قيد منفصل، تذكر فيه كود الصنف وتاريخ الشراء ورقم الفاتورة وقيمة الشراء الصنف وكود الجهه الموردة و و و و و، وبهذا عند البيع يمكنك تحديد القيمة التي اشتريت بها، وبالتالي تتمكن من عملية جرد سليمة مستقبلا، وفي البيع يبج اتباع نظام (FIFO or First in First Out) ويقصد بها ما يدخل المخزن كمشتري يجب ان يباع بنفس ترتيب الشراء (ما يشترى أولا يباع أولا).

وبهذه الحالة، لو افترضنا ان جدول المخزن (وليكن اسمه Stock) هو بالشكل الآتي (كفرض)

stock_item_code                  varchar2(15) not null

stock_supplier_code              varchar2(15) not null

stock_purchase_date             date,

stock_purchase_invoice          varchar(15)

stock_purchased_quantity       number(5)

stock_now_balance                number(5)

stock_unite_price                   number(13,3)

stock_sell_price                     number(13,3)

stock_expiry_date                  date

stock_shelf_code                   varchar2(7)

وهذا مجرد مثال يمكنك تغييره كما تحب، ففي هذه الحالة يجب عليك خصم العدد المباع في كل مرة عندما يكون الدور على هذا السجل، وبالتالي لو أردت معرفة وضع المخزن يمكنك عمل الآتي

select stock_item_code,sum(nvl(stock_now_balance,0)) NOW_BALANCE

from stock where stock_item_code = '&Enter_Item_code'

group by stock_item_code;

فما عليك سوى التشغيل وإعطاء كود الصنف الذي تريد، وستجيب عليك الاوراكل بكود الصنف، وعدد الوحدات في المخزن

#3

السلام عليكم

يا أخي محمد

إذا كنت تريد جمع العدد الذي قمت بإدخاله مع العدد المخزن سابقا، فيجب عليك أولا أن تدع قيمة الكمية الجديدة تخزن على الجدول،

أي أنه باختصار

لنفرض أن مجموع صنف معين في قاعدة البيانات هو 10

وأنك تريد اضافة العدد 5 أليه

فيجب أولا تخزين الـ 5 ثم إضافتها إلى الـ10 المخزنة اصلا على قاعدة البيانات

واقترح أن تقوم لفعل ذلك باستخدام الـ POST-INSERT , الـ POST-UPDATE

وفكرتك التي تعتمد على تخزين المجموع في عمود منفصل، ثم حفظ اضافة القيم الجديدة إليها، هي فكرة ممتازة لأنه في حال استخدام SUM لعمل ذلك و في حال كون قاعدة البيانات كبيرة جدا يجب على الفورم أن يمر على كافة السطور في جدولك ليقوم بإعطاء المجوع، أي أن الاداء في حالة وضع المجموع في عمود يحفظ القيمة أفضل من الأداء في حالة استخدام الـ SUM ولكن لكل شيء مساؤه ومحاسنه، فكما قال لك الأخ السني، هذه الطريقة لا تصلح لعمل جرد مستقبلي وتفصيلي

واقترح أن تقوم بصنع جدولين الاول فيه معلومات الأصناف التي قمت بعمل حركة عليها ( أقصد حركة ادخال اخراج اتلاف.....)مثل رقم الصنف والتاريخ والكمية ... والتي يمكن لحركة على جدول معين أن تتكرر في نفس الجدول مثل ادخال كمية لصنف معين لشخص وادخال كمية أخرى لشخص أخر ، وجدول ثاني يحوي على أرصدة هذه الأصناف(رصيد كميات، أو أسعار)، وفيه تضع عمود يحوي مجموع الادخالات، وعمود يحوي مجموع الاخراجات وعمود يحوي مجموع الاتلاف، وعمود الكميات الباقية......، وهذه الاعمدة تأخذ قيمتها تلقائيا ودون تدخل المستخدم عن طريق الـ POST-INSERT والـ POST-UPDATE حيث تقوم بجمع الرقم المخزن في عمود معين في جدول الارصدة مع الرقم الذي قام المستخدم بادخاله في الجدول الاول.

وعندما يريد المستخدم رؤية مجموع الكميات المخرجة والمدخلة يقوم بالاستعلام على الجدول الثاني، أما إذا اراد التفصيل فيقوم بالاستعلام على الجدول الآول.

أرجو أن أكون قد أوصلت فكرتي لك

والسلام

هذا الموضوع مغلق.

مواضيع مشابهة