PDA

View Full Version : تهیه گزارش بصورت مجله ای !!



rezadavodi
سه شنبه 24 مهر 1386, 15:22 عصر
دوستان و اساتید
این مورد شاید برای شما پیش نیومده باشه شاید هم برخورد داشته باشید. من باید گزارشی تهیه کنم روی کاغذ A3 که در نهایت از وسط تا بشه و بصورت یه مجله A4 دربیاد !! اگه کسی اطلاعاتی در این زمینه داره ممنون میشم اگه کمک کنه

rezadavodi
سه شنبه 24 مهر 1386, 15:44 عصر
دوستان شاید اینطوری به جواب برسیم ...
امکانش هست که صفحه ای خاصی از گزارش رو پرینت بگیریم و البته تعداد صفحات گزارش رو مشخص کنیم؟
مثلا بفهیم گزارش 20 صفحه است و بگیم صفحه 7 رو پرینت بده؟؟
با تشکر از دوستان

sm
چهارشنبه 25 مهر 1386, 07:02 صبح
بله... دقیقا میشه این کار رو کرد. بعد از اینکه گزارش رو به CR Viewer بایند کردین با این کد تعداد صفحات رو بدست بیارین :


Me.CR.ShowLastPage()
Dim Last As Integer = Me.CR.GetCurrentPageNumber

حال فقط مونده دستور پرینت که اون هم بدین شکله :


report.PrintToPrinter(1,False,3,4)

در اینجا Report یه متغیر هست که از فایل گزارش ابتدای فرم ایجاد شده و همه جا با این کار میشه بجای فایل اصلی گزارش.
با این دستور صفحات 3 تا 4 گزارش به تعداد 1 نسخه چاپ میشه.

موفق باشید

rezadavodi
یک شنبه 04 آذر 1386, 16:19 عصر
sm عزیز !
این showlastpage چرا گاهی کار نمی کنه؟!!!!
برای اون مشکل شماره صفحات گروهها در ابتدای گزارش (توی یه تاپیک دیگه مطرح کرده بودم)
من به ذهنم رسید (البته اصلا راه علمی نیست منتها چاره چیه) که اطلاعات رو براساس گروهها توی دیتاست فیلتر کنم و بعد دیتاست رو به یه گزارش بفرستم و با استفاده از کد شما آخرین صفحه گزارش رو دربیارم و بعد این شماره ها رو به گزارش اصلی با پارامتر بفرستم.
منتها اشکال اینجاست که گاهی این شماره ای که به من میده عدد 1 هست. یعنی به آخرین صفحه نمیره!!! بخاطر همین حساب و کتاب برای شماره صفحات بهم میخوره. میدونی مشکل کجاست؟؟؟
آیا راهی غیر از این برای درآوردن تعداد صفحات گزارش وجود نداره؟؟؟ مثلا وقتی دیتاست رو به reportdocument بایند کردیم بدون crystal report viewer تعداد صفحات رو دربیاریم؟؟!!

مرسی

sm
یک شنبه 04 آذر 1386, 22:43 عصر
یه دستور توی کریستال هست که میتونین با استفاده از اون تعداد صفحات رو بدست بیارین:


TotalPageCount


موفق باشید

rezadavodi
دوشنبه 05 آذر 1386, 11:24 صبح
دوست عزیز صورت مساله رو فک کنم درست توضیح ندادم
من یه گزارش دارم که توش گروه بندی هست. حالا در ابتدای گزارش میخوام شماره صفحه شروع هر گروه رو بنویسم. مثلا فهرست اول کتاب. همانطور که خودتون هم گفتید چون این شماره ها قراره توی ریپورت هدر نمایش داده بشه راهی نداره. پس به ذهنم رسید که رکوردها رو با فیلتر گروه مورد نظر بریزم توی یه دیتاست و اون دیتاست رو بایند کنم به یه گزارش و تعداد صفحات اون گزارش رو دربیارم (آخرین شماره اون گزارش میشه تعداد صفحات). حالا مثلا برای هشت تا گروه هشت تا عدد داریم که هر کدوم تعداد صفحات هر گروه هست. و بعد اینها رو به گزارش اصلی بصورت پارامتر بفرستیم. و توی ریپورت هدر نمایش بدیم البته با یه کمی تغییر بدین صورت:
گروه 1: صفحه 2
گروه 2: گروه 1+2
گروه 3: گروه 2+گروه 1
...
...
مرسی

sm
دوشنبه 05 آذر 1386, 11:59 صبح
راه حلی که دادین مشکل رو حل میکنه اما زمان زیادی می بره
در هرصورت شما میتونین هر بار دیتاستتون رو به گزارش رد کنین و بلافاصله با همون فرمولی که در بالا هست تعداد کل صفحات رو دربیارین و به همین ترتیب جمع کنین.

موفق باشید

rezadavodi
دوشنبه 05 آذر 1386, 13:36 عصر
مشکل همینجاست !!!!!!!!
اعدادی که به این صورت درمیاریم گاهی درست نیست؟؟؟؟؟؟ یعنی دستور showlastpage گاهی درست کار نمی کنه و گزارش روی صفحه اول می مونه بهمین دلیل عددی که برمی گردونه 1 هست.!!!!!!
با تشکر

sm
دوشنبه 05 آذر 1386, 13:42 عصر
دوست عزیز نیازی به اون lastpage نیست... با همون دستور فوق میتونین تعداد کل صفحه رو بدست بیارین.

موفق باشید

rezadavodi
دوشنبه 05 آذر 1386, 14:02 عصر
از داخل برنامه چطور میشه اون دستور رو توی گزارش اجرا کرد؟؟

rezadavodi
شنبه 10 آذر 1386, 11:21 صبح
راه حلشو رو بعد از یک هفته جستجو پیدا کردم !!

Dim nPages as Integer
nPages = crReport.FormatEngine.GetLastPageNumber(New CrystalDecisions.Shared.ReportPageRequestContext)

crReport یه متغیر از نوع report document هست.