PDA

View Full Version : ثبت مرخصی



datmas
جمعه 22 آذر 1398, 01:50 صبح
سلام یه برنامه ثبت مرخصی با کمک همین سایت تهیه کردم که اشکالاتی داره . تو عکس توضیح دادم.

اگه هم کسی میتونه کلا فرم تعریف مرخصی رو حذف و همه عملیات از طریق فرم نمودار انجام بشه که خیلی عالی میشه. با تشکر

datmas
یک شنبه 24 آذر 1398, 22:36 عصر
دوستان فکر کنم برنام خیلی پیچیده و زمانبره که کسی حوصله بررسی سوالم نداره. ببخشید دیگه بهتر از این نتونستم دربیارم.
خدا خیرتون بده اگه وقت کردید مارو هم مورد عنایت قرار بدید.ممنون.

datmas
سه شنبه 26 آذر 1398, 22:10 عصر
دیگه فهمیدم کسی وقت نداره سوال ما رو جواب بده. اشکال نداره بازم از همه کاربران ممنون .

mazoolagh
پنج شنبه 28 آذر 1398, 13:45 عصر
موارد تکراری رو کمتر کسی بهش میپردازه

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

حداقل دیتابیس Northwind رو که روی کامپیوترتون هست یک نگاه بندازین.

ثبت مرخصی هم شبیه ثبت سفارش یا ثبت نام در کلاس هست.

datmas
شنبه 30 آذر 1398, 21:28 عصر
استاد عزیزم سلام.باز شما منو شرمنده کردید.ممنون میشم پیام خصوصی منو بخونید.

mazoolagh
سه شنبه 03 دی 1398, 09:24 صبح
به جای پیام خصوصی به همین نام کاربری که دارم در یاهو ایمیل بفرستین، البته اگر موردی هست که نمیتونین اینجا مطرح کنین یا فایل بخصوصی دارین

تفاوتی در زمان پاسخگویی نداره و شاید دیرتر هم بشه چون اینجا رو بیشتر از ایمیل سر میزنم.

جهت اطلاع، برنامه شما رو همون ابتدا چک کرده بودم.
مواردی بود که یادم آمد پیشتر در یک تاپیک دیگه (که استارتر اون هم شما بودین) اشاره کرده بودم که یک سری بایدها و نبایدها رو رعایت کنین و خب اینجا دقیقا همون روال قدیم رو پیش گرفته بودین بدون توجه به اون نکات!

موضوع تاپیک زیر مشابه پرسش شما هست:
https://barnamenevis.org/showthread.php?556411-طراحی-کارنامه-ماهیانه
اول اون رو دقیق بخونین و ازش ایده بگیرین
بعد به جای مرخصی واحد درسی و به جای نوع مرخصی درس رو در نظر بگیرین.

datmas
چهارشنبه 04 دی 1398, 11:35 صبح
سلام بزرگوار.محبت کنید ایمیل فرستادم براتون خبر بدید.ممنون

mazoolagh
پنج شنبه 05 دی 1398, 09:11 صبح
هفته آینده یک نمونه ساده براتون میگذارم

mazoolagh
پنج شنبه 12 دی 1398, 11:57 صبح
نمونه ای که پیوست میکنم صرفا کاربرد آموزشی و ایده گرفتن داره، مستقیما بعنوان برنامه ثبت مرخصی قابل استفاده نیست!

یک دلیل این هست که مرخصی (و مأموریت) زیر مجموعه سیستم پرسنلی شمرده میشه و مستقل نیست.

151204

mazoolagh
پنج شنبه 12 دی 1398, 12:02 عصر
نحوه ساخت دیتا تست برای 2500 کارمند و 20000 مرخصی (در 4 نوع)

Sub Fill_Data()
'DoCmd.RunSQL ("delete * from Leaves")
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("Leaves")
Dim i, Days As Integer
Dim DX As Variant
For i = 1 To 20000
rs.AddNew
rs("PersonID") = RndX(10001, 12500)
rs("LeaveTypeID") = RndX(1, 4)
DX = DMax("DateEnd", "Leaves", "PersonID=" & rs("PersonID"))
If IsNull(DX) Then
DX = #1/1/2010#
End If
DX = DateAdd("D", RndX(30, 500), DX)
rs("DateStart") = DX
Days = RndX(1, 20)
rs("Days") = Days
rs("DateEnd") = DateAdd("D", Days - 1, DX)
rs.Update
Next i
rs.Close
Set rs = Nothing
End Sub
Public Function RndX(MIN As Long, Max As Long) As Long
Randomize Timer
RndX = Int((Max - MIN + 1) * Rnd + MIN)
End Function

mazoolagh
پنج شنبه 12 دی 1398, 12:03 عصر
جدول مرخصی ها
151205

mazoolagh
پنج شنبه 12 دی 1398, 12:11 عصر
Option Compare Database
Option Explicit
Private Sub BTN_ADD_Click()
If Nz(Me.Days, 0) < 1 Then
MsgBox "Invalid Values", vbExclamation, "Validation"
Exit Sub
End If
Dim msg As String
With Forms!Leaves.Recordset
If Not .EOF Then .MoveFirst
Do While Not .EOF
If CDate(Me.DateStart) >= !DateStart And CDate(Me.DateStart) <= !DateEnd Then
msg = "Start Date overlaps with registered leave"
Exit Do
End If
If CDate(Me.DateEnd) >= !DateStart And CDate(Me.DateEnd) <= !DateEnd Then
msg = "End Date overlaps with registered leave"
Exit Do
End If
.MoveNext
Loop
End With
If msg = "" Then
Forms!Leaves.AllowAdditions = True
With Forms!Leaves.Recordset
.AddNew
!PersonID = Me.PersonID
!LeaveTypeID = Me.LeaveTypeID
!DateStart = CDate(Me.DateStart)
!DateEnd = CDate(Me.DateEnd)
!Days = Me.Days
.Update
End With
Forms!Leaves.AllowAdditions = False
Forms!Leaves.Requery
Else
MsgBox msg, vbExclamation, "Validation"
End If
End Sub
Private Sub BTN_CLOSE_Click()
DoCmd.Close
End Sub
Private Sub DateEnd_AfterUpdate()
Calc_Days
End Sub
Private Sub DateEnd_BeforeUpdate(Cancel As Integer)
Cancel = IsNull(Me.DateEnd)
End Sub
Private Sub DateStart_AfterUpdate()
Calc_Days
End Sub
Private Sub DateStart_BeforeUpdate(Cancel As Integer)
Cancel = IsNull(Me.DateStart)
End Sub
Private Sub Form_Open(Cancel As Integer)
If IsNull(Me.OpenArgs) Then
Cancel = True
MsgBox "This Form Should Be Opened From Leaves Form", vbExclamation, "Add New Leave"
Else
Me.LeaveTypeID = Me.LeaveTypeID.ItemData(0)
Me.PersonID = Me.OpenArgs
End If
End Sub
Private Sub LeaveTypeID_BeforeUpdate(Cancel As Integer)
Cancel = IsNull(Me.LeaveTypeID)
End Sub
Private Sub LeaveTypeID_NotInList(NewData As String, Response As Integer)
Me.LeaveTypeID = Me.LeaveTypeID.ItemData(0)
Response = acDataErrContinue
End Sub
Sub Calc_Days()
If IsNull(Me.DateStart) Or IsNull(Me.DateEnd) Then
Me.Days = 0
Else
Me.Days = DateDiff("D", Me.DateStart, Me.DateEnd) + 1
End If
End Sub

mazoolagh
پنج شنبه 12 دی 1398, 12:12 عصر
Option Compare Database
Option Explicit
Private Sub BTN_ADD_Click()
DoCmd.OpenForm "AddLeave", , , , , acDialog, Me.Person
End Sub
Private Sub BTN_DELETE_Click()
DoCmd.RunCommand acCmdDeleteRecord
Me.Summary.Form.Requery
End Sub
Private Sub Form_Load()
Me.InsideHeight = Me.Section(acHeader).Height + Me.Section(acFooter).Height + Me.Section(acDetail).Height * 12
End Sub
Private Sub LeaveTypeID_NotInList(NewData As String, Response As Integer)
Me.LeaveTypeID.Undo
Response = acDataErrContinue
End Sub
Private Sub Person_AfterUpdate()
If Nz(Me.Person, 0) = 0 Then
Me.Section(acDetail).Visible = False
Me.Section(acFooter).Visible = False
Me.RecordSource = ""
Me.BTN_ADD.Enabled = False
Else
Me.Section(acDetail).Visible = True
Me.Section(acFooter).Visible = True
Me.RecordSource = "SELECT * FROM Leaves WHERE PersonID=" & Me.Person & " ORDER BY DateStart"
Me.BTN_ADD.Enabled = True
End If
End Sub
Private Sub Person_NotInList(NewData As String, Response As Integer)
Me.Person.Undo
Response = acDataErrContinue
End Sub

mazoolagh
پنج شنبه 12 دی 1398, 12:13 عصر
برنامه پیوست