Phát triển HTTT kế toán bằng MS Access - Chương 10 - Bảng nhân viên Employee
James Perry, Richard Newmark
Chương
10
Qui trình nhân sự
Bảng nhân viên Employee
Bảng
HR đầu tiên được mô tả là bảng nhân viên Employee. Bảng nhân viên Employee là
nơi tập trung lưu trữ mọi thông tin của từng nhân viên. Điều này khiến cho việc
thêm, xóa, và sửa thông tin nhân viên dễ dàng và hiệu quả. Nó còn loại bỏ tình
trạng dư thừa dữ liệu; bộ phận nhân sự tạo và bảo trì dữ liệu trong bảng này,
nhưng bộ phận kế toán có thể dùng thông tin lưu trong bảng để tính lương và in
chi phiếu. Bảng nhân viên Employee sẽ chứa khá nhiều trường. Bạn sẽ cần nhận
diện một trường khóa chính tốt rồi thêm các trường để lưu tên nhân viên, địa
chỉ, mã an sinh xã hội, tiền công một giờ, và thời điểm tuyển dụng. Bạn cũng sẽ
cần lưu các thông tin khác vào bảng nhân viên Employee (chẳng hạn tình trạng lập
gia đình và số khoản miễn trừ) để Pipefitters có thể tính thuế thu tại nguồn
Withholding.
Trường
đầu tiên bạn sẽ đưa vào bảng nhân viên Employee là khóa chính, mã nhân viên.
Nhắc lại rằng khóa chính của bảng phải duy nhất cho từng bản ghi trong bảng. Một
ý định là dùng mã an sinh xã hội để làm khóa chính; tuy nhiên, luật bảo vệ quyền
riêng tư không cho phép công ty dùng mã an sinh xã hội để nhận diện nhân viên.
Ngoài ra, các công ty phát hiện rằng bộ phận quản lý an sinh xã hội thỉnh thoảng
cấp một mã cho nhiều người và đôi khi cấp nhiều mã cho một người. Bằng cách tự
tạo mã nhân viên, Pipefitters có thể kiểm soát hoàn toàn khóa chính trong bảng
nhân viên Employee của họ.
Một
số công ty dùng mã nhân viên để lưu thông tin ẩn. Chẳng hạn, công ty có thể qui
định mọi quản lý viên có mã bắt đầu bằng số 4. Nhưng sẽ ra sao nếu một nhân viên
được thăng chức hay được bổ nhiệm ở vị trí khác? Để tránh phiền phức,
Pipefitters quyết định dùng phương pháp đánh số tuần tự để đảm bảo mã nhân viên
là duy nhất và không chứa thông tin ẩn. Trong phương pháp đánh số tuần tự, nhân
viên mới sẽ nhận số lớn hơn một đơn vị so với số lớn nhất đã dùng. Bạn đừng dùng
lại mã số của nhân viên đã nghỉ việc vì mã số là cách tra cứu hiệu quả thông tin
của các nhân viên đó. Mặc dù qui định và thực hành cụ thể sẽ tùy thuộc từng
bang, nhà tuyển dụng thường bị yêu cầu phải lưu thông tin nhân viên đã nghỉ việc
trong nhiều năm.
Khi
thiết kế các trường để lưu tên nhân viên, hãy nhớ điều đã học về các thực hành
thiết kế cơ sở dữ liệu tốt. Chẳng hạn, bạn lưu dữ liệu tên nhân viên ở dạng bất
khả phân chia nhất khi có thể. Pipefitters quyết định phân tên nhân viên thành
ba phần: tên, tên lót, và họ. Các công ty khác có thể thêm trường để lưu tước
hiệu, chẳng hạn Mr. và Ms., hay phần bổ sung vào họ, chẳng hạn Sr., Jr., và
III.
Tập
trường kế tiếp trong bảng nhân viên Employee của Pipefitters là các trường địa
chỉ và số điện thoại. Bây giờ bạn đã quen thuộc với việc thiết kế các trường
này, vì bạn đã tạo các trường địa chỉ và số điện thoại cho khách hàng và nhà
cung ứng ở các Chương 8 và 9. Các trường địa chỉ và số điện thoại cho bảng nhân
viên Employee cùng các thuộc tính của chúng thì tương tự với các trường trong
bảng khách hàng Customer và nhà cung ứng Vendor mà bạn đã tạo.
Nhóm
trường cuối cùng lưu thông tin để Pipefitters Supply Company có thể tính chi trả
trước và sau thuế cho nhân viên. Thông tin này gồm tiền công mỗi giờ trả cho
nhân viên, số khoản miễn trừ đã khai, tình trạng lập gia đình. Bạn cũng cần một
trường để lưu thời điểm tuyển dụng nhân viên. Pipefitters tổ chức nhân viên theo
chức năng công việc, nên ta sẽ thêm mã chức năng công việc vào bảng nhân viên
Employee. Chú ý là việc lưu mã chức năng công việc vào bảng nhân viên Employee
là phù hợp vì Pipefitters phân công nhân viên theo chức năng công việc và không
có nhân viên nào có nhiều hơn một chức năng. Công ty nào không có chính sách đó
thì phải dùng bảng-quan-hệ vì có thể phát sinh quan hệ nhiều-nhiều.
Trong
bài tập kế, bạn sẽ tạo bảng nhân viên Employee cho Pipefitters Supply Company.
Vì hai bảng khách hàng Customer và nhân viên Employee có nhiều trường chung, ta
sẽ bắt đầu từ bản sao của bảng khách hàng Customer để tiết kiệm thời gian tạo
bảng chứa 16 trường.
BÀI
TẬP 10.5: TẠO TBLEMPLOYEE
1.
Khởi động Microsoft Access. Mở cơ sở dữ liệu Ch10.accdb.
2.
Kích phải tblCustomer trong phần Chapter 8
Tables thuộc Navigation Pane. Kích Copy. Kích phải lần nữa
rồi kích Paste. Vì bảng nhân viên Employee đã có sẵn trong
cơ sở dữ liệu, gõ tblMyEmployee vào hộp thoại
Paste Table As. Kích nút radio Structure Only; rồi
kích OK. Do bài tập này dài, cần thường xuyên lưu thành quả
của bạn.
3.
Mở tblMyEmployee ở góc nhìn Design. Bảng ở phần
Unassigned Objects thuộc Navigation Pane.
4.
Sửa tên khóa chính thành EmployeeID. Sửa Field Size
thành 3, Input Mask thành 000;0_, và
Caption thành Employee #. Nếu Pipefitters bắt đầu mã nhân
viên là 101, bao nhiêu nhân viên có thể lưu trong cơ sở dữ liệu của họ?
5.
Sửa tên trường thứ nhất từ CustomerName
thành EmployeeLastName. Sửa Field Size
thành 30, và Caption thành Last
Name.
6.
Thêm ba dòng trống cho EmployeeFirstName, EmployeeMiddleInitial, và EmployeeSSN.
Kích nút chọn bản ghi bên
cạnh CustomerAddress1 để chọn vị trí thêm dòng
trống đầu tiên. Nhấn và giữ phím Shift rồi nhấn
mũi tên xuống hai lần để làm nổi bật 3 dòng. Kích Insert
Rows trong nhóm Tools để chèn ba dòng trống giữa
EmployeeLastName và CustomerAddress1.
7.
Chép EmployeeLastName vào dòng trống đầu tiên. Kích nút chọn dòng bên
cạnh EmployeeLastName.
Nhấn Ctrl+C để sao chép; kích nút chọn dòng bên
cạnh dòng trống đầu tiên. Nhấn Ctrl+V để dán.
Sửa Field Name thành EmployeeFirstName. Sửa Field Size
thành 15, và Caption thành First
Name.
8.
Nhập EmployeeMiddleInitial vào cột Field Name
của dòng trống tiếp theo và để Data Type là Short Text. Đặt
thuộc tính bằng 1 và thuộc tính Input Mask
là >L. Điều này cho phép nhập một ký tự vào tên lót viết
tắt và buộc chuyển thành chữ hoa. Đặt thuộc tính Caption
là MI. Tại sao bạn để thuộc tính Required
là No?
9.
Ở dòng trống thứ ba, nhập Field Name
là EmployeeSSN cho trường mã an sinh xã hội, và
để Data Type là Short Text. Đặt thuộc tính Field Size
bằng 11 để lưu chin chữ số và hai dấu ngang cho
từng mã an sinh xã hội. Đặt thuộc tính Input Mask
là 000\-00\-0000;0;_ bằng cách gõ hay dùng
Input Mask Wizard (kích thuộc tính Input Mask rồi kích
nút Builder để khởi động wizard) để giúp người
dùng nhập giá trị trường theo định dạng mã an sinh xã hội của Hoa Kỳ, đặt thuộc
tính Caption là SSN, đặt thuộc tính Required
là Yes và Allow Zero Length
là No.
10.
Vì mọi trường địa chỉ và thuộc tính trường số điện thoại của khách hàng và nhân
viên là như nhau, sửa đổi duy nhất là sửa Customer trong từng Field Name của địa
chỉ và số điện thoại thành Employee.
11.
Xóa CustomerCreditLimit và CustomerPrimaryContact. Chọn cả hai trường bằng cách
dùng nút chọn bản ghi như đã làm ở Bước 6. Nhấn
phím Delete để xóa hai dòng đã chọn.
12.
Nhập EmployeeMaritalStatus (tình trạng lập gia
đình của nhân viên) là Field Name kế tiếp. Để Data Type là Short
Text, đặt thuộc tính Field Size bằng 1, đặt thuộc tính
Input Mask là >L, thuộc tính Caption
là Marital Status, và thuộc tính Required
là Yes. Nếu nhân viên không khai tình trạng lập gia đình,
luật Hoa Kỳ yêu cầu nhà tuyển dụng thu thuế tại nguồn theo nhóm độc thân. Vì
thế, ta có thể đặt thuộc tính trị mặc định Default Value
là S (viết tắt của Single, tức độc thân). Để ý
rằng Access tự động bao giá trị đó bằng cặp ngoặc kép khi bạn đặt thuộc tính
Default Value.
Vì
một nhân viên phải hoặc còn độc thân hoặc đã lập gia đình, các giá trị được phép
duy nhất cho trường này là S hay M (viết tắt của Married, tức đã lập gia đình).
Bạn có thể dùng các thuộc tính kiểm tra hợp lệ Validation để giới hạn dữ liệu
nhập vào trường này. Hãy đặt thuộc tính qui tắc kiểm tra hợp lệ Validation Rule
cho trường EmployeeMarialStatus là =M or S. Một lần nữa, các
cặp ngoặc kép tự động bao các giá trị khi bạn ra khỏi ô thuộc tính đó.
Đặt
thuộc tính thông báo kiểm tra hợp lệ Validation Text là Please
enter an M for Married or an S for Single (Hãy nhập M nếu đã
lập gia đình hay S nếu còn độc thân).
13.
Một thông tin khác mà Pipefitters cần để tính thuế thu nhập liên bang thu tại
nguồn federal withholding tax cho nhân viên là số khoản miễn thuế Exemptions do
nhân viên đó khai. Ở dòng trống kế trên cột Field Name, gõ
EmployeeExemptions.
14.
Vì Pipefitters sẽ dùng giá trị EmployeeExemptions để tính lương sau thuế net
pay, bạn phải lưu giá trị đó dưới dạng số. Giá trị của trường này phải là số
nguyên và không lớn hơn 255 (giá trị lớn nhất với số có kích thước một byte). Để
tiết kiệm không gian lưu trữ và tăng tốc độ truy xuất cơ sở dữ liệu, bạn nên
dùng không gian lưu trữ nhỏ nhất cho các trường số. Trong trường hợp này, kích
cỡ trường Byte là hiệu quả nhất. Hãy đặt Data Type cho EmployeeExemptions là
Number. Sửa thuộc tính Field Size của nó thành Byte, và thuộc tính Decimal
Places thành 0. Đặt thuộc tính Input Mask là 0 (cho phép các giá trị từ 0 đến 9
mà không cần dùng qui tắc kiểm tra hợp lệ), thuộc tính Caption là Exemptions,
Required là Yes, Indexed là Yes (Duplicates OK).
15.
Nếu nhân viên không khai số khoản miễn trừ Exemptions, luật thuế của Hoa Kỳ yêu
cầu áp dụng số khoản miễn trừ Exemptions là 0 khi tính thuế thu tại nguồn
Withholding; vì thế, hãy đặt thuộc tính Default Value cho EmployeeExemptions
là 0. Để ý rằng Microsoft Access không tự động bao số 0 bằng
cặp ngoặc kép, vì đó là kiểu dữ liệu số, không phải kiểu dữ liệu văn bản. Cặp
ngoặc kép chỉ cần cho các giá trị văn bản, không phải giá trị số. Khi bạn đặt
thuộc tính Default Value cho trường có kiểu dữ liệu số, Microsoft Access sẽ biết
lưu trị mặc định là số.
16.
Để tính chi trả trước thuế cho nhân viên, ta phải biết tiền công mỗi giờ.
Pipefitters Supply Company trả lương cho mọi nhân viên theo giờ; vì vậy, ta có
thể lưu tiền công mỗi giờ của từng nhân viên vào trường EmployeePayRate. Ở cột
Field Name trống kế tiếp, gõ EmployeePayRate. Đặt Data Type
là Currency, Decimal Places bằng 2,
Caption là Pay Rate, và thuộc tính Required
là Yes.
17.
Chính phủ Hoa Kỳ và nhiều bang qui định tiền công mỗi giờ tối thiểu. Bạn có thể
dùng thuộc tính Validation Rule để ngăn việc nhập giá trị vào trường
EmployeePayRate nhỏ hơn tiền công tối thiểu. Việc dùng thuộc tính Validation
Rule theo cách này là một ví dụ về kiểm tra giới
hạn (limit check), một thủ tục kiểm soát nội bộ nhằm giới
hạn miền giá trị mà một trường có thể chấp nhận. Bạn còn có thể dùng thuộc tính
Validation Rule để qui định giá trị lớn nhất cho trường. Một cách nhân viên nhập
liệu có thể gian lận lương là sửa tiền công mỗi giờ cho kẻ đồng lõa thành một số
lớn rồi phát chi phiếu cho kẻ đó. Kẻ đồng lõa sau đó bỏ việc và biến mất. Nhân
viên nhập liệu cũng có thể vô tình phạm lỗi chi trả quá nhiều cho nhân viên. Mặc
dù không thể ngăn chặn hoàn toàn hành động gian lận hay sai sót này, bạn có thể
giảm thiểu bằng cách đặt chặn trên cho giá trị EmployeePayRate. Nếu giả định
rằng tiền công mỗi giờ tối thiểu theo luật định là $7.50 và tiền công mỗi giờ
cao nhất mà Pipefitters có thể trả là $40.00, bạn có thể đặt chặn dưới và chặn
trên cho trường EmployeePayRate. Hãy đặt thuộc tính Validation Rule cho
EmployeePayRate là >=7.50 And <=40.00, rồi đặt thuộc
tính Validation Text là The Pay Rate you have entered is not
within the allowed range of Pay Rate values (Tiền công mỗi giờ
bạn vừa nhập không nằm trong miền giá trị cho phép của tiền công mỗi giờ). Thuộc
tính Validation Rule này yêu cầu mọi giá trị EmployeePayRate phải nằm trong miền
kiểm tra giới hạn. Thuộc tính Validation Text chứa thông báo lỗi hiển thị trong
hộp thoại nếu người dùng nhập một giá trị bên ngoài miền giá trị.
18.
Nhập EmployeeTypeID vào Field Name của dòng
trống tiếp theo và để Data Type là Short Text. Đặt thuộc
tính Field Size bằng 2, thuộc tính Input Mask
là 00;0;_, thuộc tính Caption là Type,
thuộc tính Required là Yes, thuộc tính Allow Zero Length
là No, và thuộc tính Indexed là Yes
(Duplicates OK).
19.
Trường cuối cùng sẽ lưu thời điểm nhân viên bắt đầu làm việc. Hãy
nhập EmployeeStartDate vào Field Name; Đặt Data
Type là Date/Time, thuộc tính Input Mask
là 99/99/0000;0;_, thuộc tính Caption
là Start Date, Default Value
là Date() (thời điểm hiện tại), và thuộc tính
Required là Yes.
20.
Lưu các thay đổi. Chuyển sang góc
nhìn Datasheet để có thể chép các bản ghi
từ tblEmployee vào bảng của bạn.
Mở tblEmployee ở góc nhìn Datasheet.
Nhấn Ctrl+A để chọn tất cả các bản ghi.
Nhấn Ctrl+C để sao chép các bản ghi. Chuyển
sang tblMyEmployee. Kích nút chọn bản ghi mới rồi
nhấn Ctrl+V để thêm 50 bản ghi vào bảng của
bạn.
Bây
giờ mở tblEmployee ở góc nhìn Design rồi so
sánh bảng của bạn với tblEmployee. Hình 10.7 hiển thị năm
bản ghi nhân viên đầu tiên ở góc nhìn Datasheet. Do chiều rộng của bảng, không
thể hiển thị tất cả các trường ở Hình 10.7.
Hình 10.7 tblEmployee ở góc nhìn
Datasheet.
Mặc
dù bảng nhân viên Employee bạn vừa tạo chứa 16 trường, nó thực sự đơn giản hơn
nhiều so với bảng nhân viên Employee bạn sẽ gặp trong thực tế. Ngoài thông tin
được trình bày trong ví dụ này, bảng nhân viên Employee thường chứa các trường
chức vụ, kỹ năng làm việc, trình độ giáo dục, mã bảo hiểm và hưu trí, thông tin
tài khoản ngân hàng gửi trực tiếp, và thậm chí tên người liên hệ khi khẩn
cấp.
Nhiều
công ty liên hệ từng nhân viên cụ thể với chức năng công việc, dự án, hay bộ
phận. Chẳng hạn, Pipefitters Supply Company quản lý nhân viên theo chức năng
công việc (kiểu nhân viên Employee Type). Ở bài tập trước, bạn đã tránh lãng phí
không gian lưu trữ bằng cách dùng một trường lưu mã kiểu nhân viên Employee Type
thay vì tên kiểu nhân viên. Việc dùng mã kiểu nhân viên khiến việc nhập liệu dễ
dàng hơn và ít phạm lỗi hơn. Phần kế sẽ trình bày bảng kiểu nhân viên Employee
Type ở đó bạn có thể lưu các tên kiểu nhân viên.

0 nhận xét