PDA

View Full Version : ویژگی OnNoData مربوط به گزارش



Mahsa Hatefi
دوشنبه 21 خرداد 1386, 11:15 صبح
با سلام

چگونه از ویژگی OnNoData مربوط به گزارش باید استفاده کرد . دستوراتی که در این بخش می نویسم اجرا نمی شود

مهدی قربانی
دوشنبه 21 خرداد 1386, 12:52 عصر
سلام
چه عملیات یا کدی انجام نمیشه ممکنه بیشتر توضیح بدین ؟

Mahsa Hatefi
دوشنبه 21 خرداد 1386, 13:07 عصر
دوست عزیز

مثلا فرض کنید یه لیبل با کپشن "موردی ثبت نشده است " چاپ شود . یعنی برای یه رکورد ممکن است سابریپورت آن خالی باشد ، در این صورت می خواهم این لیبل بجای رکورد آن سابریپورت چاپ شود .

انگوران
دوشنبه 21 خرداد 1386, 13:45 عصر
در رویداد مذکور بنویس
"موردی ثبت نشده است"msgbox
cancel=true

مهدی قربانی
دوشنبه 21 خرداد 1386, 13:50 عصر
این نمونه فکر کنم جوابتون رو بده ! Report1‌ رو اجرا کنید و نام رو خالی رد کنید .

Mahsa Hatefi
سه شنبه 22 خرداد 1386, 07:32 صبح
دوست عزیز ضمن تشکر از بذل محت و توجه حضرتعالی ، خدمتتون عرض دارم که مشکلم توی یکی از سابریپورت ها است یعنی من توی یه گزارش ، پنج سابریپورت دارم که یکی از اونها ممکنه خالی از اطلاعات باشد یعنی وقتی دستور چاپ می دهی ممکن است رکورد اول تمام سابریپورتها حاوی Data باشند و برای رکورد دوم یکی از این سابریپورتها Data نداشته باشد . بنابراین می خواهم که برای هر رکوردی که آن سابریپورت خالی است ، لیبل ما عمل کند . من این کد رو توی رویداد OnOpen نوشتم اما جواب نمی ده و خطا می گیره .
Private Sub Report_Open(Cancel As Integer)
If Me.subreport5.Report.OnNoData = True Then
LblPayam.Caption = "موردی ثبت نشده "

Else

LblPayam.Caption = ""

End If

End Sub
دنبال علت خطا و عدم عملکرد این کد هستم . آنچه شما منظور فرموده اید سابریپورت حاوی اطلاعات اصلی ریپورت است به همین خاطر رویداد OnNoData جواب می دهد اما وقتی اطلاعات اصلی همیشه وجود داشته باشد و فقط یکی از چندین سابریپورت ها ممکن است خالی از اطلاعات باشد ، نمی دانم چه باید کرد . ممنون می شوم اگر عنایت بفرمایید .

مهدی قربانی
چهارشنبه 23 خرداد 1386, 17:45 عصر
دوست عزیز حتماً بررسی و سعی می کنم تا انشاءالله راه حلش رو پیدا کنم البته شاید سایر دوستان هم ایده ای داشته باشند .

Mahsa Hatefi
پنج شنبه 24 خرداد 1386, 09:37 صبح
لطف می فرمایید ممنون می شوم

البته قراره یه گزارش رو توزیع کنم که خیلی فوریه اگه این مورد توی اون منظور بشه خیلی بهتره

mazoolagh
جمعه 25 خرداد 1386, 23:49 عصر
شما باید در رخداد Report_NoData سابریپورت (subreport5) کد بنویسین

مهدی قربانی
شنبه 26 خرداد 1386, 01:23 صبح
شما باید در رخداد Report_NoData سابریپورت (subreport5) کد بنویسین
سلام
دوست عزیز پیشنهاد شما جواب نمیده . علتش هم اینه که subreport زمانی که فاقد دیتای متناظر با report اصلی باشه اصلاً نمایش داده نمیشه حالا مشکل اینجاست که به هر حال چطور میتونیم به برنامه بفهمونیم در صورتیکه یکی از subrport ها فاقد رکورد متناظر با report بود اونوقت یک واکنشی اعم از پیغام ،caption و یا هر عمل دیگری رو انجام بده متاسانه بلحاظ محدودیت رویه ها در report ، اجرای این موضوع یخورده مشکله و قاعدتاً باید براش یک ترفند پیدا کرد .

Mahsa Hatefi
شنبه 26 خرداد 1386, 10:25 صبح
حق با شماست . دقیقا مشکل من هم همین بود . به هر حال این ترفند را امیدوارم دوستی خیلی زود برایمان مشخص کنه
منتظریم

mazoolagh
دوشنبه 28 خرداد 1386, 00:30 صبح
شما باید در رخداد Report_NoData سابریپورت (subreport5) کد بنویسین




سلام
دوست عزیز پیشنهاد شما جواب نمیده . علتش هم اینه که subreport زمانی که فاقد دیتای متناظر با report اصلی باشه اصلاً نمایش داده نمیشه حالا مشکل اینجاست که به هر حال چطور میتونیم به برنامه بفهمونیم در صورتیکه یکی از subrport ها فاقد رکورد متناظر با report بود اونوقت یک واکنشی اعم از پیغام ،caption و یا هر عمل دیگری رو انجام بده متاسانه بلحاظ محدودیت رویه ها در report ، اجرای این موضوع یخورده مشکله و قاعدتاً باید براش یک ترفند پیدا کرد .


بله، شما درست میفرمایید و من به موضوع دقت نکرده بودم. البته دوستمون میتونن با گروه بندی هم به خواسته شون برسن (بجای ساب ریپورت) ولی برای اینکه تاپیک به سرانجام برسه و بر پایه نمونه ای که شما گذاشتین:
میشه در Detail_Format ریپورت اصلی چک کرد که اگر ساب ریپورت رکورد نداره نمایش داده نشه.

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
If DCount("F1", "TABLE2", "F1='" & Me.Controls("F1") & "'") = 0 Then
Me.TABLE1_SUB.Visible = False
Me.MESSAGE.Visible = True
Else
Me.TABLE1_SUB.Visible = True
Me.MESSAGE.Visible = False
End If
End Sub

Mahsa Hatefi
سه شنبه 29 خرداد 1386, 07:02 صبح
دوست عزیز سپاسگزارم . روش مناسبی بود جواب داد . بازم ممنون