• 0
معتز شمس

تقريرمعتز, أداة لانشاء التقارير !

سؤال

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

في الأيام القليلة الماضية فكرت في صنع شيء ما يساعدني في صنع التقارير البسيطة, وبدأت في التنفيذ فأنتجت "تقريرٌ معتزٌ" (كلمة معتز أعني بها فخور وفي نفس الوقت تشير إلى اسمي).

تقريرمعتز حاليا بسيط يحتوي على كلاسين فقط الأول هو MoutazReport وهو الكلاس الأساسي الذي يرسم التقرير, والكلاس الآخر هو Style يختص بتحديد ألوان وأشكال الأعمدة والصفوف والخ الموجودة في التقرير. والأشياء المدعومة فقط الآن هي :

- تحديد الخط ولونه وحجمه والخ الخاص بالـ Header والأعمدة والصفوف (والصفوف البديلة) وتحديد لون الخلفية ( يمكن تحديد لونين متداخلين ).

- رسم الصور الموجودة في الـ DataSource اذا كانت من نوع Bitmap أو مصفوفة من نوع System.Byte.

- تحديد اذا كان التقرير من اليمين إلى اليسار أم العكس.

- تحديد أسماء الـ Columns الغير مرغوب في عرضها.

- التقرير الذي يتم انتاجه هو مستند من نوع PrintDocument فيمكن استخدام ما هو متوفر في الـ net Framework للتحكم في الاعدادات التقليدية الأخرى مثل حجم الصفحة والـ Margin والـ Resolution ومعاينة التقرير وطباعته والخ.

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

MoutazReport-ScreenShot-1.png

MoutazReport-ScreenShot-2.png

وببساطة لانشاء تقرير, اعمل Add Reference لـ Moutaz.Reports.dll و اعمل Object من MoutazReport :

//using Moutaz.Reports;
MoutazReport mizoReport;

mizoReport = new MoutazReport();
// mizoReport = new MoutazReport(yourDataTable,true);
// mizoReport = new MoutazReport(yourDataTable,true,"عنوان التقرير");

الـ Constructor الأول هو الـ Default ! والثاني يستقبل الـ DataTable الذي سيتكون منه محتوى التقرير, ويستقبل bool يحدد ما اذا كان التقرير من اليمين إلى اليسار أم العكس. والثالث مثل الثاني ويزيد عليه باستقبال عنوان التقرير الذي سيظهر في أعلى الصفحة.

ويمكن استخدام الـ Properties لاسناد القيم, مثلا :

mizoReport.RightToLeft = true;
mizoReport.ReportTitle = "عنوان التقرير"

بعد هذا يتم تحديد شكل التقرير من خلال الثلاثة خواص الأساسية HeaderStyle و RowsStyle و ColumnsStyle. وجميعهم من نوع MoutazReport.Style الذي يحتوي على :

- Font لتحديد الخط وحجمه والخ, و ForeColor للون الخط.

- BackColor لتحديد اللون الأساسي للخلفية الأساسية, و GradientBackColor لتحديد اللون المتداخل للخلفية الأساسية.

- AlternateBackColor لتحديد اللون الأساسي للخلفية البديلة, و AlternateGradientBackColor لتحديد اللون المتداخل للخلفية البديلة ( يتم استخدامهم في تحديد الـ RowsStyle فقط حاليا ).

- GradientAngle وهو float تحدد به الميل ( ميل أو زاوية تداخل الألوان ).

مثلا,

MoutazReport.Style styleForRows = new MoutazReport.Style();

styleForRows.Font = new Font("Arial", 14);
styleForRows.ForeColor = Color.White;

styleForRows.BackColor = Color.DarkBlue;
styleForRows.GradientBackColor = Color.LightBlue;
styleForRows.AlternateBackColor = Color.Gray;
styleForRows.AlternateGradientBackColor = Color.Silver;
styleForRows.GradientAngle = 180;

ويتم استخدم نفس الطريقة السابقة لتحديد الـ HeaderStyle والـ ColumnsStyle؛ ويمكن استخدام الـ Constructors عند انشاء الـ Style لتقليل الكود.

بعد هذا ان كنت لم تمرر الـ DataTable عند بداية انشاء التقرير, فاستخدم :

mizoReport.CreateReportDocument(yourDataTable);

وان كان yourDataTable يحتوي على Columns لا تود ظهورها فاستخدم الـ ExecludedColumns :

mizoReport.ExecludedColumns.Add("yourUnLuckyColumnName");
mizoReport.ExecludedColumns.Add("yourBadColumnName");

وان كان يوجد هناك صور في الـ DataTable فسيتم تلقائيا عرض كل صورة بحجمها الطبيعي, وان كنت تريد عرض كل الصور بحجم واحد فاستخدم خاصية ImagesSize, مثلا :

mizoReport.ImagesSize = new Size(40,75);

بعد هذا يمكنك الحصول على التقرير لعرضه أو لطباعته من خلال الخاصية ReportDocument وهي كما ذكرت من نوع PrintDocument المتوفر له دعم في الدوت نت, فيمكنك عرضه باستخدام PrintPreviewControl أو PrintPreviewDialog, مثلا :

PrintDocument mizoReportDocument = mizoReport.ReportDocument;

PrintPreviewDialog previewReport = new PrintPreviewDialog();

previewReport.PrintPreviewControl.Document = mizoReportDocument;
previewReport.PrintPreviewControl.Zoom = 1;

previewReport.ShowDialog();

بس كدا. ويوجد أشياء باذن الله سيتم دعمها قريبا جدا :

- توفير أكثر من كلاس كل واحد منهم مختص بتحديد شكل شيء واحد فقط ( كلاس لتحديد شكل الصفوف وآخر للأعمدة وأخر للـ Header والخ ).

- حفظ التقرير كصور(ة) وتوليد التقرير في صفحة أو صفحات HTML وامكانية احتواء التقرير على أكثر من صفحة.

- امكانية وضع نصوص غير مرتبطة بالـ DataSource, وجمع قيم معينه وايجاد المتوسط و الحاجات دي.

- توليد نسختين من التقرير واحدة تكون غنية للمشاهدة على الشاشة وأخرى مخصصة للطباعة فقيرة من ناحية الألوان.

- امكانية جعل الـ DataSource مصفوفة أو DataSet أو DataGridView.

- امكانية وضع علامة مائية.

كما يوجد أشياء أخرى ان شاء الله سيتم دعمها ولكن ليس قريبا:

- توفير Designer لتيسير انشاء التقارير داخل الـ Visual Studio وخارجه.

- امكانية تصميم الـ Charts وهلم جرا.

- امكانية حفظ التقرير كـ PDF.

يوجد في المرفقات Moutaz.Reports.dll ومثالين, الأول يعرض أول 10 أشخاص من جدول Customers الموجود في قاعدة البيانات Northwind ( تأكد من الـ ConnectionString في الكود قبل التشغيل ), والثاني هو ما يظهر في الصورة السابقة الذي يحتوي على المشرفين. وأرحب بمن يحب التعاون معي في انجاز هذا العمل سواء بالكود أو بالاقتراحات أو بالاختبار.

MoutazReportConsumer.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

15 إجابة على هذا السؤال .

  • 0

الله الله الله وأنا أقول انت مختفي ليه الفتره اللي فاتت أتاريك شغال في التحفه دي , عارف هيا هتلعلع امته ؟ ..لما يبقي فيه Designer ,

عالعموم ربنا يوفقك وكنت أتمني انه يكون عندي وقت وأشارك معاك فيه , أتمني لك التوفيق من الله وتغير طريقة الهزار الي العدلة بدل الشقلوبيه :P

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا يا رجاله, وأنا مأجل الـ Designer يا حازم لحين الانتهاء منها تماما والثبات على امكانياتها. وبالنسبة لطريقة الهزار فأنا أحاول تغييرها ولكن كما تعلم فانه يوجد مشكلة في مصر في الحراك الكوميدي بحيث تسيطر طريقة هزار النكتة والإفيه على كل الطرق التراثية الأخرى بل وتتغلب على طريقة الهزار بالحركة والموقف في كثير من المحافظات.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يعطيك الف عافية اخوي معتز

جاري التجربة وان شاء الله بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الله الله يا ميزو

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

لكن ان تستغل اسمي للتسويق لمنتجك فهذا لا يقبل و لا يجوز فاسمي علامة تجارية مسجلة :P

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

الان انجلت الحقيقة كنت تريد ان تستغل اسمي في تسويق منتجك

لكني سأسامحك لأنني اعلم انك ستعطيني نسبة 25% من ارباح بيع محرك تقاريرك B)

استخدامك للـ GDI+ في الدونت اعطى جمالية للتقرير و خاصة الـ Linear Brush في الفضاء Drawing2D

سؤال يا معتز هل يقوم تقريرك بعملية warp للنص اذا كان طويلا ?

بما ان لي حصة من بيع برنامجك سأحاول مساعدتك حتى تنتهي بسرعة و تطرحه للبيع

هذا الموضوع قد يكون مفيدا : Printing Reports in Windows Forms

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

25% يا تمام يا مفتري ! ده أنا لو كنت استغليت اسم نانسي عجرم كان يبأه أوفر لي

على كل حال, التقرير الآن لا يـ Warp , فلا يدعم الـ MultiLine ولا الـ MultiPage بعد, لأنني ناوي ان شاء الله أعيد هيكلته, وموضوع دعم الـ Right To Left هو اللي معطلني في اضافة كل الامكانيات ! ولكن لابد منه.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
ى كل حال, التقرير الآن لا يـ Warp , فلا يدعم الـ MultiLine ولا الـ MultiPage

طيب تزيد نسبتي إلى 30% و انا اساعدك كتير كتير في هذه الامور :rolleyes:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

شكرا أخي معتز على هذا البرنامج الجميل ولكن لدي بعض الملاحظات إذا سمحت :

1. لقد غيرت جزء من الكود كما يلي

:
previewReport.PrintPreviewControl.Zoom = 1;

try
{ previewReport.ShowDialog(); }
catch
{
MessageBox.Show("An error occurred while trying to load the " +
"document for Print Preview. Make sure you currently have " +
"access to a printer. A printer must be connected and " +
"accessible for Print Preview to work.", this.Text,
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
:

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

2. لم تظهر لي الكلمات المكتوبة باللغة العربية وظهرت في شكل رموز غير مفهومة لأن حاسوبي لا يدعم اللغة العربية لذلك ربما من الأفضل إضافة الكلمات العربية بإستعمال ascii codes ويمكن الإستعانة بهذا الرابط

3. هناك إشكال ما في تحميل البيانات وهذه التعليمة ترجع دائما رسالة خطاء لذلك لم أتمكن من تشغيل البرنامج

northwindConnection.Open();

والله أعلم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا يا Ben_Laiid على اقتراحاتك وعلى نشاطك في المنتدى :) بالنسبة للمشكلة التي تظهر لك, فواضح أنها من الـ ConnectionString, فتأكد أن الـ SQL Server تعمل وأن لديك قاعدة بيانات Northwind, وتأكد من صلاحيات الوصول اليهم فربما يتطلب الأمر اضافة اسم مستخدم وكلمة مرور.

بالنسبة لرد الأخير يا حاج تمام, أنا آخري معاك 2% بس فقط Only Just ! ولو مش عاجبك...... يبقوا 3% :D

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

بالنسبة للمشكلة التي تظهر لك, فواضح أنها من الـ ConnectionString, فتأكد أن الـ SQL Server تعمل وأن لديك قاعدة بيانات Northwind, وتأكد من صلاحيات الوصول اليهم فربما يتطلب الأمر اضافة اسم مستخدم وكلمة مرور.

أخي معتز

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

طبعا هو مجرد إقتراح

والله أعلم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أشكرك يا أخ Ben_Laiid, أنا وضعت مثال لانشاء تقرير من قاعدة بيانات لأن أغلبية من سيستخدمون التقرير أو من يستخدمون التقارير بصفة عامة, يستخدمونها في تطبيقات تتعامل مع قواعد البيانات. والمثال الآخر وضعته لأوضح دعم الـ Right To Left والصور. وعلى كل حال ان شاء الله ان توفر الوقت سأكتب أمثلة أخرى لقراءة البيانات من ملف XML لمن لا يمتلكون SQL Server :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
بالنسبة لرد الأخير يا حاج تمام, أنا آخري معاك 2% بس فقط Only Just ! ولو مش عاجبك...... يبقوا 3%

هو ده اخر كلام عندك

طيب طيب

انا سأتخذ اجرائات مضادة رادعة

و اهددك اذا لم تدفع لي النسبة المعلومة سأقوم بكتابة محرك تقارير ينافس محركك ( خاصة اني قمت ببعض التجارب على ذلك من قبل)

و سأنزله بنصف سعر محرك تقاريرك وقتها لاقي حد يشتري منك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

انت بتهددني ؟ مش كل الطير اللي يتاكل لحمه, وأنا لحمي مر, ولا يوجد أمر من لحمي, ولحمي ملحوم بلحام لحمة في بعضه,,, ولن أدفع لك ولا مليم ولا سحتوت... وان كنت قادر على منافسة تقريرمعتز, فأنت حاااالم يا تمام.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

:rolleyes:

عمل ممتاز ومجهود تشكر عليه

الله يوفقك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

up

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .