Xin hàm đánh số phiếu trong ACCESS

  • Thread starter Thread starter advnamk
  • Ngày gửi Ngày gửi

advnamk

Sơ cấp
Em đang viết phần mềm quản lý bán hàng trong Access muốn tạo 1 Form "Nhật ký chung" khi nhấn nút "Save" thì dữ liệu sẽ được lưu vào các Table nhập kho và xuất kho tuy nhiên viết hoài hàm đánh số phiếu tự động cho phiếu nhập và phiếu xuất mà không được. Xin các mon cao thủ chỉ dẫn giùm. thank u
 
Bạn tạo một cột có tên là "No" trong table xuất , nhập kho và định dạng la Autonumber là ok ngay.
 
Em đang viết phần mềm quản lý bán hàng trong Access muốn tạo 1 Form "Nhật ký chung" khi nhấn nút "Save" thì dữ liệu sẽ được lưu vào các Table nhập kho và xuất kho tuy nhiên viết hoài hàm đánh số phiếu tự động cho phiếu nhập và phiếu xuất mà không được. Xin các mon cao thủ chỉ dẫn giùm. thank u

Có nhiều cách mà:
Bạn có thể dùng sự kiện NgayCT_afterupdate hoặc Form onload cung duoc
Me.soct=dmax("[SOTT]";"T_Nhapxuat")+1
if isnull(Me.soct) then Me.soct=1
 
Dùng Autonumber thì không ổn vì khi mình xoá 01 phiếu thì key đó vẫn tồn tại mà không nhập phiếu khác được VD: có các số phiếu 1, 2, 3, 4, 5nếu ta xoá phiếu 3, 4 đi thì xẽ không thể lấy lại 02 key này nữa khi nhập phiếu tiếp ta xe có phiếu 1, 2, 5, 6.
Với cách của goc66 cũng hay nhưng mình làm nhưng vẫn trường hợp trên VD có phiếu 1, 2, 3, 4, 5 thì hàm dmax() cho kết quả=5 số phiếu kế tiếp =6 nhưng nếu xoá phiếu số 2 thì dmax()=4 số kế tiếp=5 như vậy sẽ bị trùng số. Dù sao cũng cám ơn bạn đã giúp đỡ.
 
Ngồi mấy ngày viết được hàm này xin mọi người cho Y kiến.

Public Function LayKeyNhap(Thang As Integer, Nam As Integer)

Dim QKN As QueryDef
Dim XKn As Recordset

KyTuDau = DLookup("MaKNhap", "MSys MyUser") //Lấy 02 ký tự đầu tiên cho phiếu nhập VD “PN”

Sott = 0

Dim StartDate As Date, StopDate As Date

StartDate = DateSerial(Nam, Thang, 1) // Lấy ngày đầu tiên của tháng
StopDate = NgayChot(Thang, Nam) // Lấy ngày cuối cùng của tháng

Set QKN = CurrentDb.QueryDefs("QKeyNhap") //lâp riêng 01 Query có 02 field Key Nhập và Ngày Nhập
QKN.Parameters("TuNgay") = StartDate //Truyền tham số cho ("QKeyNhap")
QKN.Parameters("DenNgay") = StopDate
Set XKn = QKN.OpenRecordset()

If Not XKn.NoMatch Then
Do Until XKn.EOF
If Val(Right(XKn!KNhap, 4)) > Sott Then
Sott = Val(Right(XKn!KNhap, 4))
End If
XKn.MoveNext
Loop
End If
LayKeyNhap = KyTuDau & Right("0" & Nam, 2) & Right("0" & Thang, 2) & Right("000" & Sott + 1, 4)
End Function

Cho mình được số phiếu dạng PN09080001 (Phiếu số 1 của tháng8 năm 09)
 
Với cách của goc66 cũng hay nhưng mình làm nhưng vẫn trường hợp trên VD có phiếu 1, 2, 3, 4, 5 thì hàm dmax() cho kết quả=5 số phiếu kế tiếp =6 nhưng nếu xoá phiếu số 2 thì dmax()=4 số kế tiếp=5 như vậy sẽ bị trùng số. Dù sao cũng cám ơn bạn đã giúp đỡ.
Chào bạn.
Nếu bạn xoá phiếu số 2 thì dmax vẫn = 5 chứ sao = 4 được bạn. Chắc bạn nhầm với dcount rồi đó, trong trường hợp nầy dcount = 4.
Làm theo cách của Singoc66 là hợp lý.
 
Back
Top