عرض المجاميع و المجاميع الجزية في كل صفحة باستخدام fastReport
#1
السلام عليكم ورحمة الله وبركاته ،
في الحقيقة كل مرة تراودني الفكرة في كتابة هذا موضوع ، وغالبا نتيجة الكسل ، أقول في نفسي لا حاجة للإخوة لهذا الموضوع فهو بسيط .
لكن أحد الإخوة كان عنده مشكلة في طباعة المجاميع و المجاميع الجزئية في كل صفحة باستعمال مولد التقارير FastReport ،
فعزمت أن أفرده في موضوع حتى يستفيد منه الجميع ،
وأرجو من الله التيسير و القبول .

أولا ما المقصود بالمجاميع في كل صفحة ؟
لنفرض أن لدينا جدول  اسمه  MyTable فيه الحقول التالية :
الرقم و الكمية  مثل ما هو موضح في الصورة التالية:


[صورة مرفقة: 648709423.png]

نريد طباعة جميع المعطيات الموجودة في الجدول على الصيغة التالية:

[صورة مرفقة: 532460138.png]


في المجموع الجزئي هو عبارة عن  مجموع الكميات المطبوعة في الصفحة + المجموع السابق المطبوع في الصفحات السابقة.

كيف نستطيع فعل ذلك ؟
أولا نبدأ بالمجموع الجزئي في كل صفحة :

أول شيء نقوم به هو الذهاب إلى إعدادات الصفحة و نقوم باختيار الخاصية      double pass أو   Double passe

[صورة مرفقة: 710120002.png]

باختيار هذه الخاصية تعني أن توليد التقرير سيتم في خطوتين.

إذن المجموع الجزئي  نسميه مثلا subTotal

قبل طباعة كل كمية  quantity  نقوم بجمعها مع الكميات السابقة

 
إذن
subTotal = subTotal + quantity

ننتقل إلى كتابة الكود في المولد التقارير ،

نختر  MasterData1  و في الحدث OnBeforePrint   نقوم بكتابة الكود التالي :


PHP كود :
procedure MasterData1OnBeforePrint(SenderTfrxComponent);
begin
  
if engine.finalpass then
  begin
     SubTotal 
:= SubTotal + <frxDBDataset1."Quantity"> ;

  end;
  
end



و لا ننس تعريف المتغير subTotal كمتغير كلي ،
فيصبح الكود السابق كالتالي :

PHP كود :
var SubTotal Currency  

procedure MasterData1OnBeforePrint
(SenderTfrxComponent);
begin
  
if engine.finalpass then
  begin
     SubTotal 
:= SubTotal + <frxDBDataset1."Quantity"> ;

  end;
  
end
 

begin

end



الآن لطباعته على الصفحة   :

في الحدث   OnAfterPrint   الخاص ب frxDBDataset1Quantity  نقوم بكتابة الكود التالي :



PHP كود :
procedure frxDBDataset1QuantityOnAfterPrint(SenderTfrxComponent);
begin
   
if engine.finalpass then
   begin
     T1
.text := formatfloat('#,###0.00',SubTotal);

   end;    
end


ملاحظة فقط :
T1  هو اسم الميمو Memo الخاص بالمجموع الجزئي.

بقي الآن كيفية طباعة المجموع السابق في كل صفحة ،
و هذا المجموع يمثل مجموع الكميات المطبوعة في كل الصفحات السابقة.

لفعل ذلك ، نقوم بجلب  memo1  و memo2  ونضعهما في الشريط PageHeader1
نغير اسم memo2  إلى T2 .
و في الحدث OnAfterPrint  الخاص ب T1  (هو memo خاص بالمجموع الجزئي)
نقوم بكتابة الكود التالي :



PHP كود :
procedure PageHeader1OnAfterPrint(SenderTfrxComponent);
begin
  T2
.text := T1.text  
end


و بهذا تصبح الصفحة كالآتي :


[صورة مرفقة: 561849257.png]

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

في المرفقات البرنامج + قاعدة بيانات .

بيقي فقط كيفية إخفاء المجموع السابق في أول صفحة .
هل أكمله ؟
و السلام عليكم ورحمة الله وبركاته.


الملفات المرفقة
.7z   ExempleAcessFastReport.7z (الحجم : 13.68 KB / التحميلات : 16)
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
[-] كل من 4 users say قال شكرا ل أبو معاذ على المشاركة المفيدة
  • B.M.AbdelAziZ, bassem_43, Delphi4Us, S.FATEH
الرد
#2

وعليكم السلام ورحمة الله
بارك الله فيك اخي ابو معاذ
شرح مبسط، نص، صور ومثال مرفق، رائع.
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
[-] كل من 2 users say قال شكرا ل B.M.AbdelAziZ على المشاركة المفيدة
  • benali137, أبو معاذ
الرد
#3
و عليكم السلام ورحمة الله و بركاته
بارك الله فيك اخي ابو معاذ
اكمله طبعا نحن في المتابعة
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
[-] كل من 1 user says قال شكرا ل bassem_43 على المشاركة المفيدة
  • rahli.hamza.4124
الرد


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


مستخدمين يتصفحوا هذا الموضوع: 1 ضيف