PDA

View Full Version : سوال: ارائه راه کاری برای نوشتن برنامه چک



morteza@z
چهارشنبه 24 اسفند 1390, 12:53 عصر
سلام می خوام برنامه چک بنویسم و می خوام که که کاربر یک چک را که ثبت را و تاریخ چک را زد بستگی به درخواست کاربر چی یک ماه و چه یک هفته قبل از تاریخ موعود چک آلارم دهد و هر روز تکرا شود

فرید نجفلو
چهارشنبه 24 اسفند 1390, 13:09 عصر
خوب حالا ما باید چی کارکنیم؟!!
یه تابع بنویسید که بعد از اجرای برنامه یا با یک دکمه یا تایمر یا هر چی این کار رو براتون انجانم بده!!!
اگه تو کد نویسیش مشکل دارید باید مشکلتون رو مطرح کنید

morteza@z
چهارشنبه 24 اسفند 1390, 20:45 عصر
اگه میشه یم مثال و کدی را بنویسید

tstsst
چهارشنبه 24 اسفند 1390, 22:05 عصر
سلام
این این کارو میکنه اما برای یک تاریخ (فقط یکی ) اگه کلید رو بزنی و قبلا تاریخی رو زخیره کرده باشی اون ازبین میره و این بجاش ثبت میشه اگه می خوای بیش از یکی ثبت شه باید از دیتا بیس استفاده کنید
84190

و بهتره که خودت این کارو بکنی و مشکلات تو بپرسی !

morteza@z
چهارشنبه 24 اسفند 1390, 23:26 عصر
سلام یک بار دیگه توضیح میدم من می خوام برنامه برای چک بنویسم که زمانی که کاربر چکش را ثبت می کند بنا به در خواست کاربر هر زمان که که او بخواهد چه یک ماه و چه کمتر و بیشتر به او آلارم دهد و این آلارم هر روز تکرار شود مشکل من در هر روز آلارم دادن و از همه مهمتر یک هفته یا یک ماه به موعود چک آلارم را بدهد مشکا من در این جاست خواهش می کنم کمک کنید:گریه::گیج:

فرید نجفلو
پنج شنبه 25 اسفند 1390, 00:03 صبح
سلام یک بار دیگه توضیح میدم من می خوام برنامه برای چک بنویسم که زمانی که کاربر چکش را ثبت می کند بنا به در خواست کاربر هر زمان که که او بخواهد چه یک ماه و چه کمتر و بیشتر به او آلارم دهد و این آلارم هر روز تکرار شود مشکل من در هر روز آلارم دادن و از همه مهمتر یک هفته یا یک ماه به موعود چک آلارم را بدهد مشکا من در این جاست خواهش می کنم کمک کنید:گریه::گیج:

من متوجه نمی شم شما در محاسبه مدت باقی مانده تا موعود چک مشکل دارید؟
یا کدی که هشدار رو نشون می ده؟
و یا جایی که کد باید قرار گیره؟
...

morteza@z
پنج شنبه 25 اسفند 1390, 13:47 عصر
دوست من خوب فهمیدی هر سه مورد

فرید نجفلو
پنج شنبه 25 اسفند 1390, 14:51 عصر
دوست من خوب فهمیدی هر سه مورد
پس یعنی خودتون کاری نکردید؟!



محاسبه مدت باقی مانده تا موعود چک مشکل دارید؟

این مورد برای محاسبه تاریخ شمسی تابع خاص خودشو می خواد واسه همین توصیه می کنم اگه می خواید کارتون راحت باشه و کم دردسر یه فیلد اضافی تو دیتابیس داشته باشید که معادل تاریخ شمسی رو به صورت میلادی توش ذخیره کنید
با این کار شما با یک خط کد تعداد روز های مانده تا/گذشته از تاریخ چک رو می تونید حساب کنید(البته بدون در نظر گرفتن مراحل استخراج اطلاعات از دیتابیس):



کدی که هشدار رو نشون می ده؟

برای این کار شما باید اطلاعات رو از دیتابیس استخراج کنید(من فرض می کنم شما این کار رو انجام دادید و الان لیست چک ها داخل یک Datatable قرار دارن)

و اینکه فرض می کنیم مهلت هشدار ها برای چک ها متفاوته و اون رو هم داخل دیتابیس دارید(البته می تونید از یک مقدار ثابت هم استفاده کنید):

Public Sub DetectChequeAlarams(dtChk As DataTable)
Dim lstAlarmedChk As New List(Of DataRow)
For Each aRow As DataRow In dtChk.Rows
Dim ChkDate As Date = CDate(aRow("TarikhResid"))
Dim AlarmDay As Integer = CInt(aRow("MohlatHoshdar"))
If ChkDate.AddDays(-AlarmDay) <= Now Then
lstAlarmedChk.Add(aRow)
End If
Next
If lstAlarmedChk.Count > 0 Then
'Use This List For Alarm To User
End If
End Sub


البته شما می تونید تابع بالا رو با TSQ(دستورات SQL) هم بنویسید تا تبادل اطلاعات کمتر بشه ولی برای برنامه های کوچک تا متوسط خوبه


جایی که کد باید قرار می گیره؟
این دیگه به شما بستگی داره
برای نمونه شما می تونید در هر اجرای برنامه این کار رو انجام بدید. چون محاسبه بر اساس روزه پس نتایج اول روز آخر روز تفوتی نمیکنه مگر اینکه طی روز در تعداد یا تاریخ چک ها تغییری ایجاد بشه!

در صورتی که اجرای برنامه رو مورد نظر قرار دادید بهتره یک تایمر مثلا با مهلت 5 دقیقه ایجاد کنید تا کاربر به محض ورود با پیغام هشدار غافل گیر نکنید
ولی باز به شما بستگی داره!

morteza@z
پنج شنبه 25 اسفند 1390, 17:58 عصر
دوست من میشه لطف کنی یک تیکه از برنامه را بنویسی خواهش می کنم تا راحت تر بفهمم

فرید نجفلو
پنج شنبه 25 اسفند 1390, 21:43 عصر
کجای برنامه رو؟!
من که تابع اصلی رو بهت دادم
تو خط آخر (داخل شرط) باید هشدار خودت رو نشون بدی
حالا ممکنه با Msgbox نشون بدی (بدترین انتخاب!) یا با یک دیتا گرید یا بالون یا ...
اگه تو استخراج اطلاعات از دیتابیس مشکل داری دیگه باید یه فکر اساسی واسه خودت بکنی!
اگه کارکرد تابع رو متوجه نشدی خط مورد نظرتو بگو توضیح بدم(با اینکه خیلی تابع ساده ای هم هست!)

klinton
جمعه 26 اسفند 1390, 04:08 صبح
و اما راه حل :

فرض میکنیم چک های 10 روز آینده را میخواهیم


PersianDate(Now.Date.AddDays(10))

تابع persiandate تابعی است که تاریخ میلادی را به شمسی تبدیل میکند


Public

Function PersianDate(ByVal DT As Object) As String


If DT Is Nothing OrElse DT Is DBNull.Value Then


Return " "


Else


Dim PCalendar As New PersianCalendar()


Dim Day As String = CStr(PCalendar.GetDayOfMonth(CDate(DT)))


Dim Month As String = CStr(PCalendar.GetMonth(CDate(DT)))


Dim Year As String = CStr(PCalendar.GetYear(CDate(DT)))


If CDbl(Month) < 10 Then


If CDbl(Day) < 10 Then


Return Year + "/" + "0" + Month + "/" + "0" + Day


Else


Return Year + "/" + "0" + Month + "/" + Day


End If


Return Year + "/" + "0" + Month + "/" + Day


Else


If CDbl(Day) < 10 Then


Return Year + "/" + Month + "/" + "0" + Day


Else


Return Year + "/" + Month + "/" + Day


End If


End If


End If


End Function



و


Dim emruz1 As String = PersianDate(Now.Date)


Dim emruz2 As String = PersianDate(Now.Date.AddDays(10))

را تعریف میکنید

خوب حالا تو query تون تو شرط where مینویسید
چک هایی که تاریخشان کوچکتر مساوی
emruz2
و بزرگتر مساوی
emruz1
هست رو نشون بده
البته باید نوع فیلد تاریخ باید char باشد char(10) خوبه
موفق باشید

morteza@z
جمعه 26 اسفند 1390, 11:20 صبح
دوست من این کد هار در کدام قسمت باید بنویسم و در دیتابیس در قسمت query باید شرط where را بنویسم و فقط بنویسم که کوچکتر و بزگتر emrozدرسته

فرید نجفلو
جمعه 26 اسفند 1390, 11:29 صبح
این معادل تابع تاریخ شما:(اگه شما یه برنامه 50.000 خطی بنویسید که ...:متعجب:)
Public Function PersainDate(dt As Date) As String
Dim pc As New Globalization.PersianCalendar
Dim ShamsiDate As String = pc.GetYear(Now)
ShamsiDate &= "/" & Strings.Right(("0" & pc.GetMonth(Now)), 2)
ShamsiDate &= "/" & Strings.Right(("0" & pc.GetDayOfMonth(Now)), 2)
Return ShamsiDate
End Function