delphi4arab منتديات دلفي للعرب
التفقيط في الفاست ريبورت والمجاميع - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6)
+--- قسم : دلفي و التعامل مع مولدات التقارير (https://delphi4arab.net/forum/forumdisplay.php?fid=39)
+--- الموضوع : التفقيط في الفاست ريبورت والمجاميع (/showthread.php?tid=11206)

الصفحات: 1 2


التفقيط في الفاست ريبورت والمجاميع - Delphi4Us - 13-01-2021

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

لكثرة السؤال عن هذا انشاءت هذا المثال ورفعته على المنتدى تجنبا للضياع وهو يشرح كل شئ

[صورة: attachment.php?aid=4434]

بداية المجموع SumByFastRepot يتم عن طريق الفاست ريبورت ستجد في الحقل

كود :
[<frxDBDataset2."cnt"> * <frxDBDataset2."price">]

ناتج ضرب الكمية في السعر لتعطي المجموع

ثانيا SumByAdodb يتم التجميع في الحقل Calculate لمكون الجدول خارج الفاست ريبورت

كود :
ADOTable2Total.Value:=ADOTable2cnt.Value * ADOTable2price.Value;

حيث تم انشاء حقل Calculate تم وضع فيه ناتج حقل الكمية في السعر

بعدها يتم تفقيط اجمالي المجموع من داخل الفاست ريبورت بواسطة Function يمكن وضعها في التقرير 

كود :
procedure Memo9OnAfterData(Sender: TfrxComponent); begin         Memo13.text:=NoToTxt(Memo9.value,'دينار','درهم');  end;

مع ملاحظة اننا استخدمنا الحدث AfterData اي بعد ان يتم احتساب الاجمالي واكتمال النتيجة


وايضا ستجدون دالة انشأناها خارج الفاست ريبورت وقمنا باضافتها للفاست ريبورت واستخدمناها

كود :
function  MyFunc(s: String): String;

والتي ترسل كلمة FastRepot فنضيف لها Well Come ويمكن استخدام هذه الطريقة في التفقيط او احتساب اي عمليات معقدة تستخدم وحدات او مكونات لا يمكن برمجتها او الاعلان عنها  داخل الفاست ريبورت

في الحدث GreatForm نضيف الدالة او الاجراء المطلوب

كود :
frxReport1.AddFunction('function MyFunc(s: String):string');

ثم في الحدث frxReport1UserFunction نقوم باصطياد الدالة المطلوبة

كود :
if MethodName = 'MYFUNC' then Result := MyFunc(Params[0])

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

كود :
function TForm1.MyFunc(s: String): string; begin Result:='Well Come : ' + s; end;

ومن داخل الفاست ريبورت نستخدم الدالة بشكل طبيعي

كود :
Memo14.text := MyFunc('FastReport');


المثال بالمرفقات ويمكن تحميله


RE: التفقيط في الفاست ريبورت والمجاميع - bouh25 - 14-01-2021

لك تحية خاصة الاخ Delphi4Us ولكن عندي سؤال و هو الاحظ علامة مثلث صغير على الحقول Memo9 ,  Memo13 و  Memo14 في الفاست ريبورت . ما معنها و كيف تظهر على هذه الحقول فقط

الصورة


RE: التفقيط في الفاست ريبورت والمجاميع - Delphi4Us - 14-01-2021

شكرا وبارك الله فيك
ولاتظن اننا نقدم شيئا بالمجان فكل ما نقدمه وما نبدله ولو كان بسيطا ومتواضعا نقبض ثمنه
بالنسبة للعلامة اذا كان للحقل حدث تظهر هذه العلامة في اشارة لذلك


RE: التفقيط في الفاست ريبورت والمجاميع - Delphi4Us - 14-01-2021

تعديلات اضافية على المشروع

تم انشاء وحدة تقوم بالتفقيط داخل الدلفي بحيث يتم استدعاءها من الفاست ريبورت بدل من الدالة السابقة حتى يكون المثال اكثر عملية

كود :
Memo14.text := MyFunc(Memo9.value);

ويتم ارسال قيمة الاجمالي لاستعادته كنص

في الدالة التي عرفناها على الفاست ريبورت يتم استدعاء دالة التفقيط

كود :
function TForm1.MyFunc(s: Double): string; begin Result:=NumToTxt(s,'دينار','درهم'); end;

طبعا بالامكان استبدال هذه الدالة التي عرفناها بدالة التفقيط مباشرة فقط لان المثال كان هكذا لم اشاء ان اغيره

[صورة: attachment.php?aid=4438]

لاظهار التفقيط في الـ Title لابد ان تختار من القائمة Report ثم Option ومنها تؤشر الخيار Double Pass
فهنا يظهر تفقيط سفلي واخر علوي
السفلي بواسطة دالة بداخل الفاست ريبورت والعلوي باستخدام دالة في الدلفي

حقيقة كنت اريد ان اضيف الدالة مباشرة بداخل الفاست ريبورت بحيث تستخدمها بزمن التصميم وليس التشغيل فقط

ولكن هذا لا يمكن كما تشير مستندات الشركة هنا بالرابط التالي

كود :
https://fast-report.com/documentation/DevMan/index.html?custom_functions_connection_to_report.htm

ولكن يمكن بزمن التشغيل مع استخدام الـ Designer وتظهر الدالة بلا اي مشكلة ويمكن استخدامها ومعاينة النتيجة فوريا

[صورة: attachment.php?aid=4439]

استخدم الكود الذي بالمشروع لان هناك مشكلة بالكود الذي تعرضه الشركة

كود :
constructor TFunctions.Create; begin inherited Create(AScript); with AScript do    AddMethod('function MyFunc(s: String; i: Integer): Boolean', CallMethod,             'My functions', ' MyFunc function always returns True');    AddMethod('procedure MyProc(s: String)', CallMethod,             'My functions', ' MyProc procedure does not do anything''); end; end;

حيث نسيت بعض العبارات والصحيح كالتالي :

كود :
constructor TFunctions.Create; begin inherited Create(AScript); with AScript do    begin    AddMethod('function MyFunc(s: String; i: Integer): Boolean', CallMethod,             'My functions', ' MyFunc function always returns True');    AddMethod('procedure MyProc(s: String)', CallMethod,             'My functions', ' MyProc procedure does not do anything');    end; end;


يمكنكم معاينة المشروع بالمرفقات


RE: التفقيط في الفاست ريبورت والمجاميع - bouh25 - 17-01-2021

الاخ Delphi4Us عملت عدة محاولات و لكن فشت في الدالة الاخير لو سمحت قليل من التفاصيل و اجرك على الله


RE: التفقيط في الفاست ريبورت والمجاميع - Delphi4Us - 17-01-2021

ما الذي لم ينجح خاصة وانني حملت المثال بالمرفقات ويعمل عندي


RE: التفقيط في الفاست ريبورت والمجاميع - bouh25 - 18-01-2021

لم تظهر الدالة MyFonct في قائمة الدوال في الفاست ربورت


RE: التفقيط في الفاست ريبورت والمجاميع - larbiparadox - 18-01-2021

(18-01-2021, 07:32 AM)bouh25 كتب : لم تظهر الدالة MyFonct في قائمة الدوال في الفاست ربورت

لقد أجابك الأستاذ Delphi4Us

في هذا الجزء

ولكن يمكن بزمن التشغيل مع استخدام الـ Designer وتظهر الدالة بلا اي مشكلة ويمكن استخدامها ومعاينة النتيجة فوريا

[صورة: attachment.php?aid=4439]

ـ تظهر معك في حالة فتحه بـ Designer


RE: التفقيط في الفاست ريبورت والمجاميع - bouh25 - 18-01-2021

شكرا وصلت للنتيجة
لم افهم هذه المرحلة
لاظهار التفقيط في الـ Title لابد ان تختار من القائمة Report ثم Option ومنها تؤشر الخيار Double Pass


RE: التفقيط في الفاست ريبورت والمجاميع - Delphi4Us - 18-01-2021

[صورة: attachment.php?aid=4442]