delphi4arab منتديات دلفي للعرب

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

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


[صورة: 648709423.png]

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

[صورة: 532460138.png]


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

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

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

[صورة: 710120002.png]

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

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

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

 
إذن
subTotal = subTotal + quantity

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

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


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

  end;
  
end
; 


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

PHP كود :
var SubTotal : Currency ;  

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

  end;
  
end
;  

begin

end
. 


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

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



PHP كود :
procedure frxDBDataset1QuantityOnAfterPrint(Sender: TfrxComponent);
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(Sender: TfrxComponent);
begin
  T2
.text := T1.text ;  
end
; 

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


[صورة: 561849257.png]

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

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

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

وعليكم السلام ورحمة الله
بارك الله فيك اخي ابو معاذ
شرح مبسط، نص، صور ومثال مرفق، رائع.
و عليكم السلام ورحمة الله و بركاته
بارك الله فيك اخي ابو معاذ
اكمله طبعا نحن في المتابعة
بارك الله فيك اخي ابو معاذ
اكمله طبعا نحن في المتابعة جزاك الله خير
شكرا جزيلا اخي
ماشاء الله شرح رائع .... اكمل صديقي بقية الموضوع
السلام عليكم

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

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

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

و السلام عليكم
وعليكم السلام ورحمة الله وبركاته

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

اكمل اخي جزاك الله خيرا.
من فصلك الاخ معاذ اكمل كيفية إخفاء المجموع السابق في أول صفحة من فضلك و لك جزيل الشكر.