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

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

وأتمنى أن تسمح لي بإعادة نشر هذه الدروس في منتدى "الهندسة نت" حيث أني أقوم حاليا بنشر سلسلة "دروس في البرمجة بلغة دلفي بالصوت والصورة". وأعتقد أن هذا الموضوع سوف يسهم في نشر الثقافة والفائدة على مدى أوسع في المنتديات العربية، هذا مع المحافظة على الأمانة في النقل وذكر المصدر.

وفي الختام تقبلوا فائق التقدير والإحترام
تحياتي...!
O. M. Fares
O. M. Fares
الرد
#42
أجل أخي الكريم ، نحن لا يهمنا سوى التعلم و التعليم و نشره ، و إفادة غيرنا ، لكن و مع ذكر المصدر لابأس بل و بالتوفيق ، فقط أنبه بالتأني ، لعل الإخوة أصحاب الخبرة تكون لهم تداخلات قيمة و مفيدة للموضوع . فيكون نقلك أكثر فائدة.

بالتوفيق
الرد
#43
جزاكم الله عنا كل خير
إنه فعلا لعمل رائع ويستحق المتابعة والتدقيق
اخي
عندما حاولت تنفيذه
اشار الى ان الكلمة FPostion الموجودة في هذا السطر
كود :
DbGrid1.Height:=sScrollBar1.FPosition;
غير مصرح بها
ما المشكل في هذا

كود :
DbGrid1.Height:=sScrollBar1.FPosition;
نكتب
كود :
DbGrid1.Height:=sScrollBar1.Position;
الخطأ هو زيادة حرف F
يجب ان يحذف
الرد
#44
أجل هو كذلك، الخلل بإضافة حرف F ، الخاصية هي Position و ليس FPosition .

بالتوفيق.
الرد
#45
شكرا جزيلا أخي شرح جميل و كامل
لكن وجدت مشكل في table7
مرة لا يوجد date لقد قمت بتغييره بـ date_vente لكن لاجدوى و مرة index table7 لايوجد
هل ممكن إعادة البرنامج مع كامل المرفقات كي يتسنى لي فهمه بالإضافة الى انني مبتدأ و يجب ان اتعلم
الرد
#46
السلام عليكم

عفوا لوصولي متأخر

لقد استعملت طريقة الـ Splash الموجودة ف هذا الموضوع لكنها ناقصة

كود :
procedure TFsplash.Timer1Timer(Sender: TObject); begin sGauge1.progress:=sGauge1.progress+1; if sGauge1.progress=100 then begin FGSM.Show; [color=Red]Fsplash.hide;[/color] timer1.Enabled:=false end ; end;

لان عند ظهور الفورم الثاني و عند عمل reduire ( _ ) الفورم لا يذهب الى الاسفل و انما الى اقصى يسار
النافذة
لانه لا يعتبر الفورم الرئيسي

حاولت جعله الفورم الرئيسي

بواسطة

كود :
application.MainForm

لكن لم افلح

لذلك قمت بانشاءه

كود :
Pbar.Position:=PBar.Position+1; if Pbar.Position = 100 then begin Timer1.Enabled:=false; Form5.Destroy; Application.CreateForm(TForm1,Form1); Form1.Show; end;

و نجح الامر لكن اعتقد يوجد طرق اخرى ....بدل من استعمل

كود :
Application.CreateForm(TForm1,Form1);


سلامي
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
الرد
#47
كل ماأعمل رن للبرنامج يظهرلى رسالة
[Fatal Error] Usplash.pas(8): File not found: 'sCustomLabel.dcu'
الرد
#48
@ma_7odaa
يجب تثبيت المكونات اللازمة لتشغيل البرنامج.
الرد
#49
يبدو أنه يستخدم نسخة دلفي أخرى.
...
المهم سأعلق على الموضوع
أولا آسف على التأخير الشديد عن المشاركة من البداية لأنشغالي بأمور أخرى...

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

لأن تصميم البرامج الأعمال التجارية عموما وبرامج التسيير التجاري خصوصا من أعقد أنواع البرامج، لا تكاد تجد برنامج متكامل يتأقلم مع كل أنواع التعاملات التجارية ويلبي احتياجات جميع المحلات/الشركات التجارية.

لذلك لا يمكن اعتبار هذا النموذج ولا غيره من النماذج، نموذجا متكاملا يصلح لتسيير كل نشاط تجاري. هذا بغض النظر عن التفاصيل الكثيرة التي قد يحتاجها (أو يجب إضافتها إلى) البرنامج.

إقتباس :ـ لدينــا مخزن للسلع ، و عليه فنحن بحاجة لإنشاء جدول خاص لذلك ، يتكون من :
صحيح وخطأ!
صحيح، نحن بحاجة إلى جدول لتخزين الأصناف (السلع/المنتجات... أيا كان)، لكن ليس لأجل أن لدينا مخزون للسلع...
عملية تصميم نموذج قاعدة بيانات تتطلب تفاصيل أعمق ولا تأتي من استنتاج بديهي

باختصار... للاستزادة ينظر: الأسس العلمية لتصميم نماذج قواعد البيانات العلائقية.
طبعا، الأخ نبيل (جزاه الله خيرا) لا يمكنه تفصيل كل شيء في هذا الموضوع لذلك فهو يختصر.

إقتباس :رمز أو كود الممون الذي نشتري منه السلع / الاسم التجاري للممون ...
في هذه الحالة سيخزن الاسم التجاري للممون في جدول السلع من جهة، وفي جدول الممولين من جهة أخرى...
=> إزدواجية في التخزين => خطأ في تصميم النموذج
=> الحل: الاكتفاء بإضافة رمز (أو كود) الممون وجلب اسمه التجاري من مصدره بحقل Lookup

نفس الملاحظة هنا أيضا:
رقم الفاتورة / رمز الزبون / الاسم التجاري للزبون / تاريخ الفاتورة .
نفس الملاحظة في جدول تفاصيل فاتورة البيع وجدول تفاصيل فاتورة الشراء...

أيضا لا أدري ما وظيفة هذه الحقول في جدول تفاصيل الشراء:
- الحد الأدنى للكمية
- الحد الأدنى لسعر البيع
وإذا كان المقصود ما ورد في جدول الأصناف (المواد) فهذه ازدواجية أيضا تجب إزالتها.
الرد
#50
ملحوظة صغيرة بخصوص تسمية المتغيرات/الأنماط والمكونات، إذ يحسن تسميتها بشكل نمطي (لاحقة +اسم المكون) يجعل من السهل التعرف على دورها أو البحث عنها كما يجعل المصادر أكثر مقروئية.
مثال: مكون TDataSource المخصص لربط الجدول المبيعات Vente يسمى dsVente، ومكون الحذف (Supprimer) نسميه مثلا btSupprimer وقس على ذلك باقي المكونات...

ليتعرف مكون الـ Skin يستحسن أن نجعله يبحث عن المسار بشكل أكثر ديناميكية. شيء مثل هذا:
عند إنشاء أول نموذج OnCreate نضيف:
PHP كود :
//تحديد المسار الحالي
  
sSkinManager1.SkinDirectory := ExtractFilePath(Application.ExeName) + '\Skins';
//تحديد المظهر
  
sSkinManager1.SkinName := 'MacOS2';
//تفعيل المكون
  
sSkinManager1.Active := True; 

بخصوص مكونات AlphaControls Free Edition هي نسخة مجانية غير مفتوحة المصدر (ملفات dcu فقط)، يمكن الحصول عليها من الموقع الرسمي:
كود :
http://www.alphaskins.com/dwnld.php

-----

@S.FATEH
الخلل في طريقة عرض شاشة الاستقبال، رغم ذلك يمكن إصلاح الخلل باقتناص حدث WM_SYSCOMMAND وإجبار النموذج على Minimize فور استقباله قيمة SC_MINIMIZE. شيء مثل:

PHP كود :
private
    
procedure WMMinimize(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
...

procedure TFGSM.WMMinimize(var Msg: TWMSysCommand);
begin
  
if msg.CmdType = SC_MINIMIZE then
    Application
.Minimize
  
else
    
DefaultHandler(Msg);
end; 

حاولت تعديل جميع المرفقات لكنني فشلت، فقمت ببعض التعديلات الشكلية على المرفقات الأولى وآخر مرفق هنا.

بالتوفيق أخي نبيل.


الملفات المرفقة
.rar   GSM_16.rar (الحجم : 38.17 ك ب / التحميلات : 1,328)
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم