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
tblPurchase và
qryVendorInfo, 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
qryVendorInfo và
tblPurchase 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
InventoryReceiptID và
PurchaseLineExtensions 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
tblPurchase và
tblSumOfPurchLineExtensionsByIR 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.