السلام عليكم ورحمة الله وبركاته
عندي برنامج مبيعات عندما ا ارغب ان احفظ الفاتورة احفظ البيانات الاساسية مثل تاريخها ورقمها وما الى ذلك بجدول والبضاعة التابعة لها بجدول أخر وهذا هو الوضع الطبيعي تم بعد ذلك اقوم بخصم البضاعة من المخزن .
ما يحدث هنا هو ثلاث عمليات متتالية على قاعدة البيانات وهي تعمل على ما يرام .
والمشكلة التي من الممكن ان تحدث قد يتم اضافة البيانات الاساسية مثل رقم الفاتورة وتاريخها ويحدث خطاء ما باضافة البضاعة في الجدول الثاني ويستمر البرنامج ويخصم البضاعة من المخزن في جدول ثالث.
فطريقتي لحل هذا الاشكال هو اذا حدث خطاء بالعملية الاولى انهي العملية ككل بلا اي مشكلة
واذا حدتث مشكلة بالعملية الثانية اقوم بحذف العملية الاولى وانهي العملية
واذا حدتث مشكلة بالعملية الثالثة وهي خصم البضاعة من المخزن انبه المستخدم الى ذلك ليتعامل مع الموضوع يدوي وهي حالات نادرة ربما تحدث .
والسؤال الان هل هناك طريقة مع مكونات ado لعمل شئ مشابه او فيها امكانية لفعل ذلك بطريقة مشابهةاو احد أخر له فكرة افضل ...؟
وشكرا
السلام عليكم
تخطيط قاعدة البيانات بالشكل التالي
[
attachment=2144]
تركيب الكود كان بالشكل التالي
كود :
Test1,test2,test3:boolean
try
Test1:=true;
except on E: Exception do
// ShowMessage
end;
try
Test2:=true;
except on E: Exception do
DeleteFatora//
end;
try
Test3:=true;
except on E: Exception do
// ShowMessage
end;
if (test1=true ) and (test2=true) and (test3=true) then
begin
end;
كود :
اقوم بخصم البضاعة من المخزن
كود :
ويخصم البضاعة من المخزن في جدول ثالث.
على حسب ما فهمت انه يوجد جدول المخزون الذى يخزن فيه الكمية الموجودة فى المخزن ... و هذه الكمية يمكن حسابها (المدخلات - المخرجات).
قاعدة مهمة من قواعد (الخاصبة بقواعد البينات)
تقول :
لا تخـــزن اى شــىء يمكــن حسابــه .
و انت اهملت هذه القاعدة و بالتلى واجهتك مشكلة التعديل على جدول المخزون بعد كل تعديل على المدخلات او المخرجات , و كما قلت قد تفشل احدى هذه العمليات و يتم الخصم من جدول المخزون ... .
من الاحسن تعويض عمل جدول المخزون ب requêtes SQL (استعلام SQL) .
بالتوفيق .
السلام عليكم
مرحبا بك hanipino
إقتباس :قاعدة مهمة من قواعد (الخاصبة بقواعد البينات) تقول : لا تخـــزن اى شــىء يمكــن حسابــه .
ربما لم تفهم القاعدة جيدا أخي hanipino فهي تعني ان لا تقوم بتخزين قيمة شئ يمكن حسابه من الجدول نفسه
بمعنى لا تخزن قيمة سعر الشراء مضروب في الكمية فهي مخزنة فعلا وباي وقت قم بضرب القيمتين فتحصل على الناتج
ولو كانت القاعدة عامة اي لا تخزن اي شئ يمكن حسابه فلن يمكننا حساب اي شئ ولا معرفة اي شئ
ان وجود جدول للمخزون طريقة لا مفر منها أبدا ولا يوجد بديل عنها ومن الممكن خصم الكمية بسهولة وبلا اي مشاكل ولكن للاحتياط كنت ابحث عن شئ مثل
كود :
[color=Red]ADOConnection1.BeginTrans ;[/color]
try
[COLOR=Green]
ADOTable1.Insert;
ADOTable1.FieldByName('fatora').Value:=Edit1.Text;
ADOTable1.FieldByName('mname').Value:=Edit2.Text;
ADOTable1.FieldByName('age').Value:=Edit3.Text;
ADOTable1.Post;
[/COLOR]
[COLOR=Blue]
ADOTable2.Insert;
ADOTable2.FieldByName('mname').Value:=Edit4.Text;
ADOTable2.FieldByName('age').Value:=Edit5.Text;
ADOTable2.Post;
[/COLOR]
[color=#ff0000]ADOConnection1.CommitTrans;[/color]
except on E: Exception do
[color=#ff0000]ADOConnection1.RollbackTrans;[/color]
end;
فبدلا من التحقق بنفسي من نجاح العملية بعدة اجراءات اترك هذا لكائن الاتصال .
إقتباس :من الاحسن تعويض عمل جدول المخزون ب requêtes SQL (استعلام SQL) .
بالتاكيد انا استخدم جمل الاستعلام لتحديث البيانات والا فكيف سيمكنني معرفة الصنف المطلوب بجدول المخازن
فالاوامر Locate وايضا Filtter الخاصة بالجدول لا اتكل عليها بهكذا امور
والله الموفق
كود :
فهي تعني ان لا تقوم بتخزين قيمة شئ يمكن حسابه من الجدول نفسه
ما الفرق بينهما من نفس الجدول او من جدولين او اكثر
... (على كل حال) ربما عند حق .
--------------------------------
من الاحسن ? بعدل كل (حذف تعديل اضافة) على جدول المدخلات او المخراجات تقوم
بالكتابة فى
جدول المخزون .
ام
تنفذ استعلام عند الحاجة
فقط ياتى بما هو موجود فى
المخزن (
حسابه) .
السلام عليكم
مرحبا بك مرة أخرى هنا أخي
إقتباس :من الاحسن ? بعدل كل (حذف تعديل اضافة) على جدول المدخلات او المخراجات تقوم بالكتابة فى جدول المخزون .
أجل بالتاكيد ان اقوم بتعديل الكميات بجدول المخازن بعد كل عملية بيع او شراء او عملية تعديل على فاتورة بيع او شراء او عملية مسترجعة لمبيعات او مشتريات ( وجع رأس أخي )
صورة لنافذة المخزن والحقول التي تحتويها
[
attachment=2149]
السلام عليكم ورحمة الله
كفكرتين:
1- تعمل بجداول مؤقتتة،
تحفظ بها كل معلومات الفاتورة وعند الانتهاء يتم حفظ كل شيئ بالجداول الحقيقية
2- لا تنقص الكمية من جدول المواد/الاصناف لانه يمكن حساب ذلك (تغير بالتصميم) وهذا احسن كونه يطبق القاعدة التي ذكرها اخي هاني
السلام عليكم ورحمة الله
إقتباس :تنفذ استعلام عند الحاجة فقط ياتى بما هو موجود فى المخزن (حسابه) .
وكذلك
إقتباس : لا تنقص الكمية من جدول المواد/الاصناف لانه يمكن حساب ذلك (تغير بالتصميم) وهذا احسن كونه يطبق القاعدة التي ذكرها اخي هاني
ربما هذا صحيح بحال عدم طلب الزبون رغبته في انقاص الكمية من المخزن يدوي بكثير من الحالات .
وما فهمته منكم هو ان كمية المخزن تعتمد على فواتير الشراء وفواتير المبيعات تحدد كمية المخزن من المواد التي تم شراءها ويمكن هذا بواسطة استعلام من الجدولين .
ولكن كما قلت ان المشكلة التي تواجهني هي طلب الزبون ورغبته في تعديل الكمية يدوي وبخاصة عند اول استخدام ولذلك وجدت انه من الافضل جعل جدول يمثل الاصناف والمخزن .
إقتباس :- تعمل بجداول مؤقتتة،
تحفظ بها كل معلومات الفاتورة وعند الانتهاء يتم حفظ كل شيئ بالجداول الحقيقية
تقريبا هذا ما افعله اقوم باخذ نسخة من جدول المخزن والعمل عليها وحفظ البيانات في جدول مؤقت اخر أو بالذاكرة او في StringGrid وعند الانتهاء اقوم بحفظ البيانات
كود :
ولكن كما قلت ان المشكلة التي تواجهني هي طلب الزبون ورغبته في تعديل الكمية يدوي وبخاصة عند اول استخدام ولذلك وجدت انه من الافضل جعل جدول يمثل الاصناف والمخزن
هذا التعديل من المستخدم له اسباب (ما الشىء الذى ادى به الى تغيير قيمة المخزون)
اما خطاء فى الفاتورة او ... . يقوم بالتعديل على الفاتورة فقط .
--------------------------
الا اذا ذهب الى المخزن و قام بالحساب يدويا .. و هذا ما يعرف
بالجــــــــــرد و هذا الاخير ننشىء له جدول خاص نسجل فيه الكمية التى حسبت يدويا
(و هذا هو ربما سبب التعديل الكثير من المستخدم لان اجراء عملية الجرد تجرى عدة مرات للتاكد من الحساب)
--------------------------
بالنسبة للكمية الموجودة فى المخزن يمكن الاطلاع عليها من ناحيتين
1- الفرق بين المدخلات و المخرجات (المسجلة على
اساس الفواتير) --->
استعلام من جدولين او اكثر .
2- عن طريق جدول الجرد (الذى
يحسب يدويا) --->
استعلام من نفس الجدول
---
و قد يكون هناك فرق بينهما (و هذا ما يعرف ب
فروقات الجرد) اى الفرق بين ما هو مسجل فى الفواتير و ما هو موجود حقيقتا فى المخزن و هذا الفرق يحتاجه المحاسب و يحضره مسير المخزون و له اسبابه التى يجب ان تفسر .
--------------------------
فى نضرى العمليات التى يقوم بها المستخدم هى
1- تسجيل المدخلات
2- تسجيل المخرجات
3- تسجيل الجرد
...
الباقى كله
استعلامات sql فقط . و الله اعلم
بالتوفيــــــــــــق .