Mỗi tuần một chuyên đề

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

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

advnamk

Sơ cấp
11/6/09
6
0
0
44
binh duong
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
 
Khóa học Quản trị dòng tiền
B

BiDIT

Trung cấp
16/5/09
87
1
8
Hanoi
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.
 
S

singoc66

Sơ cấp
5/7/09
6
0
0
Nha Trang
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
 
A

advnamk

Sơ cấp
11/6/09
6
0
0
44
binh duong
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 đỡ.
 
A

advnamk

Sơ cấp
11/6/09
6
0
0
44
binh duong
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)
 
P

phulam

Guest
14/12/07
2
0
0
45
HCM
StopDate = NgayChot(Thang, Nam)
vay NgayChot() là hàm ji vậy?
Cám ơn
 
T

tung1999

Sơ cấp
9/2/09
41
0
0
can gio
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ý.
 

Xem nhiều

Webketoan Zalo OA