xin giúp e tính ngày trong access

Liên hệ QC

hiếu phạm 13

Thành viên mới
Tham gia
16/7/20
Bài viết
3
Được thích
0
nhờ quý anh em hỗ trợ em hàm tính thời gian giao nhận văn bản (trễ hạn) trong access. e có 1 table gồm: tên QĐ, ngày ban hành, ngày nhận, trễ hạn. trừ ngày nghỉ t7, cn và các ngày lễ, ngày làm bù. em xin cám ơn
 
Số ngày trễ hạn của bạn công thức tính như thế nào? Lấy ngày nào trừ ngày nào?
 
Số ngày trễ hạn của bạn công thức tính như thế nào? Lấy ngày nào trừ ngày nào?
dạ ngày nhận(ngày hiện tại) - ngày phát hành công văn - ngày nghỉ, ngày lễ nếu có > 03 ngày: trễ hạn. nếu có thể a có thể cho e xin zalo để tiện việc hỏi được không. Zalo em 0949440276. Cám ơn
Bài đã được tự động gộp:

em có các bản như sau, cần lập form nhập liệu, báo cáo tuần, tháng (từ ngày đến ngày) gồm các mục: thụ lý mới, giải quyết, còn lại. Vi phạm thời gian giao nhận. mấy anh chị có thể giúp em demo 1 loại để em nghiên cứu không
 

File đính kèm

  • Demo.rar
    118.8 KB · Đọc: 1
Lần chỉnh sửa cuối:
dạ ngày nhận(ngày hiện tại) - ngày phát hành công văn - ngày nghỉ, ngày lễ nếu có > 03 ngày: trễ hạn.

Trước đây tôi có làm cái vụ tính ngày làm việc không tính các ngày nghỉ lễ, T7,CN (tuỳ chọn có làm việc T7 hay không).
Bạn xem file demo đính kèm để chỉnh sửa cho phù hợp CSDL của bạn. Chủ yếu là cái hàm tính bên dưới.
- Bắt buộc phải tạo thêm 1 table lưu các ngày nghỉ lễ.
- Bạn thay các tham số từ ngày: ngày Phát hàng CV ; đến ngày: ngày hiện tại (dùng hàm Date())
- Tự thêm công thức >3 ngày của bạn để tính toán.

Screen Shot 2021-10-15 at 08.46.56.png

Mã:
Option Compare Database
Option Explicit

Public Function fWorkingdays(ByVal datTuNgay As Date, ByVal datDenNgay As Date, ByVal bytSoNgayLVTuan As Byte, _
        Optional ByVal blnTinhNgayLe As Boolean) As Long
    '-------------------------------------------------------------------------------------------------
    'Muc dich: Tính so ngày làm viec giua 2 tham so  (datTuNgay) và (datDenNgay).
    'Có tùy chon tru ngày nghi (Thu 7, CN) và tru các ngày Le
    'bytSoNgayLVTuan : là so ngày lam viec trong 1 tuan. 5: neu nghi thu 7 + CN; 6: nêu chi nghi CN
    'blnTinhNgayLe   : là 'True' neu có tru ngay Le; 'False' neu không tru ngay Le
    '-------------------------------------------------------------------------------------------------
    
    'Const bytSoNgayLVTuan     'Khai bao so ngay lam viec trong tuan
    
    'Khai bao ten table Ngay Nghi.
    Const cstrTenTableNgayLe  As String = "tblNgayLe"
    'Khai bao ten truong (Field) luu Ngay Nghi trong table Ngay Nghi.
    Const cstrTenFieldNgayLe  As String = "NgayLe"
    Dim bytSunday As Byte
    Dim intWeekdayTuNgay As Integer, intWeekdayDenNgay As Integer
    Dim lngDays As Long, lngNgayLe As Long
    Dim strTuNgay As String, strDenNgay As String, strFilter As String
    Dim datDateTemp As Date
    
    'Dao nguoc TuNgay, DenNgay neu nhap lieu nguoc lai.
    If datTuNgay > datDenNgay Then
        datDateTemp = datTuNgay
        datTuNgay = datDenNgay
        datDenNgay = datDateTemp
    End If
    
    'Xac dinh Weekday cua Sunday.
    'Nêu chon Sat là ngày dau tuan thì Weekday cua Sunday=7, Sunday là ngày dau tuan thì Weekday cua Sunday=1.
    bytSunday = Weekday(vbSunday, vbMonday)
    'Xac dinh Weekdays cua [TuNgay], [DenNgay].
    intWeekdayTuNgay = Weekday(datTuNgay - 1, vbMonday)
    intWeekdayDenNgay = Weekday(datDenNgay, vbMonday)
    
    intWeekdayTuNgay = intWeekdayTuNgay + (intWeekdayTuNgay = bytSunday)
    intWeekdayDenNgay = intWeekdayDenNgay + (intWeekdayDenNgay = bytSunday)
    lngDays = intWeekdayDenNgay - intWeekdayTuNgay - (bytSoNgayLVTuan * (intWeekdayDenNgay < intWeekdayTuNgay))
    'Them so ngay lam viec ung voi so tuan giua TuNgay va DenNgay
    lngDays = lngDays + (bytSoNgayLVTuan * DateDiff("w", datTuNgay - 1, datDenNgay, vbMonday, vbFirstFourDays))
    
    'Dem so ngay Le trong khoang thoi gian TuNgay va DenNgay
    If blnTinhNgayLe And lngDays > 0 Then
        strTuNgay = Format(datTuNgay - 1, "yyyy\/mm\/dd")
        strDenNgay = Format(datDenNgay, "yyyy\/mm\/dd")
        strFilter = cstrTenFieldNgayLe & " Between #" & strTuNgay & "# And #" & strDenNgay & "# And Weekday(" & cstrTenFieldNgayLe & ", 2) <= " & bytSoNgayLVTuan & ""
        lngNgayLe = DCount("*", cstrTenTableNgayLe, strFilter)
    End If
    
    fWorkingdays = lngDays - lngNgayLe
End Function

em có các bản như sau, cần lập form nhập liệu, báo cáo tuần, tháng (từ ngày đến ngày) gồm các mục: thụ lý mới, giải quyết, còn lại. Vi phạm thời gian giao nhận. mấy anh chị có thể giúp em demo 1 loại để em nghiên cứu không
Đây là một ứng dụng nhỏ, cần phải phân tích CSDL, các yêu cầu báo cáo, qui trình xử lý, thao tác dữ liệu các kiểu nên không thể hướng dẫn trên diễn đàn được. Tốt nhất là bạn thuê ai đó viết cho nhanh, chứ tôi xem qua cái file CSDL (dùng tiếng Việt có dấu) bạn gửi thì thấy bạn còn chưa nắm hết căn bản Access nên tự viết sẽ mất thời gian lắm.
Tôi thì cũng đang bận việc nên không hướng dẫn nhiều và cũng không viết được nhé.
 

File đính kèm

  • WorkingDays.zip
    35.8 KB · Đọc: 4
Trước đây tôi có làm cái vụ tính ngày làm việc không tính các ngày nghỉ lễ, T7,CN (tuỳ chọn có làm việc T7 hay không).
Bạn xem file demo đính kèm để chỉnh sửa cho phù hợp CSDL của bạn. Chủ yếu là cái hàm tính bên dưới.
- Bắt buộc phải tạo thêm 1 table lưu các ngày nghỉ lễ.
- Bạn thay các tham số từ ngày: ngày Phát hàng CV ; đến ngày: ngày hiện tại (dùng hàm Date())
- Tự thêm công thức >3 ngày của bạn để tính toán.

View attachment 267756

Mã:
Option Compare Database
Option Explicit

Public Function fWorkingdays(ByVal datTuNgay As Date, ByVal datDenNgay As Date, ByVal bytSoNgayLVTuan As Byte, _
        Optional ByVal blnTinhNgayLe As Boolean) As Long
    '-------------------------------------------------------------------------------------------------
    'Muc dich: Tính so ngày làm viec giua 2 tham so  (datTuNgay) và (datDenNgay).
    'Có tùy chon tru ngày nghi (Thu 7, CN) và tru các ngày Le
    'bytSoNgayLVTuan : là so ngày lam viec trong 1 tuan. 5: neu nghi thu 7 + CN; 6: nêu chi nghi CN
    'blnTinhNgayLe   : là 'True' neu có tru ngay Le; 'False' neu không tru ngay Le
    '-------------------------------------------------------------------------------------------------
   
    'Const bytSoNgayLVTuan     'Khai bao so ngay lam viec trong tuan
   
    'Khai bao ten table Ngay Nghi.
    Const cstrTenTableNgayLe  As String = "tblNgayLe"
    'Khai bao ten truong (Field) luu Ngay Nghi trong table Ngay Nghi.
    Const cstrTenFieldNgayLe  As String = "NgayLe"
    Dim bytSunday As Byte
    Dim intWeekdayTuNgay As Integer, intWeekdayDenNgay As Integer
    Dim lngDays As Long, lngNgayLe As Long
    Dim strTuNgay As String, strDenNgay As String, strFilter As String
    Dim datDateTemp As Date
   
    'Dao nguoc TuNgay, DenNgay neu nhap lieu nguoc lai.
    If datTuNgay > datDenNgay Then
        datDateTemp = datTuNgay
        datTuNgay = datDenNgay
        datDenNgay = datDateTemp
    End If
   
    'Xac dinh Weekday cua Sunday.
    'Nêu chon Sat là ngày dau tuan thì Weekday cua Sunday=7, Sunday là ngày dau tuan thì Weekday cua Sunday=1.
    bytSunday = Weekday(vbSunday, vbMonday)
    'Xac dinh Weekdays cua [TuNgay], [DenNgay].
    intWeekdayTuNgay = Weekday(datTuNgay - 1, vbMonday)
    intWeekdayDenNgay = Weekday(datDenNgay, vbMonday)
   
    intWeekdayTuNgay = intWeekdayTuNgay + (intWeekdayTuNgay = bytSunday)
    intWeekdayDenNgay = intWeekdayDenNgay + (intWeekdayDenNgay = bytSunday)
    lngDays = intWeekdayDenNgay - intWeekdayTuNgay - (bytSoNgayLVTuan * (intWeekdayDenNgay < intWeekdayTuNgay))
    'Them so ngay lam viec ung voi so tuan giua TuNgay va DenNgay
    lngDays = lngDays + (bytSoNgayLVTuan * DateDiff("w", datTuNgay - 1, datDenNgay, vbMonday, vbFirstFourDays))
   
    'Dem so ngay Le trong khoang thoi gian TuNgay va DenNgay
    If blnTinhNgayLe And lngDays > 0 Then
        strTuNgay = Format(datTuNgay - 1, "yyyy\/mm\/dd")
        strDenNgay = Format(datDenNgay, "yyyy\/mm\/dd")
        strFilter = cstrTenFieldNgayLe & " Between #" & strTuNgay & "# And #" & strDenNgay & "# And Weekday(" & cstrTenFieldNgayLe & ", 2) <= " & bytSoNgayLVTuan & ""
        lngNgayLe = DCount("*", cstrTenTableNgayLe, strFilter)
    End If
   
    fWorkingdays = lngDays - lngNgayLe
End Function


Đây là một ứng dụng nhỏ, cần phải phân tích CSDL, các yêu cầu báo cáo, qui trình xử lý, thao tác dữ liệu các kiểu nên không thể hướng dẫn trên diễn đàn được. Tốt nhất là bạn thuê ai đó viết cho nhanh, chứ tôi xem qua cái file CSDL (dùng tiếng Việt có dấu) bạn gửi thì thấy bạn còn chưa nắm hết căn bản Access nên tự viết sẽ mất thời gian lắm.
Tôi thì cũng đang bận việc nên không hướng dẫn nhiều và cũng không viết được nhé.
DẠ EM CÁM ƠN ANH
 
Web KT
Back
Top Bottom