Xuân Thanh > 09-07-18, 04:56 PM
Function TinhTon(TuNgay As Date, DenNgay As Date)
Dim TC As Recordset
Set TC = CurrentDb.OpenRecordset("tblThuChi", dbOpenTable)
Dim Ton As Recordset
Set Ton = CurrentDb.OpenRecordset("tblTon", dbOpenTable)
'Xoa Table Ton
If Ton.RecordCount > 0 Then CurrentDb.Execute "Delete * From tblTon"
'Tinh Ton Dau
Dim So As Long
So = 0
TC.MoveFirst
Do Until TC.EOF
So = So + TC!TienThu - TC!TienChi
TC.MoveNext
If TC!NgayChungTu >= TuNgay Then Exit Do
Loop
'Tinh Thu Chi Ton Trong Ngay
Do Until TC.EOF
If TC!NgayChungTu >= TuNgay And TC!NgayChungTu <= DenNgay Then
Ton.AddNew
Ton!NgayChungTu = TC!NgayChungTu
Ton!TonDau = So
Ton!TienThu = TC!TienThu
Ton!TienChi = TC!TienChi
Ton!TonCuoi = Ton!TonDau + Ton!TonCuoi + TC!TienThu - TC!TienChi
So = Ton!TonCuoi
Ton.Update
End If
TC.MoveNext
Loop
TC.Close: Ton.Close
End Function
Private Sub cmdBaoCao_Click()
Call TinhTon(Me.txtTuNgay,Me.txtDenNgay)
Docmd.OpenReport "rptThuChi", acViewNormal
End Sub
tt1212 > 14-07-18, 08:25 AM
tracanhtam > 08-07-19, 09:42 PM
(09-07-18, 04:56 PM)Xuân Thanh Đã viết: Có rất nhiều bạn thắc mắc về tính tồn theo ngày (Tồn Quỹ, Tồn Kho...). Có cách giải quyết bằng query như ongke0711 đã giới thiệu. Hôm nay giới thiệu với các bạn bản demo này dùng VBA để tính vì tôi thích dùng VBA hơn do tính bảo mật cao của nó.Tôi có 1 table gồm : MaGV,thang,tuan,sotietk10,sotietk11,sotietk12 với 3 khóa chính là MaGV,thang,tuan
1/ Giả sử ta có một Database TonQuy có table tblThuChi gồm các field sau
- NgayChungTu, Date
- TienThu, Number
- TienChi, Number
2/ Ta tao thêm table tblTon để chứa dữ liệu trả về của hàm TinhTon viết trong modul gồm các field sau
- NgayChungTu, Date
- TonDau, Number
- TienThu, Number
- TienChi, Number
- TonCuoi, Number
Ghi Chú : Nhớ set Default Value cho các textbox dạng số là 0 nếu không sẽ bị lỗi
3/Mở modul mới và chép hàm này vô
Mã PHP:Function TinhTon(TuNgay As Date, DenNgay As Date)
Dim TC As Recordset
Set TC = CurrentDb.OpenRecordset("tblThuChi", dbOpenTable)
Dim Ton As Recordset
Set Ton = CurrentDb.OpenRecordset("tblTon", dbOpenTable)
'Xoa Table Ton
If Ton.RecordCount > 0 Then CurrentDb.Execute "Delete * From tblTon"
'Tinh Ton Dau
Dim So As Long
So = 0
TC.MoveFirst
Do Until TC.EOF
So = So + TC!TienThu - TC!TienChi
TC.MoveNext
If TC!NgayChungTu >= TuNgay Then Exit Do
Loop
'Tinh Thu Chi Ton Trong Ngay
Do Until TC.EOF
If TC!NgayChungTu >= TuNgay And TC!NgayChungTu <= DenNgay Then
Ton.AddNew
Ton!NgayChungTu = TC!NgayChungTu
Ton!TonDau = So
Ton!TienThu = TC!TienThu
Ton!TienChi = TC!TienChi
Ton!TonCuoi = Ton!TonDau + Ton!TonCuoi + TC!TienThu - TC!TienChi
So = Ton!TonCuoi
Ton.Update
End If
TC.MoveNext
Loop
TC.Close: Ton.Close
End Function
4/ Tạo môt report rptThuChi có nguồn là tblTon
5/ Tạo một from frmBaoCao, có 2 textbox txtTuNgay, txtDenNgay (nhớ format cho nó để hiển thi ngày tháng chuẩn dạng dd/mm/yyyyy) và một commandbutton cmdBaoCao với
Mã PHP:Private Sub cmdBaoCao_Click()
Call TinhTon(Me.txtTuNgay,Me.txtDenNgay)
Docmd.OpenReport "rptThuChi", acViewNormal
End Sub
Xem bản demo kèm theo. Trong bản demo chưa có form, các bạn tự tạo theo hướng dẫn trên
Thân mến