تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
برمجة نواة برنامج محاسبي من الصفر
#5
السلام عليكم ورحمة الله وبركاته

بعد حمد الله والثناء عليه والصلاة والسلام على خير الخلق والأنام سيدنا محمد وآله وصحبه وسلم.. 

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

أولاً - جدول اسماء المستخدمين (Users) : 
جدول اليوزرات بشكل افتراضي يحتوي على عدة حقول :
1 - حقل ترقيم تسلسلي لترتيب عدد اليوزرات (ليس مهم ان وجد أو لا).
2 - حقل اسم المستخدم.
3 - حقل كلمة المرور.
4 - حقل تلميح وهو تذكير للمستخدم (على أي اساسا اختار هذه الكلمة - أجمل مدينة- أفضل دولة- اللون المفضل .. إلخ).
5 - مسمى صلاحيات اليوزر(مدير-محاسب-بائع-مدخل بيانات-مشاهد ... إلخ).
6 - رقم أو رمز لاسم المستخدم (يكن بديل عن ظهور اسم المستخدم في الفاتورة -- وفي الادارة فقط يعرف أن هذا الرمز يخص المستخدم فلان).
7 - طريقة تشفير اليوزرات ... (فليس من المعقول أن تجعل اليوزرات مرئية لمن يستطيع الاختراق - بل يفضل تشفيرها بشيفرة تكن من صنعنا ويمكننا تطوير هذه الشيفرة كما نشاء فبحسب كود معين يتغير التشفير.. واذا عكسنا الكود مثلاً يتم فك التشفير مثلاً)..

ويكون من خلال الكود : 
PHP كود :
Private Sub SetUsersTable(qTableName As String)
 
   Set TBL1 db.CreateTableDef(qTableName)
 
       
        SetField 
"Name"         ' اسم المستخدم
        SetField "Pwd"          ' 
كلمة المرور
        SetField 
"Code"         ' رقم اسم المستخدم قد يستخدم بديل عن اسمه
        SetField "explan"         ' 
توضيح أو تلميح عن كلمة المرور
        SetField 
"Privacy"      ' الصلاحيات - مدير- بائع - أي شي
        SetField "RePwdHex"     ' 
طريقة التشفير قد نستخدمها عندما ننتهي من المشروع نهائيا
        
    db
.TableDefs.Append TBL1
End Sub 

===============================
ثانياً - جدول دليل الحسابات : وهو جدول بأسماء الحسابات التي سنتعامل معها في برنامجنا.
وهو يعتبر أهم جدول قائم عليه البرنامج فكلما كان هذا الجدول أثر تخصصاً كلما سمح لنا بصنع برنامج أكثر اتقاناً وأكثر ديناميكية في تطوير البرنامج أو بعض أجزاءه متى شئنا..
-------------------------------------
توضيح : في دليل الحسابات يكون مبني على أساس هناك حساب رئيسي ثم حساب فرعي ثم فرع من الفرعي..
يمكن التفريع حسب المطلوب إذا كنت تعتمد على أداة عرض شجرة الحسابات (TreeView)..
ويمكن التوقف عند المستوى الثاني أو الثالث لنستخدم أداة الجدول (وهكذا سنعمل في هذه النسخة - مع الامكان التطوير متى شئت - لأننا سنجعل جدول الحسابات يستوعب كلا الامرين)..
-------------------------------------
فعلى الأغلب يحتوي هذا الجدول على الحقول التالي :
1 - حقل ترقيم تسلسلي (ليس بالضرورة وجوده ولكن بحسب رغبة المبرمج أو القائم على صيانة البرنامج).
2 - حقل لاسم الحساب الرئيسي (بالعربي) أو (باللاتيني)  أو كلاهما .. وهنا في مثالنا سنعمل على وجود كلاهما ..
3 - حقل لرقم الحساب الرئيسي ..
4 - حقل لاسم الحساب الفرعي(الابن)  (بالعربي) أو (باللاتيني)  أو كلاهما .. وهنا في مثالنا سنعمل على وجود كلاهما ..
5 - حقل لرقم الحساب الفرعي..
6 - حقل يبين نوع الحساب أو بطاقة حساب (أصول - نقدية - بنكي - زبائن - موردين - مصروفات - رأس المال - الشركاء -  ). كلما كان التصنيف هنا أكثر تنوعاً ودقة في أنواع الحسابات كلما كان البرنامج أكثر قدرة على معالجة القيود والكشوف المحاسبية بسلاسة وبساطة ودون الحاجة للتعقيد في الاكواد مستقبلاً .. وكلما كان بالامكان ترتيب دليل الحسابات على الوجه الذي يرضاه المحاسب ودون الحاجة لتقييد المحاسب باسلوب المبرمج(فهنا يمكن للمحاسب أن يتحرر من اسلوب المبرمج ويمكنه أن يتقيد بما تعلمه في بلده دليل الحسابات الموحد السوري أو المصري أو اليمني أو العراقي أو ... إلخ..  فالنتيجة واحدة..
7 - حقل يبين نوع امتداد الحساب (هل له فرروع أو يمكن له فروع أو أنه الحساب النهائي (الفرع الاخير الذي نتعامل معه في القيود المحسابية))
8 - حقل يبين أين يقفل كل حساب(الميزانية - المتاجرة - الأرباح والخسائر).  وهذا يسهل على المحاسب اقفال الحسابات برمجياً دون الحاجة لعمل قيود لذلك. (أو يساعده في حساب أرصدة كل حساب وهو يقفلها يدوياً في نهاية السنة المالية عند ترحيل الأرصدة لسنة مالية جديدة-- بحسب الرغبة).
9 - حقل لاسم المستخدم الذي قام بادخال اسم هذا الحساب أو حقلين ويكون الثاني لاسم الحساب الذي قام بالتعديل عليه.
10 - حقل ملاحظات أو حقلين أو ثلاثة (شيء للزوم الشيء اذا احتاج له المستخدم مستقبلاً وقد لا يحتاج له مطلقاً).

ويكون من خلال الكود :
PHP كود :
Private Sub SetAccountsTree(qTableName As String)
 
   Set TBL1 db.CreateTableDef(qTableName)
 
       
        SetField 
"NoNumeric"             ' ترقيم متزايد من أجل ترتيب الاضافات
        SetField "Num0"                                 ' 
رقم الحساب الرئيسي
        SetField 
"TreeAr0"           ' اسم الحساب الرئيسي بالعربي الأب إن وجد
        SetField "TreeEn0"           ' 
اسم الحساب الرئيسي بالاتيني الأب إن وجد
        SetField 
"Num1"                                  ' رقم الحساب الفرعي
        SetField "TreeAr1"            ' 
اسم الحساب الفرعي بالعربي الأب إن وجد
        SetField 
"TreeEn1"            ' اسم الحساب الفرعي بالاتيني الأب إن وجد
        SetField "AccCard"   ' 
نوع الحساب أصول أو مصروفات أو مشتريات، مبيعات
        SetField 
"CrOrDb"                              ' الحساب مدين أم دائن
        SetField "AccMigration"                          ' 
مكان اقفال الحساب
        SetField 
"BrType"   'Gr1            ' هل للحساب فروع وهل الفرع نهائي
        
' 0 لا يوجد فروع
        ' 
1 يوجد فرع
        
' 9 الفرع نهائي
        SetField "Note", dbMemo         ' 
ملاحظات
        
    
        SetField 
"UserCode"             ' اسم المستخدم الذي أدخل البيانات
        SetField "EUserCode"             ' 
اسم المستخدم الذي عدل البيانات
                
    db
.TableDefs.Append TBL1
    
End Sub 


-----------------------------------------
وبذا يكون كود انشاء قاعدة البيانات وفيها الجدولين السابقين هو الكود التالي :
PHP كود :
Public Sub CreatMyDataBase()
 
   On Error Resume Next
   
' اذا وجد خطأ بسطر برمجي يتجاوزه
   ' 
لن نستخدم هذا الامر في حال يتعلق بالحسابات فقط بالشكليات
   
' لأننا لن نسمح بوجود أي أخطاء بالبرنامج بل سنعالجها
   ' 
أما هنا سنفعله من أجل صناعة الجداول في كل مرة نطور فيها البرنامج وكلما أضفنا جدول جديد
   
'==================================================
   ' 
للتحقق من وجود مجلد لحفظ قاعدة البيانات فيها بجانب التطبيق وإلا صنعه
    If Fs
.FolderExists(App.Path "\Data") = False Then
       Fs
.CreateFolder App.Path "\Data"
 
   End If
 
   '=====================================================
    ' 
أمر صناعة قاعدة البيانات إن لم تكن موجودة
    If Fs
.FileExists(MyDataPath) = False Then
       Set Ws 
DBEngine.Workspaces(0)
 
      Set db Ws.CreateDatabase(MyDataPathdbLangGeneral ";pwd=123"dbEncrypt)

 
      db.Close
       Set db 
Nothing
    End 
If
 
   '=======================================================
    Set db = DBEngine.OpenDatabase(MyDataPath, False, False, ";Pwd=123")
    '
-------------------------------------------------------------
 
   SetUsersTable "Users"                             'Private Sub
    '
-------------------------------------------------------------
 
   SetAccountsTree "AccountsTree"                    'Private Sub
    '
-------------------------------------------------------------
 
   
    
'=================
    db.Close                ' 
نغلق قاعدة البيانات
    Set db 
Nothing             ' نفرغها المتغير
    '
=================
End Sub 


=====================================
ويوجد لدينا اليوم مشروع بسيط عن كل ما ذكرنا فيما سبق :
بمجرد تشغيل البرنامج يقوم بصنع قاعدة بيانات جديد وفيها الجدولين السابق ذكرهما ..

رابط التحميل من هنا

وإلى لقاء آخر .. أستودعكم الله ..
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: مصمم هاوي


الردود في هذا الموضوع
صناعة قاعدة بيانات وجدول عبر الكود - بواسطة Taha Okla - 13-07-22, 01:04 AM

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


يقوم بقرائة الموضوع: