Chủ Nhật, 16 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Form nhập biên bản giải ngân

James Perry, Richard Newmark


Chương 9
Qui trình mua hàng - chi tiền


Form nhập biên bản giải ngân


Chính sách chi trả của Pipefitters Supply Company là trả tối đa $5,000 trong vòng mười ngày rồi trả phần còn lại trong vòng mười ngày sau đợt trả đầu. Khi kế toán viên của Pipefitters viết chi phiếu cho nhà cung ứng, họ cần có thể xem trị giá biên bản nhận hàng và tổng các lần trả trước cho biên bản nhận hàng đó cũng như dư nợ (balance due). Nếu tổng các lần trả trước lớn hơn trị giá biên bản nhận hàng, kế toán viên cần tìm nguyên nhân gây lỗi. Ngoài ra, sẽ hữu ích nếu xem được lịch sử chi trả của biên bản nhận hàng. Nếu tổng các lần trả trước nhỏ hơn trị giá biên bản nhận hàng, kế toán viên sẽ áp dụng chính sách chi trả của Pipefitters. Bạn sẽ tạo truy vấn để tính dư nợ hiện thời theo biên bản nhận hàng. Dư nợ sẽ được dùng trong form nhập biên bản nhận hàng để kiểm soát. Vì dư nợ sẽ không được cập nhật cho đến khi thi hành truy vấn dư nợ một lần nữa bằng cách đóng rồi mở form, bạn sẽ thêm một nút lệnh trên form để thi hành macro cập nhật dư nợ.

BÀI TẬP 9.43: TẠO HAI TRUY VẤN ĐỂ TÍNH DƯ NỢ ĐỐI VỚI NHÀ CUNG ỨNG

Hai truy vấn bạn sẽ tạo trong bài tập này rất giống các truy vấn bạn đã tạo cho form nhập biên bản thâu ngân ở các Bài tập 8.40 và 8.41. Do tương tự, các bước trong Bài tập 9.43 sẽ cô đọng. Hãy tham khảo các Bài tập 8.40 và 8.41 để được hướng dẫn thêm. Trong bài tập này bạn sẽ tạo hai truy vấn. Truy vấn đầu tiên sẽ dùng hàm gộp để tính tổng các lần giải ngân cho từng biên bản nhận hàng từ thời điểm giải ngân hiện thời trở về trước. Truy vấn thứ hai sẽ dùng tính toán hàng ngang để trừ tổng số tiền đã trả khỏi trị giá biên bản nhận hàng để được dư nợ với nhà cung ứng.

Hãy tạo truy vấn đầu tiên.

1. Kích Create tab rồi kích Query Design trong nhóm Queries. Thêm tblCashDisbursement vào Table Pane. Thêm InventoryReceiptID CashDisbursementAmount vào Criteria Pane.

2. Kích Totals trong nhóm Show/Hide, để ô Total cho InventoryReceiptID được đặt là Group By, sửa ô Total cho CashDisbursementAmount thành Sum.

3. Mở Property Sheet. Gõ Prior Payments làm phụ đề Caption cho tổng các lần chi trả. Đóng Property Sheet.

4. Lưu truy vấn là qrySumOfCDByInventoryReceipt. Đóng truy vấn.

5. Hãy tạo truy vấn thứ hai.

6. Tạo truy vấn mới bằng Query Design. Thêm tblPurchase qrySumOfCDByInventoryReceipt vào Table Pane. Thêm vào Criteria Pane InventoryReceiptID, InventoryReceiptAmount, và VendorID từ danh sách trường tblPurchase; thêm SumOfCashDisbursementAmount từ danh sách trường qrySumOfCDByInventoryReceipt vào Criteria Pane.

7. Sửa các thuộc tính nối của liên kết giữa các danh sách trường tblPurchase qrySumOfCDByInventoryReceipt để bao gồm TẤT CẢ các bản ghi từ tblPurchase và chỉ những bản ghi nào từ qrySumOfCDByInventoryReceipt có InventoryReceiptID bằng nhau (nút radio thứ hai trong hộp thoại Join Properties). Liên kết, phép nối ngoại, bây giờ cần là mũi tên trỏ đến danh sách trường qrySumOfCDByInventoryReceipt (xem Hình 9.47).

Hình 9.47 qryBalanceDueToVendor ở góc nhìn Design.

8. Lưu truy vấn là qryBalanceDueToVendor.

9. Kích ô Field ở cột trống đầu tiên trên Criteria Pane. Dùng Builder để thêm biểu thức sau vào Criteria Pane: BalanceDue: [InventoryReceiptAmount]-Nz([SumOfCashDisbursementAmount],0). Mở Property Sheet, gõ Balance Due vào ô Caption cho trường BalanceDue vừa tạo.

10. Lưu và đóng truy vấn.

Form nhập biên bản giải ngân sẽ dùng thiết kế form/subform. Phần trên của form nhập thông tin giải ngân chứa dữ liệu liên quan biên bản nhận hàng từ qryBalanceDueToVendor. Các trường này không thể sửa vì chúng chỉ để tham khảo. Form chính còn hiển thị thông tin nhà cung ứng (tên và địa chỉ), mà bạn sẽ thêm vào truy vấn đằng sau form. Subform chứa tất cả các trường từ tblCashDisbursement. Các trường VendorID và InventoryReceiptID  sẽ được liên kết với form chính. Liên kết sẽ tự động điền các trường trên subform với dữ liệu từ form chính và đảm bảo các đợt giải ngân được ghi nhận đúng nhà cung ứng và biên bản nhận hàng. Việc dùng dữ liệu từ bảng Purchase sẽ đóng vai trò kiểm soát vì các đợt giải ngân chỉ có thể được ghi nhận nếu biên bản nhận hàng xuất hiện trong tblPurchase. Vì form nhập thông tin thâu ngân tương tự form nhập thông tin giải ngân, bạn sẽ bắt đầu với các bản sao của frmCashReceipt fsubCashReceipt thay vì dùng Form Wizard.

BÀI TẬP 9.44: TẠO FORM NHẬP BIÊN BẢN GIẢI NGÂN – SỬA FSUBCASHRECEIPT

1. Kích fsubCashReceipt ở Navigation Pane, nhấn Ctrl+C, rồi Ctrl+V. Trong hộp thoại Paste As, gõ fsubCashDisbursement. Mở fsubCashDisbursement ở góc nhìn Design. Thu nhỏ Navigation Pane.

2. Mở Property Sheet. Chọn Form từ combo box ở đỉnh Property Sheet. Trên Data tab, sửa Record Source thành tblCashDisbursement (cuộn danh sách lên trên). Trên Format tab, sửa Caption thành fsubCashDisbursement.

3. Sửa các thành phần điều khiển và nhãn trong phần Detail của subform theo Hình 9.48.

Hình 9.48 Các sửa đổi về thành phần điều khiển và nhãn trong fsubCashDisbursement.

4. Xem form ở góc nhìn Datasheet. Đây là hiển thị của subform trong form chính. 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 nút Best Fit để có thể thấy được các đầu đề cột và dữ liệu.

5. Đóng subform.

BÀI TẬP 9.45: TẠO FORM NHẬP BIÊN BẢN GIẢI NGÂN – SỬA FRMCASHRECEIPT

Hãy sửa qryBalanceDueToVendor để dùng làm Record Source cho form.

1. Tạo một bản sao của qryBalanceDueToVendor ở Navigation Pane rồi lưu với tên qryFormCDRecordSourceData. Mở qryFormCDRecordSourceData ở góc nhìn Design.

2. Kích Show Table trong nhóm Query Setup rồi thêm qryVendorInfo vào Table Pane. Liên kết qryVendorInfo với tblPurchase bằng cách kích và kéo VendorID từ danh sách trường qryVendorInfo đến danh sách trường tblPurchase. Thêm các trường sau vào Criteria Pane: InventoryReceiptDate, VendorName, VendorAddress1, VendorAddress2, CityStateZip, VendorTelephone, và VendorPrimaryContact. Lưu các thay đổi rồi đóng truy vấn.

3. Sao chép frmCashReceipt để làm điểm khởi đầu để tạo frmCashDisbursement.

4. Kích frmCashReceipt ở Navigation Pane, nhấn Ctrl+C, rồi Ctrl+V. Trong hộp thoại Paste As, gõ frmCashDisbursement. Mở frmCashDisbursement ở góc nhìn Design. Thu nhỏ Navigation Pane.

5. Sửa Form Header thành Cash Disbursement Entry.

Sửa các data sources của form và các thành phần điều khiển của nó.

6. Mở Property Sheet. Chọn Form từ combo box ở đỉnh Property Sheet. Trên Data tab, sửa Record Source thành qryFormCDRecordSourceData. Trên Format tab, sửa Caption thành frmCashDisbursement.

7. Sửa các thành phần điều khiển và nhãn trong phần Detail của form theo Hình 9.49. Trước khi bắt đầu sửa, hãy chọn tất cả các thành phần điều khiển và nhãn ở trên subform rồi dời chúng sang phải 1/4-inch để tạo khoảng trống cho các tên nhãn dài.

Hình 9.49 Các sửa đổi về thành phần điều khiển và nhãn trong frmCashDisbursement.

Hãy sửa subform.

8. Chọn fsubCashReceipt từ combo box ở đỉnh Property Sheet. Trên Data tab, sửa Source Object thành fsubCashDisbursement. Trên Other tab, sửa Name thành fsubCashDisbursement.

9. Liên kết InventoryReceiptID và VendorID từ subform với form. Trên Data tab, kích nút Builder bên cạnh ô thuộc tính Link Master Fields để mở Subform Field Linker. Kích OK trên hộp thoại thông báo. Thêm InventoryReceiptID vào dòng đầu tiên ở cả hai cột Master Fields và Child Fields, rồi thêm VendorID vào dòng thứ hai ở cả hai cột; kích OK.

10. Đóng Property Sheet. Chuyển sang góc nhìn Layout. Giảm độ rộng của subform để loại bớt khoảng trống.

11. Lưu form. Form cuối cùng cần giống form nhập biên bản giải ngân ở Hình 9.50.

Hình 9.50 Form nhập biên bản giải ngân ở góc nhìn Form.

Không cần sửa nút lệnh Update Balance Due vì macro đằng sau nút, Requry, sẽ chạy lại truy vấn đằng sau form đang mở. Như đã đề cập ở Chương 8, hành động Requery Macro sẽ trả về bản ghi đầu của form sau khi chạy lại truy vấn đằng sau form. Việc trả về bản ghi hiện thời sẽ cần kỹ năng lập trình vượt quá phạm vi của tài liệu này.

THỬ NGHIỆM

Hãy kiểm thử form nhập biên bản giải ngân và nút lệnh Update Balance Due. Kích kép frmCashDisbursement trong Navigation Pane. Đến bản ghi cuối cùng (Inv. Receipt # 100027). Trị giá hóa đơn Inv. Receipt Amount là $1,860.35. Các lần chi trả trước Prior Payments là $1,860.35, vì vậy dư nợ Balance Due là $0.00. Hãy thêm một bản ghi kiểm thử: Check # 99999, Cash Acct. # 101, Employee # 136, Amount $500, và Date 9/9/2099. Kích nút Update Balance Due. Để ý là form trở về bản ghi đầu tiên. Hãy đến bản ghi cuối. Prior Payments bây giờ là $2,360.35. Balance Due đã được cập nhật về số dư hiện thời ($500.00), nghĩa là ta đã trả quá $500.00 đối với biên bản nhận hàng này. Xóa Check #99999 bằng cách kích nút chọn bản ghi rồi nhấn phím Delete.

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

Đăng nhận xét