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ế.

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

Đăng nhận xét