Chuyên đề ứng dụng : Thiết kế chương trình Sổ Quỹ Tiền Mặt(Phần 1 - Table và Form)

xuanthanh

Member
Hội viên mới
Dear All!
Hôm trước đã giới thiệu với các bạn chuyên đề về thiết kế Form trong Access. Hôm nay bằng một chương trình cụ thể này, tôi sẽ cùng các bạn áp dụng vào thực tế xem cách thức thiết kế một chương trình cụ thể như thế nào nhé. Bây giờ chúng ta lần lượt đi từng bước một

Bài 1 : Thiết kế cơ sở dữ liệu - Các Table​

Cơ sở dữ liệu của chúng ta gồm có 4 table chính : tblKhach, tblTaiKhoan, tblPhieuThuChi, tblPhieuChiTiet

1/ Bảng tblKhach
Bảng này gồm các trường sau :
MaKhach Text 10 PrimaryKey, Yes (No Duplicates)
TenKhach Text 50
DiaChi Text 70

2/ Bảng tblTaiKhoan
Bảng này gồm các trường sau :
MaTK Text 10 PrimaryKey, Yes (No Duplicates)
TenTK Text 50

3/ Bảng tblPhieuThuChi
Bảng này gồm các trường sau :
RecKey Text 20 PrimaryKey, Yes (No Duplicates)
NgayCT Date
SoCT Text 4
LoaiCT Text 1
MaKhach Text 10
LyDo Text 70
SoCTGoc Text 2

4/ Bảng tblPhieuChiTiêt
Bảng này gồm các trường sau :
RecKey Text 20 Yes (Duplicates OK)
TKDU Text 10
SoTien Number Format : Standard, Decimal : 0
Các bạn chú ý hai trường RecKey của hai bảng tblphieuThuChi và tblPhieuChiTiet hai trường này sẽ quan hệ theo dạng 1-n, mẹ nào con nấy, một mẹ có nhiều con. Điều này lý giải tại sao ở tblPhieuThuChi thì Index Yes (No Duplicates) còn ở tblPhieuChiTiet thì lại là Yes (Duplicates OK)

5/ Tạo mối quan hệ ràng buộc



Trong lưới Relationships, các bạn kéo field RecKey từ tblPhieuThuChi thả vào tblPhieuChiTiet, field MaKhach từ tblKhach thả vào tblPhieuThuChi, field MaTK từ tblTaiKhoan thả vào tblPhieuChiTiet. Sau khi kéo xuất hiện bảng sau


Trong 3 dấu checkbox, các bạn chỉ nên chọn 2 checkbox trên để tham chiếu toàn vẹn giữa các bảng, khi thay đổi ở bảng mẹ thì bảng con thay đổi theo. Riêng checkbox cuối cùng, nếu các bạn chọn nó thì khi xóa ở bảng mẹ, bảng con cũng bị xóa theo, điều này rất nguy hiểm vì liên quan tới các mục chi tiết
 

xuanthanh

Member
Hội viên mới
Ðề: Chuyên đề ứng dụng : Thiết kế chương trình Sổ Quỹ Tiền Mặt(Phần 1 - Table và Form)

Bài 2 : Thiết kế Form

Với hai form frmKhach và frmTaiKhoan, công việc kế đơn giản rất nhiều, các bạn tự tìm hiểu và thiết kế nhé. Hướng dẫn cơ bản thế này, dùng Wizad để làm cho nhanh, sau đó chỉnh sửa lại
1/ Thiết kế Form frmKhach
Vào trang Form, nhấn nút New để tạo mới
Khi đó xuất hiện bảng New Form như sau :
Các bạn chọn như hình trên rồi nhấn nút OK để tạo form. Access sẽ tạo cho bạn một form ở chế độ View Form như sau :
Các bạn nhấn nút Design trên thanh công cụ, ta được màn hình thiết kế form frmKhach như thế này :
Kích phải chuột vào Form, chọn Properties, chúng ta thiết kế form này như sau :
1/ Các bạn rê chuột để thiết kế phần Form Hearder như hình trên là được
2/ Trong Properties của Form, các bạn chú ý mấy điểm sau :
Trên phần Form Hearder có một ComandButon. Bạn chọn ComandButon trong hộp ToolBox, vẽ một hình nút Comand như hình vẽ, nhấn phải chuột vào nút ComandButon chọn Properties của nó và thiết kế như sau
Caption : Thoát
Name : Thoat
On Click Event : DoCmd.Close
Như vậy ta đã thiết kế xong Form frmKhach. Nhấn nút ViewForm ta được kết quả như sau :
Nhập danh sách khách hàng vào Form, Xong thì bấm nút Thoát. Thật là dễ như ta cho tay vào túi móc kẹo ăn phải không các bạn

2/ Thiết kế Form frmTaiKhoan

Các bạn làm tương tự như trên để tạo form frmTaiKhoan
 

xuanthanh

Member
Hội viên mới
Ðề: Chuyên đề ứng dụng : Thiết kế chương trình Sổ Quỹ Tiền Mặt(Phần 1 - Table và Form)

Bài 2 : Thiết kế form(tiếp theo)​

3/ Thiết kế Form frmPhieuThuChi

Ở đây tôi đặc biệt chú ý các bạn khi thiết kế form này. Form này thuộc dạng MainForm – SubForm
3.1 Thiết kế SubForm
Các bạn làm tương tự như trên để thiết kế SubForm : frmPhieuChiTiet. Kết quả như sau :


Các bạn lưu ý một số điểm như sau :
Trong phần Detail của Form còn một textbox RecKey nữa nhưng ta gán thuộc tính Visible của nó bằng No để khi view form ta không nhìn thấy Textbox này nhưng không thể thiếu nó vì nó sẽ là nguồn để link lên MainForm sau này
TKDU nên sử dụng combobox để chọn TK cho dễ khi nhập liệu.




Row Source của combo này như sau
SELECT tblTaiKhoan.MaTK, tblTaiKhoan.TenTK
FROM tblTaiKhoan;

Phần Form Footer vẽ thêm một Label và một textbox có tên là txtTong, Control Source = Sum([SoTien]) nhằm để lấy tổng số tiền của một phiếu bất kỳ nào đó và ghi số tiền bằng chữ
Toàn bộ các Event của form này chỉ duy nhất một event như sau (nhằm mục đich xòe danh sách tài khoản ra cho ta chọn khi combo TKDU nhận focus)

Private Sub TKDU_GotFocus()
SendKeys "%{DOWN}"
End Sub

Như vậy là chúng ta đã thiết kế xong SubForm frmPhieuChiTiet

3.2 / Thiết kế MainForm và nhúng SubForm
Vào Form – New


Các bạn chọn như trong hình trên rồi nhấn nút OK để tạo form


Nhấn nút Design và dung chuột vẽ sao được như hình dưới đây


Các control trong form các bạn làm như trong hình. Ở đây chỉ lưu ý hai combobox LoaiCT, MaKhach và hai textbox thể hiện Tên Khách và Địa Chỉ khi chọn Mã khách trong hộp com bo







 
Sửa lần cuối:

xuanthanh

Member
Hội viên mới
Ðề: Chuyên đề ứng dụng : Thiết kế chương trình Sổ Quỹ Tiền Mặt(Phần 1 - Table và Form)

Bài 2 (Tiếp theo )




Row Source của combo này như sau
SELECT tblKhach.MaKhach, tblKhach.TenKhach, tblKhach.DiaChi
FROM tblKhach;


Hai textbox phía sau combobox MaKhach lần lượt có Control Source là
=[MaKhachX].[Column(1)]
=[MaKhachX].[Column(2)]

Để nhúng SubForm vào MainForm, các bạn chọn Subform/SubReport và vẽ lên phần dưới của form main và điều chỉnh trong Properties của nó như sau




Kết quả cuối cùng :


Để hoàn thiện form này, chúng ta thêm mắm muối như sau. Vẽ thêm hai textbox như trong hình


Textbox thứ nhất nằm bên phải SubForm
Visible = No
Control Source = frmChiTiet.Form!txtTong
Name : TongTien
Textbox thứ hai nằm dưới SubForm
Enable = No
Control Source = DocSo([TongTien])
Hai textbox này nhằm mục đích đọc số tiền của phiếu hiện hành ra chữ
Phía trên phần Form Hearder có hai Command Buton, Nút Thoát giống như trên. Nút In Phiếu nhằm xuất phiếu hiện hành ra Report (Sẽ xét ở phần sau)
Toàn bộ các Event của Form này như sau :
Option Compare Database
Private Sub CmdIn_Click()
If Right(Me.RecKey, 1) = "T" Then
DoCmd.OpenReport "rptPhieuThu", acViewPreview
Else
DoCmd.OpenReport "rptPhieuChi", acViewPreview
End If
End Sub

Private Sub CmdThoat_Click()
DoCmd.Close
End Sub

Private Sub LoaiCT_AfterUpdate()
Call TaoMa
End Sub

Private Sub LoaiCT_GotFocus()
SendKeys "%{DOWN}"
End Sub

Private Sub MaKhachX_GotFocus()
SendKeys "%{DOWN}"
End Sub

Private Sub NgayCT_AfterUpdate()
Call TaoMa
End Sub

Private Sub SoCT_AfterUpdate()
Me.SoCT = Right("000" & Me.SoCT, 4)
Call TaoMa
End Sub

Private Sub TaoMa()
Me.RecKey = Year(Me.NgayCT) & Right("0" & Month(Me.NgayCT), 2) & Right("0" & Day(Me.NgayCT), 2) & "-" & Me.SoCT & "-" & Me.LoaiCT
End Sub

Lưu ý các bạn 2 điểm sau :
- Sub TaoMa() nhằm tạo ra khóa RecKey bằng cách ghép Năm Tháng Ngày-Số CT-LoạiCT
- Hàm DocSo(Number) được viết trong Modul để đọc số thành chữ
 

xuanthanh

Member
Hội viên mới
Ðề: Chuyên đề ứng dụng : Thiết kế chương trình Sổ Quỹ Tiền Mặt(Phần 1 - Table và Form)

Bài 2 : Tiếp theo

4/ Tạo form frmMeNu để điều khiển chương trình
Cũng vào Form – New, chọn Design View, hộp com bo phía dưới ta không chọn bảng nào cả. Ở đây ta không dung Wizad để tạo form mà ta tự thiết kế lấy form. Sau khi chọn như trên, ta được form hình thù như sau ở dạng thiết kế


Dùng chuột vẽ các control lên form và điều chỉnh để được như hình sau :


Các Control trên form bao gồm : 3 Label, 6 Command Button, 1 ComboBox, 3 TextBox. Kích phải chuột lên từng Control và điều chỉnh trong Properties như sau :








Row Source
SELECT tblPhieuThuChi.RecKey
FROM tblPhieuThuChi;




Tương tự như textbox txtNgayCuoi
Ở đây đặc biệt giới thiệu textbox màu đỏ để lấy thởi gian hiện hành của máy tính : txtClock




Toàn bộ các Event của form này như sau :

Option Compare Database

Private Sub CmdInPhieu_Click()
If Not IsNull(Me.cboSo) Then
DoCmd.OpenForm "frmPhieuThuChi", acNormal, , "[RecKey] = [Forms]![frmMeNu]![cboSo]"
Else
MsgBox "Ban chua chon so phieu", , "Thong Bao"
Exit Sub
End If
End Sub

Private Sub CmdInSoQuy_Click()
If Not IsNull(Me.txtNgayDau) And Not IsNull(Me.txtNgayCuoi) Then
DoCmd.OpenReport "rptSoQuy", acViewPreview
Else
MsgBox "Ban chua chon thoi gian bao cao", , "Thong Bao"
Exit Sub
End If
End Sub

Private Sub CmdKhachHang_Click()
DoCmd.OpenForm "frmKhach", acNormal
End Sub

Private Sub CmdPhieuThuChi_Click()
DoCmd.OpenForm "frmPhieuThuChi", acNormal
End Sub

Private Sub CmdTaiKhoan_Click()
DoCmd.OpenForm "frmTaiKhoan", acNormal
End Sub

Private Sub CmdThoat_Click()
If MsgBox("Ban thuc su muon thoat ?", vbDefaultButton2 + vbQuestion + vbYesNo, "Thong Bao") = vbYes Then
DoCmd.Close
DoCmd.Quit
End If
End Sub

Private Sub Form_Timer()
Me.txtClock = Now()
End Sub

Phần 3 : Viết hàm đọc số ra chữ trong modul

Vào ngăn Modul, nhấp nút New để tạo modul mới đặt tên là mdlDocSo
Viết hàm sau
Function DocSo(Number As Double)
Dim MyArray
Dim Str As String
If Number >= 1E+18 Then DocSo = "#NUM!": Exit Function
Str = Format(Fix(Abs(Number)), "000000000000000000")
MyArray = Array("không ", "m" & ChrW(7897) & "t ", "hai ", "ba ", "b" & ChrW(7889) & "n ", "n" & ChrW(259) & "m ", "sáu ", "b" & ChrW(7843) & "y ", "tám ", "chín ", "tri" & ChrW(7879) & "u, ", "ngàn, ", "t" & ChrW(7927) & ", ", "tri" & ChrW(7879) & "u, ", "ngàn, ", "", "tr" & ChrW(259) & "m ", "m" & ChrW(432) & ChrW(417) & "i ", "không " & "m" & ChrW(432) & ChrW(417) & "i" & " không ", "không " & "m" & ChrW(432) & ChrW(417) & "i", "l" & ChrW(7867), "m" & ChrW(432) & ChrW(417) & "i" & " không", "m" & ChrW(432) & ChrW(417) & "i", "m" & ChrW(432) & ChrW(417) & "i" & " n" & ChrW(259) & "m", "m" & ChrW(432) & ChrW(417) & "i" & " l" & ChrW(259) & "m", "m" & ChrW(7897) & "t " & "m" & ChrW(432) & ChrW(417) & "i", "m" & ChrW(432) & ChrW(7901) & "i", "m" & ChrW(432) & ChrW(417) & "i" & " m" & ChrW(7897) & "t", "m" & ChrW(432) & ChrW(417) & "i" & " m" & ChrW(7889) & "t", "Âm ", ChrW(273) & ChrW(7891) & "ng ", "và ", "xu ")
For i = 1 To Len(Str)
If Left(Str, i) <> 0 And Mid(Str, (Int((i + 2) / 3) - 1) * 3 + 1, 3) <> 0 Then
DocSo = DocSo & MyArray(Mid(Str, i, 1)) & MyArray(-(9 + i / 3) * (i Mod 3 = 0) - (15 + i Mod 3) * (i Mod 3 <> 0))
ElseIf i = 9 And Mid(Str, 7, 3) = 0 And Left(Str, 6) <> 0 Then
DocSo = DocSo & MyArray(12)
End If
Next
DocSo = IIf(Number = 0, MyArray(0) & MyArray(30), "") & IIf(Fix(Number) <> 0, DocSo & MyArray(30), "") & IIf(Fix(Number) <> 0 And Fix(Number) <> Number, MyArray(31), "") & IIf(Fix(Number) <> Number, IIf(Abs(Number - Fix(Number)) < 0.1, "", MyArray(Left(Right(Format(Abs(Number), "#.00"), 2), 1)) & MyArray(17)) & MyArray(Right(Format(Number, "#.00"), 1)) & MyArray(32), "")
DocSo = Replace(Trim(Replace(Replace(Replace(Replace(Replace(Replace(Replace(DocSo, MyArray(18), MyArray(15)), MyArray(19), MyArray(20)), MyArray(21), MyArray(22)), MyArray(23), MyArray(24)), MyArray(25), MyArray(26)), MyArray(27), MyArray(28)), ", " & MyArray(30), " " & MyArray(30))), MyArray(30) & MyArray(31), Split(MyArray(30), " ")(0) & " " & MyArray(31))
If Number < 0 Then DocSo = MyArray(29) & DocSo
DocSo = UCase(Left(DocSo, 1)) & Mid(DocSo, 2) & "."
End Function

Lưu ý :
1/ Hàm đọc số trên viết cho font Unicode
2/ Tất cả các form và report (xem phần sau) đều dùng font Unicode

Như vậy chúng ta đã hoàn thành phần thứ nhất : Thiết kế các bảng dữ liệu của CSDL và thiết kế các form để nhập liệu vào các bảng và điều khiển chương trình

Mời các bạn theo dõi tiếp phần thứ hai : Thiết kế các query để lấy dữ liệu tạo nguồn cho report và cách thiết kế các Report
 

ttm20062008

Member
Hội viên mới
Ðề: Chuyên đề ứng dụng : Thiết kế chương trình Sổ Quỹ Tiền Mặt(Phần 1 - Table và Form)

đánh dấu để nhớ:tinhtuong:
 

quanit

New Member
Hội viên mới
Ðề: Chuyên đề ứng dụng : Thiết kế chương trình Sổ Quỹ Tiền Mặt(Phần 1 - Table và Form)

bài viết hay và hữu ích.
 

Agito1993

New Member
Hội viên mới
Bạn XuanThanh ơi, cho mình hỏi những cái code bạn dùng là VBA hay ngôn ngữ lập trình khác? Mình mù về code nhưng muốn tạo ứng dụng dựa trên Access mà ko biết đi đâu học mấy cái code mã này?
 

hoamaivang_Van

New Member
Hội viên mới
Ðề: Chuyên đề ứng dụng : Thiết kế chương trình Sổ Quỹ Tiền Mặt(Phần 1 - Table và Form)

Bài 2 : Tiếp theo

4/ Tạo form frmMeNu để điều khiển chương trình
Cũng vào Form – New, chọn Design View, hộp com bo phía dưới ta không chọn bảng nào cả. Ở đây ta không dung Wizad để tạo form mà ta tự thiết kế lấy form. Sau khi chọn như trên, ta được form hình thù như sau ở dạng thiết kế


Mời các bạn theo dõi tiếp phần thứ hai : Thiết kế các query để lấy dữ liệu tạo nguồn cho report và cách thiết kế các Report
Chào anh!
Bài viết của anh rất hay, tuy nhiên mấy cái hình ảnh thì lại không nhìn thấy được
Anh có thể cho em demo của bài này được không?
Để dễ hiểu hơn
Cảm ơn
 

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Kỹ thuật giải trình thanh tra BHXH

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top