السلام عليكم ورحمة الله وبركاته ،
في الحقيقة كل مرة تراودني الفكرة في كتابة هذا موضوع ، وغالبا نتيجة الكسل ، أقول في نفسي لا حاجة للإخوة لهذا الموضوع فهو بسيط .
لكن أحد الإخوة كان عنده مشكلة في طباعة المجاميع و المجاميع الجزئية في كل صفحة باستعمال مولد التقارير FastReport ،
فعزمت أن أفرده في موضوع حتى يستفيد منه الجميع ،
وأرجو من الله التيسير و القبول .
أولا ما المقصود بالمجاميع في كل صفحة ؟
لنفرض أن لدينا جدول اسمه MyTable فيه الحقول التالية :
الرقم و الكمية مثل ما هو موضح في الصورة التالية:
![[صورة: 648709423.png]](http://www11.0zz0.com/2019/03/11/23/648709423.png)
نريد طباعة جميع المعطيات الموجودة في الجدول على الصيغة التالية:
![[صورة: 532460138.png]](http://www3.0zz0.com/2019/03/11/23/532460138.png)
في المجموع الجزئي هو عبارة عن مجموع الكميات المطبوعة في الصفحة + المجموع السابق المطبوع في الصفحات السابقة.
كيف نستطيع فعل ذلك ؟
أولا نبدأ بالمجموع الجزئي في كل صفحة :
أول شيء نقوم به هو الذهاب إلى إعدادات الصفحة و نقوم باختيار الخاصية double pass أو Double passe
![[صورة: 710120002.png]](http://www6.0zz0.com/2019/03/11/23/710120002.png)
باختيار هذه الخاصية تعني أن توليد التقرير سيتم في خطوتين.
إذن المجموع الجزئي نسميه مثلا subTotal
قبل طباعة كل كمية quantity نقوم بجمعها مع الكميات السابقة
إذن
subTotal = subTotal + quantity
ننتقل إلى كتابة الكود في المولد التقارير ،
نختر MasterData1 و في الحدث OnBeforePrint نقوم بكتابة الكود التالي :
و لا ننس تعريف المتغير subTotal كمتغير كلي ،
فيصبح الكود السابق كالتالي :
الآن لطباعته على الصفحة :
في الحدث OnAfterPrint الخاص ب frxDBDataset1Quantity نقوم بكتابة الكود التالي :
ملاحظة فقط :
T1 هو اسم الميمو Memo الخاص بالمجموع الجزئي.
بقي الآن كيفية طباعة المجموع السابق في كل صفحة ،
و هذا المجموع يمثل مجموع الكميات المطبوعة في كل الصفحات السابقة.
لفعل ذلك ، نقوم بجلب memo1 و memo2 ونضعهما في الشريط PageHeader1
نغير اسم memo2 إلى T2 .
و في الحدث OnAfterPrint الخاص ب T1 (هو memo خاص بالمجموع الجزئي)
نقوم بكتابة الكود التالي :
و بهذا تصبح الصفحة كالآتي :
![[صورة: 561849257.png]](http://www9.0zz0.com/2019/03/12/00/561849257.png)
و بهذا تم الموضوع .
أرجو أن أكون قد وفقت لهذا الشرح البسيط ،
و أرجو المعذرة على كثرة الثريرة.
في المرفقات البرنامج + قاعدة بيانات .
بيقي فقط كيفية إخفاء المجموع السابق في أول صفحة .
هل أكمله ؟
و السلام عليكم ورحمة الله وبركاته.
في الحقيقة كل مرة تراودني الفكرة في كتابة هذا موضوع ، وغالبا نتيجة الكسل ، أقول في نفسي لا حاجة للإخوة لهذا الموضوع فهو بسيط .
لكن أحد الإخوة كان عنده مشكلة في طباعة المجاميع و المجاميع الجزئية في كل صفحة باستعمال مولد التقارير FastReport ،
فعزمت أن أفرده في موضوع حتى يستفيد منه الجميع ،
وأرجو من الله التيسير و القبول .
أولا ما المقصود بالمجاميع في كل صفحة ؟
لنفرض أن لدينا جدول اسمه MyTable فيه الحقول التالية :
الرقم و الكمية مثل ما هو موضح في الصورة التالية:
![[صورة: 648709423.png]](http://www11.0zz0.com/2019/03/11/23/648709423.png)
نريد طباعة جميع المعطيات الموجودة في الجدول على الصيغة التالية:
![[صورة: 532460138.png]](http://www3.0zz0.com/2019/03/11/23/532460138.png)
في المجموع الجزئي هو عبارة عن مجموع الكميات المطبوعة في الصفحة + المجموع السابق المطبوع في الصفحات السابقة.
كيف نستطيع فعل ذلك ؟
أولا نبدأ بالمجموع الجزئي في كل صفحة :
أول شيء نقوم به هو الذهاب إلى إعدادات الصفحة و نقوم باختيار الخاصية double pass أو Double passe
![[صورة: 710120002.png]](http://www6.0zz0.com/2019/03/11/23/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]](http://www9.0zz0.com/2019/03/12/00/561849257.png)
و بهذا تم الموضوع .
أرجو أن أكون قد وفقت لهذا الشرح البسيط ،
و أرجو المعذرة على كثرة الثريرة.

في المرفقات البرنامج + قاعدة بيانات .
بيقي فقط كيفية إخفاء المجموع السابق في أول صفحة .
هل أكمله ؟
و السلام عليكم ورحمة الله وبركاته.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.