انا كنت ارغب في جعل العنوان ( اتحداكم تعملوها )
لاني جلست احسب هل بالامكان التعامل مع 8000 الاف فاتورة حيث لو ان كل واحد بها متوسط 5 سجلات فسيكون مجموع السجلات 40000 سجل .
اربعين الف سجل اذا اردت ان تجري عليهم عملية ما فستحتاج الى 20 ثانية تقريبا لتحصل على الناتج
فقلت غير معقول ان يكون المحل ينتج 8000 الاف فاتورة فلو ربح كل فاتورة متوسط مبيعها 5 دولارات فالمجموع 40000 دولار وهذا مستحيل بالنسبة الى هذه المحلات المتوسطة .
وقلت ان العدد المقبول ليكن 2000 فاتورة
ف سألت احد العملاء كم فاتورة تقريبا تخرج كل سنة بين مبيعات ومشتريات
ارسلت برسالة فغاب طويلا تم ارسل لي هذه الكلمة
500,000
نصف مليون فاتورة وانا كنت مفزوع من ثمانية الالاف فاتورة ماذا اعمل فيهم
نصف مليون مظروبة في 5 تعني 25000000 سجل
يعني بصراحة الراجل مخربط بالتاكيد
وقلت بعدها ما فيش الا حل واحد
اقسم قاعدة البيانات الى 12 جدول وكل شهر من المبيعات والمشتريات اضعه بجدول
[INDENT]
وعليكم السلام ورحمة الله وبركاته ،
هذا يتعلق بطبيعة قاعدة البيانات المستعملة ، أنا استعمل قاعدة بيانات Interbase و بعض الزبائن يتجاوز عدد الفاتير عنده 10000 (عشرة آلاف) فاتورة و لا مشكلة لا في البحث و لا في التحديث.
[/INDENT]
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك. تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
بداية لا اعرف كيف اجريتم العملية ولكن تصورو لو ان هناك جدولين وبهما حقلين احدهما به سعر بضاعة والثاني به المجموع وعدد السجلات 100000 سجل اي ما يعادل 10 الالاف فاتورة تقريبا
وتريد ان تظرب السعر في الكمية بكلتا الجدولين وتعود بالناتج
هل كانت هذه العملية عندكم اقل من عشرون ثانية ....؟
اذا ممكن احد تجربة سريعة اكون له من الشاكرين
وانا الان انتقلت الى SQLLite واجري عليها التجارب الان فيبدوا انها ممتازة للتطبيقات الصغيرة والمتوسطة
حسنا وحتى اكون منصفا للاكسس فان جملة الاستعلام لها كانت اكثر تعقيدا لانها تتداخل مع جداول اخرى مترابطة
بينما مع SQLLite كانت بشكل عادي مثل
Select Sum(Price * Total) as Finish from Body
واعدت التجربة على قاعدة بيانات اكسس ومع 130000 مئة وثلاثون الف سجل وكانت النتيجة مقبولة
المشكلة التي تواجهني هي عند محاولة العميل اضافة فاتورة مبيعات فكل عملية اضافة لبضاعة يجب التحقق من الكمية هل هي موجودة بالمخزن ام لا وهذا يعني المرور على كل السجلات والقيام بعملية حسابية
والمشكلة ليست بجدول واحد بل يجب حساب البظاعة بجدول المشريات والمبيعات وطرحها من بعضها واظهار النتيجة
او يجب ان اقوم بحدث تحميل النموذج من اجراء هذه العملية لكافة الاصناف بالفواتير المشتريات والمبيعات وخلق مصفوفة منها لاستخدامها في عملية البيع وهذا ايضا سيأخد وقتا .
وبصراحة حنى الان لم اجد حل لهذه المشكلة
وهي مشكلتي الوحيدة مع نظام الفواتير
وهناك حل بديل وهو تخزين كمية كل صنف مع كل عملية بيع وشراء ولكن قال الاخ كاش ون ان هذا مخالف لقواعد انشاء البيانات او قاعدة انشاء البيانات والتي تقول
لم افهم لما الاختلاف في صيغة استعلان sql بين اكسيس وغيرها، ما دام تصميم الجداول هو نفسه.
كنمط معتاد :
يجب أن يكون لدينا جدولا بكميات الأصناف بالمخزن حسب آخر جرد سنوي ،
أي عند اقفال السنة السابقة وفتح سنة جديد.
هذا الجدول لا يتم تغيير الكميات فيه طول السنة و يبقى مرجعا ونسميه رصيد أو السنة.
المشتريات و المبيعات -أو الصادر و الوارد- يكونات في جدول واحد جدول الحركة، و خاص بالسنة الحالية فقط. كميات الصادر/مبيعات تكون في خانة الصادر ، وكميات الوارد/المشتريات/الاستلام تكون في خانة الوارد.
عند انتهاء السنة و بدء سنة جديدة، يتم حساب الفارق بين الصادر و الوارد خلال السنة لكل صنف في جدول الحركة ويضاف لرصيد السنة السايقة في جدول الأصناف. (قبل اجراء هذه العملية تؤخذ نسخة من سجلات جدول الأصناق وتلحق بجدول الأصناف التاريخي الذي فيه خانة اضافية للسنة)
يتم أيضا نسخ جميع التسجيلات في جدول الحركة وإلحاقها في جدول الحركة التاريخي.
يتم تفريغ جدول الحركة،استعدادا لاستقبال حركات السنة الجديدة.
حساب الرصيد لصنف يكون بحساب الفرق بين الصادر والوارد في جدول الحركة + الرصيد في جدول الأصناق.