الترقيم المتسلسل التلقائي لفاتورة مع تجديد الترقيم لكل سنة، باستعمال Delphi/Pascal وقاعدة بيانات SQlite

 كل مؤسسة تبيع منتجاتها أو خداماتها ، تستعمل فواتير للتعامل مع زبنائها ، كل الفواتير يجب أن تحمل تاريخ ورقم ، الأرقام يجب أن تكون متسلسلة وغير مكررة في نفس السنة. الفاتورة الأولى لأي سنة يجب أن تبدأ بالرقم واحد(1) ، والفاتورة التي تليها يجب أن تحمل رقم اثنين(2)  وهكذا دواليك.

عادة ما يتم عرض أرقام الفواتير بشكل رقم تسلسي مضاف إليه الرمز '/' ثم سنة تحرير الفاتورة أو سنة النشاط، مثل '0001/2020' ، '0002/2020'، '00011/2021' ... الخ 

هناك طرق عديدة للحصول على هذا الرقم المتسلسل في فاتورة،

في المثال التالي نستعمل قاعدة بيانات SQLITE  في تطبيق دلفي كما يلي : 

- في مشروع دلفي فارغ نضع على الفورم  العناصر الموضحة في الشكل : 

Form ; FDConnection, FDquery

نلاحظ على الفورم العناصر التالية : 
FDconnection, FDPhysSQLiteDriverLink, FDGUIxWaitCursor1

العناصر الثلاثة الموضحة في الشكل لربط الاتصال بقاعدة البيانات 
ثلاثة عناصر من نوع `TFDQuery` لإنشاء جدول  و إضافة بعض القيم ، العنصر الثاني للبحث عن رقم الفاتورة الأخير ، والعنصر الثالث لإدراج القيمة التالية في الفاتور ة كما هو موضح في الشكل التالي : 
FDQCreateAndAdd, FDQFindMax, FDQShow

للعنصر `FDQCreateAndAdd`  الكود التالي : 


CREATE TABLE if not exists Facture ( idsf integer, idclient integer, date_facture date, Reff varchar(20)); INSERT INTO Facture (idsf, idclient, date_facture, Reff) VALUES (1, 19, '2020-06-23', '1065/2020'), (2, 27, '2020-06-23', '1066/2020'), (3, 31, '2020-07-22', '1067/2020'), (4, 18, '2020-08-23', '1068/2020'), (5, 8, '2021-08-04', '0008/2021');
الكود بالنسبة للعنصر `"FDQFindMax"` هو كما يلي :
select max(reff) nref from facture where reff like '%'||:ref
مع العلم أن الوسيط `"ref"`معرف كما هو موضح في الشكل التالي :
ptInput ref ftString
أما الكود بالنسبة للعنصر `FDQShow` فهو كالتالي :
select * from facture;



نضيف الإجراء التالي في الدلفي في القسم الخاص بالتصريحات كما هو موضح في الشكل التالي :
private     { Déclarations privées }


 ثم نكتب في القسم الخاص بالوصف الكود الموضح في الشكل : 
CalculRefFacture
عند تحرير فاتورة جديدة نحتاج إلى الكود دلفي الموضح في الشكل التالي للحصول على الرقم الجديد :
BeforeInsert, AfterInsert
طريقة عمل هذا الكود على رابط الفيديو التالي 







ليست هناك تعليقات:

إرسال تعليق

المشاركات الشائعة