السلام عليكم ورحمة الله وبركاته ،
في الحقيقة كل مرة تراودني الفكرة في كتابة هذا موضوع ، وغالبا نتيجة الكسل ، أقول في نفسي لا حاجة للإخوة لهذا الموضوع فهو بسيط .
لكن أحد الإخوة كان عنده مشكلة في طباعة المجاميع و المجاميع الجزئية في كل صفحة باستعمال مولد التقارير FastReport ،
فعزمت أن أفرده في موضوع حتى يستفيد منه الجميع ،
وأرجو من الله التيسير و القبول .
أولا ما المقصود بالمجاميع في كل صفحة ؟
لنفرض أن لدينا جدول اسمه MyTable فيه الحقول التالية :
الرقم و الكمية مثل ما هو موضح في الصورة التالية:
نريد طباعة جميع المعطيات الموجودة في الجدول على الصيغة التالية:
في المجموع الجزئي هو عبارة عن مجموع الكميات المطبوعة في الصفحة + المجموع السابق المطبوع في الصفحات السابقة.
كيف نستطيع فعل ذلك ؟
أولا نبدأ بالمجموع الجزئي في كل صفحة :
أول شيء نقوم به هو الذهاب إلى إعدادات الصفحة و نقوم باختيار الخاصية double pass أو Double passe
باختيار هذه الخاصية تعني أن توليد التقرير سيتم في خطوتين.
إذن المجموع الجزئي نسميه مثلا subTotal
قبل طباعة كل كمية quantity نقوم بجمعها مع الكميات السابقة
إذن
subTotal = subTotal + quantity
ننتقل إلى كتابة الكود في المولد التقارير ،
نختر MasterData1 و في الحدث OnBeforePrint نقوم بكتابة الكود التالي :
و لا ننس تعريف المتغير subTotal كمتغير كلي ،
فيصبح الكود السابق كالتالي :
الآن لطباعته على الصفحة :
في الحدث OnAfterPrint الخاص ب frxDBDataset1Quantity نقوم بكتابة الكود التالي :
ملاحظة فقط :
T1 هو اسم الميمو Memo الخاص بالمجموع الجزئي.
بقي الآن كيفية طباعة المجموع السابق في كل صفحة ،
و هذا المجموع يمثل مجموع الكميات المطبوعة في كل الصفحات السابقة.
لفعل ذلك ، نقوم بجلب memo1 و memo2 ونضعهما في الشريط PageHeader1
نغير اسم memo2 إلى T2 .
و في الحدث OnAfterPrint الخاص ب T1 (هو memo خاص بالمجموع الجزئي)
نقوم بكتابة الكود التالي :
و بهذا تصبح الصفحة كالآتي :
و بهذا تم الموضوع .
أرجو أن أكون قد وفقت لهذا الشرح البسيط ،
و أرجو المعذرة على كثرة الثريرة.
في المرفقات البرنامج + قاعدة بيانات .
بيقي فقط كيفية إخفاء المجموع السابق في أول صفحة .
هل أكمله ؟
و السلام عليكم ورحمة الله وبركاته.
في الحقيقة كل مرة تراودني الفكرة في كتابة هذا موضوع ، وغالبا نتيجة الكسل ، أقول في نفسي لا حاجة للإخوة لهذا الموضوع فهو بسيط .
لكن أحد الإخوة كان عنده مشكلة في طباعة المجاميع و المجاميع الجزئية في كل صفحة باستعمال مولد التقارير FastReport ،
فعزمت أن أفرده في موضوع حتى يستفيد منه الجميع ،
وأرجو من الله التيسير و القبول .
أولا ما المقصود بالمجاميع في كل صفحة ؟
لنفرض أن لدينا جدول اسمه MyTable فيه الحقول التالية :
الرقم و الكمية مثل ما هو موضح في الصورة التالية:
نريد طباعة جميع المعطيات الموجودة في الجدول على الصيغة التالية:
في المجموع الجزئي هو عبارة عن مجموع الكميات المطبوعة في الصفحة + المجموع السابق المطبوع في الصفحات السابقة.
كيف نستطيع فعل ذلك ؟
أولا نبدأ بالمجموع الجزئي في كل صفحة :
أول شيء نقوم به هو الذهاب إلى إعدادات الصفحة و نقوم باختيار الخاصية double pass أو Double passe
باختيار هذه الخاصية تعني أن توليد التقرير سيتم في خطوتين.
إذن المجموع الجزئي نسميه مثلا 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;
و بهذا تصبح الصفحة كالآتي :
و بهذا تم الموضوع .
أرجو أن أكون قد وفقت لهذا الشرح البسيط ،
و أرجو المعذرة على كثرة الثريرة.
في المرفقات البرنامج + قاعدة بيانات .
بيقي فقط كيفية إخفاء المجموع السابق في أول صفحة .
هل أكمله ؟
و السلام عليكم ورحمة الله وبركاته.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.