Thứ Tư, 30 tháng 11, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Thuế an sinh xã hội phải trả FICA Payable và thuế chăm sóc y tế phải trả Medicare Payable

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Thuế an sinh xã hội phải trả FICA Payable và thuế chăm sóc y tế phải trả Medicare Payable


Nghĩa vụ đóng thuế an sinh xã hội FICA tax và thuế chăm sóc y tế Medicare được chia đều cho nhà tuyển dụng và nhân viên (ngoại trừ năm 2011 phần thuế an sinh xã hội FICA tax của nhân viên là 4.2% thay vì 6.2%). Pipefitters Supply Company và mọi nhà tuyển dụng đều phải đóng 6.2% thuế an sinh xã hội FICA tax và 1.45% thuế chăm sóc y tế Medicare trên thu nhập trước thuế của nhân viên (bỏ qua khoản FICA trần). Vì thế, thuế an sinh xã hội phải trả FICA Payablee và thuế chăm sóc y tế phải trả Medicare Payable sẽ gấp đôi khoản giữ lại. Vì bạn đã hoàn thành mọi phần việc nhân sự khó cho hệ thông tin kế toán AIS của Pipefitters, phần còn lại chỉ là một truy vấn tính thuế an sinh xã hội phải trả FICA Payable và thuế chăm sóc y tế phải trả Medicare Payable.

BÀI TẬP 10.31: TẠO TRUY VẤN TÍNH FICA VÀ MEDICARE PAYABLE

1. Tạo một truy vấn mới dùng Query Design trên dải lệnh Create. Thêm qryWagesPayable4-SumOfNetPay vào Table Pane.

2. Tạo biểu thức FICA Payable cho ô Field đầu tiên (nhấn Shift+F2 để mở cửa sổ Zoom): FICAPayable: [SumOfFICA] * 2. Mở Property Sheet. Đặt Format là Currency và đặt Caption là FICA Payable.

3. Thêm biểu thức Medicare Payable vào ô Field thứ hai: MedicarePayable: [SumOfMedicare] * 2. Mở Property Sheet. Đặt Format là Currency và đặt Caption là Medicare Payable.

4. Lưu truy vấn là qryFICAandMedicarePayable. Thi hành truy vấn với 3/31/2012. Hãy so kết quả của bạn với Hình 10.34.

Hình 10.34 Tập động dynaset qryFICAandMedicarePayable với 3/31/2012.

Thứ Ba, 29 tháng 11, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Lương phải trả Wages Payable và thuế liên bang thu tại nguồn phải trả FWT Payable

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Lương phải trả Wages Payable và thuế liên bang thu tại nguồn phải trả FWT Payable


Lương phải trả Wages Payable, giống như nợ phải trả Accounts Payable, dựa trên sự mất cân đối giữa các biến cố đối ngẫu. Đó là tổng lương sau thuế net pay cho tất cả các đợt sử dụng lao động trừ tất cả các đợt giải ngân cho việc sử dụng lao động. Lương phải trả Wages Payable còn liên quan đến các khoản phải trả về thuế liên bang thu tại nguồn federal withholding tax FWT, thuế an sinh xã hội FICA, và thuế chăm sóc y tế Medicare. Trong quá trình tính lương phải trả Wages Payable, bạn cũng sẽ tính thuế liên bang thu tại nguồn phải trả FWT Payable, bằng tổng các khoản FWT khấu trừ từ lương nhân viên. Tuy nhiên, vì FICA và Medicare còn có đóng góp của nhà tuyển dụng, bạn sẽ tính thuế an sinh xã hội phải trả FICA Payable và thuế chăm sóc y tế phải trả Medicare Payable trong các tập truy vấn riêng.

BÀI TẬP 10.30: TẠO CÁC TRUY VẤN LƯƠNG PHẢI TRẢ WAGES PAYABLE VÀ THUẾ LIÊN BANG THU TẠI NGUỒN PHẢI TRẢ FWT PAYABLE

Các tính toán lương phải trả Wages Payable và thuế liên bang thu tại nguồn phải trả FWT Payable cần sáu truy vấn.

Ba truy vấn đầu giống qryGrossPay, qryFWTax, và qryNetPay, ngoại trừ ràng buộc thời điểm Between được thay bằng ràng buộc thời điểm nhỏ hơn hay bằng.

1. Tạo một bản sao của qryGrossPay và đặt tên là qryWagesPayable1-GrossPay. Mở qryWagesPayable1-GrossPay ở góc nhìn Design (trong phần Unassigned Objects thuộc Navigation Pane). Sửa tiêu chí cho LAPayPeriodEnded thành <= [End of Period Date]. Thi hành truy vấn và thử dùng thời điểm cuối kỳ là 3/31/2012. Bạn cần có 143 bản ghi trong tập động dynaset. Lưu rồi đóng truy vấn.

2. Tạo một bản sao của qryFWTax, đặt tên là qryWagesPayable2-FWT, rồi mở qryWagesPayable2-FWT ở góc nhìn Design. Kích Show Table trong nhóm Query Setup, kích Queries tab, rồi thêm qryWagesPayable1-GrossPay vào Table Pane. Với tất cả các cột trường trên lưới QBE có qryGrossPay là thuộc tính Table, sửa thuộc tính Table thành qryWagesPayable1-GrossPay. Xóa qryGrossPay khỏi Table Pane. Thi hành truy vấn và thử dùng thời điểm cuối là 3/31/2012. Bạn cần có 143 bản ghi trong tập động dynaset. Lưu rồi đóng truy vấn.

3. Tạo một bản sao của qryNetPay; đặt tên là qryWagesPayable3-NetPay rồi mở qryWagesPayable3-NetPay ở góc nhìn Design. Kích Show Table trong nhóm Query Setup; kích Queries tab; rồi thêm qryWagesPayable1-GrossPayqryWagesPayable2-FWT vào Table Pane. Liên kết qryWagesPayable1-GrossPay với qryWagesPayable2-FWT bằng cách kích và kéo TimeCardID từ danh sách trường này đến danh sách trường kia. Hãy thay thuộc tính Table thích hợp. Xóa qryGrossPayqryFWTax khỏi Table Pane. Thi hành truy vấn và thử dùng thời điểm cuối là 3/31/2012. Bạn cần có 143 bản ghi trong tập động dynaset. Lưu rồi đóng truy vấn.

Hãy tính tổng FWT, FICA, Medicare, và NetPay. Nếu ta giả sử rằng Pipefitters chưa chuyển bất kỳ khoản thuế lương nào đến chính phủ liên bang, tổng FWT cho chu kỳ đó sẽ bằng khoản FWT Payable trên bảng cân đối balance sheet.

4. Kích Create tab rồi kích Query Design trong nhóm Queries. Kích Queries tab; kích kép qryWagesPayable3-NetPay rồi kích nút Close. Thêm FWT, FICA, Medicare, và NetPay vào lưới QBE. Kích Totals trong nhóm Show/Hide. Sửa thuộc tính Total cho từng trường thành Sum. Mở Property Sheet. Thêm các phụ đề Caption trong Hình 10.32. Đặt Format và Decimal Places cho FICA và Medicare là Currency2. Lưu truy vấn là qryWagesPayable4-SumOfNetPay. Thi hành truy vấn với 3/31/2012. Bạn cần có các tổng như Hình 10.32.

Hình 10.32 Tập động dynaset cho các truy vấn FWT Payable và Wages Payable.

Hãy tạo một truy vấn tính tổng tất cả các đợt giải ngân trả lương trước hay vào thời điểm cuối. Ở Chương 9, ta đã liên kết tblCashDisbursement với tblPurchase trong truy vấn để liên kết các đợt giải ngân với các đợt mua hàng. Với việc thêm bảng kiểu giải ngân Cash Disbursement Type vào cơ sở dữ liệu, bạn có thể dùng CDTypeID để chọn các kiểu giải ngân cụ thể.

5. Tạo một truy vấn mới. Thêm tblCashDisbursement vào Table Pane. Thêm CashDisbursementAmount, CashDisbursementDate, và CDTypeID vào lưới QBE. Kích Totals trong nhóm Show/Hide. Sửa thuộc tính Total cho CashDisbursementAmount thành Sum.  Sửa thuộc tính Total cho CashDisbursementDate thành Where, và đặt Criteria của nó là <= [End of Period Date]. Sửa thuộc tính Total cho CDTypeID thành Where, và đặt Criteria của nó là 02. Bạn có thể kiểm chứng CDTypeID bằng cách mở tblCashDisbursementType ở góc nhìn Datasheet.

6. Mở Property Sheet. Nhập CD Payroll cho thuộc tính Caption của CashDisbursementAmount. Lưu truy vấn là qryWagesPayable5-SumOfCDPayroll. Thi hành truy vấn với 3/31/2012. Tập động dynaset ở Hình 10.32. Đóng truy vấn.

Hãy tạo một truy vấn để lấy tổng lương sau thuế net pay trừ tổng các đợt giải ngân. Bạn sẽ dùng hàm Nz như đã dùng để tính các hạng mục trong báo cáo tài chính như nợ phải thu Accounts Receivable và nợ phải trả Accounts Payable.

7. Tạo một truy vấn mới. Thêm qryWagesPayable4-SumOfNetPayqryWagesPayable5-SumOfCDPAyroll vào Table Pane. Thêm SumOfNetPay từ qryWagesPayable4-SumOfNetPay vào lưới QBE. Tạo biểu thức rỗng-thành-0 cho tổng các đợt giải ngân ở ô Field thứ hai trên lưới QBE. Nhấn Shift+F2 để mở cửa sổ Zoom. Gõ CDPayroll: Nz([SumOfCashDisbursementAmount],0) rồi kích OK.

8. Kích ô Field trống kế, mở cửa sổ Zoom, rồi nhập biểu thức lương phải trả Wages Payable: [SumOfNetPay]-[CDPayroll]. Mở Property Sheet rồi thêm các phụ đề Caption ở Hình 10.32. Lưu truy vấn là qryWagesPayable6-WagesPayable. Thi hành truy vấn dùng 3/31/2012 cho thời điểm cuối kỳ. Kết quả ở Hình 10.32. Thi hành lại truy vấn dùng 1/31/2012 cho thời điểm cuối kỳ. Hàm Nz sẽ trả về giá trị 0, nhờ đó lương phải trả Wages Payable có thể tính được. Đóng truy vấn.

THỬ NGHIỆM

Để ý rằng CDPayroll trong qryWagesPayable6-WagesPayable chưa có định dạng tiền tệ. Thông thường bạn có thể chỉnh sửa bằng cách mở Property Sheet rồi chọn Currency là Format. Tuy nhiên, thỉnh thoảng Format combo box trống không và không có thuộc tính Decimal Places! Không may là thỉnh thoảng Access diễn giải sai hay không thể xác định kiểu dữ liệu của một biểu thức, như trường hợp của biểu thức CDPayroll. May là bạn có thể thêm hàm chuyển kiểu vào biểu thức. Hàm CCur sẽ chuyển biểu thức sang kiểu tiền tệ. Dạng của biểu thức là CCur(expr), trong đó expr là biểu thức bạn muốn chuyển sang kiểu tiền tệ. Hãy mở qryWagesPayable6-WagesPayable ở góc nhìn Design. Thêm hàm CCur vào CDPayroll: CCur(Nz([SumOfCashDisbursementAmount],0)). Thi hành lại truy vấn với 3/31/2012. So kết quả của bạn (xem Hình 10.33) với cùng truy vấn ở Hình 10.32 mà không có hàm CCur.

Hình 10.33 qryWagesPayable6-WagesPayable cho 3/31/2012 bằng cách dùng hàm CCur cho biểu thức CDPayroll.

Thứ Hai, 28 tháng 11, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Dẫn xuất thông tin báo cáo tài chính

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Dẫn xuất thông tin báo cáo tài chính


Hoạt động nhân sự sẽ tạo các mục tài chính trên bảng cân đối balance sheet cũng như báo cáo thu nhập income statement. Đầu tiên bạn sẽ dẫn xuất thông tin cho bảng cân đối balance sheet. Các mục trên bảng cân đối balance sheet mà bạn có thể phát sinh từ phần nhân sự thuộc hệ thông tin kế toán AIS của Pipefitters Supply Company là các khoản nợ hiện thời: lương phải trả Wages Payable và thuế lương phải trả Payroll Taxes Payable. Ta có thể báo cáo thuế lương phải trả Payroll Taxes Payable dưới dạng gộp hay từng thành phần đơn lẻ - thuế liên bang thu tại nguồn phải trả FWT Payable, thuế an sinh xã hội phải trả FICA Payable, và thuế chăm sóc y tế phải trả Medicare Payable.

Sau khi phát sinh các mục trên bảng cân đối balance sheet, bạn sẽ sửa các truy vấn bảng cân đối balance sheet để phát sinh khoản chi lương Wages Expense và khoản chi thuế lương Payroll Tax Expense (từng thành phần đơn lẻ hay dưới dạng gộp). Ta tiếp tục dùng cùng qui ước đặt tên như ở các Chương 8 và 9 cho các truy vấn báo cáo tài chính, thường cần nhiều truy vấn để đạt kết quả cuối cùng.

Thứ Sáu, 25 tháng 11, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Form nhập liệu giải ngân cho các chi phiếu trả lương

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Form nhập liệu giải ngân cho các chi phiếu trả lương


Pipefitters Supply Company trả lương nhân viên vào ngày thứ hai sau thời điểm trả lương. Nếu ngày này rơi vào cuối tuần hay ngày nghỉ, các chi phiếu trả lương sẽ được lưu vào nơi an toàn của công ty và được giao vào ngày làm việc kế. Form nhập liệu trả lương sẽ trông giống form nhập liệu giải ngân mà bạn đã tạo ở Chương 9 để chi trả cho nhà cung ứng (xem Hình 9.50). Khác biệt chính là phần trên của form sẽ chứa thông tin trả lương nhân viên thay vì thông tin nhập kho và thông tin liên hệ nhà cung ứng. Trong bài tập kế bạn sẽ tạo một truy vấn chứa các trường trả lương nhân viên để điền thông tin vào phần trên của form.

BÀI TẬP 10.26: TẠO TRUY VẤN THÔNG TIN TRẢ LƯƠNG  NHÂN VIÊN

1. Tạo một truy vấn mới bằng công cụ Query Design. Thêm qryEmployeeName, qryGrossPay, và qryNetPay vào Table Pane. Liên kết qryEmployeeName với qryGrossPay bằng cách kéo EmployeeID từ danh sách trường này đến danh sách trường kia. Liên kết qryNetPay với qryGrossPay bằng cách kéo TimeCardID từ danh sách trường này đến danh sách trường kia.

2. Thêm các trường liệt kê ở Hình 10.30 vào Criteria Pane. Trong khi điền vào Criteria Pane hãy dùng thanh trượt để hiển thị các cột trống.

Hình 10.30 Các trường cho qryFormCDPayrollRecordSourceData.

3. Sắp TimeCardID theo thứ tự tăng Ascending.

4. Lưu truy vấn với tên qryFormCDPayrollRecordSourceData.

5. Thi hành truy vấn cho tháng 01/2012. Đóng truy vấn.

Form nhập chi phiếu trả lương sẽ dùng thiết kế form/subform. Phần trên của form sẽ chứa thông tin trả lương từ qryFormCDPayrollRecordSourceData. Không thể sửa trường nào ở đây vì chúng chỉ dùng tham khảo. Subform chứa tất cả các trường từ tblCashDisbursement. Việc liên kết các trường PayeeID và EventID vào form chính sẽ tự động điền PayeeID và EventID vào subform. Việc dùng dữ liệu dẫn từ tblLaborAcquisition sẽ là một kiểm soát vì các đợt giải ngân trả lương chỉ có thể được ghi nhận cho những đợt sử dụng lao động có mặt trong tblLaborAcquisition.

BÀI TẬP 10.27: DÙNG FORM WIZARD ĐỂ TẠO FORM NHẬP CHI PHIẾU TRẢ LƯƠNG

1. Kích qryFormCDPayrollRecordSourceData trong nhóm Unassigned Objects thuộc Navigation Pane để làm nổi bật tên truy vấn. Kích Create tab rồi kích Form Wizard trong nhóm Forms.

2. Kích nút >> để chuyển tất cả các trường từ qryFormCDPayrollRecordSourceData sang khung Selected Fields.

3. Chọn tblCashDisbursement từ combo box. Kích nút >> để chuyển tất cả các trường sang khung Selected Fields.

4. Kích Next, kích by qryFormCDPayrollRecordSourceData để đặt các trường truy vấn vào form chính và các trường Cash Disbursement vào subform, giống form nhập liệu giải ngân cho nhà cung ứng mà bạn đã tạo ở Chương 9.

5. Kích nút Next hai lần để đến hộp thoại đặt tên các forms. Đặt tên form là frmCashDisbursementPayroll và tên subform là fsubCashDisbursementPayroll. Kích nút Finish để đóng hộp thoại và mở frmCashDisbursementPayroll ở góc nhìn Form.

6. Gõ 1/1/2012 vào hộp thoại thời điểm đầu kỳ Beginning of Period Date và 1/31/2012 vào hộp thoại thời điểm cuối kỳ End of Period Date. Form chính sẽ mở ở góc nhìn Form và subform mở ở góc nhìn Datasheet. Đóng form.

Mặc dù form này đã có thể hoạt động, ta sẽ cải thiện giao diện của nó, và thêm một số thành phần điều khiển ở hai bài tập kế.

BÀI TẬP 10.28: CẢI THIỆN SUBFORM NHẬP CHI PHIẾU TRẢ LƯƠNG

1. Mở fsubCashDisbursementPayroll ở góc nhìn Design. Nó nằm ở nhóm Unassigned Objects thuộc Navigation Pane. Mở Property Sheet. Chọn Form từ Property Sheet combo box nếu nó chưa được chọn.

2. Vì chỉ có một chi phiếu trả lương sẽ được viết cho từng phiếu chấm công time card, bạn sẽ loại nhiều thành phần điều khiển di chuyển của subform bằng cách thực hiện các sửa đổi sau cho các thuộc tính Format của nó:

  • Đặt Record Selectors là No.
  • Đặt Navigation Buttons là No.
  • Đặt Scroll Bars là Neither.
  • Đặt Close Button là No.
  • Đặt Min Max Button là None.


3. Tất cả các chi phiếu trả lương được rút từ tài khoản trả lương, CashAccountID 102. Kích thành phần điều khiển CashAccountID để chọn nó trong Property Sheet combo box. Kích Data tab rồi đặt thuộc tính Default Value là “102”. Vì người dùng không được viết chi phiếu trả lương từ bất kỳ tài khoản nào khác, hãy sửa thuộc tính Enabled thành No và Locked thành Yes. Kích Other tab rồi sửa Tab Stop thành No. Các thay đổi này sẽ ngăn người dùng nhập sai tài khoản tiền mặt cho các chi phiếu trả lương.

4. Kích thành phần điều khiển CDTypeID. Kích Data tab rồi đặt thuộc tính Default Value là “02”, đây là mã kiểu giải ngân cho các đợt giải ngân trả lương. Thực hiện các sửa đổi cho CDTypeID như bạn đã làm cho CashAccountID ở Bước 3.

5. Các giá trị PayeeID EventID sẽ được đặt qua liên kết giữa subform và form. Hãy khóa các giá trị này như bạn đã làm ở Bước 3.

6. Xem subform ở góc nhìn Datasheet. Kích nút chọn Datasheet; kích More menu trong nhóm Records trên dải lệnh Home; kích Field Width; rồi kích Best Fit để điều chỉnh tất cả các độ rộng cột.

7. Đóng subform. Để ý rằng bạn không thể dùng nút đóng (dấu X ở góc bên phải form) vì bạn đã khóa nó. Kích phải fsubCashDisbursementPayroll tab; kích Close. Kích Yes để lưu các thay đổi.

BÀI TẬP 10.29: CẢI THIỆN FORM NHẬP DỮ LIỆU CHI PHIẾU TRẢ LƯƠNG

Hãy dùng Hình 10.31 làm tham khảo giao diện cho form của bạn.

Hình 10.31 frmCashDisbursementPayroll hoàn chỉnh ở góc nhìn Design và góc nhìn Form.

1. Mở frmCashDisbursementPayroll ở góc nhìn Design, mở Property Sheet. Sửa đầu đề thành Payroll Check Data Entry. Kích và kéo thanh Detail xuống dưới để bạn có thể nắm được nút điều chỉnh kích cỡ ở đáy nhãn đầu đề và giảm chiều cao quá mức của ô nhãn. Dời ô văn bản đầu đề sang phải 1/4-inch. Kéo thanh Detail ngược lên cho đến khi chạm ô nhãn đầu đề.

2. Kích và kéo con trỏ qua toàn bộ thành phần điều khiển và nhãn trong phần Detail ở trên subform. Sửa các thuộc tính Format sau trên Property Sheet để khóa các thành phần điều khiển:

  • Đặt Back Style là Transparent.
  • Đặt Border Style là Transparent.


3. Kích vào vùng trống trên form để khử việc chọn các đối tượng. Chọn tất cả các ô văn bản (không phải nhãn) trong phần Detail của form bằng cách kích và kéo con trỏ trên từng ô, hay giữ phím Shift xuống rồi kích từng ô văn bản. Kích Data tab trong Property Sheet. Sửa Enabled thành No và Locked thành Yes. Các thành phần điều khiển đã được khóa. Chỉ các thành phần điều khiển trong subform là còn hoạt động.

4. Để ý rằng PayeeID không được tự động điền vào subform vì Form Wizard không tạo liên kết giữa EmployeeID trong form và PayeeID trong subform. Vì thế, bạn sẽ thêm liên kết này. Trở về góc nhìn Design. Kích fsubCashDisbursementPayroll trong combo box trên Property Sheet. Kích Data tab; kích Link Master Fields để hiển thị nút Builder rồi kích nó. Chọn EmployeeID trong Master Fields combo box thứ hai và PayeeID trong Child Fields combo box thứ hai. Kích OK.

5. Định cỡ và bố trí lại các nhãn và thành phần điều khiển trong form cho giống Hình 10.31. Tất cả các nhãn được canh phải và in đậm. Góc nhìn Layout cho phép bạn nhìn subform ở góc nhìn Datasheet và cho bạn khả năng dời và định cỡ lại nó.

6. Lưu các thay đổi trên form rồi đóng lại.

7. Nhập dữ liệu tblCashDisbursement cho các chi phiếu trả lương từ Ch10.xlsx bằng cách dùng phương pháp tương tự Bài tập 10.11. tblCashDisbursement cần có 174 bản ghi sau khi nhập liệu. Mở frmCashDisbursementPayroll ở góc nhìn Form để xem form trông ra sao sau khi đã nhập liệu.

Giờ đây bạn đã hoàn tất việc tạo các form nhập để thu thập dữ liệu từ các hoạt động của qui trình nhân sự HR, bạn sẽ dẫn ra thông tin hữu ích cho các mục đích nội bộ cũng như bên ngoài.

Thứ Tư, 23 tháng 11, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Các truy vấn tính lương

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Các truy vấn tính lương


Lương trước thuế gross pay gồm hai phần. Phần đầu là tính bình thường. Để tính, bạn chỉ việc nhân lương một giờ của từng nhân viên với số giờ làm việc trong giờ thuộc chu kỳ trả lương của họ. Vì bạn có lương một giờ trong tblEmployee và số giờ làm việc trong giờ theo chu kỳ trả lương ở tblLaborAcquisition, bạn có thể truy vấn hai bảng này để tính lương trong giờ. Việc tính lương ngoài giờ chỉ phức tạp hơn một tí vì lương một giờ phụ trội gấp 1.5 lần lương một giờ của nhân viên đó.

Dữ liệu mẫu của Pipefitters Supply Company sẽ minh họa việc tính lương khi bạn tạo các truy vấn này. Bảng nhân viên Employee của Pipefitters có 50 bản ghi nhân viên, và bảng sử dụng lao động Labor Acquisition của họ chứa dữ liệu của ba chu kỳ trả lương theo tháng. Bạn sẽ dùng chu kỳ trả lương của tháng một để tính trong các bài tập này.

BÀI TẬP 10.19: TÍNH LƯƠNG TRƯỚC THUẾ GROSS PAY

1. Kích Queries Design trong nhóm Queries trên dải lệnh Create. Thêm tblEmployee tblLaborAcquisition vào Table Pane.

2. Liên kết giữa EmployeeID trong tblEmployee và EmployeeSupervisorID trong tblLaborAcquisition phải được xóa để thi hành truy vấn này vì Access sẽ áp đặt đồng thời cả hai qui tắc nối nội. Các bản ghi thỏa các yêu cầu này là các bản ghi sử dụng lao động Labor Acquisition trong đó nhân viên và giám sát viên là cùng một người! Vì ta không cần thông tin giám sát viên trong truy vấn này, hãy kích liên kết rồi nhấn phím Delete. Bây giờ, tblEmployee tblLaborAcquisition chỉ liên kết qua EmployeeID trong truy vấn này.

3. Từ tblLaborAcquisition, thêm EmployeeID, TimeCardID, và LAPayPeriodEnded vào lưới QBE. Đặt ô Sort của EmployeeID là Ascending.

4. Vì lương trước thuế gross pay được dùng trong nhiều tính toán ngoài việc tính số tiền ghi trên chi phiếu cho nhân viên (chẳng hạn, khoản chi lương trên báo cáo thu nhập), tiêu chí cho LAPayPeriodEnded cần chứa chu kỳ thời gian (chẳng hạn tháng, quí, năm). Giống như bạn đã tạo truy vấn cho các hạng mục trong báo cáo thu nhập, bạn sẽ dùng hàm Between với tham biến thời điểm đầu và tham biến thời điểm cuối. Hãy gõ Between [Beginning of Period Date] and [End of Period Date] làm tiêu chí Criteria cho ô LAPayPeriodEnded trong lưới QBE.

5. Hãy thêm dữ liệu để tính lương trong giờ và lương ngoài giờ. Kích kép EmployeePayRate từ tblEmployee. Kích kép LARegularTime LAOvertime từ tblLaborAcquisition. Lưu truy vấn với tên qryGrossPay.

6. Ở cột trống đầu tiên, kích ô Field; kích phải rồi chọn Build… để mở công cụ tạo biểu thức Expression Builder. Tạo biểu thức tính lương trong giờ: RegularPay: [EmployeePayRate] * [LARegularTime]. Nhớ rằng bạn có thể kích kép các tên trường trong danh sách Expression Categories để thêm chúng vào ô biểu thức. Kích OK khi tạo xong.

7. Để ý là biểu thức RegularPay được làm nổi bật. Hãy nhấn Ctrl+C; kích ô Field trống kế rồi nhấn Ctrl+V. Hãy sửa biểu thức RegularPay để tính lương ngoài giờ. Nhấn Shift+F2 để mở cửa sổ Zoom. Vì ngoài giờ được tính bằng 1.5 lần lương trong giờ, lương ngoài giờ có thể là kết quả có nhiều hơn hai chữ số thập phân. Lỗi làm tròn có thể mất nhiều giờ sửa chữa trong các hệ thống kế toán, và tính lương có thể là nơi dễ xảy ra lỗi làm tròn nhất. Một cách khử lỗi làm tròn tại thời điểm tính toán là làm tròn kết quả về hai chữ số thập phân. Hãy sửa biểu thức trong cửa sổ Zoom thành OvertimePay: Round([EmployeePayRate] * 1.5 * [LAOvertime],2), rồi kích OK. Lưu truy vấn. Xem Chương 4, Bài tập 4.6 để có diễn giải chi tiết hơn.

8. Hãy dùng công cụ tạo biểu thức Expression Builder để tạo biểu thức lương trước thuế gross pay trong ô Field kế: GrossPay: [RegularPay] + [OvertimePay]. Kích OK khi tạo xong.

9. Hãy sửa định dạng và phụ đề cho ba biểu thức bạn đã tạo. Kích RegularPay; mở Property Sheet; đặt Format là Currency và đặt Caption là Regular Pay. Hãy dùng định dạng tương tự cho hai biểu thức kia. Đặt Caption cho OvertimePay là Overtime Pay, và Caption cho GrossPay là Gross Pay. Lưu truy vấn.

10. Hãy kiểm chứng việc tính lương là đúng bằng cách thi hành truy vấn và tính lương trước thuế gross pay bằng tay cho một hay hai nhân viên đã làm ngoài giờ trong tháng một năm 2012. Khi bạn thi hành truy vấn, gõ 1/1/2012 cho thời điểm đầu kỳ và 1/31/2012 cho thời điểm cuối kỳ và bạn cần có 45 bản ghi (xem Hình 10.23). Mặc dù bạn có thể gõ 1/31/2012 cho cả hai thời điểm, việc chỉ định toàn bộ tháng một sẽ báo động lỗi cho người dùng nếu thời điểm khác 1/31/2012 xuất hiện trong tập động dynaset. Nếu một số nhãn không thấy được hết bạn có thể điều chỉnh độ rộng của tất cả các cột cùng lúc bằng cách kích nút chọn Datasheet, chọn Column Width từ More menu trong nhóm Records, rồi kích Best Fit. Lưu rồi đóng truy vấn.

Hình 10.23 Tập động dynaset của truy vấn tính lương trước thuế gross pay.

Dĩ nhiên, việc tính lương trước thuế gross pay chỉ là phần đầu của việc tính lương. Phần thứ hai và phức tạp hơn là tính các khấu trừ khỏi lương trước thuế gross pay để tính lương sau thuế net pay. Bước kế tiếp là sửa qryGrossPay để tính các khấu trừ và lương sau thuế net pay. Các khấu trừ lương gồm thuế, bảo hiểm, đóng góp, và nhiều hạng mục khác. Qui tắc tính các khấu trừ nói chung rơi vào một trong bốn phân loại sau:

1. Khấu trừ khoản cố định. Dễ tính các khấu trừ này vì chúng là khoản cố định trong từng chu kỳ trả lương. Ví dụ về các khấu trừ này là phí bảo hiểm y tế, phí bảo hiểm nhân thọ, và đóng góp từ thiện được nhân viên đồng ý chẳng hạn United Way.

2. Khấu trừ phần trăm cố định. Các khấu trừ này là phần trăm cố định của thu nhập trước thuế ở từng chu kỳ trả lương. Ví dụ về các khấu trừ này là thuế chăm sóc y tế Medicare, và các khoản thuế thu tại nguồn withholding tax trong nhiều thành phố và địa hạt của Hoa Kỳ được nhà tuyển dụng giữ lại. Một số thuế thu nhập của bang cũng là phần trăm cố định của toàn bộ thu nhập.

3. Khấu trừ phần trăm biến thiên. Các khấu trừ này tương tự khấu trừ phần trăm cố định ngoại trừ phần trăm thay đổi theo mức thu nhập, tình trạng lập gia đình, và số khoản miễn trừ đã khai. Thuế thu nhập liên bang Hoa Kỳ mà nhà tuyển dụng phải khấu trừ từ lương nhân viên là ví dụ điển hình của loại thuế này. Nhiều bang có qui định thuế thu tại nguồn tương tự qui định của liên bang, nên cũng rơi vào loại này.

4. Khấu trừ phần trăm cố định bị chặn trên. Các khấu trừ này là phần trăm cố định trên thu nhập trước thuế cho đến khi chạm trần. Ví dụ điển hình của loại khấu trừ này là thuế an sinh xã hội FICA tax. Nhà tuyển dụng sẽ khấu trừ một phần trăm cố định trên thu nhập trước thuế cho đến khi đạt đến hạn mức FICA trong năm đó. Một số bang, chẳng hạn California, yêu cầu nhân viên đóng quĩ bảo hiểm thất nghiệp cũng theo cách này.

Kiểu khấu trừ đầu tiên, khoản cố định trong từng chu kỳ trả lương, thì dễ mô hình. Bạn chỉ cần thêm một trường vào bảng nhân viên Employee –chỉ dấu cho biết nhân viên đó có bị khấu trừ không – để kích hoạt tính toán. Kiểu khấu trừ thứ hai, phần trăm cố định, còn dễ thi triển hơn nữa. Bạn chỉ cần đưa phần trăm cố định vào truy vấn tính lương. Kiểu khấu trừ thứ ba, phần trăm biến thiên, có thể khó thi triển vì cần thêm một hay nhiều bảng. Các bảng này chứa nhiều giá trị phần trăm khác nhau và các điểm tại đó chúng chuyển từ phần trăm này sang phần trăm khác. Kiểu khấu trừ thứ tư, phần trăm cố định bị chặn trên, thậm chí còn khó thi triển hơn. Nó cần thêm một truy vấn để tính tổng từ đầu năm đến nay rồi so tổng đó với giá trị trần. Giá trị trần có thể được lưu vào một bảng riêng hay đưa vào truy vấn.

Việc tính lương của Pipefitters Supply Company sẽ gồm các kiểu khấu trừ thứ hai và thứ ba. Các tính toán phần trăm cố định là thuế chăm sóc y tế Medicare và thuế an sinh xã hội FICA tax. Khấu trừ thuế an sinh xã hội FICA tax thật ra là kiểu thứ tư, vì đó là phần trăm cố định cho đến khi chạm trần hàng năm. Tuy nhiên, dữ liệu mẫu của Pipefitters Supply Company đã được thiết kế để không có nhân viên nào vượt trần FICA. Vì thế, bạn có thể mô hình thuế an sinh xã hội FICA tax cho Pipefitters là khấu trừ phần trăm cố định. Khấu trừ thuế thu nhập liên bang mà Pipefitters phải giữ lại từ lương nhân viên sẽ minh họa một số vấn đề phức tạp khi mô hình kiểu khấu trừ thứ ba. Khấu trừ này thường được gọi là thuế liên bang thu tại nguồn federal withholding tax FWT hay thuế thu nhập liên bang thu tại nguồn federal income tax FIT.

Làm ơn để ý rằng các tính toán khấu trừ thuế được mô hình trong chương này không có ý thực hiện đầu đủ và chính xác. Luật thuế doanh nghiệp thường xuyên thay đổi và tùy thuộc bang. Mục đích ở đây là để bạn thực hành việc tạo bảng và truy vấn để bạn có thể áp dụng vào các nhu cầu người dùng cụ thể và xử lý các yêu cầu biến thiên của chính phủ.

Trước khi tạo truy vấn để tính lương sau thuế net pay, bạn sẽ tạo hai bảng chứa dữ liệu cần thiết để tính thuế liên bang thu tại nguồn withholding tax FWT: một bảng lưu phần trăm thuế thu tại nguồn withholding tax FWT và bảng thứ hai lưu các khoản miễn trừ. Bạn đã có thể đưa các phần trăm và khoản miễn trừ vào qryNetPay, nhưng việc đặt chúng vào bảng riêng sẽ giúp việc cập nhật dễ dàng hơn rất nhiều.

BÀI TẬP 10.20: TẠO BẢNG MIỄN TRỪ EXEMPTION

Phần trăm thuế liên bang thu tại nguồn withholding tax FWT phụ thuộc một phần vào lương trước thuế gross pay trừ khoản miễn thuế. Trong bài tập này bạn tạo bảng tra cứu để tìm khoản miễn thuế của nhân viên dựa trên số khoản miễn thuế mà họ khai, được lưu trong trường EmployeeExemptions thuộc tblEmployee.

1. Kích Create tab; kích Table Design trong nhóm Tables. Đặt tên trường đầu tiên là ExemptionNumber rồi kích Primary Key trong nhóm Tools. Đặt Data Type là Number. Đặt các thuộc tính trường sau: Field Size – Byte; Decimal Places – 0; Input Mask – 9;;_ Caption – Num. of Exempts; Required – Yes; Indexed – Yes (No Duplicates). Điều này cho phép Pipefitters sửa chính sách của họ để cho phép không nhiều hơn chín khoản miễn thuế (xem Bài tập 10.5, Bước 14) mà không thay đổi cấu trúc bảng.

2. Field Name thứ hai là ExemptionAmount. Đặt Data Type là Currency. Đặt các thuộc tính trường sau: Format – Currency; Decimal Places – 2; Caption – Exemption Amt.; Required – Yes; Indexed – No.

3. Lưu bảng với tên tblExemption. Hãy nhập liệu. Bạn có thể nhập liệu từ Ch10.xlsx file như đã làm cho tblLaborAcquisition ở Bài tập 10.11 hay chuyển sang góc nhìn Datasheet rồi sao chép và dán nó từ tblExemption worksheet trong Ch10.xlsx.

4. Lưu rồi đóng bảng.

Để ý rằng các khoản miễn thuế đều là bội số của $304.17. Bạn đã có thể dễ dàng tính khoản miễn thuế bên trong truy vấn lương sau thuế net pay bằng cách nhân số khoản miễn thuế của nhân viên với $304.17. Tuy nhiên, nhiều cơ quan thuế sẽ giảm thuế nếu lương vượt quá một giá trị nào đó, đôi khi giảm về $0. Đây là một lý do nữa tại sao bạn cần biết cách mô hình các khoản miễn thuế bằng bảng tra cứu.

BÀI TẬP 10.21: TẠO BẢNG THUẾ THU TẠI NGUỒN WITHHOLDING

Một bảng bạn cần xác định phần trăm để tính thuế liên bang thu tại nguồn federal withholding tax FWT là bảng Withholding. Đây là bảng tra cứu phức tạp hơn. Thông tin nhóm thuế được dùng để tính thuế liên bang thu tại nguồn federal withholding tax FWT của từng nhân viên được dựa trên tình trạng lập gia đình của họ (lưu trong bảng tblEmployee) và lương trước thuế gross pay trừ khoản miễn thuế.

1. Tạo bảng mới bằng cách dùng Table Design trong nhóm Tables. Gõ MaritalStatus vào dòng đầu tiên cột Field Name. Ở dòng thứ hai, gõ FWTBracket (nhóm thuế liên bang thu tại nguồn) vào cột Field Name.

2. Tạo khóa chính phức hợp. Kích nút chọn bản ghi của MaritalStatus, nhấn và giữ phím Ctrl rồi kích nút chọn bản ghi của FWTBracket. Sau đó kích Primary Key trong nhóm Tools.

3. Dùng Hình 10.24 để đặt kiểu dữ liệu và thuộc tính trường cho MaritalStatus FWTBracket. Thêm các thuộc tính ở phần cuối của Hình 10.24. Tại sao Input Mask cho MaritalStatus >L?

Hình 10.24 Các khóa chính và thuộc tính cho tblWithholding.

4. Lưu bảng với tên tblWithholding.

5. Nhập liệu. Bạn có thể chuyển sang góc nhìn Datasheet rồi nhập bằng tay dữ liệu ở Hình 10.25, hay sao chép và dán nó từ Ch10.xlsx file.

Hình 10.25 Dữ liệu cho tblWithholding được hiển thị ở góc nhìn Datasheet.

6. Đóng bảng.

Để ý ở Hình 10.25 rằng ta thật sự lưu hai bảng, mỗi bảng cho từng tình trạng hồ sơ. Đây là một trong những lợi ích của việc dùng khóa chính phức hợp. Bạn thậm chí có thể có nhiều hơn hai tình trạng lập gia đình hay các trạng thái khác. Chẳng hạn, Bộ luật Thuế Hoa Kỳ U.S. Tax Code chứa bốn nhóm thuế dựa trên tình trạng lập gia đình: có gia đình và cùng khai thuế, có gia đình nhưng khai thuế riêng, chủ hộ, và độc thân. Hơn nữa, bạn có thể thêm nhiều nhóm thuế cho từng tình trạng lập gia đình bằng cách thêm dòng vào bảng. Khả năng có thể dễ dàng mở rộng bảng (chẳng hạn không phải sửa cấu trúc bảng hay thêm bảng mới) được gọi là khả năng mở rộng scalability.

BÀI TẬP 10.22: LIÊN KẾT TBLEXEMPTION VÀ TBLWITHHOLDING VỚI TBLEMPLOYEE

1. Đóng tất cả các bảng đang mở. Kích Relationships trên dải lệnh Database Tools rồi thu gọn Navigation Pane.

2. Thêm tblExemption tblWithholding vào cửa sổ Relationships dùng công cụ Show Table trong nhóm Relationships.

3. Thu gọn dải lệnh để hiển thị toàn bộ các danh sách trường. Kích phải thanh Menu rồi kích Minimize the Ribbon.

4. Định cỡ lại các bảng mới để chỉ hiển thị các khóa chính rồi dời chúng đến gần danh sách trường bảng Employee.

5. Tạo liên kết Exemption-Employee. Kéo từ khóa chính trong tblExemption, ExemptionNumber, đến khóa ngoại tương ứng, EmployeeExemptions, trong tblEmployee.

6. Đảm bảo là các thuộc tính đúng xuất hiện trong các bảng bạn kéo từ và kéo đến. Kiểu quan hệ ở đáy hộp thoại cần là one-to-many. Đánh dấu Enforce Referential IntegrityCascade Update Related Fields. Kích nút Create.

7. Tạo liên kết Withholding-Employee. Kéo từ khóa chính bộ phận MaritalStatus trong tblWithholding đến khóa ngoại tương ứng, EmployeeMaritalStatus, trong tblEmployee. Đảm bảo là các thuộc tính đúng xuất hiện trong các bảng bạn kéo từ và kéo đến. MaritalStatus trong tblWithholding không duy nhất vì nó là một phần của khóa chính phức hợp. EmployeeMaritalStatus trong tblEmployee không duy nhất vì nó là khóa ngoại. Vì thế, kiểu quan hệ là many-to-many, Access hiển thị là Indeterminate ở đáy hộp thoại. Bạn không thể áp đặt tính toàn vẹn tham chiếu cho quan hệ indeterminate. Kích nút Create để kết thúc.

8. Bạn có thể cô lập qui trình nhân sự HR bằng cách loại các bảng và quan hệ không liên quan đến nó. Kích danh sách trường tblPurchase rồi nhấn phím Delete. tblPurchase và các quan hệ của nó không còn được hiển thị, nhưng các liên kết bạn đã tạo vẫn tồn tại. Hãy xóa tblVendor bằng cách tương tự. Đừng thử kích các quan hệ rồi xóa chúng. Việc xóa quan hệ trong cửa sổ Relationships sẽ xóa mất quan hệ đó thay vì che dấu nó.

9. Khi làm xong, cửa sổ Relationships của bạn cần giống Hình 10.26.

Hình 10.26 Cửa sổ Relationships hoàn tất cho qui trình nhân sự HR.

10. Đóng cửa sổ Relationships và kích Yes trong hộp thoại để lưu các thay đổi.

Trong ba bài tập tới bạn sẽ thêm lương trước thuế gross pay trừ khoản miễn thuế vào qryGrossPay, tạo truy vấn tính thuế liên bang thu tại nguồn federal withholding tax FWT, và tạo truy vấn lương sau thuế net pay.

BÀI TẬP 10.23: THÊM PHÉP TÍNH LƯƠNG TRƯỚC THUẾ GROSS PAY TRỪ KHOẢN MIỄN THUẾ VÀO QRYGROSSPAY.

1. Phục hồi Navigation Pane và dải lệnh nếu bạn chưa làm. Mở qryGrossPay ở góc nhìn Design. Nó nằm ở phần Unassigned Objects thuộc Navigation Pane.

2. Thêm danh sách trường tblExemption vào Table Pane. Dùng thanh cuộn thuộc Criteria Pane (lưới QBE) để cuộn sang phải cho đến khi thấy cột trường GrossPay và ít nhất hai cột trống. Kích kép ExemptionAmount để thêm nó vào cột trống đầu tiên trong Criteria Pane. Lưu truy vấn.

3. Tạo biểu thức để trừ ExemptionAmount khỏi GrossPay. Tuy nhiên, kết quả không được bé hơn 0. Nếu không, kết quả sẽ không rơi vào khoảng chặn dưới và chặn trên của bất kỳ nhóm thuế nào thuộc tblWithholding (xem Hình 10.25). Vì thế, bạn sẽ thêm hàm IIf để biểu thức không cho phép số âm. Hàm IIf trông như sau: IIf(biểu-thức, phần-đúng, phần-sai). IIF sẽ ước lượng biểu-thức. Nếu đúng, giá trị của biểu thức trong phần-đúng được trả về. Nếu sai, giá trị của biểu thức trong phần-sai được trả về. Hãy kích ô Field ở cột trống đầu tiên trên lưới QBE rồi kích Builder trong nhóm Query Setup. Thêm vào biểu thức sau: GrossLessExempt: IIf([GrossPay] - [ExemptionAmount] > 0, [GrossPay] - [ExemptionAmount], 0). Bạn có thể tận dụng khả năng của công cụ tạo biểu thức Expression Builder bằng cách thực hiện các bước sau nhằm giúp bạn tránh lỗi và tiết kiệm thời gian nhập các biểu thức phức tạp.

a. Gõ GrossLessExempt: vào cửa sổ Expression.

b. Kích dấu + cạnh Functions trong cột Expression Elements rồi kích Built-In Functions.

c. Trong cột Expression Values, cuộn đến IIf rồi kích kép nó để thêm nó vào cửa sổ Expression.

d. Kích <<Expr>> rồi nhấn phím Delete. Access đã chèn phần này vì nó dự kiến có một toán tử (chẳng hạn +, -) giữa hai thành phần của một biểu thức.

e. Kích qryGrossPay trong cột Expression Elements để hiển thị các trường truy vấn trong cột Expression Categories.

f. Thay các chỗ trống trong lệnh IIf bằng cách kích để làm nổi bật chỗ đó rồi gõ hay kích kép các trường trong Expression Categories. Chẳng hạn, kích <<expression>> trong cửa sổ Expression để làm nổi bật nó. Kích kép GrossPay thời gian cột Expression Categories để thay, trong cửa sổ Expression gõ dấu -; kích kép ExemptionAmount để chèn nó vào biểu thức tại vị trí con trỏ; rồi gõ >0 để kết thúc phần đầu của hàm. Hãy hoàn thành phần còn lại của hàm theo cách tương tự.

Bạn còn có thể sao chép và dán bên trong biểu thức để tiết kiệm thời gian và tránh lỗi.

4. Thi hành truy vấn cho tháng 01/2012 rồi kiểm chứng xem truy vấn có tính đúng GrossLessExempt hay không. Chẳng hạn, các khoản được làm nổi bật ở Hình 10.27 cho thấy các khoản miễn thuế vượt quá lương trước thuế gross pay. Vì thế, lệnh IIf trả về $0.00 thay vì giá trị âm. Đóng truy vấn.

Hình 10.27 Một phần của tập động dynaset qryGrossPay.

BÀI TẬP 10.24: TẠO TRUY VẤN ĐỂ TÍNH THUẾ LIÊN BANG THU TẠI NGUỒN FEDERAL WITHHOLDING TAX FWT

Trong bài tập này bạn tạo truy vấn để bắt chước hàm tra cứu Lookup trong Excel. Bạn sẽ dùng tổ hợp tình trạng lập gia đình MaritalStatus của nhân viên và khoản GrossLessExempt để xác định nhóm FWT thích hợp, rồi thực hiện hàng loạt tính toán dùng giá trị từ các trường bên trong nhóm FWT đó.

1. Kích Create tab rồi kích Query Design trong nhóm Queries. Thêm tblEmployee, tblWithholding, và qryGrossPay vào Table Pane. Định cỡ lại và dời các danh sách trường để bạn có thể thấy toàn bộ các trường trong danh sách trường. Bạn có thể mở rộng Table Pane bằng cách nắm lấy thanh giữa nó và Criteria Pane rồi kéo xuống dưới.

2. Từ danh sách trường qryGrossPay, thêm EmployeeID, TimeCardID, và LAPeriodEnded, vào Criteria Pane. Sắp EmployeeID theo thứ tự tăng Ascending.

3. Thêm EmployeeMaritalStatus từ danh sách trường tblEmployee để giới hạn nhóm FWT theo tình trạng lập gia đình của nhân viên.

4. Dựa trên tình trạng lập gia đình của nhân viên, hãy chọn nhóm thuế FWT ở đó GrossLessExempt rơi vào khoảng từ chặn dưới FWT đến chặn trên FWT. Thêm GrossLessExempt từ qryGrossPay FWTBracket từ tblWithholding vào Criteria Pane. Lưu truy vấn và đặt tên là qryFWTax. Để chỉ định đúng nhóm thuế FWT, hãy thêm vào ô Criteria của GrossLessExempt biểu thức sau: Between [FWTLowerLimit] And [FWTUpperLimit]. Bạn có thể gõ biểu thức vào ô Zoom bằng cách nhấn Shift+F2, hay bạn có thể dùng công cụ tạo biểu thức Expression Builder (kích Builder trong nhóm Query Setup).

5. Chọn dữ liệu thích hợp từ nhóm thuế FWT để tính khoản thuế FWT. Thêm FWTLowerLimit, FWTRate, và FWTBracketAmt từ danh sách trường tblWithholding vào Criteria Pane.

6. Lưu các thay đổi. Thi hành truy vấn cho tháng 01/2012. Dùng Hình 10.26 để kiểm tra độ chính xác của nhóm thuế Tax Bracket, chặn dưới Lower Limit, và khoản thuế cơ bản FWT Base Amt. cho năm nhân viên đầu tiên.

7. Dùng công cụ tạo biểu thức Expression Builder để tính khoản thuế FWT. Vì tính toán FWT có thể cho giá trị với nhiều hơn hai vị trí thập phân, bạn sẽ thêm hàm Round vào tính toán của mình. Trở về góc nhìn Design. Kích ô Field trong cột trống đầu tiên trên Criteria Pane rồi kích Builder trong nhóm Query Setup. Nhập FWT: Round((([GrossLessExempt] - [FWTLowerLimit]) * [FWTRate]) + [FWTBracketBaseAmt],2). Kích OK khi nhập xong.

8. Lưu truy vấn rồi thi hành nó cho tháng 01/2012 để kiểm chứng độ chính xác của các khoản thuế FWT. Hình 10.28 trình bày một phần tập động dynaset. Đóng truy vấn.

Hình 10.28 Tập động dynaset qryFWTax.

Công thức tính lương sau thuế net pay bằng lương trước thuế Gross Pay - FWT - FICA - Medicare. Bạn đã tính lương trước thuế gross pay ở Bài tập 10.18 và FWT ở Bài tập 10.23. Vì thuế an sinh xã hội FICA tax và thuế chăm sóc y tế Medicare dựa trên phần trăm cố định của lương trước thuế gross pay – phần trăm thuế an sinh xã hội FICA tax là 6.2% và Medicare là 1.45% - bạn có tất cả thông tin cần để tính lương sau thuế net pay. Nhớ rằng ta đang lờ đi chặn trên FICA để đơn giản hóa tính toán.

BÀI TẬP 10.25: TẠO TRUY VẤN ĐỂ TÍNH LƯƠNG SAU THUẾ NET PAY

1. Kích Create tab rồi kích Query Design trong nhóm Queries.

2. Thêm qryFWTax qryGrossPay vào Table Pane. Định cỡ lại và dời các danh sách trường để bạn có thể thấy tất cả các trường trong từng danh sách trường.

3. Tạo liên kết giữa hai truy vấn bằng cách kích và kéo TimeCardID từ danh sách trường này đến TimeCardID ở danh sách trường kia. Bạn cần thấy liên kết giữa qryFWTax qryGrossPay. Tại sao lại cần liên kết này?

4. Kích kép EmployeeID, TimeCardID, LAPayPeriodEnded, và GrossPay từ danh sách trường qryGrossPay để thêm chúng vào Criteria Pane. Sắp EmployeeID theo thứ tự tăng Ascending. Thêm FWT từ danh sách trường qryFWTax vào Criteria Pane rồi lưu truy vấn với tên qryNetPay.

5. Nhập biểu thức FICA vào ô Field trống trong lưới QBE dùng hàm Round: FICA: Round([GrossPay] * 0.062,2). Thi hành truy vấn dùng 1/1/201231/1/2012 làm thời điểm đầu và thời điểm cuối để kiểm tra biểu thức. Các giá trị ở cột FICA trong tập động dynaset kết quả phải không được có nhiều hơn hai vị trí thập phân (xem Hình 10.29).

Hình 10.29 Tập động dynaset qryNetPay.

6. Nhập biểu thức Medicare vào ô Field kế FICA: Medicare: Round([GrossPay] * 0.0145,2). Lưu truy vấn.

7. Mở Property Sheet rồi đặt Format là Currency và Decimal Places bằng 2 cho cả FICA và Medicare. Lưu truy vấn.

8. Dùng công cụ tạo biểu thức Expression Builder để nhập biểu thức lương sau thuế net pay: NetPay: [GrossPay] - [FWT] - [FICA] - [Medicare]. Kích OK để dòng công cụ tạo biểu thức Expression Builder. Đặt Format là Currency và Decimal Places bằng 2; đặt Caption là Net Pay.

9. Lưu truy vấn rồi thi hành với tháng 01/2012. Tập động dynaset của bạn cần giống Hình 10.29. Đóng truy vấn.

Thứ Năm, 17 tháng 11, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Tính lương

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Tính lương


Đến nay ở Chương 10 bạn đã biết cách nhập và bảo trì thông tin nhân sự. Tuy nhiên, mục tiêu xử lý giao dịch chính của qui trình nhân sự HR là tính lương (chẳng hạn, lương trước thuế gross pay, thuế liên bang thu tại nguồn withholding tax, lương sau thuế net pay) và nắm bắt dữ liệu giải ngân là các chi phiếu trả lương.

Truy vấn là công cụ hữu ích để tính lương. Thật vậy, nếu phần mềm quản lý cơ sở dữ liệu không có ngôn ngữ truy vấn, bạn không thể dùng nó để tính lương. Vì tính lương có thể rất phức tạp, bạn sẽ học cách tạo nhiều truy vấn để tính lương từng bước một. Sau đó bạn sẽ học cách dùng các truy vấn này để tạo báo cáo bảng lương, báo cáo thu nhập nhân viên, và báo cáo chi phiếu trả lương. Bạn có thể mở rộng cách tiếp cận từng bước này cho các hệ tính lương phức tạp hơn khi làm kế toán.

Thứ Tư, 16 tháng 11, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Bảng giải ngân Cash Disbursement

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Bảng giải ngân Cash Disbursement


Bạn đã tạo bảng giải ngân Cash Disbursement ở Chương 9. Như các biến cố khác, nó liên kết với một tài nguyên, tài khoản tiền mặt Cash Account. Như đã giải thích ở Chương 9, ta sẽ dùng bảng tài khoản tiền mặt Cash Account đó cho các chương còn lại.

Trong phần mô hình dữ liệu của chương này bạn đã tạo quan hệ đối ngẫu giữa sử dụng lao động Labor Acquisition và giải ngân Cash Disbursement cũng như quan hệ tham gia ngoại giữa giải ngân Cash Disbursement và nhân viên Employee (xem Hình 10.6). Tuy nhiên, giải ngân Cash Disbursement đã có quan hệ đối ngẫu với mua hàng Purchase và quan hệ tham gia ngoại với nhà cung ứng Vendor (xem Hình 9.4). Hình 10.18 trình bày thiết kế AIS của Pipefitters liên quan đến giải ngân Cash Disbursement dựa trên các mô hình dữ liệu cho qui trình mua hàng - chi tiền (Hình 9.4) và qui trình nhân sự HR (Hình 10.6). Ta đã loại các quan hệ tham gia nội với nhân viên Employee, tài nguyên tồn kho Inventory, và quan hệ dòng vào Inflow giữa mua hàng Purchase và tồn kho Inventory vì chúng không phù hợp với thảo luận ở đây.

Hình 10.18 Mô hình dữ liệu mua hàng - chi tiền kết hợp với nhân sự HR.

Để ý ở Hình 10.18 là bảng giải ngân Cash Disbursement có một khóa ngoại cho từng biến cố đối ngẫu: TimeCardID và InventoryReceiptID. Để hòa hợp các mô hình dữ liệu từ cả hai qui trình tác nghiệp ta sẽ thực hiện một tương nhượng khi thi triển (implementation compromise). Ta đã có thể chỉ cần thêm trường TimeCardID vào bảng giải ngân Cash Disbursement hiện thời. Nhưng như vậy thì một nửa các trường này sẽ để trống (giá trị null), và đó là một thiết kế cơ sở dữ liệu tồi. Hơn nữa, ở Chương 11 ta sẽ thêm đợt trả nợ Loan Repayment (debt financing) và chia lãi Dividend Payment (equity financing) vào giải ngân Cash Disbursement. Ta đã có thể thêm hai trường nữa vào bảng, nhưng vậy thì ba phần tư các ô khóa ngoại sẽ để trống! Một phương án khác là tạo bảng-quan-hệ cho các đợt giải ngân Cash Disbursement liên quan đến trả lương, nhưng điều đó làm cơ sở dữ liệu phức tạp hơn và làm truy vấn cơ sở dữ liệu khó khăn hơn. Ưu điểm duy nhất của hai phương án này là bạn vẫn có thể áp dụng tính toàn vẹn tham chiếu, và đó là một kiểm soát nội bộ hiệu quả. Nhưng bạn không thể đặt thuộc tính trường bắt buộc là Yes cho các khóa ngoại này, và đó cũng là một kiểm soát nội bộ hiệu quả.

Tuy nhiên, ta có thể loại bỏ các vấn đề của hai giải pháp trên bằng việc dùng một khóa ngoại chung (generic foreign key), EventID, cho mọi biến cố đối ngẫu liên quan. Điều này cho phép trường chứa InventoryReceiptID, TimeCardID, LoanID, hay StockIssueID. Lập luận tương tự sẽ áp dụng vào việc sửa trường VendorID thành khóa ngoại chung PayeeID, mã bên nhận khoản chi. Mặc dù tính toàn vẹn tham chiếu không thể được áp dụng – EventID (hay PayeeID) có thể đến từ nhiều bảng khác nhau – combo box (hay các thành phần điều khiển khác) có thể được thêm vào forms nhập để bù cho việc thiếu vắng tính toàn vẹn tham chiếu.

Một vấn đề khác của việc dùng trường khóa ngoại chung trong tblCashDisbursement là làm sao phân biệt được kiểu giải ngân này với kiểu giải ngân khác. Giải pháp là thêm bảng kiểu giải ngân Cash Disbursement Type rồi thêm một khóa ngoại vào bảng giải ngân Cash Disbursement đại diện cho kiểu giải ngân. Bảng kiểu giải ngân Cash Disbursement Type sẽ có một khóa chính, kiểu biến cố liên quan đến đợt giải ngân, và kiểu tác nhân ngoại tham gia vào kiểu giải ngân Cash Disbursement Type đó.

Mô hình dữ liệu cải biên được trình bày ở Hình 10.19. Để ý là hai trường khóa ngoại biến cố, InventoryReceiptID và TimeCardID, đã được thay bằng một trường, EventID. Trường này sẽ được dùng trong Chương 11 cho các biến cố tài chính liên quan đến giải ngân. Cũng để ý là hai trường khóa ngoại tác nhân ngoại, VendorID và EmployeeID, đã được thay bằng một trường, PayeeID, mã bên nhận khoản chi. PayeeID cũng sẽ được dùng trong Chương 11 để được các khóa ngoại cho bên cho vay Creditor và nhà đầu tư Investor. Ta đã loại bỏ nhu cầu về bảng kiểu bên nhận khoản chi Payee Type vì mỗi kiểu giải ngân Cash Disbursement Type còn chỉ rõ kiểu bên nhận khoản chi cùng với kiểu biến cố liên quan.

Hình 10.19 Mô hình dữ liệu tổ hợp với tương nhượng khi thi triển là bảng kiểu giải ngân Cash Disbursement Type.

BÀI TẬP 10.16: SỬA BẢNG GIẢI NGÂN CASH DISBURSEMENT

1. Mở tblCashDisbursement ở góc nhìn Design. Nó định vị ở phần Unassigned Objects thuộc Navigation Pane.

2. Thực hiện các thay đổi sau đối với trường VendorID và các thuộc tính của nó:

  • Sửa tên Field thành PayeeID.
  • Sửa Input Mask thành 9999;;_ để cho phép nhập đến bốn chữ số - kích cỡ cho trường PayeeID dài nhất của Pipefitters.
  • Sửa Caption thành Payee #.


3. Thực hiện các thay đổi sau đối với trường InventoryReceiptID và các thuộc tính của nó:

  • Sửa tên Field thành EventID.
  • Sửa Input Mask thành 999999;;_ để cho phép nhập đến sáu chữ số - kích cỡ cho trường EventID dài nhất của Pipefitters.
  • Sửa Caption thành Event #.


4. Thêm trường CDTypeID rồi nhập CDTypeID cho các đợt giải ngân:

  • Chèn một dòng trống sau CashAccountID. Kích nút chọn dòng PayeeID; kích phải rồi chọn Insert Rows.
  • Trong dòng mới, gõ CDTypeID vào ô Field Name. Để Data Type là Short Text.
  • Đặt Field Size bằng 2 và đặt Input Mask là 00;;_.
  • Nhập CD Type # cho Caption. Lưu các thay đổi và chuyển sang góc nhìn Datasheet.
  • Nhập 01 vào CD Type # cho từng bản ghi trong tổng số 31 bản ghi. Trở về góc nhìn Design.
  • Đặt thuộc tính Required là Yes, thuộc tính Allow Zero Length là No, và để thuộc tính Indexed được đặt là Yes (Duplicates OK).


5. Kiểm tra để thấy rằng bạn có tất cả các trường liệt kê ở Hình 10.20. Lưu các thay đổi rồi đóng bảng.

Hình 10.20 Bảng giải ngân Cash Disbursement hoàn tất ở góc nhìn Design và góc nhìn Datasheet.

Kế đến, bạn sẽ tạo bảng kiểu giải ngân Cash Disbursement Type. Nó tương tự bảng kiểu nhân viên Employee Type bạn đã tạo trước đây trong chương. Nó có khóa chính hai chữ số và trường tên, EventTypeName. Nó còn có một trường tên cho kiểu tham gia ngoại, PayeeTypeName.

BÀI TẬP 10.17: TẠO BẢNG KIỂU GIẢI NGÂN CASH DISBURSEMENT TYPE

1. Tạo một bảng mới bằng cách dùng Table Design trên dải lệnh Create. Đặt tên trường khóa chính đầu tiên là CDTypeID, để Data Type là Short Text và kích Primary Key trong nhóm Tools. Đặt các thuộc tính trường: Field Size – 2; Input Mask – 00;;_ Caption – CD Type #; Required – Yes; Allow Zero Length – No; Indexed – Yes (No Duplicates).

2. Đặt tên trường thứ hai là EventTypeName. Để Data Type là Short Text. Đặt các thuộc tính trường sau: Field Size – 25; Caption – Related Event; Required – Yes; Allow Zero Length – No; Indexed – No.

3. Đặt tên trường thứ ba là PayeeTypeName. Để Data Type là Short Text. Đặt các thuộc tính trường sau: Field Size – 25; Caption – Payee Type; Required – Yes; Allow Zero Length – No; Indexed – No.

4. Lưu bảng với tên tblCashDisbursementType.

5. Chuyển sang góc nhìn Datasheet để nhập các bản ghi kiểu giải ngân Cash Disbursement Type trong Hình 10.21. Đóng bảng.

Hình 10.21 Dữ liệu cho tblCashDisbursementType được hiển thị ở góc nhìn Datasheet.

BÀI TẬP 10.18: TẠO VÀ CẬP NHẬT CÁC QUAN HỆ VỚI TBLCASHDISBURSEMENT

1. Đóng tất cả các bảng đang mở. Mở cửa sổ Relationships (trên dải lệnh Database Tools) và thu gọn Navigation Pane. Cửa sổ Relationship cần giống Hình 10.14.

2. Kích Show Table trong nhóm Relationships, thêm các bảng sau bằng cách kích kép chúng: tblCashAccount, tblCashDisbursement, tblCashDisbursementType, tblPurchase, và tblVendor. Kích nút Close.

3. Kích phải Menu Bar rồi kích Collapse the Ribbon để làm cửa sổ Relationships rộng hơn. Di chuyển và định cỡ lại các bảng cho giống Hình 10.22.

Hình 10.22 Cửa sổ Relationships với tất cả các quan hệ mới và đã được sửa.

4. Loại bỏ tính toàn vẹn tham chiếu khỏi liên kết mua hàng – giải ngân Purchase-Cash Disbursement và liên kết nhà cung ứng – giải ngân Vendor- Cash Disbursement. Kích phải liên kết; kích Edit Relationships, xóa ô Enforce Referential Integrity, rồi kích OK. Chú ý rằng bạn không thể cập nhật lan truyền các trường liên quan (cascade update related fields) nếu không áp đặt tính toàn vẹn tham chiếu. Mặc dù việc lan truyền các thay đổi trong khóa chính đến các trường liên quan là một thực hành cơ sở dữ liệu tốt, điều đó hiếm khi cần thiết. Tuy nhiên, ta có thể dùng các truy vấn cập nhật để thực hiện điều tương tự, mặc dù kém hiệu quả hơn.

5. Tạo các liên kết mới giữa tblCashDisbursement và các bảng sau: tblCashDisbursementType, tblLaborAcquisition, và tblEmployee. Nhớ kéo từ khóa chính đến khóa ngoại thích hợp.

6. Sau khi bạn kích và kéo khóa chính đến khóa ngoại, hộp thoại Edit Relationsips xuất hiện. Khi bạn kéo EmployeeID trong tblEmployee đến PayeeID trong tblCashDisbursement, kích No trong hộp thoại để tạo quan hệ mới. Đảm bảo rằng các thuộc tính đúng xuất hiện trong các bảng bạn kéo từ và kéo đến. Kiểu quan hệ ở đáy hộp thoại phải luôn là one-to-many. Chỉ đánh dấu Enforce Referential IntegrityCascade Update Related Fields cho liên kết giữa tblCashDisbursement tblCashDisbursementType. Kích Create trong hộp thoại.

7. Sau khi hoàn thành bài tập này, cửa sổ Relationships cần giống Hình 10.22. Đóng cửa sổ Relationships và kích nút Yes trong hộp thoại để lưu các thay đổi.

Mặc dù bảng giải ngân Cash Disbursement đã hoàn tất, bạn chưa thể tạo form trả lương vì trước tiên bạn cần các truy vấn để tính lương trước thuế gross pay, thuế an sinh xã hội FICA tax, thuế chăm sóc y tế Medicare tax, và thuế liên bang thu tại nguồn federal withholding tax (FWT). Các hạng mục này sẽ được diễn giải trong phần kế.

Thứ Ba, 15 tháng 11, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Ghi nhận tiền trả cho nhân viên

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Ghi nhận tiền trả cho nhân viên


Đến nay trong chương, bạn đã biết cách mà Pipefitters Supply Company có thể bảo trì các bản ghi nhân viên và nhập liệu vào phiếu chấm công trong AIS để ghi nhận các biến cố sử dụng lao động. Vào cuối mỗi chu kỳ trả lương, sau khi Pipefitters nhận được giờ công từ nhân viên, nhân viên muốn được nhận lương theo thời gian làm việc của họ. Phần này mô tả một trong nhiều cách dùng thông tin đã thu thập trong các bảng thuộc qui trình nhân sự HR để viết chi phiếu. Tuy nhiên, không như qui trình mua hàng - chi tiền, việc xác định tiền lương nhân viên cần nhiều tính toán phức tạp và hai bảng phân loại mà bạn chưa tạo ra. Nhưng trước khi giải thích cách tính lương, ta cần tìm cách sửa hệ thông tin kế toán AIS của Pipefitters để cho phép biến cố giải ngân Cash Disbursement có quan hệ đối ngẫu với nhiều hơn một kiểu biến cố tăng kinh tế (chẳng hạn mua hàng, sử dụng lao động) và nhiều hơn một kiểu tác nhân ngoại (chẳng hạn nhà cung ứng, nhân viên là nhà cung ứng lao động).

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

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Form nhập thời gian đã làm việc

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Form nhập thời gian đã làm việc


Bạn có thể tạo form nhập liệu cho bảng sử dụng lao động Labor Acquisition nhằm hỗ trợ việc nhập thời gian làm việc của nhân viên. Form nhập thời gian làm việc sẽ dùng các trường tên nhân viên từ bảng nhân viên Employee nhằm cung cấp thêm một kiểm tra hợp lệ giúp nhân viên nhập liệu phát hiện lỗi. Bạn sẽ thiết kế form nhập thời gian làm việc để hiển thị tên nhân viên khi người dùng nhập mã nhân viên. Điều này cho phép người dùng kiểm tra tên hiển thị so với tên nhân viên trên phiếu chấm công. Ở Bài tập 10.13 bạn sẽ tạo một truy vấn để ghép EmployeeFirstName, EmployeeMiddleInitial, và EmployeeLastName, dùng trong Bài tập 10.14 nhằm tạo form nhập thời gian làm việc chứa đặc trưng kiểm soát này.

BÀI TẬP 10.13: TẠO TRUY VẤN GHÉP CÁC TRƯỜNG TÊN NHÂN VIÊN

1. Kích Create tab rồi kích Query Design trong nhóm Queries. Thêm tblEmployee vào Table Pane. Đó là bảng duy nhất bạn cần cho truy vấn này.

2. Kích kép EmployeeID trong danh sách trường tblEmployee để thêm nó vào Criteria Pane.

3. Di chuyển con trỏ đến ô Field ở cột kế trên Criteria Pane; kích phải để hiển thị shortcut menu rồi chọn Zoom. Ô Zoom cho phép bạn thấy mọi thứ bạn nhập vào ô Field. Nhập EmployeeName: EmployeeFirstName & " " & EmployeeMiddleInitial & ". " & EmployeeLastName vào ô Zoom. Kích OK để đóng ô Zoom.

4. Kích Property Sheet trong nhóm Show/Hide. Gõ Name vào ô thuộc tính Caption.

5. Lưu truy vấn với tên qryEmployeeName. Thi hành truy vấn. Sau khi điều chỉnh độ rộng cột cho EmployeeName, kết quả truy vấn của bạn cần giống Hình 10.15. Đóng truy vấn.

Hình 10.15 qryEmployeeName ở góc nhìn Datasheet.

BÀI TẬP 10.14: TẠO FORM NHẬP THÔNG TIN SỬ DỤNG LAO ĐỘNG

1. Kích tblLaborAcquisition trong nhóm Unassigned Objects thuộc Navigation Pane. Kích Create tab rồi kích Form Wizard trong nhóm Forms. Hộp thoại Form Wizard đầu tiên xuất hiện.

2. Kích nút >> để chuyển tất cả các trường thuộc tblLaborAcquisition sang khung Selected Fields.

3. Chọn Query: qryEmployeeName từ Tables/Queries combo box. Kích EmployeeID trong khung Selected Fields để thêm EmployeeName ngay bên dưới nó. Kích kép EmployeeName trong khung Available Fields để thêm nó vào các mục được chọn. Kích nút Next.

4. Kích Next lần nữa để chấp nhận việc mặc định xem dữ liệu theo tblLaborAcquisition.

5. Chọn Tabular rồi kích Next. Đặt tên form là frmLaborAcquisition.

6. Kích nút Finish để xem form ở góc nhìn Form. Nó cần giống Hình 10.16.

Hình 10.16 frmLaborAcquisition ở góc nhìn Form sau khi dùng Form Wizard.

BÀI TẬP 10.15 CẢI THIỆN FORM NHẬP THÔNG TIN SỬ DỤNG LAO ĐỘNG DO WIZARD PHÁT SINH

1. Mở frmLaborAcquisition ở góc nhìn Design rồi mở Property Sheet.

Hãy sửa truy vấn đằng sau form.

2. Chọn Form từ Property Sheet combo box rồi kích Data tab. Kích nút Builder của Record Source để mở truy vấn đằng sau form. Cuộn sang phải để tìm LAPayPeriodEnded. Kích và kéo nó sang cột ở bìa trái của lưới QBE. Đặt giá trị Sort cho LAPayPeriodEnded và TimeCardID là Ascending. Điều này giúp dễ phát hiện các phiếu chấm công không theo thứ tự. Lưu các thay đổi. Nếu tò mò bạn có thể thi hành truy vấn và xem kết quả trong form. Đóng Query Builder và kích Yes.

Thêm combo box cho giám sát viên employee supervisor nhằm giúp việc nhập EmployeeSupervisor dễ dàng hơn cũng như để kiểm chứng là tên của giám sát viên và EmployeeID là đúng.

3. Tạo một bản sao của qryMaterialsHandler ở phần Chapter 8 Queries thuộc Navigation Pane. Kích qryMaterialsHandler trong Navigation Pane. Nhấn Ctrl+C (sao chép) và Ctrl+V (dán); đặt tên là qryAdministrator. Mở qryAdministrator ở góc nhìn Design (trong phần Unassigned Objects thuộc Navigation Pane). Sửa tiêu chí cho EmployeeTypeID thành 20, EmployeeTypeID cho quản trị viên. Lưu rồi đóng truy vấn.

4. Trở về frmLaborAcquisition. Thu gọn Navigation Pane. Kích thành phần điều khiển EmployeeSupervisorID rồi nhấn phím Delete để loại nó khỏi form. Kích Design tab rồi kích Combo Box trong nhóm Controls. Di chuyển con trỏ đến góc trái trên của vùng trống rồi kích để khởi động Combo Box Wizard. Kích nút Next. Kích nút radio Queries rồi kích kép qryAdministrator từ danh sách truy vấn. Trong hộp thoại kế chọn tất cả các trường ngoại trừ EmployeeTypeID: kích >> để thêm tất cả các trường rồi kích < để loại EmployeeTypeID. Kích Next. Sắp thứ tự tăng Ascending theo EmployeeLastName, EmployeeFirstName, và EmployeeMiddleInitial. Kích Next. Định cỡ lại các cột Employee #MI vì độ rộng dữ liệu là cố định. Kích nút Next hai lần. Kích nút radio thứ hai rồi chọn EmployeeSupervisorID từ danh sách combo box. Kích nút Next. Kích Finish.

5. Xóa nhãn của combo box rồi định vị lại combo box. Dùng các công cụ Size trong Size/Space menu trên Arrange tab để combo box có độ rộng tương tự nhãn Supervisor #. Dùng các công cụ Align để dời combo box xuống bên dưới nhãn và cách đều các thành phần điều khiển khác.

Hãy tham khảo Hình 10.17 để sửa giao diện và chức năng của form, kể cả các mục trong nhãn bước kế. Nhớ là bạn có thể sửa định dạng ở góc nhìn Layout, nó cho phép bạn nhìn thấy dữ liệu trong lúc sửa giao diện của form.

Hình 10.17 frmLaborAcquisition hoàn chỉnh ở góc nhìn Design và góc nhìn Form.

6. Sửa đầu đề form thành Time Worked Data Entry.

7. Sửa các nhãn. Thu gọn Navigation Pane để thấy được toàn bộ form rồi sửa độ rộng form thành 8.5 inches. Đặt thuộc tính in đậm Bold và canh giữa Center cho nhãn. Dời nhãn Overtime Hours sang bìa phải của đầu đề. Chọn các nhãn Regular HoursOvertime Hours. Trong Size/Space menu (trên dải lệnh Arrange), chọn To Fit từ phần Size của menu. Chọn tất cả các nhãn rồi chọn Equal Horizontal từ phần Spacing của Size/Space menu.

8. Điều chỉnh các thành phần điều khiển trường ở góc nhìn Layout. Định cỡ lại các thành phần điều khiển trường bằng cách kéo nút định cỡ phải sang trái để loại khoảng trống quá mức. Canh giữa các thành phần điều khiển bên dưới nhãn tương ứng của chúng.

9. Canh giữa các mã ID bên trong các thành phần điều khiển của chúng bằng cách chọn Center trong nhóm Font. Chọn tất cả các thành phần điều khiển trong phần Detail của form. Trên Property Sheet sửa Special Effect trên Format tab thành Sunken.

10. Thêm Alternate Back Color vào phần Detail (trên Format tab cho phần Detail) để tạo các dòng có màu xen kẽ. Điều này giúp mắt dễ theo dõi các bản ghi hơn. Text Description đã được chọn (xem Hình 10.17, nhưng bạn có thể thử nghiệm với các tổ hợp Back Color và Alternate Back Color khác nhau).

11. Làm EmployeeName không thể sửa. Tham khảo các Bước 7 và 8 trong Bài tập 9.25. Sửa Special Effect thành Flat.

12. Sắp lại thứ tự tab. Xem các thay đổi ở góc nhìn Form.

13. Lưu các thay đổi rồi đóng form.

Ví dụ của Pipefitters Supply Company có một số giả định đơn giản hóa. Dữ liệu mẫu chỉ chứa 3 tháng dữ liệu cho 50 nhân viên. Mọi nhân viên được trả theo giờ gồm trong giờ và chỉ có một cách trả ngoài giờ. Phân hệ nhân sự HR của một AIS phức tạp hơn sẽ quản lý lũy kế (accrual) và thời gian nghỉ phép, nghỉ có lương, nghỉ không lương, và nghỉ bệnh. Phân hệ lương của các AIS thường phải quản lý nhiều kiểu ngoài giờ (chẳng hạn, trên 8 giờ mỗi ngày, trên 40 giờ mỗi tuần, giờ làm việc vào ngày nghỉ) và tính lương theo các phương pháp khác với tính theo giờ. Tuy nhiên, với cách làm hiện nay trong chương, bạn có thể phát sinh nhiều thông tin hữu ích để báo cáo nội bộ hay ra bên ngoài.

Thứ Năm, 10 tháng 11, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Bảng sử dụng lao động Labor Acquisition

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Bảng sử dụng lao động Labor Acquisition


Trong phần này, bạn sẽ học cách tạo bảng chấm công để lưu số giờ trong và ngoài giờ làm việc cho từng nhân viên theo từng chu kỳ trả lương. Ta giả định hai điều quan trọng: Pipefitters tính lương theo giờ, và họ trả lương cho mọi nhân viên mỗi tháng một lần bằng một chi phiếu.

Bạn sẽ cần một khóa chính để nhận diện duy nhất thời gian đã làm việc của từng nhân viên trong từng chu kỳ trả lương. Pipefitters dùng phiếu chấm công để ghi nhận thời gian đã làm việc của nhân viên và các phiếu chấm công được đánh số tuần tự bằng năm chữ số; bạn sẽ dùng mã phiếu chấm công làm khóa chính.

Có các cách khác để tạo khóa chính cho bảng sử dụng lao động Labor Acquisition. Vì Pipefitters đã có mã nhân viên cho từng nhân viên và mỗi nhân viên có một bản ghi duy nhất cho từng chu kỳ trả lương, bạn có thể tạo khóa chính phức hợp gồm trường mã nhân viên và trường chu kỳ trả lương để nhận diện duy nhất từng bản ghi trả lương. Tuy nhiên, mã phiếu chấm công được chọn vì việc có các tài liệu được đánh số tuần tự là có thêm một kiểm soát. Các phiếu chấm công cho một chu kỳ trả lương bất kỳ không được nhảy cóc, phiếu chấm công đầu tiên cho chu kỳ trả lương tiếp theo phải là số tiếp theo. Có thể truy vấn để kiểm tra các phiếu chấm công có vi phạm qui định này không – để chứng tỏ đã có sai sót hay bất thường.

Bảng sử dụng lao động Labor Acquisition còn chứa hai trường để lưu số giờ đã làm việc – một trường lưu số giờ làm việc trong giờ, một trường lưu số giờ làm việc ngoài giờ. Pipefitters chỉ dùng một hệ số để tính lương ngoài giờ, gấp 1.5 lần lương trong giờ. Hơn nữa, bạn có thể giả định rằng quản lý viên của Pipefitters khi nhập dữ liệu vào bảng này, họ đã tính trước số giờ trong và ngoài giờ của nhân viên từ phiếu chấm công.

Trong Bài tập 10.11 bạn sẽ tạo bảng sử dụng lao động Labor Acquisition cho Pipefitters Supply Company. Bảng sử dụng lao động Labor Acquisition còn minh họa một số đặc trưng kiểm soát nội bộ giúp giảm lỗi và các bất thường khi Pipefitters xử lý việc trả lương.

BÀI TẬP 10.11: TẠO BẢNG SỬ DỤNG LAO ĐỘNG LABOR ACQUISITION

1. Tạo bảng mới bằng cách dùng Table Design trên dải lệnh Create. Đặt tên trường đầu tiên là TimeCardID, khóa chính. Để Data Type là Short Text và đặt Field Size bằng 5. Nhập Input Mask là 00000;0;_ và đặt Caption là Time Card #. Đặt thuộc tính Required là Yes, Allow Zero Length là No, đặt thuộc tính Indexed là Yes (No Duplicates), rồi kích Primary Key trong nhóm Tools.

2. Thêm năm trường còn lại và các thuộc tính được liệt kê ở Hình 10.12.

Để ý rằng EmployeeID và EmployeeSupervisorID đều là khóa ngoại từ tblEmployee. Như được minh họa ở Hình 10.6, EmployeeID là liên kết đến nhân viên làm tác nhân ngoại trong tblEmployee, trong khi EmployeeSupervisorID là liên kết tham gia nội giữa tblLaborAcquisitiontblEmployee. Hơn nữa LAPayPeriodEnded được lập chỉ mục indexed để giúp các truy vấn trên chu kỳ trả lương pay period được nhanh hơn. Cuối cùng, qui tắc kiểm tra hợp lệ cho số giờ đã làm trong và ngoài giờ không chỉ ngăn việc nhập số giờ lớn hơn giá trị cho phép (185 = 23 ngày x 8 giờ mỗi ngày với thời gian trong giờ; và 200 giờ ngoài giờ là chính sách của công ty), qui tắc kiểm tra hợp lệ còn ngăn quản trị viên tình cờ nhập số âm.

Hình 10.12 Các khóa ngoại và thuộc tính cho tblLaborAcquisition.

3. Lưu file. Đặt tên là tblLaborAcquisition. Đóng bảng.

4. Nhập liệu từ Ch10.xlsx Excel file vào tblLaborAcquisition. Kích Excel trong nhóm Import & Link trên dải lệnh External Data. Kích nút Browse để định vị Ch10.xlsx. Kích kép Ch10.xlsx.

5. Kích nút radio tùy chọn thứ hai Append a copy of records to the table: Chọn tblLaborAcquisition từ combo box. Kích OK.

6. Trong hộp thoại kế, làm nổi bật worksheet tblLaborAcquisition. Kích Next hai lần.

7. Trong hộp thoại cuối, tblLaborAcquisition cần đã được nhập vào ô Table:. Kích Finish. Mở tblLaborAcquisition ở góc nhìn Datasheet để kiểm chứng có tất cả 143 bản ghi đã được nhập vào cơ sở dữ liệu (xem Hình 10.13).

Hình 10.13 tblLaborAcquisition ở góc nhìn Datasheet.

Hình 10.6 cho thấy có hai liên kết giữa bảng sử dụng lao động Labor Acquisition và bảng nhân viên Employee của Pipefitters Supply Company. Cả hai khóa ngoại trong tblLaborAcquisition, EmployeeID và EmployeeSupervisorID đều liên kết với EmployeeID trong tblEmployee. Trong bài tập kế, bạn sẽ áp dụng tính toàn vẹn tham chiếu lên các liên kết này để ngăn người dùng nhập thời gian đã làm việc cho mã nhân viên không tồn tại trong tblEmployee. Đặc trưng kiểm soát nội bộ này, thường được gọi là kiểm tra tồn tại (existence check) hay kiểm tra hợp lệ (validity check), có thể giảm sai sót và bất thường khi xử lý việc trả lương. Bài tập 10.12 nhắc lại việc tạo đặc trưng kiểm soát này. Nhớ đóng tblLaborAcquisition trước khi làm bài tập.

BÀI TẬP 10.12: LIÊN KẾT TBLLABORACQUISITION VỚI TBLEMPLOYEE

1. Trên dải lệnh Database Tools, kích Relationships trong nhóm Show/Hide rồi thu gọn Navigation Pane.

2. Thêm tblLaborAcquisition vào cửa sổ Relationship. Kích Show Table trong nhóm Relationships; kích kép tblLaborAcquisition; rồi kích Close.

3. Định cỡ lại bảng tblLaborAcquisition để hiển thị toàn bộ tên bảng và tất cả các thuộc tính. Dời bảng đến giữa cửa sổ Relationship để nhất quán với định dạng mô hình tài nguyên, biến cố, và tác nhân (REA). Tham khảo Hình 10.14.

Hình 10.14 Cửa sổ Relationship trước và sau khi thêm liên kết thứ hai giữa tblEmployeetblLaborAcquisition.

4. Tạo liên kết đầu tiên giữa các bảng. Kéo khóa chính ở bảng tblEmployee đến khóa ngoại tương ứng, EmployeeID, trong tblLaborAcquisition.

5. Sau khi bạn kích và kéo khóa chính đến khóa ngoại cửa sổ Edit Relationships xuất hiện. Đảm bảo rằng các thuộc tính đúng xuất hiện trong các bảng bạn đã kéo từ và kéo đến. Kiểu quan hệ ở đáy hộp thoại phải luôn là one-to-many. Đánh dấu Enforce Referential IntegrityCascade Update Related Fields. Cuối cùng, kích Create trong hộp thoại.

6. Lặp lại các Bước 4 và 5, thay EmployeeID bằng EmployeeSupervisorID trong tblLaborAcquisition. Để ý hộp thoại ở Hình 10.14 xuất hiện khi bạn thử quan hệ thứ hai trên cùng hai bảng. Kích No để tạo quan hệ thứ hai. Cũng để ý là Access phát sinh một danh sách trường thứ hai cho tblEmployee thay vì hiển thị cả hai liên kết quan hệ giữa danh sách trường tblLaborAcquisition và danh sách trường tblEmployee. Khi hoàn thành cửa sổ Relationship của bạn cần giống Hình 10.14.

7. Đóng cửa sổ Relationship rồi kích Yes trong hộp thoại để lưu các thay đổi.

Thứ Tư, 9 tháng 11, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Ghi nhận việc sử dụng lao động (thời gian đã làm việc)

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Ghi nhận việc sử dụng lao động (thời gian đã làm việc)


Biến cố tăng kinh tế trong qui trình nhân sự HR là biến cố ghi nhận công việc của từng nhân viên. Thường việc ghi nhận này là thời gian nhân viên đã làm việc. Pipefitters Supply Company trả lương nhân viên theo giờ, như nhiều công ty khác. Tuy nhiên, không phải mọi tổ chức đều trả lương nhân viên theo giờ làm việc. Chẳng hạn, các công ty có thể trả lương nhân viên bán hàng theo phần trăm doanh số gọi là hoa hồng. Tương tự, các công ty đôi khi thưởng cho quản lý viên theo lợi nhuận, sản phẩm, hay sự hiệu quả trong bộ phận của họ. Ngay cả khi công ty trả lương theo thời gian làm việc, cách tính thời gian của họ cũng rất khác nhau. Một số cho nhân viên bấm đồng hồ ghi giờ, một số dùng máy quét mã vạch để đọc thẻ nhân viên, một số điền vào bảng chấm công trên giấy hay điện tử. Cho dù công ty ghi nhận thời gian thế nào thì họ cũng phải lưu dữ liệu theo nhân viên và theo chu kỳ trả lương trước khi tính lương. Trong cơ sở dữ liệu HR của Pipefitters Supply Company, bạn sẽ lưu thông tin vào bảng sử dụng lao động Labor Acquisition.

Thứ Ba, 8 tháng 11, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Bảo trì các bản tin nhân viên

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Bảo trì các bản tin nhân viên


Giờ đây bạn có bảng nhân viên Employee và form giúp dùng bảng đó dễ dàng, bạn có thể bảo trì thông tin nhân viên một cách hiệu quả. Với form thông tin nhân viên, Pipefitters có thể dễ dàng nhập thông tin nhân viên mới và cập nhật bản ghi khi nhân viên dọn nhà, sửa số khoản miễn trừ hay tình trạng lập gia đình, có số điện thoại mới, và sửa các mục thông tin khác mà trước đó họ đã nhập vào bảng nhân viên Employee.

Hãy để ý thành phần điều khiển combo box cho trường EmployeeType giúp việc nhập liệu dễ dàng hơn. Khi bạn kích nút combo box, danh sách tất cả các giá trị EmployeeTypeID và EmployeeTypeDescription trong bảng kiểu nhân viên Employee Type xuất hiện như trình bày ở Hình 10.11.

Khi người dùng chọn một giá trị EmployeeTypeDescription cụ thể, thành phần điều khiển combo box sẽ nhập giá trị EmployeeTypeID tương ứng vào trường EmployeeTypeID của bảng nhân viên Employee. Sau đây là các ưu điểm của việc dùng thành phần điều khiển combo box:


  • Nhân viên nhập liệu không cần nhớ danh sách mã kiểu nhân viên.
  • Chỉ mã kiểu hợp lệ mới có thể được nhập vào bảng nhân viên Employee.
  • Giảm dung lượng lưu trữ vào bảng nhân viên Employee bằng cách lưu mã kiểu thay vì mô tả.
  • Có thể thêm dễ dàng các kiểu mới vào bảng kiểu nhân viên Employee Type, và chúng tự động xuất hiện trong combo box thuộc form thông tin nhân viên. 


Hãy để ý các thiết đặt thuộc tính giá trị mặc định Default Value mà bạn đã đưa vào bảng nhân viên Employee hoạt động ra sao trong form. Chẳng hạn, ngay sau khi bạn tạo một bản ghi mới bằng việc nhập một EmployeeID mới, EmployeeStartDate trở thành thời điểm hiện tại, EmployeeMaritalStatus là S, và EmployeeExemptions là 0.

THỬ NGHIỆM

Bạn có thể kiểm tra hoạt động của các đặc trưng kiểm soát nội bộ khác mà bạn đã tạo khi thiết kế bảng. Chẳng hạn, hãy thử nhập giá trị bất hợp lệ vào trường EmployeePayRate. Nếu bạn thử nhập giá trị nhỏ hơn 7.5 hay lớn hơn 40 vào trường, một hộp thoại xuất hiện với thông báo lỗi mà bạn đã nhập vào thuộc tính Validation Text. Để ý là form sẽ không cho bạn ra khỏi bản ghi cho đến khi bạn nhập một giá trị hợp lệ vào trường EmployeePayRate.

Ta dễ dàng cập nhật các bản ghi nhân viên hiện thời phản ánh những thay đổi về lương một giờ, địa chỉ mới, số điện thoại mới, và các thay đổi khác. Các nút di chuyển ở đáy form giúp dễ dàng tìm được bản ghi nhân viên mà bạn muốn sửa. Form cho phép người dùng di chuyển đến từng trường trong bản ghi bằng cách dùng các phím mũi tên lên và xuống, các phím Tab và Shift+Tab, hay phím Enter. Hơn nữa, nhớ là các đặc trưng kiểm soát nội bộ mà bạn đã tạo trong cấu trúc bảng sẽ giới hạn việc sửa giá trị các trường hiện thời. Tức các thay đổi mà bạn muốn không thể vi phạm một trong các kiểm soát đó.

Để tổng kết, giờ đây bạn có một bảng chứa thông tin nhân viên của Pipefitters Supply Company. Bảng kết nối từng mục tin vào một nhân viên cụ thể thông qua mã nhân viên – khóa chính nhận diện duy nhất một nhân viên. Mọi thông tin về một nhân viên cụ thể xuất hiện trên một dòng trong bảng tblEmployee và phụ thuộc giá trị khóa chính cho dòng đó. Bạn còn có một form hỗ trợ việc thêm, xóa và sửa thông tin nhân viên. Bạn có thể dùng thông tin trong bảng nhân viên Employee này để tạo forms, truy vấn, và báo cáo cho qui trình nhân sự HIỂU của Pipefitters Supply Company.

Thứ Hai, 7 tháng 11, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Form nhập thông tin nhân viên

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Form nhập thông tin nhân viên


Số lượng và kích cỡ các trường trong bảng nhân viên Employee gây khó khăn cho việc nhập liệu trực tiếp vào bảng ở góc nhìn Datasheet. Trong phần này, bạn sẽ biết cách tạo form cho bảng nhân viên để thêm, xóa, và sửa thông tin nhân viên dễ dàng hơn.

Form thông tin nhân viên phải chứa các thành phần điều khiển cho 16 trường trong tblEmployee. Một cách giúp việc nhập liệu dễ hơn vào form chứa quá nhiều trường là giảm sự lộn xộn trong giao diện. Bạn có thể giảm sự lộn xộn trên form này bằng cách nhóm các trường liên quan với nhau thành những phần riêng biệt. Bảng nhân viên Employee của Pipefitters chứa thông tin mà bạn có thể gom thành bốn nhóm hợp lý: các trường nhận diện nhân viên, các trường tên nhân viên, các trường địa chỉ nhân viên, và các trường để tính lương.

Các trường nhận diện nhân viên là EmployeeID, EmployeeType, và EmployeeStartDate. Các trường tên nhân viên là EmployeeLastName, EmployeeFirstName, và EmployeeMiddleInitial. Các trường địa chỉ nhân viên là EmployeeAddrees1, EmployeeAddrees2, EmployeeCity, EmployeeState, EmployeeZipCode, và EmployeePhone. Các trường tính lương là EmployeeSSN, EmployeeMaritalStatus, EmployeeExemptions, và EmployeePayRate.

Bạn sẽ biết cách bố trí các thành phần điều khiển theo các phần logic cho form thông tin nhân viên ở ba bài tập kế. Các bài tập này còn cung cấp kỹ năng thực hành quan trọng trong việc tạo form ngay từ đầu; tức bắt đầu từ một form trống. Bạn sẽ tạo tất cả các thành phần trong form mà không dùng Form Wizard. Bạn có thể tham khảo các Hình 10.10 và 10.11 để định cỡ, sắp đặt, và tô màu các đối tượng đồ họa, nhãn, và thành phần điều khiển trên form khi hoàn thành ba bài tập kế. Hãy đóng tất cả các bảng để bắt đầu bài tập sau.

BÀI TẬP 10.8: DÙNG FORM WIZARD ĐỂ THÊM TẤT CẢ CÁC TRƯỜNG TỪ TBLEMPLOYEE VÀO MỘT FORM MỚI

1. Kích tblEmployee trong nhóm Unassigned Objects ở Navigation Pane để làm nổi bật tên bảng. Kích Create tab rồi kích Form Wizard trong nhóm Forms. Kích nút >> để dời tất cả các trường sang khung Selected Fields.

2. Kích nút Next để đến hộp thoại Layout. Kích Columnar nếu nó chưa được chọn để tạo một form hiển thị tất cả các trường đã chọn cho từng bản ghi ở một cột riêng. Kích nút Next rồi gõ frmEmployee vào ô văn bản.

3. Kích nút Finish để đóng hộp thoại và mở frmEmployee ở góc nhìn Form. Chuyển sang góc nhìn Design. Kích Home tab. Chọn tất cả các nhãn bằng cách chỉ việc kích bên trên nhãn Employee # rồi kéo con trỏ cho đến khi khung chọn (nó trông như một đường thẳng nếu bạn kéo thẳng đứng) chạm tất cả các nhãn. Kích Bold (làm đậm) rồi Align Right (canh phải) trong nhóm Font. Loại khoảng trống quá mức trong các ô nhãn bằng cách kéo nút định cỡ bên trái của một trong những ô nhãn (tất cả các nhãn vẫn đang được chọn) sang phải. Sau đó chọn từng nhãn riêng lẻ và loại khoảng trống dư thừa.

4. Chuyển sang góc nhìn Layout. Loại khoảng trống quá mức trong các thành phần điều khiển của trường có độ dài cố định bằng cách kéo cạnh phải của ô sang trái: Employee #, MI, SSN, State, Zip Code, Phone, Marital Status, Exemptions (tối đa hai chữ số), Pay Rate (tối đa $40.00), Type, và Start Date. Hãy tham khảo Hình 10.9.

Hình 10.9 Form thông tin nhân viên sau khi định cỡ các nhãn và thành phần điều khiển.

5. Chuyển sang góc nhìn Design. Xóa đầu đề frmEmployee; rồi kéo phần trên của thanh Detail lên trên để loại vùng Header khỏi form.

6. Kích Arrange tab. Nhấn Ctrl+A để chọn tất cả các thành phần điều khiển và nhãn. Kích Align menu trong nhóm Sizing & Ordering rồi chọn Top để loại khoảng trống thẳng đứng giữa từng thành phần.

Trong bài tập kế, bạn sẽ tạo bốn vùng riêng để nhóm các trường nhân viên: mã nhân viên, tên, thông tin trả lương, và địa chỉ.

BÀI TẬP 10.9: NHÓM THÔNG TIN NHÂN VIÊN TRÊN FORM THÔNG TIN NHÂN VIÊN

1. Thu gọn Navigation Pane rồi đóng Property Sheet nếu nó đang mở. Form cần ở góc nhìn Design. Tạo khoảng không để thêm các đối tượng vào form bằng cách kích cạnh phải phần Detail của form rồi kéo sang phải để form rộng chín inches.

2. Kích Design tab rồi kích công cụ Rectangle trong nhóm Controls; di chuyển con trỏ đến sát bên phải EmployeeID; kích và kéo để tạo một ô rộng 3.5 inches và cao 1.25 inches. Kích phải hình chữ nhật mới; dời con trỏ đến hiệu ứng đặc biệt Special Effect rồi kích biểu tượng thứ hai tính trên dòng đầu, đó là làm nhô lên Raised (xem Hình 10.10). Kích phải hình chữ nhật lần nữa; dời con trỏ đến Fill/Back Color rồi chọn màu thích hợp. Các ô ở Hình 10.11 được tô bằng màu ở cột năm dòng bốn. Kích phải hình chữ nhật lần nữa; dời con trỏ đến Position rồi chọn Send to Back để cho phép các nhãn và thành phần điều khiển mà bạn kéo vào hình chữ nhật sẽ nằm bên trên hình chữ nhật đó.

Hình 10.10 Các menu tắt.

Hình 10.11 Form thông tin nhân viên hoàn chỉnh ở góc nhìn Design.

3. Thêm nhãn vào ô. Kích Label trong nhóm Controls; dời con trỏ xuống cách cạnh trên của hình chữ nhật khoảng 1/8 inch, kích vào đó, rồi gõ Name. Kích vùng trống trong phần Detail rồi kích nhãn Name. Kích Bold rồi Center trong nhóm Font thuộc dải lệnh Format (hay nhóm Font thuộc dải lệnh Home). Kích phải rồi chọn Raised (biểu tượng thứ hai trên dòng đầu) trong Special Effect menu. Tham khảo Hình 10.11 để định vị nhãn của bạn.

4. Kích và kéo các thành phần điều khiển và nhãn sau vào hình chữ nhật Name: EmployeeFirstName, EmployeeLastName, và EmployeeMiddleInitial. Điều chỉnh độ rộng của thành phần điều khiển EmployeeLastName. Tham khảo Hình 10.11.

5. Kích nhãn Name; nhấn và giữ phím Shift rồi kích hình chữ nhật. Nhấn Ctrl+C rồi nhấn Ctrl+V để tạo vùng dữ liệu mới. Tăng chiều cao của hình chữ nhật lên 2 inches. Kích phải hình chữ nhật; dời con trỏ đến Position rồi chọn Send to Back. Sửa tên nhãn thành Address.

6. Kích và kéo các thành phần điều khiển và nhãn sau vào hình chữ nhật Name: EmployeeAddress1, EmployeeAddress2, EmployeeCity, EmployeeState, EmployeeZipCode, và EmployeeTelephone. Tham khảo Hình 10.11.

7. Chọn EmployeeID, EmployeeSSN, và EmployeeMaritalStatus. Kích Arrange tab rồi chọn Bottom trong Align menu. Tạo một bản sao của nhãn và hình chữ nhật Name rồi dời nó sang trái ngang với vùng Name của form. Kích phải hình chữ nhật; dời con trỏ đến Position rồi chọn Send to Back. Sửa tên nhãn thành Identification. Nắm lấy cạnh trái của hình chữ nhật rồi kéo sang phải cho đến khi hình chữ nhật chỉ rộng 2.25 inches. Định vị lại nhãn. Tham khảo Hình 10.11, kéo EmployeeID, EmployeeSSN, và EmployeeMaritalStatus vào trong nhóm Identification.

8. Lặp lại Bước 5 bằng cách sao cho nhãn và hình chữ nhật Address. Sửa tên nhãn thành Payroll Information.

9. Lặp lại các Bước 6 và 7 với các thành phần điều khiển và nhãn còn lại: EmployeeSSN, EmpoyeeMaritalStatus, EmployeeExemptions, và EmployeePayrate. Tham khảo Hình 10.11.

10. Nhấn Ctrl+A để chọn tất cả các đối tượng rồi dời chúng cho đến khi góc trái trên của hình chữ nhật Identification ở dưới và ở bên phải góc trái trên của form 1/4 inch. Giảm kích cỡ của phần Detail cho đến khi nó rộng hơn và cao hơn vùng nhập liệu 1/4 inch. Lưu.

11. Chuyển sang góc nhìn Form. Để ý rằng mỗi lần chỉ hiển thị một bản ghi. Hãy tab qua form. Để ý rằng thứ tự tab là theo thứ tự trường trong tblEmployee. Trở về góc nhìn Design. Mở Property Sheet. Chọn Form trong Property Sheet combo box nếu nó chưa được chọn. Sửa góc nhìn mặc định Default View trên Format tab thành Continuous để bạn có thể hiển thị tối đa bản ghi theo kích thước màn hình.

12. Kích Tab Order trong nhóm Control Layout trên dải lệnh Design. Kích nút Auto Order. Để ý rằng thứ tự tab được sắp lại theo thứ tự từ trái sang phải và từ trên xuống. Vì thế, bạn phải tự tay sửa thứ tự tab để di chuyển từ mục đầu đến mục cuối trong từng nhóm theo thứ tự sau: Identification, Name, Payroll Information, và Address. Lưu.

BÀI TẬP 10.10: HOÀN TẤT FORM THÔNG TIN NHÂN VIÊN

Ở các Chương 8 và 9 bạn đã biết cách dùng combo box làm thành phần điều khiển phòng ngừa nhằm giảm sai sót khi nhập mã nhận diện vào AIS. Bạn sẽ thêm thành phần điều khiển tương tự vào form thông tin nhân viên. Xem Bài tập 8.16 để có hướng dẫn chi tiết về việc tạo combo box. Hơn nữa, bạn sẽ sửa các thuộc tính định dạng Form và Detail để làm form dễ dùng hơn.

1. Mở frmEmployee ở góc nhìn Design nếu nó chưa mở. Kích ô thành phần điều khiển EmployeeTypeID rồi nhấn Delete để xóa thành phần điều khiển và nhãn. Kích Combo Box trong nhóm Controls; dời con trỏ đến vị trí của thành phần điều khiển EmployeeTypeID rồi kích kép để khởi động Combo Box Wizard. Trong hộp thoại đầu tiên kích nút Next để chọn tùy chọn mặc định I want the combo box to get the values from another query or table (Tôi muốn combo box nhận các giá trị từ câu truy vấn hay bảng khác).

2. Kích kép tblEmployeeType ở hộp thoại kế để chọn rồi sang hộp thoại kế.

3. Kích >> để dời cả hai thuộc tính sang cột Selected Fields. Kích nút Next.

4. Sắp EmployeeTypeName. Thứ tự tăng Ascending là tùy chọn mặc định. Kích nút Next.

5. Kích Hide key column (recommended) để không đánh dấu nó. Trong form này, ta muốn hiển thị trường khóa của tblEmployeeType. Kích kép cạnh phải của từng cột để được độ rộng phù hợp nhất cho từng cột rồi kích Next.

6. Kích kép EmployeeTypeID để lưu giá trị của nó rồi sang hộp thoại kế.

7. Kích mũi tên combo box rồi chọn EmployeeTypeID để lưu giá trị từ combo box bạn đang tạo vào trường EmployeeTypeID trong tblEmployee. Kích nút Next.

8. Ở hộp thoại cuối cùng, nhập Type để đặt tên nhãn rồi kích nút Finish.

9. Đặt thuộc tính in đậm Bold và canh phải Align Right cho nội dung nhãn (trên các dải lệnh Home hay Format); định cỡ lại combo box rồi chuyển sang góc nhìn Layout để chắc chắn là dữ liệu khít với kích thước combo box. Trở lên góc nhìn Design; kích Arrange tab rồi dùng các công cụ Align để dời combo box và nhãn vào đúng vị trí.

10. Kích Tab Order trên dải lệnh Design rồi dời comboXX (với XX lf một số) từ đáy (nó là thành phần mới nhất được thêm vào form) đến dòng thứ hai tính từ trên xuống.

11. Hãy chọn màu tương phản để làm nổi bật các nhóm nhập liệu. Mở Property Sheet ở nhóm Tools; chọn Detail từ combo box của Property Sheet; kích Format tab trên Property Sheet. Kích thuộc tính Back Color rồi kích nút Builder để mở bảng màu. Chọn một màu tương phản. Đặt Alternate Back Color về màu tương phản liên quan.

12. Chọn Form từ combo box của Property Sheet rồi kích Format tab trên Property Sheet. Đặt thuộc tính nút chọn bản ghi Record Selectors về No; đặt thuộc tính đường phân cách Dividing Lines là Yes và đặt thuộc tính thanh trượt Scroll Bars về Neither.

13. Lưu. Xem form ở góc nhìn Form. Form cần giống Hình 10.11.

Ngoài việc biết nhiều hơn về chu kỳ trả lương trong bài tập này, bạn đã biết dùng màu, các thuộc tính thành phần điều khiển, và nhóm đối tượng để tạo form chứa nhiều trường nhưng vẫn dễ đọc và dễ dùng cho việc nhập liệu và sửa đổi.