Thứ Ba, 11 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Thêm thành phần điều khiển VendorID vào form nhập biên bản nhận hàng

James Perry, Richard Newmark


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


Thêm thành phần điều khiển VendorID vào form nhập biên bản nhận hàng


Hệ thống kế toán của Pipefitters Supply Company liên kết các biên bản nhận hàng với những đơn mua hàng cụ thể. Mặc dù nhà cung ứng trong biên bản nhận hàng phải giống nhà cung ứng trên đơn mua hàng tương ứng, form nhập biên bản nhận hàng hiện thời không chứa kiểm soát nào để đảm bảo rằng nhà cung ứng trên đơn mua hàng giống với nhà cung ứng ghi trên (các) biên bản nhận hàng tương ứng. Trong các bài tập kế bạn sẽ thêm một nút lệnh vào frmPurchase để cập nhật VendorID. Nó tương tự nút lệnh cập nhật InventoryReceiptAmount.

BÀI TẬP 9.35: TẠO MỘT TRUY VẤN CẬP NHẬT ĐỂ TRUYỀN VENDORID TỪ TBLPURCHASEORDER VÀO TBLPURCHASE

1. Trước khi tạo truy vấn cập nhật, bạn cần thêm một nhà cung ứng giả vào tblVendor để người dùng biết rằng VendorID chưa được nhập vào frmPurchase. Hãy dùng frmVendor để thêm Vendor 9999 với thông tin được cung cấp ở Hình 9.35.

Hình 9.35 Thông tin nhà cung ứng giả 9999 được nhập vào frmVendor.

2. Kích Query Design để tạo một truy vấn mới. Thêm tblPurchasetblPurchaseOrder vào Table Pane. Kích Update trong nhóm Query Type.

3. Thêm vào Criteria Pane VendorID từ tblPurchase và PurchaseOrderID từ tblPurchaseOrder. Gõ [tblPurchaseOrder].[VendorID] vào ô Update To của VendorID, rồi gõ "9999" vào ô Criteria (xem Hình 9.36).

Hình 9.36 qryUpdateVendorID ở góc nhìn Design.

4. Thêm InventoryReceiptID từ tblPurchase vào Criteria Pane. Ở Chương 8, bạn đã tạo các truy vấn nợ phải trả accounts payable bằng việc dùng tham biến thời điểm, cho phép người dùng tính nợ phải trả ở thời điểm bất kỳ. Tuy nhiên, khi bạn dùng tham biến trong qrySumOfPOLineExtensionsByPOqrySumOfPurchLineExtensionsByIR, hộp thoại Enter Parameter Value yêu cầu người dùng gõ lại thông tin đã nhập vào bản ghi hiện thời của một form. Để tránh sai sót, macro trong bài tập kế sẽ tạo một biến tạm từ dữ liệu trong bản ghi form hiện thời và sẽ trở thành tiêu chí trong truy vấn này.

5. Trong ô Criteria của InventoryReceiptID, gõ vị trí của biến tạm được tạo bởi macro: [TempVars]![TempInventoryReceiptID] (xem Hình 9.36). Việc dùng truy vấn tham biến để tìm một InventoryReceiptID cụ thể sẽ tiết kiệm rất nhiều thời gian tính toán khi cơ sở dữ liệu trở nên lớn hơn. Nếu không, Access sẽ tìm tất cả các bản ghi trong tblPurchase có VendorID bằng 9999. Lưu truy vấn là qryUpdateVendorID rồi đóng lại.

6. Mở frmPurchase ở góc nhìn Design; mở Property Sheet và thu nhỏ Navigation Pane.

7. Kích VendorID rồi sửa các thuộc tính của nó để hiển thị như một trường tham chiếu chẳng hạn VendorName. Trên Format tab sửa Back Style và Border Style thành Transparent. Trên Data tab, sửa Enabled thành No và Locked thành Yes. Đặt giá trị mặc định là 9999 để thông tin nhà cung ứng giả được tự động nhập, tương tự giá trị mặc định $0.00 được tự động nhập vào PurchaseOrderAmount. Sửa Tab Stop trên Other tab thành No.

8. Lưu rồi đóng form. Hồi phục Navigation Pane.

BÀI TẬP 9.36: TẠO MACRO ĐỂ CẬP NHẬT VENDORID TRONG FRMPURCHASE

Hãy tham khảo Bài tập 9.24 cho thảo luận bổ sung về các Macro Actions SetWarnings, OpenQuery, và RepaintObject.

1. Kích Create tab rồi kích Macro trong nhóm Macros & Code. Kích Show All Actions trong nhóm Show/Hide vì một số hành động bạn cần không có sẵn trong tập hành động mặc định.

2. Gõ hay chọn SetWarnings trong ô Add New Action. Để tham biến hành động mặc định là No để ngăn các thông điệp hệ thống.

3. Đặt hành động thứ hai là RunMenuCommand (thi hành lệnh menu) và chọn SaveRecord (lưu bản ghi) từ danh sách lệnh. Hành động này bước bản ghi hiện thời được lưu, tức lưu dữ liệu bạn đã nhập vào frmPurchase vào trong tblPurchase.

4. Tạo một biến tạm cho InventoryReceiptID mà sẽ được dùng trong qryUpdateVendorID. Gõ hay chọn SetTempVar trong ô Add New Action mới. Đặt tên biến tạm là TempInventoryReceiptID.  Kích nút Builder cạnh ô Expression. Trong khung Expression Elements, mở rộng các thành phần sau theo thứ tự bằng cách kích dấu + cạnh chúng để đi đến frmPurchase: Ch09.accdb, Forms, All Forms. Kích frmPurchase; rồi kích kép InventoryReceiptID trong khung Expression Categories (xem Hình 9.37). Kích OK để đóng công cụ tạo biểu thức, và thêm biểu thức vừa tạo vào ô tham biến Expression. Biểu thức này sẽ chỉ thị Access đặt biến tạm, TempInventoryReceiptID, bằng giá trị hiện thời trong thành phần điều khiển InventoryReceiptID bên trong frmPurchase.

Hình 9.37 Công cụ tạo biểu thức cho tham biến biểu thức trong hành động SetTempVar.

5. Thêm hành động OpenQuery để thi hành qryUpdateVendorID,  rồi chọn qryUpdateVendorID từ danh sách các Query Names. Để nguyên các giá trị mặc định cho View (Datasheet) và Data Mode (Edit).

6. Chọn hay gõ RepaintObject vào ô Add New Action kế. Chọn Form là Object Type và frmPurchase là Object Name.

7. Cuối cùng, loại bỏ biến tạm để ngăn việc dùng nó trong truy vấn hay macro khác. Thêm hành động RemoveTempVar vào macro. Gõ TempInventoryReceiptID cho Name là tên biến tạm bạn muốn loại. Macro hoàn chỉnh được trình bày ở Hình 9.38.

Hình 9.38 mcrUpdateVendorIDAndInvItems ở góc nhìn Design.

8. Đóng macro. Trong hộp thoại Save As, đặt tên macro là mcrUpdateVendorIDAndInvItems. Phần AndInvItems (và các hàng tồn kho) là cần thiết vì bạn sẽ thêm các hành động vào macro này ở các bài tập kế để chuyển các hàng tồn kho đã đặt vào form nhập biên bản nhận hàng.

9. Kiểm thử truy vấn và macro bằng cách mở tblPurchase, sửa VendorID ứng với InventoryReceiptID 100002 thành 9999 rồi đóng bảng. Vì lệnh SaveRecord sẽ không hoạt động trừ phi nó được kích hoạt bên trong form (SaveRecord sẽ lưu bản ghi của đối tượng hiện hành, đó sẽ KHÔNG là form khi bạn kích kép trong Navigation Pane), hãy xóa dòng đó khỏi macro của bạn trước khi tiếp tục việc kiểm thử. Mở frmPurchase rồi đi đến bản ghi có InventoryReceiptID 100002. Kích kép mcrUpdateVendorIDAndInvItems trong Navigation Pane để thi hành macro. VendorID ứng với InventoryReceiptID 100002 bây giờ phải là 1008. Đóng form và hồi phục macro (dùng macro hoàn chỉnh ở Hình 9.38 làm hướng dẫn).

BÀI TẬP 9.37: THÊM NÚT LỆNH VÀO FRMPURCHASE ĐỂ THI HÀNH MACRO

Các bước tạo nút lệnh đã được trình bày chi tiết trong Bài tập 9.25 và Hình 9.23. Bạn cần tham khảo chúng để được diễn giải chi tiết hơn.

1. Mở frmPurchase ở góc nhìn Design. Kích Button trong nhóm Controls. Di chuyển con trỏ xuống ngay dưới nhãn Primary Contact rồi kích kép để khởi động Command Button Wizard.

2. Trong hộp thoại đầu tiên, kích Miscellaneous trong danh sách Category, rồi kích kép Run Macro để chọn Run Macro và đến hộp thoại kế.

3. Kích kép mcrUpdateVendorIDAndInvItems (không được trình bày ở Hình 9.23) để chọn nó và đến hộp thoại kế.

4. Kích nút radio Text, gõ Update Vendor # and Inv. Items vào ô Text, rồi kích Next.

5. Trong hộp thoại cuối cùng, gõ cmdUpdateVendorIDAndInvItems; kích Finish.

6. Kích Tab Order trong nhóm Tools (trên dải lệnh Design); dời cmdUpdateVendorIDAndInvItems đến vị trí ngay trên fsubPurchase. Kích OK.

7. Nếu bạn không có khoảng trống cho nút lệnh mới, hãy dời subform và nút lệnh Update Inv. Receipt Amount xuống dưới để tạo khoảng trống. Form hoàn tất ở góc nhìn Design cần giống Hình 9.39. Lưu rồi đóng form.

Hình 9.39 frmPurchase ở góc nhìn Design sau khi hoàn tất Bài tập 9.37.

8. Kiểm thử nút lệnh mới. Mở tblPurchase, sửa VendorID ứng với InventoryReceiptID 100004 thành 9999 rồi đóng bảng. Mở frmPurchase rồi đi đến bản ghi có InventoryReceiptID 100004. Kích nút lệnh mới để thi hành mcrUpdateVendorIDAndInvItems. Kiểm chứng rằng VendorID ứng với InventoryReceiptID 100004 đã sửa từ 9999 thành 1007. Đóng form.

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

Đăng nhận xét