مقدمة إلى ترقيم الفواتير الديناميكي في WinDev
يُعد ترقيم الفواتير الصحيح والديناميكي أمرًا بالغ الأهمية لأي نظام إدارة فواتير. يضمن الترقيم الموحد التتبع السليم، الامتثال القانوني، ويساعد في الحفاظ على سجلات مالية منظمة. في هذا الجزء السادس من سلسلة Easy_Fact، سنتعمق في كيفية تنفيذ نظام ترقيم فواتير مرن وقابل للتخصيص في WinDev، والذي يلبي المتطلبات المختلفة مثل البادئات المحددة، الأرقام التسلسلية، ودمج السنة.
لقد تلقينا العديد من الاستفسارات من مجتمعنا حول هذه المشكلة، خاصةً فيما يتعلق بإنشاء أرقام فواتير تتضمن أرقامًا وحروفًا وبادئات متعددة. يهدف هذا الدليل إلى تبسيط هذه العملية وتقديم حل عملي وفعال.
ما ستتعلمه في هذا الدرس:
- فهم أهمية الترقيم الصحيح للفواتير.
- إنشاء استعلامات HFSQL لاسترداد أكبر رقم فاتورة حالي.
- توليد أرقام فواتير تسلسلية تلقائيًا.
- دمج بادئات مخصصة (مثل FACT، PROFORMA، DEVIS) والسنة الحالية في رقم الفاتورة.
- تطبيق هذه المنطق في نافذة فاتورة WinDev.
تُعد هذه الخطوات جزءًا أساسيًا من سلسلة دروسنا حول بناء تطبيق إدارة فواتير كامل باستخدام WinDev. لضمان فهم شامل لجميع المفاهيم، نوصي بشدة بمتابعة الأجزاء السابقة من السلسلة.
شاهد الفيديو التعليمي الكامل أدناه:
هيكل رقم الفاتورة المقترح
يهدف نظام الترقيم لدينا إلى إنشاء أرقام فواتير بتنسيق مثل: FACT/003/2023 أو PROFORMA/015/2023. يتطلب تحقيق ذلك خطوتين رئيسيتين:
- استرداد أكبر رقم فاتورة: نحتاج إلى استعلام قاعدة البيانات لتحديد أكبر رقم تسلسلي مستخدم حاليًا لنوع فاتورة معين.
- تجميع الرقم الجديد: بناء الرقم الجديد عن طريق زيادة الرقم المسترد، إضافة بادئة محددة (مثل
FACT،PROFORMA،DEVIS،BON DE LIVRAISON،BON DE RÉCEPTION،BON DE COMMANDE)، ودمج السنة الحالية.
التعليمات البرمجية لتوليد رقم الفاتورة
1. استعلام HFSQL لاسترداد أكبر رقم فاتورة
يسترد هذا الاستعلام أكبر رقم فاتورة من جدول Facture. يمكن تكييفه لاسترداد الأرقام لأنواع فواتير محددة إذا كان لديك حقل TypeFacture.
SELECT
MAX(Facture.Num_fact) AS le_maximum_Num_fact
FROM
Facture2. منطق WinDev لترقيم الفواتير
يتم تطبيق هذا الكود في نافذة الفاتورة الخاصة بك، عادةً عند تهيئة النافذة أو عند إنشاء فاتورة جديدة.
// تنفيذ الاستعلام لاسترداد أكبر رقم فاتورة
HExécuteRequête(REQ_max_n_facture, hRequêteDéfaut)
// تحديد الرقم التسلسلي الجديد
SI REQ_max_n_facture.le_maximum_Num_fact = 0 ALORS
// إذا لم تكن هناك فواتير سابقة، ابدأ من 1
Facture.Num_fact = 1
SINON
// زيادة أكبر رقم موجود
Facture.Num_fact = REQ_max_n_facture.le_maximum_Num_fact + 1
FIN
// بناء مرجع الفاتورة النهائي (مثال: FACT/001/2023)
// يتم تحديد البادئة (مثل "FACT/") بناءً على نوع المستند الحالي
// Complète(ChaîneInverse(Facture.Num_fact), 3, 0) يضمن تنسيق الرقم بثلاثة أصفار بادئة (مثل 001، 002)
Facture.Référence = "FACT/" + ChaîneInverse(Complète(ChaîneInverse(Facture.Num_fact), 3, 0)) + "/" + AnnéeEnCours()
// تحديث عناصر واجهة المستخدم مع البيانات الجديدة
FichierVersEcran()
// إعداد قيمة إرجاع النافذة (حسب الحاجة لتطبيقك)
MaFenêtre..ValeurRenvoyée = Fauxتخصيص البادئات
لإنشاء أنواع مختلفة من المستندات (الفواتير، فواتير الأولية، عروض الأسعار، إلخ)، ستحتاج إلى تعديل الجزء "FACT/" في الكود أعلاه ديناميكيًا بناءً على نوع المستند الذي تقوم بإنشائه. يمكنك استخدام متغير، أو حقل اختيار، أو معلمة لتمرير البادئة المناسبة.
- الفاتورة:
"FACT/" - فاتورة أولية:
"PROFORMA/" - عرض سعر:
"DEVIS/" - بون تسليم:
"BL/" - بون استلام:
"BR/" - بون طلب:
"BC/"
الخاتمة
من خلال تنفيذ هذا المنطق، يمكنك إنشاء نظام ترقيم فواتير قوي ومرن في تطبيق WinDev الخاص بك. هذا لا يضمن فقط التمييز الفريد لكل مستند ولكن أيضًا يعزز الاحترافية ويساعد في إدارة السجلات المالية بكفاءة. لا تتردد في تكييف هذه الحلول لتلبية المتطلبات المحددة لمشروعك.