Chủ Nhật, 6 tháng 11, 2016

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.

Không có nhận xét nào:

Đăng nhận xét