PDA

View Full Version : ساخت فرمول با پارامتر



saffari2005
پنج شنبه 07 اردیبهشت 1385, 12:23 عصر
سلام
می تونم یه فرمول بنویسم (بیسیک یا کریستال)که چنذ پارامتر ورودی قبول کنه ؟ لطفا یه مثال بزنید.

hrmprog
جمعه 08 اردیبهشت 1385, 21:05 عصر
سلام
همانطور که در بیسیک تابع تعریف می کردید در کریستال نیز می توانید از آن استفاده کنید

saffari2005
شنبه 09 اردیبهشت 1385, 07:52 صبح
سلام
من با بیسیک کار نمی کنم اما در حال حاضر یه کد تبدیل تاریخ به زبان بیسیک رو تو کریستال نوشتم اما با وجود اینکه خطایی نداره اما تو اجرای برنامه جواب نمیده!


Dim M As Number
Dim D As Number
Dim Y As Number
Dim Temp As DateTime
M = ToNumber(Left(CStr ({TapeArshive.InsertDate}), InStr(CStr ({TapeArshive.InsertDate}), "/") - 1))
D = ToNumber(Mid(CStr ({TapeArshive.InsertDate}), InStr(CStr ({TapeArshive.InsertDate}), "/") + 1, InStrRev(CStr ({TapeArshive.InsertDate}), "/") - InStr(Cstr({TapeArshive.InsertDate}), "/") - 1))
Y = ToNumber(Mid(CStr ({TapeArshive.InsertDate}), InStrRev(CStr ({TapeArshive.InsertDate}), "/") + 1))
If Y = 0 Then Y = 2000
If Y < 1000 Then Y = Y + 1900

'Sub Shamsi(Y, M, D)
'******************* Leap year

If Y = 2000 Then
If M > 2 Then
Temp = DateSerial(Y, M, D)
Temp = Temp + 1
Y = Year(Temp)
M = Month(Temp)
D = Day(Temp)
End If
End If
'*******************
If M < 3 Or (M = 3 And D < 21) Then
Y = Y - 622
Else
Y = Y - 621
End If
Select Case M
Case 1
If D < 21 Then
M = 10: D = D + 10
Else
M = 11: D = D - 20
End If
Case 2
If D < 20 Then
M = 11: D = D + 11
Else
M = 12: D = D - 19
End If
Case 3
If D < 21 Then
M = 12: D = D + 9
Else
M = 1: D = D - 20
End If
Case 4
If D < 21 Then
M = 1: D = D + 11
Else
M = 2: D = D - 20
End If
Case 5, 6
If D < 22 Then
M = M - 3: D = D + 10
Else
M = M - 2: D = D - 21
End If
Case 7, 8, 9
If D < 23 Then
M = M - 3: D = D + 9
Else
M = M - 2: D = D - 22
End If
Case 10
If D < 23 Then
M = 7: D = D + 8
Else
M = 8: D = D - 22
End If
Case 11, 12
If D < 22 Then
M = M - 3: D = D + 9
Else
M = M - 2: D = D - 21
End If
End Select

formula = (Y) & "/" & (M) & "/" & (D)

Maryam80
یک شنبه 10 اردیبهشت 1385, 18:09 عصر
شما می توانید این تابع تبدیل تاریخ را در بیسیک بنویسید و در کریستال یک پارامتر تعریف کنید و خروجی تابع را به صورت زیر بعنوان ورودی به کریستال بفرستید:


Dim paramFields As New ParameterFields
Dim paramField As New ParameterField
Dim discreteVal As New ParameterDiscreteValue
Dim rangeVal As New ParameterRangeValue
Dim ReportDomain As String
Dim ReportTitle As String

paramField.ParameterFieldName = "Date" ' نام پارامتر تعیین شده برای نمایش تاریخ
discreteVal.Value = Trim(EngToPersian(Now)) 'در اینجا باید خروجی تابع خود را قرار دهید
paramField.CurrentValues.Add(discreteVal)
paramFields.Add(paramField)


به این نکته توجه داشته باشید که نام پارامتر که در اینجا می نویسید باید دقیقا شبیه به نام پارامتر در کریستال باشد

موفق باشید.:لبخندساده

masysh
دوشنبه 11 اردیبهشت 1385, 06:48 صبح
چگونه می توان از باز شدن پنجره enter parameter value جلو گیری کرد.

Maryam80
دوشنبه 11 اردیبهشت 1385, 07:04 صبح
در صورتیکه شما دقیقا پارامترهای خود را مقدار دهی کرده باشید ،این پیغام نمایش داده نمی شود.و اگر از درون برنامه می خواهید مقدار دهی کنید باید به ازاء هر پارامتر آنرا تعریف و مقدار مربوطه را ارسال نمایید.


به این نکته توجه داشته باشید که نام پارامتر که در اینجا می نویسید باید دقیقا شبیه به نام پارامتر در کریستال باشد



Dim paramFields As New ParameterFields
Dim paramField As New ParameterField
Dim discreteVal As New ParameterDiscreteValue
Dim rangeVal As New ParameterRangeValue
Dim ReportDomain As String


'عنوان گزارش
paramField.ParameterFieldName = "Report Title"
discreteVal.Value = ReportTitle
paramField.CurrentValues.Add(discreteVal)
paramFields.Add(paramField)

'Title
paramField = New ParameterField
discreteVal = New ParameterDiscreteValue
paramField.ParameterFieldName = "Title"
discreteVal.Value = Trim(ComboBox2.Text)
paramField.CurrentValues.Add(discreteVal)
paramFields.Add(paramField)
CrystalReportViewer1.ParameterFieldInfo = paramFields

saffari2005
دوشنبه 11 اردیبهشت 1385, 07:06 صبح
سلام
ممنونم از راهنماییتون.
من تاریخ تبدیل شده رو به کریستال پاس کردم.(توی دیتاست)

masysh
دوشنبه 11 اردیبهشت 1385, 16:01 عصر
مریم عزیز
من یک پارامتر با نام Date در کریستال ریپورت ساختم و در گزارش قرار دادم . واز کدهای شما استفاده کردم اما صفحه enter parameter value همچنان باز می شود. اشکال کار کجاست؟


Dim paramFields As New ParameterFields
Dim paramField As New ParameterField
Dim discreteVal As New ParameterDiscreteValue
Dim rangeVal As New ParameterRangeValue
Dim ReportDomain As String
Dim ReportTitle As String

paramField.ParameterFieldName = "Date"
discreteVal.Value = "85/02/11"
paramField.CurrentValues.Add(discreteVal)
paramFields.Add(paramField)

Maryam80
سه شنبه 12 اردیبهشت 1385, 10:34 صبح
کد شما مشکلی ندارد مگر اینکه فراموش کرده باشید دستور زیر را در انتهای کد بنویسید

CrystalReportViewer1.ParameterFieldInfo = paramFields

masysh
سه شنبه 12 اردیبهشت 1385, 15:21 عصر
اما مشکل من همچنان باقی است.

Mehrafrooz
سه شنبه 12 اردیبهشت 1385, 16:07 عصر
اما مشکل من همچنان باقی است.
دوست عزیز از چه نسخه ای از ویژوال استودیو استفاده می کنید ؟
این یکی از باگهایی که براش hotfix‌ در سایت خود کریستال ارائه شده .

Maryam80
سه شنبه 12 اردیبهشت 1385, 16:17 عصر
سلام

با استفاده از این کد مشکل شما حل می شود



Dim paramFields As New ParameterFields
Dim paramField As New ParameterField
Dim discreteVal As New ParameterDiscreteValue
Dim rangeVal As New ParameterRangeValue
Dim rpt As New CrystalReport1


paramField.ParameterFieldName = "Date"
discreteVal.Value = Trim(TextBox1.Text)
paramField.CurrentValues.Add(discreteVal)
paramFields.Add(paramField)

CrystalReportViewer1.ParameterFieldInfo = paramFields
CrystalReportViewer1.ReportSource = rpt

Artist
سه شنبه 16 آبان 1385, 12:35 عصر
این hotfix ی که در این جا گفتین می شه آدرسشو بدید.