PDA

View Full Version : ساخت Master/Detail در کوئیک ریپورت بصورت چند Detail ی



hamid-nic
یک شنبه 18 مرداد 1388, 12:31 عصر
سلام دوستان
من برای گزارش گیری از کوئیک ریپورت استفاده می کنم => delphi 7
به مشکلی برخوردم لطفا کمکم کنید .
برای برنامه ای قرار است یک گزارش به این صورت داشته باشد
در یک برگه ی A4
اطلاعات فردی شامل 10 فیلد
اطلاعات مالی شامل 5 فیلد
اطلاعات کلاس ها شامل 5 فیلد
اطلاعات کارت های تحویل شده شامل 3 فیلد
وجود داشته باشد
من تمام جدول بالا را از طریق کد ملی به صورت Master/Detail در آوردم یعنی اطلاعات فردی بصورت Master و اطلاعات مالی و کلاس ها و کارت های تحویل شده بصورت Detail از طریق کد ملی .
باید شکل گزارش بصورت تصویری که در ضمیمه است باشد
** در ضمن برای هر نفر در یک برگ A4 اطلاعات داشته باشیم
** چون اطلاعات بصورت Master/Detail است ممکن است قسمت های Detail شامل چندین رکورد یا اصلا بدون رکورد باشند .
در سایت جست و جو کردم اما با چنین موردی برخورد نکردم .
دوستان راهنمایی کنید چکار کنم . . .

Hsimple11
یک شنبه 18 مرداد 1388, 13:51 عصر
خب مشکل الان کجاست؟!

با کل گزارش گیری مشکل دارید؟

hamid-nic
یک شنبه 18 مرداد 1388, 14:49 عصر
خب مشکل الان کجاست؟!

با کل گزارش گیری مشکل دارید؟

سلام
با گزارش گیری مشکلی ندارم
دوست عزیز من با یک Master/Detail ساده هم مشکل ندارم . مشکل این است که چطوری با اون طرحی که در پست قبلی ضمیمه کردم بسازم .

hamid-nic
یک شنبه 18 مرداد 1388, 14:58 عصر
الان در واقع یک Master هست با 3 تا Detail
به چه شکلی در کوئیک ریپورت باید طراحی کرد تا بتوان یک طرحی مثل اون تصویر داشته باشیم . هر قسمت جدا برای ایجاد مشخصاتی مثل اطلاعات مالی ؛ اطلاعات کلاس ها و . . .

Hsimple11
یک شنبه 18 مرداد 1388, 19:30 عصر
مشکل شما هم استفاده ار باندهاست.

- برای قسمت توضیحات سربرگ هر لوگو و عنوانی رو که میخواین در باند ----> Page Header یا اگه همیشه گزارش هاتون در مورد هر فرد یک صفحه ایست در Title.

- برای اطلاعات فردی ----> Page Header

- برای سایر قسمتها از باند SubDetail استفاده کنید. توجه کنید که باید کامپوننت باند SubDetail رو قرار بدید نه اینکه یه Band قرار بدید و خصوصیت BandType اون رو به SubDetail تغییر بدید.

- برای عنوان هر قسمت هم از QRGroup استفاده کنید.

- برای خط کشیدن بینشون هم که فکر نمیکنم مشکلی داشته باشید.


در نهایت پیشنهاد من اینه که از FastReport استفاده کنید. امکانات و توانایی اون در ساخت هر نوع گزارشی قابل قیاس با QuickReport نیست.

hamid-nic
دوشنبه 19 مرداد 1388, 12:32 عصر
مشکل شما هم استفاده ار باندهاست.

- برای قسمت توضیحات سربرگ هر لوگو و عنوانی رو که میخواین در باند ----> Page Header یا اگه همیشه گزارش هاتون در مورد هر فرد یک صفحه ایست در Title.

- برای اطلاعات فردی ----> Page Header

- برای سایر قسمتها از باند SubDetail استفاده کنید. توجه کنید که باید کامپوننت باند SubDetail رو قرار بدید نه اینکه یه Band قرار بدید و خصوصیت BandType اون رو به SubDetail تغییر بدید.

- برای عنوان هر قسمت هم از QRGroup استفاده کنید.

- برای خط کشیدن بینشون هم که فکر نمیکنم مشکلی داشته باشید.


در نهایت پیشنهاد من اینه که از FastReport استفاده کنید. امکانات و توانایی اون در ساخت هر نوع گزارشی قابل قیاس با QuickReport نیست.

سلام دوست عزیز Hsimple11
از راهنمایی هایتان متشکرم
من هر جوری بود تونستم طرح را پیاده کنم اما با مشکلاتی روبرو شدم
از QRGroup برای سر فصل ها استفاده کردم => اطلاعات مالی ، اطلاعات فردی
برای نمایش اطلاعات هر Detail ی از QRSubDetail استفاده کردم => رکورد های اطلاعات مالی ، رکورد های اطلاعات کلاس ها و . . .
از PageHeaderBand برای سر برگ استفاده کردم => معرفی گزارش
از QRGroup دوباره برای ایجاد نام ستون برای Detail ها استفاده کردم
تصویر برگه ی گزارش در ضمیمه هست .

2 تا مشکل بوجود اومد :
1- اگر هر Detail اطلاعات نداشته باشد در گزارش کلا بخش مربوط به اون را بر می داره مثلا اگر شخص فیش بانکی را ثبت نکرده باشد موقع گزارش قسمت مربوط به اطلاعات مالی را حذف می کند که نباید به این شکل باشد . اگر اطلاعات نداشت یک متن فاقد اطلاعات مالی در قسمت اطلاعات مالی درج کند یا به یک شکل دیگه که اون قسمت حذف نشه .
2- چون قراره این اطلاعات در یک برگ A4 پرینت بشه و هر برگ A4 مخصوص یک نفر هست نباید اطلاعات افراد دبگر از پایان اطلاعات فرد اول شروع بشه
یعنی در یک برگ A4 فقط اطلاعات فردی ، اطلاعات مالی ، اطلاعات کلاس ها و اطلاعات کارت تحویلی یک نفر وجود داشته باشد و اطلاعات فرد دیگه از صفحه ی بعد ، بعد از سر برگ شروع بشه .

دوستان راهنمایی کنید . . . .

hamid-nic
دوشنبه 19 مرداد 1388, 12:37 عصر
در نهایت پیشنهاد من اینه که از FastReport استفاده کنید. امکانات و توانایی اون در ساخت هر نوع گزارشی قابل قیاس با QuickReport نیست.

در مورد پیشنهادتون هم ممنون من به خاطر یک سری محدودیت هایی که دارم مجبورم از کوئیک ریپورت استفاده کنم . . .

Hsimple11
دوشنبه 19 مرداد 1388, 17:50 عصر
1- این رو میتونید خودتون در رویداد BeforePrint کوئیک ریپورت بهش بدید که مثلا اگه فلان فیلد خالی بود فلان Label رو نمایش بده که مثلا اطلاعات مالی وجود ندارد.

2- خصوصیت Force New Page رو در مورد کنترل Header مربوط به نام فرد True کنید تا برای هر رکورد صفحه جدید ایجاد شه.

3- من متوجه نمیشم که میگید نمیتونید از فست استفاده کنید چون نیاز به هیچ مقدمات و شرایط خاصی نداره. کافیه شروع کنید به کار کردن باهاش.

hamid-nic
سه شنبه 20 مرداد 1388, 09:28 صبح
1- این رو میتونید خودتون در رویداد BeforePrint کوئیک ریپورت بهش بدید که مثلا اگه فلان فیلد خالی بود فلان Label رو نمایش بده که مثلا اطلاعات مالی وجود ندارد.

2- خصوصیت Force New Page رو در مورد کنترل Header مربوط به نام فرد True کنید تا برای هر رکورد صفحه جدید ایجاد شه.

3- من متوجه نمیشم که میگید نمیتونید از فست استفاده کنید چون نیاز به هیچ مقدمات و شرایط خاصی نداره. کافیه شروع کنید به کار کردن باهاش.

سلام
در مورد اولی من در beforPrint خود برگه ی کوئیک ریپورت از دستور زیر استفاده کردم



if QRDBText5.Caption ='' then
QRLabel5.Caption :='اطلاعات مالی برای این شخص ثبت نشده است';



جواب نداد اون را در beforPrint خود QRSubDetail مربوطه (مثلا اطلاعات مالی) نوشتم بازم جواب نداد البته برای امتحان کردن اونها برنامه را run هم می کردم نه اینکه فقط preview استفاده کنم ولی به هر حال نشد و اون قسمت مربوطه را حذف می کرد فکر نکنم از property مناسبی استفاده کرده باشم . به نظر شما از چه کدی استفاده کنم ؟

در مورد دومی هم خصوصیت force New Page اون را به true تبدیل کردم و درست شد الان برای هر نفر یک صفحه مجزا باز می کنه . :تشویق:

الان اگه بخواهم برای هر صفحه مشخصاتی مثل آدرس و تلفن را در پایین برگه اضافه کنم از چه باندی استفاده کنم.
یه سوال دیگه اگه تعداد رکورد این گزارش نزدیک به 1000 تا یا بیشتر باشه آیا مشکلی در پرینت یا پیش نمایش بوجود نمی آید ؟

در مورد فست ریپورت هم من برنامه های قبلی را که درست کردم با کوئیک گزارش می گرفتم و به اون عادت کردم و اگه اشکالی یا بحث ارتقا برنامه های قبلی پیش بیاد با کوئیک سر و کار دارم ولی الان تصمیم گرفتم از این به بعد از فست ریپورت استفاده کنم . از این پیشنهاد عالیتون هم خیلی ممنونم . راستی آخرین ورژن فست ریپورت الان چنده ؟

Hsimple11
سه شنبه 20 مرداد 1388, 09:59 صبح
اینکه میگم از فست استفاده کنید بخاطر همینه. اینکه رویدادهای BeforePrint و ... به درستی جواب نمیده. این کار ها رو به راحتی میتونید در فست انجام بدید.

تمام باندها رو که توی یه پست نوشتم. توی Help خود دلفی هم هست. برای چاپ در پایین تمام صفحات از Page Footer استفاده کنید. البته اگه این اطلاعات جز دیتابیس هست باید اونا رو در همون باندهای Detail و SubDetail قرار بدید.


یه سوال دیگه اگه تعداد رکورد این گزارش نزدیک به 1000 تا یا بیشتر باشه آیا مشکلی در پرینت یا پیش نمایش بوجود نمی آید ؟

مشکلی که پیش نمیاد ولی من خودم توی یه برنامم که با کوئیک نوشته بودم گاهی بعضی جاها رو پرینت نمیکرد.


راستی آخرین ورژن فست ریپورت الان چنده ؟

4.7

hamid-nic
سه شنبه 20 مرداد 1388, 11:33 صبح
اینکه میگم از فست استفاده کنید بخاطر همینه. اینکه رویدادهای BeforePrint و ... به درستی جواب نمیده. این کار ها رو به راحتی میتونید در فست انجام بدید.



از راهنمایی هایتان ممنونم اما الان که دیگه طراحی کردم برای اون قسمت چکار کنم حذف نشه ؟ پیشنهادی یا کدی که جواب بده ندارید ؟

Hsimple11
سه شنبه 20 مرداد 1388, 11:38 صبح
شرطتون برای چاپ اینکه اطلاعات مالی نیست رو بر اساس خالی بودن فیلد دیتابیس بذارید ببینید میشه؟

hamid-nic
سه شنبه 20 مرداد 1388, 12:40 عصر
شرطتون برای چاپ اینکه اطلاعات مالی نیست رو بر اساس خالی بودن فیلد دیتابیس بذارید ببینید میشه؟

اول این کد را نوشتم جواب نداد یعنی هم در beforPrint صفحه ی کوئیک و هم در QRSubDetails مربوطه (قسمت مالی) البته در قسمت beforPrint اون



if DataModule1.TFish.FieldValues ['nameBank'] ='' then
QRLabel5.Caption :='اطلاعات مالی برای این شخص ثبت نشده است';


بعدش اومدم سراغ کد پایین اون را در beforPrint صفحه ی کوئیک نوشتم جواب نداد
اما در beforPrint خود قسمت مالی یعنی QRSubDetails مربوطه نوشتم جواب داد اما با همون مشکل قبلی یعنی حذف دو تا QRGroup مربوطه (مثلا قسمت مالی) با این کد تونستم هر فردی که اطلاعات مالی نداشت را یک متنی برایش نشون بدم اما مشکل اینجاست که نشان دادن این متن باید همراه با وجود دو تا QRGroup مربوطه باشند و آنها را حذف نکند .


***توضیح اینکه QRGroup برای نوشتن اطلاعات سر فصل ها مثل اطلاعات مالی ، اطلاعات کلاس ها و .... و همچنین برای مشخص کردن نام ستون Details ها استفاده شده است .





if DataModule1.TFish.RecordCount=0 then
begin
QRLabel5.Caption :='اطلاعات مالی برای این شخص ثبت نشده است';
end
else
QRLabel5.Caption :='';

hamid-nic
سه شنبه 20 مرداد 1388, 20:18 عصر
دوستان تا حالا کسی با این مشکل بر نخورده که اون را حل کرده باشه .
نمونه کدی ، پیشنهادی ...

Hsimple11
چهارشنبه 21 مرداد 1388, 01:22 صبح
وقتی اصرار دارید با QR همه کار بکنید همین مشکلات رو هم داره. خب اگه رکورد نبود یه جوری یه فضا ایجاد کنید. visible یه شکل رو true کنید یا ...

hamid-nic
چهارشنبه 21 مرداد 1388, 16:18 عصر
Hsimple11 عزیز بازم از راهنمایی هایتان خیلی ممنونم این مشکل حل نشد من هم بی خیال آن شدم همون متن کافیه که نشون بده .
موفق باشید . . .