Thứ Ba, 11 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Sửa frmPurchaseOrder và fsubPurchaseOrder để tạo form biên bản nhận hàng (frmPurchase)

James Perry, Richard Newmark


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


Sửa frmPurchaseOrder và fsubPurchaseOrder để tạo form biên bản nhận hàng (frmPurchase)


Vì form nhập biên bản nhận hàng tương tự form nhập đơn mua hàng; bạn sẽ sửa frmPurchaseOrder và fsubPurchaseOrder để tạo frmPurchase và fsubPurchase. Form chính sẽ dựa trên tblPurchaseqryVendorInfo, và subform sẽ theo qryPurchaseLineItem. Ngoài các thành phần điều khiển được dùng trong form nhập đơn mua hàng, bạn sẽ thêm các thành phần điều khiển vào form này để trả lời các câu hỏi sau: Làm sao nhân viên kho hàng có thể nhớ rất nhiều mã số nhà cung ứng và tránh gõ sai nếu họ chỉ nhớ được một phần? Làm sao nhân viên kho hàng có thể nhớ mọi mã số hàng tồn kho và làm sao tránh việc gõ sai?

BÀI TẬP 9.30: SỬA FSUBPURCHASEORDER ĐỂ TẠO FSUBPURCHASE

1. Tạo một bản sao của fsubPurchaseOrder trong Navigation Pane và đặt tên là fsubPurchase. Mở fsubPurchase ở góc nhìn Design. Mở Property Sheet và che Navigation Pane.

2. Property Sheet cần ở trạng thái Form được chọn và Data tab cũng được chọn. Sửa Record Source thành qryPurchaseLineItem.

3. Kích Format tab. Sửa Caption thành fsubPurchase.

4. Xóa thành phần điều khiển VendorItemID khỏi phần Detail và nhãn của nó khỏi phần Form Header.

5. Sửa Control Source trên Data tab và Name trên Other tab cho các thành phần điều khiển sau:

6. Sửa QuantityOrdered thành QuantityReceived.

7. Sửa POPrice thành InventoryReceiptPrice.

8. Sửa PurchaseOrderLineExtension thành PurchaseLineExtension.

9. Điều chỉnh khoảng cách các thành phần điều khiển và nhãn. Đóng Property Sheet. Nhấn Ctrl+A để chọn tất cả các thành phần điều khiển và nhãn. Nhấn và giữ phím Shift rồi kích nhãn Our Item # và InventoryID combo box để khử việc chọn chúng. Nhấn và giữ phím mũi tên trái, hay cứ nhấn nó liên tục để dời tất cả các mục đã chọn sang trái để loại khoảng không được tạo ra do việc xóa thành phần điều khiển VendorItemID và nhãn.

10. Loại khoảng trống trong Form Header bằng cách dời các nhãn lên đỉnh Form Header rồi kéo thanh Detail lên trên (xem Hình 9.29).

Hình 9.29 fsubPurchase ở góc nhìn Design.

11. Loại khoảng trống bên phải subform bằng cách kéo cạnh phải đến khắc 7 inches.

12. Xem subform ở góc nhìn Form (xem Hình 9.29). Lưu và đóng subform.

BÀI TẬP 9.31: SỬA FRMPURCHASEORDER ĐỂ TẠO FRMPURCHASE – PHẦN 1

Các nhiệm vụ chính bạn sẽ thực hiện ở Phần 1 là tạo một bản sao của frmPurchaseOrder, sửa các phụ đề, và sửa nguồn dữ liệu cho subform.

1. Tạo một bản sao của frmPurchaseOrder trong Navigation Pane rồi đặt tên là frmPurchase. Mở frmPurchase ở góc nhìn Design.

2. Kích tiêu đề trong Header hai lần (chậm hơn kích kép) rồi sửa thành Inventory Receipt Entry.

3. Giảm chiều rộng của thành phần điều khiển subform. Kích subform, nắm lấy một trong những ô nhỏ bên phải nằm trên đường bao quanh subform (con trỏ sẽ trở thành mũi tên hai đầu) rồi kéo sang trái cho đến khi thanh cuộn đứng của subform chạm khấc “7” trên thước kẻ của subform. Sau đó kéo cạnh phải của phần Detail đến cạnh của thành phần điều khiển subform để loại khoảng trống (Hình 9.30).

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

4. Tạo không gian để bổ sung một thành phần điều khiển trên đỉnh form. Nhấn và giữ phím Shift. Kích subform và nút lệnh Update PO Amount. Nhấn phím mũi tên xuống liên tục cho đến khi bạn có khoảng trống để chèn thêm một thành phần điều khiển ở trên subform.

5. Che Navigation Pane và mở Property Sheet. Chọn Form từ combo box ở đỉnh của Property Sheet rồi kích Format tab nếu nó chưa hiển thị. Sửa Caption thành frmPurchase.

6. Sửa data source của subform. Chọn fsubPurchaseOrder (bạn chưa sửa tên thành fsubPurchase) từ combo box của Property Sheet. Kích Data tab rồi sửa Source Object thành fsubPurchase. Gõ InventoryReceiptID vào thuộc tính Link Master Fields và Link Child Fields (bạn không thể dùng nút Builder vì Data Source của form chưa được sửa).

7. Sửa tên subform trong Other tab thành fsubPurchase.

8. Lưu các thay đổi.

BÀI TẬP 9.32: SỬA FRMPURCHASEORDER ĐỂ TẠO FRMPURCHASE – PHẦN 2

Các bước kế sẽ dẫn đi qua qui trình sửa truy vấn đằng sau form.

1. Chọn Form từ Property Sheet combo box. Kích Data tab. Kích nút Builder trong thuộc tính Record Source. Bạn cần thấy một cửa sổ truy vấn với tên tab là frmPurchaseOrder: Query Builder.

2. Kích Show Table trong nhóm Query Setup. Thêm tblPurchase vào Table Pane.

3. Sửa tất cả các ô Table từ tblPurchaseOrder thành tblPurchase, đó là các ô Field: PurchaseOrderID, EmployeeID, VendorID, PurchaseOrderDate, và PurchaseOrderAmount.

4. Sửa các ô Field sau:

  • Từ PurchaseOrderID thành InventoryReceiptID
  • Từ PurchaseOrderDate thành InventoryReceiptDate
  • Từ PurchaseOrderAmount thành InventoryReceiptAmount


5. Kéo PurchaseOrderID từ khung tblPurchase vào Criteria Pane bên phải InventoryReceiptID.

6. Kéo VendorInvoiceID từ khung tblPurchase vào Criteria Pane bên phải PurchaseOrderID.

7. Xóa tblPurchaseOrder khỏi Table Pane. Để ý là ExpectedDeliveryDate không còn xuất hiện trong Criteria Pane. Tại sao vậy?

8. Kích Run trong nhóm Results. Cần thấy 27 bản ghi trong tập động dynaset. Nhưng tại sao có đến 378 bản ghi? Hãy trở về góc nhìn Design. Chưa có liên kết (phép nối nội) giữa qryVendorInfotblPurchase nên Access sẽ tạo danh sách gồm mọi tổ hợp khả dĩ các thuộc tính trên Criteria Pane. Hãy tạo liên kết bằng cách kéo VendorID từ qryVendorInfo đến VendorID trong tblPurchase. Chạy lại truy vấn để kiểm chứng rằng tập động dynaset có 27 bản ghi. Trở về góc nhìn Design. Đóng Query Builder. Kích Yes trong hộp thoại Save Changes.

BÀI TẬP 9.33: SỬA FRMPURCHASEORDER ĐỂ TẠO FRMPURCHASE – PHẦN 3

Các nhiệm vụ chính ở Phần 3 là sửa các nguồn dữ liệu và nhãn cho các thành phần điều khiển đồng thời bổ sung các thành phần điều khiển và nhãn mới.

1. Xóa thành phần điều khiển ExpectedDeliveryDate, nhãn của nó cũng bị xóa theo.

2. Dời tất cả các thành phần điều khiển và nhãn còn lại ở bên trái form xuống dưới để tạo khoảng trống cho InventoryReceiptID.

3. Thêm InventoryReceiptID vào form. Chọn PurchaseOrderID, nhấn Ctrl+C, rồi nhấn Ctrl+V. Dời bản sao PurchaseOrderID và nhãn của nó lên trên bản gốc.

4. Kích bản sao PurchaseOrderID. Sửa Control Source trên Data tab của Property Sheet thành InventoryReceiptID. Kích Other tab rồi sửa Name thành InventoryReceiptID. Sửa nhãn thành Inv. Receipt #.

5. Kích và kéo con trỏ qua bốn thành phần điều khiển và nhãn dưới đáy để chọn chúng. Dùng phím mũi tên xuống để dời chúng xuống dưới nhằm tạo khoảng trống cho VendorInvoiceID.

6. Tạo một bản sao nữa của PurchaseOrderID và nhãn của nó. Dời chúng vào khoảng trống bạn vừa tạo. Sửa Control Source trên Data tab của Property Sheet thành VendorInvoiceID và xóa input mask. Sửa nhãn thành Vendor Invoice #.

7. Sửa các thành phần điều khiển và nhãn sau:

  • Sửa Control Source và Name từ PurchaseOrderDate thành InventoryReceiptDate. Sửa nhãn thành Date Received.
  • Sửa Control Source và Name từ PurchaseOrderAmount thành InventoryReceiptAmount.


8. Kích EmployeeID combo box. Sửa Row Source cho EmployeeID trên Data tab thành qryMaterialsHandler. Sửa Name trên Other tab thành cboMaterialsHandler.

9. Sửa thứ tự tab. Kích Tab Order trong nhóm Tools. Dời InventoryReceiptID đến vị trí đầu tiên và VendorInvoiceID đến vị trí thứ ba. Kích OK. Lưu các thay đổi.

10. Dùng công cụ Align Top trên dải lệnh Arrange sao cho form ở góc nhìn Design giống với Hình 9.30. Chuyển sang góc nhìn Form. Form cần giống Hình 9.31. Lưu các thay đổi rồi đóng form.

Hình 9.31 frmPurchase ở góc nhìn Form sau khi hoàn tất Bài tập 9.34.

Form nhập biên bản nhận hàng đã tạo trong vài bài tập vừa qua hoạt động tốt ngoại trừ nút lệnh Update PO Amount. Trong Bài tập 9.34, bạn sẽ tạo tập hợp truy vấn mới để cập nhật InventoryReceiptAmount trong frmPurchase, sửa mcrUpdatePurchaseOrderAmount, và sửa nút lệnh cmdUpdatePOAmount. Hãy dùng hướng dẫn chi tiết ở các Bài tập 9.22 đến 9.24 cùng các diễn giải ngắn gọn ở Bài tập 9.34 dưới đây kèm theo hình ảnh.

BÀI TẬP 9.34: TẠO TRUY VẤN, MACRO, VÀ NÚT LỆNH ĐỂ CẬP NHẬT INVENTORYRECEIPTAMOUNT

1. Tạo một truy vấn tạo bảng tương tự qrySumOfPOLineExtensionsByPO để tính tổng các PurchaseLineExtensions theo InventoryReceiptID. Kích Query Design trên dải lệnh Create, thêm qryPurchaseLineItem từ hộp thoại Show Table. Kích Totals trong nhóm Show/Hide, thêm InventoryReceiptIDPurchaseLineExtensions vào Criteria Pane, rồi điều chỉnh Criteria Pane trông như Hình 9.32. Kích Make Table trong nhóm Query Type rồi nhập tblSumOfPurchLineExtensionsByIR (lưu ý tiền tố tbl) như trình bày trong hộp thoại Make Table ở Hình 9.32. Lưu truy vấn là qrySumOfPurchLineExtensionsByIR rồi đóng lại. Kích kép qrySumOfPurchLineExtensionsByIR trong Navigation Pane để thi hành nó. Gõ 100001 vào hộp thoại. Mở tblSumOfPurchLineExtensionsByIR để kiểm chứng giá trị tổng là $3,812.75.

Hình 9.32 qrySumOfPurchLineExtensionsByIR ở góc nhìn Design.

2. Tạo một truy vấn cập nhật tương tự qryUpdatePurchaseOrderAmount. Kích Query Design trên dải lệnh Create; Dùng Show Table để thêm tblPurchasetblSumOfPurchLineExtensionsByIR vào Table Pane. Kích Update trong nhóm Query Type. Thêm InventoryReceiptAmount vào Criteria Pane. Gõ [tblSumOfPurchLineExtensionsByIR].[SumOfPurchaseLineExtension] (xem Hình 9.33). Truy vấn hành động này sẽ lấy giá trị từ SumOfPurchaseLineExtension trong tblSumOfPurchLineExtensionsByIR rồi lưu vào InventoryReceiptAmount trong tblPurchase. Lưu truy vấn là qryUpdateInventoryReceiptAmount. Kiểm thử truy vấn bằng cách mở tblPurchase rồi sửa InventoryReceiptAmount ứng với InventoryReceiptID 100001 thành 0 và đóng bảng. Kích kép qryUpdateInventoryReceiptAmount trong Navigation Pane để thi hành truy vấn. Kiểm tra tblPurchase để thấy rằng InventoryReceiptAmount ứng với InventoryReceiptID 100001 đã được sửa thành $3,812.75.

Hình 9.33 qryUpdateInventoryReceiptAmount ở góc nhìn Design.

3. Sửa mcrUpdatePurchaseOrderAmount. Tạo một bản sao của mcrUpdatePurchaseOrderAmount trong Navigation Pane rồi đặt tên là mcrUpdateInventoryReceiptAmount. Mở mcrUpdateInventoryReceiptAmount ở góc nhìn Design. Kích qrySumOfPOLineExtensionsByPO dưới hành động OpenQuery đầu tiên rồi sửa thành qrySumOfPurchLineExtensionsByIR bằng cách gõ hay chọn từ danh sách combo box. Sửa Query Name cho hành động OpenQuery thứ hai thành qryUpdateInventoryReceiptAmount. Sửa Object Name cho hành động RepaintObject thành frmPurchase (xem Hình 9.34). Lưu rồi đóng macro.

Hình 9.34 mcrUpdateInventoryReceiptAmount ở góc nhìn Design.

4. Sửa nút lệnh trong frmPurchase. Mở frmPurchase ở góc nhìn Design. Mở Property Sheet rồi chọn cmdUpdatePOAmount. Sửa Caption trên Format tab thành Update Inv. Receipt Amount. Sửa thuộc tính On Click trên Event tab thành mcrUpdateInventoryReceiptAmount. Sửa Name trên Other tab thành cmdUpdateInvReceiptAmount. Kích nút lệnh Command trong phần Detail của form rồi kéo nút điều chỉnh bên phải sang phải để thấy toàn bộ Caption (xem Hình 9.30). Lưu rồi đóng form.

5. Kiểm thử nút lệnh mới. Mở tblPurchase; sửa InventoryReceiptAmount ứng với InventoryReceiptID 100003 thành 0 và đóng bảng. Kích kép frmPurchase trong Navigation Pane rồi dùng nút chọn bản ghi của form để chuyển đến Inventory Receipt # 100003. Kích nút lệnh Update Inv. Receipt Amount, nhập 100003 rồi kích OK. Kiểm chứng rằng trị giá nhận hàng InventoryReceiptAmount đã được sửa thành $664.50.

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

Đăng nhận xét