عرض المجاميع و المجاميع الجزية في كل صفحة باستخدام 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 ك ب / التحميلات : 174)
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
[-] كل من 10 users say قال شكرا ل أبو معاذ على المشاركة المفيدة
  • محمد عبد العزيز, S.FATEH, bassem_43, Delphi4Us, takaya5, zouaidahmed, Mr.DOS, ALG2009, ELARAPY, hamabena
الرد
#2

وعليكم السلام ورحمة الله
بارك الله فيك اخي ابو معاذ
شرح مبسط، نص، صور ومثال مرفق، رائع.
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
[-] كل من 3 users say قال شكرا ل محمد عبد العزيز على المشاركة المفيدة
  • أبو معاذ, benali137, takaya5
الرد
#3
و عليكم السلام ورحمة الله و بركاته
بارك الله فيك اخي ابو معاذ
اكمله طبعا نحن في المتابعة
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
[-] كل من 1 user says قال شكرا ل bassem_43 على المشاركة المفيدة
  • rahli.hamza.4124
الرد
#4
بارك الله فيك اخي ابو معاذ
اكمله طبعا نحن في المتابعة جزاك الله خير
الرد
#5
شكرا جزيلا اخي
[-] كل من 1 user says قال شكرا ل remili55 على المشاركة المفيدة
  • takaya5
الرد
#6
ماشاء الله شرح رائع .... اكمل صديقي بقية الموضوع
الرد
#7
السلام عليكم

بارك الله فيك اخ ابو معاذ

الحقيقة لم اركز كثيرا في الشرح لاسباب ...فقط ارجو التوضيح من الناحية النظرية...

المجموع الجزئي:
مجموع الكميات الموجودة في الصفحة فقط
مجموع الكميات الموجودة في الصفحة + مجموع الكميات الموجودة في جميع الصفحات السابقة {في هذه الحالة يصبح المجموع الكلي}
مجموع الكميات الموجودة في الصفحة + مجموع الكميات الموجودة في الصفحة السابقة {الصفحة الحالية تحتوي على 3 و الصفحة السابقة تحتوي على 2 و التي قبلهم 1 الناتج 5}
المجموع السابق
حسب فهمي هو المجموع الجزئي للصفحة السابقة

و السلام عليكم
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
الرد
#8
وعليكم السلام ورحمة الله وبركاته

بارك الله فيك اخي الفاضل .

اكمل اخي جزاك الله خيرا.
قل إن صلاتي ونسكي ومحياي ومماتي لله رب العالمين
الرد


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


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