cannguyen > 16-06-17, 01:16 PM
(16-06-17, 12:45 PM)tranthanhan1962 Đã viết: Hiện nay mình vẫn thấy cả các bệnh viện lớn vẫn xử dụng một máy để nhận bệnh nhân, dữ liệu chuyển giao 1-1-1...cho các phòng ban khác tuần tự đến khi phát thuốc. thực ra các số thứ tự không hề giống nhau có người đăng ký rồi bỏ (không khám), có người khám rồi không mua thuốc, bệnh cũng khác nhau, có người chụp X quang - người không, người thì xét nghiệm cái này, cái kia, người khám trước có thể thanh toán tiền xuất viện sau, và ngược lại . Vì vậy việc đồng bộ của bạn gần như không thể. Bạn cũng không thể quản lý được thời khắc nhập bệnh nhân, nhấn nút lưu của từng cán bộ nhập máy, nên yêu cầu của bạn gần như không tưởng. Sorry, mình chịu thua.
ongke0711 > 16-06-17, 04:14 PM
tranthanhan1962 > 16-06-17, 04:45 PM
(16-06-17, 01:16 PM)cannguyen Đã viết: ý em không phải đồng bộ trước sau như bác nói. Thôi vụ của em xem như bỏ qua, em cho người nhập nhấn lưu mấy phát cũng ok rồi.Phần mềm kế toán có nhiều cách xử lý. Đối với các phiếu thu chi nhập xuất đóng sẳn Numéro thì chỉ gõ đúng số Numéro trên cùi phiếu là được. Vã lại thông thường nếu cho số phiếu tự động thì cũng không xảy ra lỗi vì thường là 1 máy ra phiếu thu + phiếu xuất, một máy ra phiếu nhập + chi, cũng có rất nhiều đơn vị chỉ có một nhân viên xử lý phiếu (1 kế toán viên nhập liệu), nên không có việc trùng dữ liệu xảy ra. Đối với ngân hàng, họ xử lý số phiếu chỉ có số thứ tự chứ không đưa ngày vào số phiếu và cấp cho từng máy riêng từng sery số phiếu, khi hết họ sẽ cấp cho sery khác (nhân viên nhập liệu chịu trách nhiệm trên sery phiếu của mình), Hóa đơn tự in của các công ty phải đăng ký các sery hóa đơn cho chi cục thuế hay cục thuế trực tiếp quản lý. Vì vậy có những công ty đăng ký số lượng hóa đơn lớn xuất 2-3 năm vẫn còn nên bạn sẽ thấy ví dụ như ngày xuất là 1/6/2017 mà mã số hóa đơn có đuôi là 15E (có nghĩa là số này được đăng ký từ năm 2015)
Nhưng ví dụ đây là phần mềm kế toán thì sao bác? Phiếu thu/chi không thể trùng số (trong 1 tháng hoặc 1 năm, tùy công ty). Ví dụ: PCHI-01, PCHI-02 chứ không thể là M1-PCHI-01, M2-PCHI-01 được bác. Không lẽ đây là hạn chế của access? Có lẽ không phải, do em gà mờ nên chưa tìm ra cách thôi. Bác nào biết giúp em nhé
tieu_ngao > 16-06-17, 08:20 PM
(16-06-17, 01:16 PM)cannguyen Đã viết:(16-06-17, 12:45 PM)tranthanhan1962 Đã viết: Hiện nay mình vẫn thấy cả các bệnh viện lớn vẫn xử dụng một máy để nhận bệnh nhân, dữ liệu chuyển giao 1-1-1...cho các phòng ban khác tuần tự đến khi phát thuốc. thực ra các số thứ tự không hề giống nhau có người đăng ký rồi bỏ (không khám), có người khám rồi không mua thuốc, bệnh cũng khác nhau, có người chụp X quang - người không, người thì xét nghiệm cái này, cái kia, người khám trước có thể thanh toán tiền xuất viện sau, và ngược lại . Vì vậy việc đồng bộ của bạn gần như không thể. Bạn cũng không thể quản lý được thời khắc nhập bệnh nhân, nhấn nút lưu của từng cán bộ nhập máy, nên yêu cầu của bạn gần như không tưởng. Sorry, mình chịu thua.
ý em không phải đồng bộ trước sau như bác nói. Thôi vụ của em xem như bỏ qua, em cho người nhập nhấn lưu mấy phát cũng ok rồi.
Nhưng ví dụ đây là phần mềm kế toán thì sao bác? Phiếu thu/chi không thể trùng số (trong 1 tháng hoặc 1 năm, tùy công ty). Ví dụ: PCHI-01, PCHI-02 chứ không thể là M1-PCHI-01, M2-PCHI-01 được bác. Không lẽ đây là hạn chế của access? Có lẽ không phải, do em gà mờ nên chưa tìm ra cách thôi. Bác nào biết giúp em nhé
MTNQ > 16-06-17, 09:44 PM
(15-06-17, 02:48 PM)cannguyen Đã viết: Chào các bạn
Mình cần tạo form Bệnh nhân với yêu cầu Mã khách hàng sắp xếp theo ngày. Cấu trúc Mã BN như sau: Năm+Tháng+Ngày+STT. Ví dụ: 2017061501
Mình viết lệnh cho sự kiện như sau:
If [NgayNay] = [NgayTruoc] Then
L2 = BNCuoi + 1
Else
L2 = 1
End If
DoCmd.GoToRecord , , acNewRec
MaBN = Year(NgayDau) & Right(("0" & Month(NgayDau)), 2) & Right(("0" & Day(NgayDau)), 2) & Right(("00" & L2), 2)
Nhâp 1 máy thì ok nhưng nhập nhiều máy thì lỗi trùng mã bệnh nhân. Nhờ các bạn giúp nhé
Mình gửi kèm link: https://drive.google.com/open?id=0B7F3oA...HNoeE5nNm8
Cám ơn các bạn
Private Function fcTaoMaBN() As Long
Dim lngMaBN_Max As Long
Dim lngMaBN_New As Long
Dim datNgay_Max As Date
lngMaBN_Max = Nz(DMax("[MaBN]", "BenhNhan"), 0)
If lngMaBN_Max <> 0 Then
datNgay_Max = DateValue(Mid(lngMaBN_Max, 5, 2) & "/" & Mid(lngMaBN_Max, 3, 2) & "/" & Left(lngMaBN_Max, 2))
'Debug.Print datNgay_Max
If datNgay_Max >= date Then
If datNgay_Max > date Then
MsgBox "Ngay thang tren he thong khong phu hop, vui long lien he Admin ", vbCritical, "Luu y"
End If
lngMaBN_New = lngMaBN_Max + 1
Else
lngMaBN_New = Val(Format(date, "yymmdd") & "0000") + 1
End If
Else
lngMaBN_New = Val(Format(date, "yymmdd") & "0000") + 1
End If
fcTaoMaBN = lngMaBN_New
End Function
Private Sub TenBN_AfterUpdate()
If Nz(Me.TenBN, "") = "" Then Exit Sub
If Nz(MaBN, 0) = 0 Then
MaBN = fcTaoMaBN
DaLuu = "Y"
DoCmd.RunCommand acCmdSaveRecord
End If
End Sub
Private Sub moi_Click()
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
LockCtrls False
DoCmd.GoToRecord , , acNewRec
TenBN.SetFocus
End Sub
Sub LockCtrls(blnLock As Boolean)
MaBN.Enabled = Not blnLock
TenBN.Enabled = Not blnLock
NamSinh.Enabled = Not blnLock
DiaChi.Enabled = Not blnLock
DienThoai.Enabled = Not blnLock
GhiChu.Enabled = Not blnLock
GioiTinh.Enabled = Not blnLock
NgayBHYT.Enabled = Not blnLock
SoBHYT.Enabled = Not blnLock
luu.Enabled = Not blnLock
moi.Enabled = blnLock
I.Enabled = blnLock
xoa.Enabled = blnLock
SUa.Enabled = blnLock
End Sub
Private Sub Form_Open(Cancel As Integer)
'MaBN.Enabled = False
'TenBN.Enabled = False
'NamSinh.Enabled = False
'DiaChi.Enabled = False
'DienThoai.Enabled = False
'GhiChu.Enabled = False
'GioiTinh.Enabled = False
'luu.Enabled = False
'NgayDau.Enabled = False
'SoBHYT.Enabled = False
'NgayBHYT.Enabled = False
LockCtrls True
End Sub
Private Sub sua_Click()
LockCtrls False
End Sub
MTNQ > 16-06-17, 11:03 PM
Private Sub luu_Click()
If Nz([TenBN], "") = "" Then
MsgBox "Vui long nhap ho ten benh nhan", vbCritical, "Luu y"
Else
'MaBN = MaBN
LockCtrls True
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
MsgBox "Thanh cong!", vbInformation, "TB"
DoCmd.RunCommand acCmdSaveRecord
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
'DoCmd.Close
'DoCmd.OpenForm "BenhNhan"
Me.Requery
End If
'End If
End Sub
cannguyen > 17-06-17, 12:28 AM
(16-06-17, 08:20 PM)tieu_ngao Đã viết:(16-06-17, 01:16 PM)cannguyen Đã viết:(16-06-17, 12:45 PM)tranthanhan1962 Đã viết: Hiện nay mình vẫn thấy cả các bệnh viện lớn vẫn xử dụng một máy để nhận bệnh nhân, dữ liệu chuyển giao 1-1-1...cho các phòng ban khác tuần tự đến khi phát thuốc. thực ra các số thứ tự không hề giống nhau có người đăng ký rồi bỏ (không khám), có người khám rồi không mua thuốc, bệnh cũng khác nhau, có người chụp X quang - người không, người thì xét nghiệm cái này, cái kia, người khám trước có thể thanh toán tiền xuất viện sau, và ngược lại . Vì vậy việc đồng bộ của bạn gần như không thể. Bạn cũng không thể quản lý được thời khắc nhập bệnh nhân, nhấn nút lưu của từng cán bộ nhập máy, nên yêu cầu của bạn gần như không tưởng. Sorry, mình chịu thua.
ý em không phải đồng bộ trước sau như bác nói. Thôi vụ của em xem như bỏ qua, em cho người nhập nhấn lưu mấy phát cũng ok rồi.
Nhưng ví dụ đây là phần mềm kế toán thì sao bác? Phiếu thu/chi không thể trùng số (trong 1 tháng hoặc 1 năm, tùy công ty). Ví dụ: PCHI-01, PCHI-02 chứ không thể là M1-PCHI-01, M2-PCHI-01 được bác. Không lẽ đây là hạn chế của access? Có lẽ không phải, do em gà mờ nên chưa tìm ra cách thôi. Bác nào biết giúp em nhé
Bạn thử cái này xem nhé! Mình ko có 2 máy để test. Nếu có gì hồi âm lại nhé
Link tải
cannguyen > 17-06-17, 12:42 AM
(16-06-17, 09:44 PM)MTNQ Đã viết:(15-06-17, 02:48 PM)cannguyen Đã viết: Chào các bạn
Mình cần tạo form Bệnh nhân với yêu cầu Mã khách hàng sắp xếp theo ngày. Cấu trúc Mã BN như sau: Năm+Tháng+Ngày+STT. Ví dụ: 2017061501
Mình viết lệnh cho sự kiện như sau:
If [NgayNay] = [NgayTruoc] Then
L2 = BNCuoi + 1
Else
L2 = 1
End If
DoCmd.GoToRecord , , acNewRec
MaBN = Year(NgayDau) & Right(("0" & Month(NgayDau)), 2) & Right(("0" & Day(NgayDau)), 2) & Right(("00" & L2), 2)
Nhâp 1 máy thì ok nhưng nhập nhiều máy thì lỗi trùng mã bệnh nhân. Nhờ các bạn giúp nhé
Mình gửi kèm link: https://drive.google.com/open?id=0B7F3oA...HNoeE5nNm8
Cám ơn các bạn
Chào bạn!
Xem qua file của bạn mình có vài góp ý như sau:
-Nếu trường MaBN là kiểu Long Integer thì không nên lấy theo kiểu yyyymmdd00, Làm như vậy sẽ không ổn nếu trong ngày có hơn 100 BN khám
->Nên Format theo kiểu yymmdd0000, tức là chỉ lấy 2 số cuối của năm
-Nên tách hàm tạo MaBN riêng để dễ chỉnh sửa và sử lý lỗi
-Không nên tạo MaBN ngay khi "thêm mới" vì làm như vậy sẽ có nguy cơ tạo ra nhiều Record trống, chỉ có MaBN mà không có dữ liệu
-> Chỉ tạo MaBN sau khi đã nhập tên BN (Gọi hàm tạo MaBN ở sự kiện TenBN_AfterUpdate)
-Điều khiển nào không cho người dùng chỉnh sửa (như MaBN) thì phải khoá lại (Locked = yes). Không nên đặt tên các điều khiển trùng với tên trường trong table để tránh nhầm lẫn khi viết code....
Sau đây là hàm tạo mã BN:
Mã:Private Function fcTaoMaBN() As Long
Dim lngMaBN_Max As Long
Dim lngMaBN_New As Long
Dim datNgay_Max As Date
lngMaBN_Max = Nz(DMax("[MaBN]", "BenhNhan"), 0)
If lngMaBN_Max <> 0 Then
datNgay_Max = DateValue(Mid(lngMaBN_Max, 5, 2) & "/" & Mid(lngMaBN_Max, 3, 2) & "/" & Left(lngMaBN_Max, 2))
'Debug.Print datNgay_Max
If datNgay_Max >= date Then
If datNgay_Max > date Then
MsgBox "Ngay thang tren he thong khong phu hop, vui long lien he Admin ", vbCritical, "Luu y"
End If
lngMaBN_New = lngMaBN_Max + 1
Else
lngMaBN_New = Val(Format(date, "yymmdd") & "0000") + 1
End If
Else
lngMaBN_New = Val(Format(date, "yymmdd") & "0000") + 1
End If
fcTaoMaBN = lngMaBN_New
End Function
-Code cho sự kiện AfterUpdate của TenBN:
Mã:Private Sub TenBN_AfterUpdate()
If Nz(Me.TenBN, "") = "" Then Exit Sub
If Nz(MaBN, 0) = 0 Then
MaBN = fcTaoMaBN
DaLuu = "Y"
DoCmd.RunCommand acCmdSaveRecord
End If
End Sub
Điều kiện "If Nz(MaBN, 0) = 0 Then" rất quan trọng vì nếu thiếu thì khi chỉnh sửa tên Bn nó lại tạo thêm ra một MaBn mới
Sau khi tạo MaBN rồi thì nhớ câu thần chú DoCmd.RunCommand acCmdSaveRecord. Nếu không thì ở máy khác sẽ không nhận biết được sự tồn tại của nó và vấn đề trùng mã lại diễn ra
-Như vậy code cho nút mới chỉ còn là:
Mã:Private Sub moi_Click()
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
LockCtrls False
DoCmd.GoToRecord , , acNewRec
TenBN.SetFocus
End Sub
Thủ tục LockCtrls nhằm tránh viết nhiều lần cùng một đoạn mã:
Mã:Sub LockCtrls(blnLock As Boolean)
MaBN.Enabled = Not blnLock
TenBN.Enabled = Not blnLock
NamSinh.Enabled = Not blnLock
DiaChi.Enabled = Not blnLock
DienThoai.Enabled = Not blnLock
GhiChu.Enabled = Not blnLock
GioiTinh.Enabled = Not blnLock
NgayBHYT.Enabled = Not blnLock
SoBHYT.Enabled = Not blnLock
luu.Enabled = Not blnLock
moi.Enabled = blnLock
I.Enabled = blnLock
xoa.Enabled = blnLock
SUa.Enabled = blnLock
End Sub
Khi muốn mở hoặc khoá các điều khiển trên form bạn chỉ cần gọi LockCtrls False hoặc LockCtrls True
Ví dụ:
Mã:Private Sub Form_Open(Cancel As Integer)
'MaBN.Enabled = False
'TenBN.Enabled = False
'NamSinh.Enabled = False
'DiaChi.Enabled = False
'DienThoai.Enabled = False
'GhiChu.Enabled = False
'GioiTinh.Enabled = False
'luu.Enabled = False
'NgayDau.Enabled = False
'SoBHYT.Enabled = False
'NgayBHYT.Enabled = False
LockCtrls True
End Sub
và:
Mã:Private Sub sua_Click()
LockCtrls False
End Sub
tieu_ngao > 17-06-17, 06:17 AM
(16-06-17, 09:44 PM)MTNQ Đã viết:(15-06-17, 02:48 PM)cannguyen Đã viết: Chào các bạn
Mình cần tạo form Bệnh nhân với yêu cầu Mã khách hàng sắp xếp theo ngày. Cấu trúc Mã BN như sau: Năm+Tháng+Ngày+STT. Ví dụ: 2017061501
Mình viết lệnh cho sự kiện như sau:
If [NgayNay] = [NgayTruoc] Then
L2 = BNCuoi + 1
Else
L2 = 1
End If
DoCmd.GoToRecord , , acNewRec
MaBN = Year(NgayDau) & Right(("0" & Month(NgayDau)), 2) & Right(("0" & Day(NgayDau)), 2) & Right(("00" & L2), 2)
Nhâp 1 máy thì ok nhưng nhập nhiều máy thì lỗi trùng mã bệnh nhân. Nhờ các bạn giúp nhé
Mình gửi kèm link: https://drive.google.com/open?id=0B7F3oA...HNoeE5nNm8
Cám ơn các bạn
Chào bạn!
Xem qua file của bạn mình có vài góp ý như sau:
-Nếu trường MaBN là kiểu Long Integer thì không nên lấy theo kiểu yyyymmdd00, Làm như vậy sẽ không ổn nếu trong ngày có hơn 100 BN khám
->Nên Format theo kiểu yymmdd0000, tức là chỉ lấy 2 số cuối của năm
-Nên tách hàm tạo MaBN riêng để dễ chỉnh sửa và sử lý lỗi
-Không nên tạo MaBN ngay khi "thêm mới" vì làm như vậy sẽ có nguy cơ tạo ra nhiều Record trống, chỉ có MaBN mà không có dữ liệu
-> Chỉ tạo MaBN sau khi đã nhập tên BN (Gọi hàm tạo MaBN ở sự kiện TenBN_AfterUpdate)
-Điều khiển nào không cho người dùng chỉnh sửa (như MaBN) thì phải khoá lại (Locked = yes). Không nên đặt tên các điều khiển trùng với tên trường trong table để tránh nhầm lẫn khi viết code....
Sau đây là hàm tạo mã BN:
Mã:Private Function fcTaoMaBN() As Long
Dim lngMaBN_Max As Long
Dim lngMaBN_New As Long
Dim datNgay_Max As Date
lngMaBN_Max = Nz(DMax("[MaBN]", "BenhNhan"), 0)
If lngMaBN_Max <> 0 Then
datNgay_Max = DateValue(Mid(lngMaBN_Max, 5, 2) & "/" & Mid(lngMaBN_Max, 3, 2) & "/" & Left(lngMaBN_Max, 2))
'Debug.Print datNgay_Max
If datNgay_Max >= date Then
If datNgay_Max > date Then
MsgBox "Ngay thang tren he thong khong phu hop, vui long lien he Admin ", vbCritical, "Luu y"
End If
lngMaBN_New = lngMaBN_Max + 1
Else
lngMaBN_New = Val(Format(date, "yymmdd") & "0000") + 1
End If
Else
lngMaBN_New = Val(Format(date, "yymmdd") & "0000") + 1
End If
fcTaoMaBN = lngMaBN_New
End Function
-Code cho sự kiện AfterUpdate của TenBN:
Mã:Private Sub TenBN_AfterUpdate()
If Nz(Me.TenBN, "") = "" Then Exit Sub
If Nz(MaBN, 0) = 0 Then
MaBN = fcTaoMaBN
DaLuu = "Y"
DoCmd.RunCommand acCmdSaveRecord
End If
End Sub
Điều kiện "If Nz(MaBN, 0) = 0 Then" rất quan trọng vì nếu thiếu thì khi chỉnh sửa tên Bn nó lại tạo thêm ra một MaBn mới
Sau khi tạo MaBN rồi thì nhớ câu thần chú DoCmd.RunCommand acCmdSaveRecord. Nếu không thì ở máy khác sẽ không nhận biết được sự tồn tại của nó và vấn đề trùng mã lại diễn ra
-Như vậy code cho nút mới chỉ còn là:
Mã:Private Sub moi_Click()
DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70
LockCtrls False
DoCmd.GoToRecord , , acNewRec
TenBN.SetFocus
End Sub
Thủ tục LockCtrls nhằm tránh viết nhiều lần cùng một đoạn mã:
Mã:Sub LockCtrls(blnLock As Boolean)
MaBN.Enabled = Not blnLock
TenBN.Enabled = Not blnLock
NamSinh.Enabled = Not blnLock
DiaChi.Enabled = Not blnLock
DienThoai.Enabled = Not blnLock
GhiChu.Enabled = Not blnLock
GioiTinh.Enabled = Not blnLock
NgayBHYT.Enabled = Not blnLock
SoBHYT.Enabled = Not blnLock
luu.Enabled = Not blnLock
moi.Enabled = blnLock
I.Enabled = blnLock
xoa.Enabled = blnLock
SUa.Enabled = blnLock
End Sub
Khi muốn mở hoặc khoá các điều khiển trên form bạn chỉ cần gọi LockCtrls False hoặc LockCtrls True
Ví dụ:
Mã:Private Sub Form_Open(Cancel As Integer)
'MaBN.Enabled = False
'TenBN.Enabled = False
'NamSinh.Enabled = False
'DiaChi.Enabled = False
'DienThoai.Enabled = False
'GhiChu.Enabled = False
'GioiTinh.Enabled = False
'luu.Enabled = False
'NgayDau.Enabled = False
'SoBHYT.Enabled = False
'NgayBHYT.Enabled = False
LockCtrls True
End Sub
và:
Mã:Private Sub sua_Click()
LockCtrls False
End Sub