Thứ Bảy, 8 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Bảng mua hàng - tồn kho

James Perry, Richard Newmark


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


Bảng mua hàng - tồn kho


Bảng mua hàng – tồn kho ghi nhận quan hệ dòng-vào nhiều-nhiều giữa tblPurchase tblInventory. Đây là hàng mà Pipefitters thật sự tiếp nhận từ các nhà cung ứng. Vì thế, tblInflow-PurchaseInventory sẽ lưu bốn trường:

1. Khóa chính tblPurchase.
2. Khóa chính tblInventory.
3. Số lượng từng hàng tồn kho đã nhận.
4. Chi phí của từng hàng tồn kho đã nhận.

Các khóa chính từ tblPurchase tblInventory sẽ kết hợp để tạo thành khóa chính phức hợp trong tblInflow-PurchaseInventory. Trước khi bạn bắt đầu bài tập kế, hãy đóng mọi bảng và forms đang mở.

BÀI TẬP 9.27: TẠO BẢNG-QUAN-HỆ TBLINFLOW-PURCHASEINVENTORY

1. Sao chép tblReservation-PurchaseOrderInventory trong Navigation Pane rồi đặt tên bản sao là tblInflow-PurchaseInventory. Trong Paste Options, chọn Structure Only. Mở tblInflow-PurchaseInventory ở góc nhìn Design.

2. Sửa các Field Names và Captions sau. ĐỪNG xóa trường:

  • Sửa Field Name từ PurchaseOrderID (khóa chính) thành InventoryReceiptID. Sửa thuộc tính Caption thành Inventory Receipt #.
  • Sửa Field Name từ QuantityOrdered  thành QuantityReceived.
  • Sửa Field Name từ POPrice  thành InventoryReceiptPrice.


3. Xóa VendorItemID. Lưu và đóng bảng.

4. Nhập dữ liệu từ Ch09.xlsx Excel file vào tblInflow-PurchaseInventory. Hãy theo các hướng dẫn ở Bài tập 9.5, thay tblVendor bằng tblInflow-PurchaseInventory. Khi nhập liệu xong, hãy mở tblInflow-PurchaseInventory để kiểm chứng là có 173 bản ghi đã được nhập.

Thứ Năm, 6 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Bảng mua hàng Purchase

James Perry, Richard Newmark


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


Bảng mua hàng Purchase


Bảng mua hàng Purchase lưu thông tin tương tự bảng đơn mua hàng Purchase Order. Hình 9.25 cho thấy những tương tự giữa các trường thuộc hai bảng. Khác biệt chính là khóa chính từ tblPurchaseOrder được dùng làm khóa ngoại trong tblPurchase. Liên kết này cho phép Pipefitters xác định được  đơn mua hàng nào đã hoàn tất, và với những đơn mua hàng chưa hoàn tất hay đã hoàn tất một phần, hàng tồn kho nào vẫn cần tiếp nhận.

Hình 9.25 So sánh các trường trong tblPurchaseOrdertblPurchase.

BÀI TẬP 9.26: TẠO BẢNG MUA HÀNG PURCHASE

Sao chép tblPurchaseOrder trong Navigation Pane rồi đặt tên bản sao là tblPurchase. Trong Paste Options, chọn Structure Only (chỉ sao chép cấu trúc). Mở tblPurchase ở góc nhìn Design.

1. Sao chép PurchaseOrderID. Kích phải trường khóa chính của PurchaseOrderID rồi chọn Copy. Di chuyển con trỏ đến dòng trống đầu tiên, kích phải, rồi kích Paste. Sửa thuộc tính Indexed thành Yes (Duplicates OK).

2. Sửa các Field Names và Captions sau. ĐỪNG xóa trường:

  • Sửa Field Name: PurchaseOrderID (khóa chính) thành InventoryReceiptID. Sửa thuộc tính Caption thành Inventory Receipt #.
  • Sửa Field Name từ PurchaseOrderDate thành InventoryReceiptDate. Sửa thuộc tính Caption thành Date Received.
  • Sửa Field Name từ PurchaseOrderAmount thành InventoryReceiptAmount. Sửa thuộc tính Validation Text từ Purchase Order amount… thành Inventory Receipt amount…
  • Xóa ExpectedDeliveryDate. Kích phải ExpectedDeliveryDate, kích Delete Rows, rồi kích Yes.


3. Thêm một trường mới, VendorInvoiceID. Sửa các thuộc tính sau: Field Size 20; Caption Vendor Invoice #; Required Yes; Allow Zero Length No; Indexed Yes (Duplicates OK) vì có thể Pipefitters sẽ tra cứu các biên bản bàn giao theo mã hóa đơn của nhà cung ứng.

4. Di chuyển một dòng bằng cách kích nút chọn dòng bên trái tên trường. Rồi kích và kéo đến nơi mong muốn. Hãy di chuyển PurchaseOrderID sao cho các trường theo thứ tự như bảng ở Hình 9.26.

Hình 9.26 Danh sách trường của tblPurchase.

5. Mở Property Sheet. Xóa Validation Rule và Validation Text ở mức bảng đã tạo cho tblPurchaseOrder.

6. Lưu và đóng bảng.

7. Nhập dữ liệu từ Ch09.xlsx Excel file vào tblPurchase. Theo hướng dẫn ở Bài tập 9.5, thay tblVendor bằng tblPurchase. Khi kết thúc việc nhập liệu, hãy mở tblPurchase để kiểm chứng là có tất cả 27 bản ghi.

Thứ Tư, 5 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Ghi nhận việc mua hàng (biên bản nhận hàng)

James Perry, Richard Newmark


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


Ghi nhận việc mua hàng (biên bản nhận hàng)


Một khi Pipefitters Supply Company nhập dữ liệu đơn mua hàng rồi truyền dữ liệu đơn mua hàng của họ đến nhà cung ứng (bằng thư tín, fax, email, hay website của nhà cung ứng), tblReservation-PurchaseOrderInventory sẽ chứa thông tin dòng chi tiết mặt hàng mà họ kỳ vọng nhà cung ứng sẽ gửi đến. Khi hàng đến điểm tiếp nhận, Pipefitters ghi nhận số lượng và danh tính của từng mặt hàng trong từng đợt. Nhân viên nhận hàng nhập thông tin tiếp nhận này trực tiếp vào hệ thống kế toán của công ty bằng việc dùng một form cơ sở dữ liệu. Dữ liệu nhập vào biên bản nhận hàng điện tử này sẽ được ghi vào bảng mua hàng Purchase và bảng-quan-hệ mua hàng – tồn kho Purchase-Inventory.

Nhiều công ty dùng máy quét mã vạch để đọc mã định danh tồn kho trên bao bì hàng tồn kho. Máy quét này còn có thể đóng dấu thời điểm vào biên bản nhận hàng tồn kho. Bộ phận thanh toán thu thập các thông tin khác về hàng tồn kho đã nhận, gồm mã hóa đơn nhà cung ứng và giá từng mặt hàng, từ hóa đơn nhà cung ứng rồi nhập thông tin đó trực tiếp vào bảng mua hàng Purchase.

Để ghi dữ liệu mua hàng vào cơ sở dữ liệu, bạn sẽ dùng các bảng sau như đã trình bày ở Hình 9.4: tblPurchase, tblInflow-PurchaseInventory, tblInventory, tblEmployee, tblVendor, và tblPurchaseOrder. Các bảng mới duy nhất bạn cần tạo là tblPurchasetblInflow-PurchaseInventory. Vì những bảng này tương tự tblPurchaseOrdertblReservation-PurchaseOrderInventory, bạn không cần tạo chúng từ đầu.

Thứ Ba, 4 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Dùng form đơn bán hàng để tạo form đơn mua hàng

James Perry, Richard Newmark


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


Dùng form đơn bán hàng để tạo form đơn mua hàng


Form nhập đơn mua hàng tương tự với form nhập đơn bán hàng. Dữ liệu của nó trích từ các nguồn: tblPurchaseOrder qryVendorInfo cho phần chính của form và dữ liệu trong subform dựa trên qryPurchaseOrderLineItem. Vì các đối tượng cơ sở dữ liệu này tương tự bảng và các truy vấn dùng để tạo form nhập đơn bán hàng, sẽ dễ hơn nếu sửa frmOrderSale thay vì tạo form nhập đơn mua hàng bằng Form Wizard. Mặc dù việc sửa các truy vấn và nguồn dữ liệu được dùng bởi một form có thể phức tạp, đó là kỹ năng cần thiết vì nó cho phép bạn tìm và sửa lỗi cũng như tạo những thay đổi lớn trên form hiện có.

Bất kỳ khi nào bạn làm việc với tổ hợp form-subform trong Access, bạn cần bắt đầu với subform trong cùng rồi mở rộng ra form chính. Đầu tiên, bạn sẽ sửa fsubSaleOrder ở các Bài tập 9.15 và 9.16. Sau đó bạn sẽ sửa frmSaleOrder ở các Bài tập 9.17 và 9.18. Sau khi có được form nhập đơn mua hàng hoạt động tốt, bạn sẽ thêm một số thành phần điều khiển ở các Bài tập 9.19 đến 9.25.

BÀI TẬP 9.15: TẠO FSUBPURCHASEORDER BẰNG CÁCH SỬA FSUBSALEORDER – PHẦN 1

Trong bài tập bạn sẽ sửa Record Source và Control Source của subform cho mọi trường hiện có.

1. Kích fsubSaleOrder trong Navigation Pane. Nhấn Ctrl+C rồi Ctrl+V. Sửa tên thành fsubPurchaseOrder.

2. Mở fsubPurchaseOrder ở góc nhìn Design. Kích Property Sheet trong nhóm Tools. Bạn có thể bù trừ cho việc giảm không gian khả kiến của subform bằng cách che Navigation Pane.

3. Sửa nguồn dữ liệu của subform. Chọn Form từ combo box ở đỉnh Property Sheet nếu nó chưa được chọn. Kích Data tab nếu nó chưa được chọn. Kích mũi tên combo box trong thuộc tính Record Source rồi chọn qryPurchaseOrderLineItem. Để ý rằng bạn phải cuộn lên để tìm qryPurchaseOrderLineItem và chỉ thấy được một phần tên.

4. Sửa tên xuất hiện trên form tab. Kích Format tab. Sửa Caption thành fsubPurchaseOrder.

5. Để ý rằng góc trái trên của SOPrice có một chỉ dấu thành phần điều khiển bất hợp lệ hình tam giác xanh lá cây, các thành phần điều khiển InventoryListPrice và SaleLineItem cũng vậy. Tam giác xanh lá cây xuất hiện trong các thành phần điều khiển này vì chúng không còn liên kết với nguồn dữ liệu của form; bạn đã sửa nguồn dữ liệu từ qrySaleOrderLineItem thành qryPurchaseOrderLineItem.

6. Tại sao không có tam giác xanh lá cây trên InventoryID, FullDescription, và QuantityOrdered?

7. Kích thành phần điều khiển SOPrice. Sửa thuộc tính Control Source trong Data tab từ SOPrice thành POPrice bằng cách gõ POPrice hay chọn mục đó từ combo box. Kích Other tab. Sửa Name thành POPrice.

8. Lặp lại Bước 7 để sửa:

9. InventoryListPrice thành InventoryStdCost, và

10. SaleOrderLineExtension thành PurchaseOrderLineExtension.

11. Sửa nhãn List Price thành Std. Cost.

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

BÀI TẬP 9.16: TẠO FSUBPURCHASEORDER BẰNG CÁCH SỬA FSUBSALEORDER – PHẦN 2

Các mục trên từng dòng của form nhập đơn mua hàng chứa trường lưu mã hàng tồn kho của nhà cung ứng, trường này không có trong các mục trên từng dòng của form nhập đơn bán hàng. Bạn sẽ thêm trường này vào subform ở bài tập sau.

1. Đóng Property Sheet để mở rộng không gian làm việc. Kích và kéo cạnh phải của phần Detail đến khấc 8-inch vì bạn cần thêm trường VendorItemID. Chọn tất cả các thành phần điều khiển và nhãn ngoại trừ InventoryItemID bằng cách nhấn và giữ phím Ctrl rồi kích từng thành phần điều khiển và nhãn. Nhấn và giữ phím mũi tên phải (hay nhấn nó liên tục) để di chuyển các thành phần điều khiển và nhãn sang cạnh phải của form.

2. Thêm một thành phần điều khiển cho VendorItemID. Kích InventoryID. Nhấn và giữ phím Shift, rồi kích nhãn tương ứng của nó. Nhấn Ctrl+C rồi Control+V để tạo một bản sao của thành phần điều khiển và nhãn. Sửa văn bản trong ô nhãn thành Vendor Item #. Để ý ô nhãn sẽ mở rộng cho vừa với nhãn mới.

3. Kích thành phần điều khiển InventoryID mới (thành phần điều khiển bạn vừa tạo). Mở Property Sheet. Kích Data tab nếu nó chưa được chọn. Sửa Control Source thành VendorItemID. Xóa Input Mask. Kích Other tab. Sửa Name thành VendorItemID.

4. Nhấn và giữ phím Shift, kích VendorItemID và nhãn Vendor Item # để chọn cả hai. Kích Arrange tab. Kích Size/Space menu trong nhóm Sizing & Ordering rồi chọn To Widest trong phần Portion của menu (xem Hình 9.8).

5. Với cả hai đối tượng vẫn đang được chọn, dùng phím mũi tên phải để chuyển chúng sang bên trái của FullDescription và nhãn của nó. Kích vùng trống trên form để khử việc chọn VendorItemID và nhãn của nó. Dùng kỹ thuật Shift + kích để chọn VendorItemID FullDescription. Kích Align menu trong nhóm Sizing & Ordering rồi chọn Top để di chuyển VendorItemID lên trên và ngang hàng với FullDescription. Làm tương tự với các nhãn liên quan.

6. Sửa văn bản trong nhãn Item # thành Our Item #. Chọn nhãn và thành phần điều khiển InventoryID. Định cỡ To Widest như bạn đã làm ở Bước 4. Hãy làm tất cả các nhãn cách đều nhau. Chọn tất cả các nhãn bằng kỹ thuật kích và kéo như được minh họa ở Hình 9.7. Kích Size/Space menu rồi chọn Equal Horizontal trong phần Spacing của menu. Lặp lại qui trình này với các thành phần điều khiển trong phần Detail của form.

7. Kích Tab Order trong nhóm Tools (trên dải lệnh Design). Trong hộp thoại Tab Order, kích nút Auto Order. Để ý là các Field Names trong danh sách Custom Order được sắp lại từ trái sang phải trên form. Kích OK.

8. Loại bỏ khoảng trống bên dưới các nhãn và bên dưới các thành phần điều khiển trường bằng cách kích và kéo các thanh Detail Form Footer lên trên.

9. Lưu các thay đổi. Xem form ở góc nhìn Form. Form cần giống Hình 9.16.

Hình 9.16 fsubPurchaseOrder ở góc nhìn Form.

10. Chuyển về góc nhìn Design. Mở Property Sheet nếu nó chưa được mở. Kích nhãn PurchaseOrderLineExtension. Để ý tên của nó là SaleOrderLineExtension_Label. Mặc dù cần đặt lại tên nhãn cũng như thành phần điều khiển, ở đây sẽ không làm nhiệm vụ này trong mọi bài tập có sao chép form để tiết kiệm thời gian.

Sau khi hoàn thành Bài tập 9.16, bạn có thể nhận ra rằng việc sửa frmSaleOrder, sẽ trích dữ liệu từ hai truy vấn và một bảng, cần nhiều công sức hơn việc sửa subform với dữ liệu dẫn xuất từ một truy vấn duy nhất. Một trong những nhiệm vụ lý thú mà bạn sẽ thực hiện trong Bài tập 9.17 là sửa truy vấn bên trong form.

BÀI TẬP 9.17: TẠO FRMPURCHASEORDER BẰNG CÁCH SỬA FRMSALEORDER – PHẦN 1

Trong bài tập này bạn sẽ sao chép và sửa frmSaleOrder để tạo frmPurchaseOrder. Quá trình này bao gồm việc sửa các tiêu đề và nhãn để nhận diện đúng frmPurchaseOrder cũng như sửa Source Object của subform thành fsubPurchaseOrder rồi liên kết nó với frmPurchaseOrder.

1. Tạo một bản sao của frmSaleOrder (trong phần Forms của Navigation Pane) rồi đặt tên bản sao là frmPurchaseOrder (xem Bài tập 9.15, Bước 1).

2. Mở frmPurchaseOrder ở góc nhìn Design.

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

4. Sửa tên xuất hiện trên tab của form. Mở Property Sheet. Che Navigation Pane để nhìn form thoáng hơn. Chọn Form từ Property Sheet combo box. Kích Format tab nếu nó chưa hiển thị. Sửa Caption thành frmPurchaseOrder.

5. Sửa nguồn dữ liệu của subform. Chọn fsubSaleOrder (bạn chưa sửa nguồn thành fsubPurchaseOrder) từ Property Sheet combo box. Kích Data tab. Kích mũi tên combo box trong thuộc tính Source Object rồi chọn Form.fsubPurchaseOrder. Để ý rằng fsubPurchaseOrder lập tức được hiển thị trong khung subform. Gõ PurchaseOrderID vào các thuộc tính Link Master Fields và Link Child Fields. Các thuộc tính này liên kết subform với form, cho phép form hiển thị đúng các mục trên từng dòng của đơn mua hàng ứng với đơn mua hàng đó. Để ý là bạn không thể dùng công cụ liên kết trường Subform Field Linker như đã làm ở Bài tập 8.43 vì bạn chưa sửa thuộc tính Control Source của frmPurchaseOrder.

6. Sửa tên subform trong Other tab (trên Property Sheet) thành fsubPurchaseOrder.

BÀI TẬP 9.18: TẠO FRMPURCHASEORDER BẰNG CÁCH SỬA FRMSALEORDER – PHẦN 2

Trong bài tập này, bạn sẽ tạo một truy vấn Record Source mới đằng sau form rồi kết hợp các thành phần điều khiển trường với dữ liệu từ Record Source mới của form.

1. Mở frmPurchaseOrder ở góc nhìn Design nếu nó chưa mở. Hãy sửa nguồn dữ liệu của form. Mở Property Sheet rồi chọn Form ở 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 mới xuất hiện.

2. Kích Tables tab trong cửa sổ Show Table.

3. Kích kép tblPurchaseOrder, rồi kích Query tab và kích kép qryVendorInfo. Kích Close.

4. Di chuyển và định cỡ lại các khung tblPurchaseOrder qryVendorInfo để có thể thấy mọi tên trường, và dành một khoảng không giữa chúng để dễ dàng thấy liên kết mà bạn sẽ tạo.

5. Hãy liên kết tblPurchaseOrder với qryVendorInfo trên trường chung của chúng, VendorID. Kích và kéo trường VendorID từ qryVendorInfo đến trường VendorID trong tblPurchaseOrder. Bạn phải tự tạo liên kết này vì Access không tự động tạo các liên kết đến/từ các truy vấn.

6. Hãy chọn tất cả các thuộc tính trong khung tblPurchaseOrder. Kích PurchaseOrderID, nhấn và giữ phím Shift, nhấn phím mũi tên xuống cho đến khi tất cả các thuộc tính đều được chọn, rồi kích và kéo các thuộc tính vào Criteria Pane.

7. Thêm tất cả các thuộc tính từ khung qryVendorInfo ngoại trừ VendorID vào cột trống đầu tiên trong Criteria Pane. Bạn có thể cần dùng thanh cuộn của Criteria Pane để thấy được cột trống.

8. Sắp xếp form theo PurchaseOrderID bằng cách chọn Ascending trong ô Sort của PurchaseOrderID.

9. Kích nút Save As trong nhóm Close thuộc Design tab. Gõ frmPurchaseOrder rồi kích OK. Đóng Query Builder. Kích Yes trong hộp thoại Save Changes. Để ý là tất cả các thành phần điều khiển trường đều chứa tam giác xanh lá cây, cho biết các thành phần điều khiển này không hợp lệ: dữ liệu nguồn mà chúng trỏ đến không còn tồn tại trong truy vấn Record Source của form mà bạn vừa sửa.

10. Sửa các thành phần điều khiển trường và nhãn. Mở Property Sheet nếu nó chưa mở. Kích thành phần điều khiển SaleOrderID. Sửa Control Source trên Data tab thành PurchaseOrderID. Kích Other tab rồi sửa Name thành PurchaseOrderID. Kích nhãn Sale Order # rồi sửa thành Purchase Order #. Lặp lại quá trình này cho tất cả các thuộc tính liệt kê ở Hình 9.17.

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

11. Sửa Input Mask (trên Data tab của Property Sheet) cho VendorID thành 0000;;_. Xóa Short Date khỏi thuộc tính Format trên Format tab.

12. Sửa Input Mask cho PurchaseOrderDate thành 99/99/0000;0;_. Đặt Default Value là Date().

13. Sửa Input Mask cho ExpectedDeliveryDate thành 99/99/0000;0;_.

14. Chuyển sang góc nhìn Form. Để ý rằng thông tin liên lạc chính Primary Contact quá thấp và một phần subform bị khuất nếu không dùng thanh trượt. Hãy trở về góc nhìn Design rồi di chuyển thành phần điều khiển và nhãn Primary Contact, đồng thời tăng chiều cao và chiều rộng của khung subform. Bạn sẽ cần tăng chiều rộng form đến khấc 8-3/4 inches. Hình 9.18 thể hiện form hoàn tất ở các góc nhìn Design và Form. Lưu các thay đổi và đóng form.

Hình 9.18 Form nhập liệu đơn mua hàng ở các góc nhìn Design và Form.

Form bạn vừa tạo chưa hoạt động tốt. Record Source cho EmployeeID combo box là qrySalesperson giới hạn việc lựa chọn nhân viên bán hàng mà thôi. Bạn sẽ sửa qrySalesperson trong bài tập kế để chọn nhân viên mua hàng cho combo box.

BÀI TẬP 9.19: SỬA EMPLOYEEID COMBO BOX

1. Sao chép qrySalesperson trong Navigation Pane rồi đặt tên bản sao là qryPurchasingAgent.

2. Mở qryPurchasingAgent ở góc nhìn Design.

3. Sửa tiêu chí Criteria cho EmployeeTypeID thành "60", tức EmployeeTypeID cho nhân viên mua hàng. Xem truy vấn ở góc nhìn Datasheet để kiểm chứng tất cả nhân viên trong tập động dynaset đều có kiểu Type là 60. Lưu rồi đóng truy vấn.

4. Mở frmPurchaseOrder ở góc nhìn Design nếu nó chưa được mở, và mở Property Sheet. Kích EmployeeTypeID combo box. Trên Data tab của Property Sheet, sửa Row Source thành qryPurchasingAgent. Sửa thuộc tính Name trên Other tab thành cboPurchasingAgent.

5. Chuyển sang góc nhìn Form. Để ý là Purchasing Agent combo box không có đầu đề cột (xem phần trên của Hình 9.19). Để hiển thị chúng, trở về góc nhìn Design rồi chọn combo box nếu nó chưa được chọn. Kích Format tab rồi sửa thuộc tính Column Heads thành Yes. Chuyển lại góc nhìn Form. Bây giờ đầu đề cột đã xuất hiện như phần dưới của Hình 9.19.

Hình 9.19 Purchasing Agent combo box có và không có đầu đề cột.

6. Lưu rồi đóng form.

BÀI TẬP 9.20: TẠO TRUY VẤN CHO COMBO BOX TRA CỨU TỒN KHO

1. Tạo một bản sao của qryPurchaseOrderLineItem trong Navigation Pane rồi lưu bản sao là qryPOInventoryItemLookup.

2. Mở qryPOInventoryItemLookup ở góc nhìn Design.

3. Kích khung tblReservation-PurchaseOrderInventory rồi xóa nó bằng cách nhấn phím Delete. Để ý rằng tất cả các trường tham chiếu đến bảng đó cũng bị xóa. Xóa PurchaseOrderLineExtension bằng cách kích cột rồi nhấn phím Delete.

4. Xem truy vấn ở góc nhìn Datasheet. Hàng tồn kho được sắp theo InventoryID. Các phương án khác để sắp tập động dynaset là theo thứ tự từ điển của FullDescription tăng dần hay giảm dần, tức sắp mặt hàng theo kích cỡ, rồi theo thành phần cấu tạo, rồi theo kiểu; hoặc sắp tập động dynaset theo chi phí chuẩn. Nếu sau này nhân viên mua hàng bảo bạn rằng họ cần sắp tồn kho theo cách khác thì bạn sẽ phải tạo lại biểu thức FullDescription để sửa thứ tự sắp. Vì thế, bạn sẽ tăng tính linh hoạt của thiết kế bằng cách tạo một trường riêng cho từng mô tả phân loại/kiểu.

5. Trở về góc nhìn Design. Xóa trường FullDescription. Nếu bạn không thể thấy toàn bộ bảng và các trường của chúng, hãy di dời bảng hay kích và kéo đường phân chia.

6. Giả sử Pipefitters muốn tồn kho được sắp theo thành phần cấu tạo Composition / đường kính Diameter / kiểu Type. Kéo CompositionDescription, InventoryDiameterDescription, và InventoryTypeDescription từ các bảng tương ứng của chúng vào các cột đầu tiên, hai, và ba trong Criteria Pane. Chọn Ascending làm thuộc tính Sort cho cả ba trường.

7. Kích và kéo InventoryID từ tblInventory vào cột đầu tiên của Criteria Pane. InventoryID phải có trong truy vấn mặc dù bạn sẽ không thấy nó trong combo box vì InventoryID là giá trị phải được lưu vào tblReservation-PurchaseOrderInventory.

8. Chuyển sang góc nhìn Datasheet. Để ý là các mặt hàng không còn được sắp theo InventoryID vì bạn đã sửa thứ tự sắp để nhân viên mua hàng Pipefitters dễ tìm hàng tồn kho hơn.

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

BÀI TẬP 9.21: TẠO COMBO BOX TRA CỨU TỒN KHO

1. Mở fsubPurchaseOrder ở góc nhìn Design. Kích thành phần điều khiển InventoryID rồi nhấn phím Delete.

2. Tạo combo box tra cứu tồn kho. Kích Combo Box trong nhóm Controls rồi kích kép vào phần Detail của subform nơi ô thành phần điều khiển InventoryID đã từng ở đó.

  • Trong hộp thoại tùy chọn đầu tiên, I want the combo box to get the values from another table or query (tôi muốn combo box nhận các giá trị từ một bảng hay truy vấn khác), đã được chọn sẵn. Kích Next.
  • Trong hộp thoại thứ hai, kích nút radio Queries, kích kép Query: qryPOInventoryItemLookup để chọn truy vấn rồi kích Next để sang hộp thoại kế.
  • Kích >> để chọn tất cả các trường. Kích Next.
  • Kích Next vì bạn đã tạo thứ tự sắp trong câu truy vấn.
  • Kích Next để chấp nhận kích cỡ cột mặc định.
  • Kích Next vì InventoryID đã được chọn là giá trị được lưu vào tblReservation-PurchaseOrderInventory.
  • Kích nút radio Store that value in this field: (lưu giá trị đó vào trường sau:), chọn InventoryID từ combo box. Kích Next.
  • Đặt tên combo box là cboPOInventoryLookup. Kích nút Finish để tạo combo box.


3. Xóa nhãn combo box bạn vừa tạo. Kích nhãn combo box mới, có thể khó thấy vì nó chồng lên ô văn bản InventoryID. Nhấn phím Delete.

4. Kích cboPOInventoryLookup, nhấn phím Control rồi chọn nhãn Our Item #. Trên dải lệnh Arrange, chọn Size/Space menu rồi chọn To Narrowest. Sắp ngay ngắn combo box với nhãn Our Item # bằng việc dùng các chức năng Align trên Arrange tab. Chọn cboPOInventoryLookup VendorID rồi sắp ngay ngắn chúng.

5. Kích Design tab và mở Property Sheet. Trên subform, kích combo box mới. Sửa thuộc tính Name của nó trên Other tab của Property Sheet thành cboPOInventoryLookup. Sửa thuộc tính Column Heads trên Format tab thành Yes.

6. Dùng Tab Order trong nhóm Tools trên dải lệnh Design để sắp thứ tự tab tự động trong subform.

7. Kiểm tra combo box mới (xem Hình 9.20) và thứ tự tab bằng cách chuyển sang góc nhìn Form. Khi kiểm tra xong, lưu và đóng subform.

Hình 9.20 Combo box tồn kho ở góc nhìn Form.

Form nhập đơn mua hàng cũng cần có một combo box làm thành phần điều khiển nhằm giúp đảm bảo VendorID đúng được nhập vào. Vì việc tạo VendorID combo box tương tự các combo box khác mà bạn đã tạo, đây sẽ là bài tập cho bạn.

Form nhập đơn mua hàng đã có nhiều kiểm soát được tạo bên trong, bao gồm các kiểm soát được tạo bên trong bảng (chẳng hạn mặt nạ nhập liệu, trường bắt buộc, qui tắc hợp lệ), kiểm soát ở mức cơ sở dữ liệu như áp dụng tính toàn vẹn tham chiếu, và kiểm soát ở mức form như combo box. Trong loạt bài tập kế bạn sẽ tạo một truy vấn tạo bảng, một truy vấn cập nhật, một macro, và một nút lệnh, tất cả đều nhằm cập nhật tổng trị giá đơn mua hàng.

BÀI TẬP 9.22: TẠO TRUY VẤN TẠO BẢNG ĐỂ TÍNH TỔNG TRỊ GIÁ TRÊN TỪNG DÒNG THUỘC ĐƠN MUA HÀNG THEO PURCHASEORDERID.

Truy vấn này tương tự truy vấn tạo bảng mà bạn đã tạo ở Chương 8 để tính tổng trị giá trên từng dòng thuộc đơn bán hàng theo hóa đơn bán hàng. Vì thế, ta sẽ dùng truy vấn đó làm để khởi đầu.

1. Kích qrySumOfLineExtensionsByInvoice ở phần Queries thuộc Navigation Pane, nhấn Ctrl+C rồi Ctrl+V. Gõ qrySumOfPOLineExtensionsByPO vào ô văn bản ở hộp thoại Paste As, rồi kích OK.

2. Mở qrySumOfPOLineExtensionsByPO ở góc nhìn Design.

3. Kích Show Table trong nhóm Query Setup, kích Queries tab, rồi kích kép qryPurchaseOrderLineItem. Đóng hộp thoại. Định cỡ lại khung truy vấn để thấy được tất cả các tên trường.

4. Sửa Table trong cả hai trường thuộc Criteria Pane thành qryPurchaseOrderLineItem. Sửa tên Field đầu tiên thành PurchaseOrderID và tên Field thứ hai thành PurchaseOrderLineExtension.

5. Sửa Criteria cho PurchaseOrderID thành [PO #]. Khi thi hành truy vấn bạn sẽ được nhắc nhập PurchaseOrderID của trị giá đơn mua hàng mà bạn muốn cập nhật. Không có tham biến này, Access sẽ tính lại tổng các trị giá trên từng dòng cho mọi đơn mua hàng, sẽ mất nhiều thời gian tính toán vì ngày càng nhiều đơn mua hàng được nhập vào hệ thống. Xóa khung qrySaleLineItem bằng cách chọn nó rồi nhấn phím Delete.

6. Mở Property Sheet ở nhóm Show/Hide. Kích vùng trống trong Table Pane để hiển thị Query Properties trong Property Sheet. Sửa Destination Table thành tblSumOfPOLineExtensionsByPO. Kết quả truy vấn giờ đây sẽ được lưu vào bảng tạm tblSumOfPOLineExtensionsByPO. Mỗi lần truy vấn này được thi hành, phiên bản cũ của bảng (và dữ liệu của nó) bị xóa và một phiên bản mới của bảng được tạo ra. Đóng Property Sheet và lưu các thay đổi.

7. Trước khi thi hành qrySumOfPOLineExtensionsByPO là một truy vấn tạo bảng, hãy mở truy vấn ở góc nhìn Design. Kích Datasheet View trong nhóm Results để kiểm chứng kết quả truy vấn cần khớp với Hình 9.21.

Hình 9.21 qrySumOfPOLineExtensionsByPO tblSumOfPOLineExtensionsByPO ở góc nhìn Datasheet với PO # là 100001.

8. Trở về góc nhìn Design. Kích Run rồi gõ 100001 vào hộp thoại Enter Parameter Value. Để ý hộp thoại khuyến cáo rằng bạn chuẩn bị dán một dòng vào bảng mới mà không thể quay lui. Kích Yes rồi đóng truy vấn. Hãy kiểm chứng kết quả bằng cách kích kép tblSumOfPOLineExtensionsByPO, bảng bạn vừa tạo ra, ở Navigation Pane. Đóng bảng. Kích kép qrySumOfPOLineExtensionsByPO để thi hành một lần nữa. Một hộp thoại khuyến cáo là bạn chuẩn bị thi hành một truy vấn tạo bảng mà sẽ sửa dữ liệu trong bảng của bạn. Kích Yes và bạn sẽ nhận một khuyến cáo khác cho biết phiên bản hiện thời của bảng sẽ bị xóa trước khi thi hành truy vấn. Kích Yes rồi gõ 100001, tức mã đơn mua hàng chứa tổng trị giá bạn muốn cập nhật, rồi kích OK. Bạn sẽ nhận khuyến cáo cho biết bạn chuẩn bị dán một dòng vào bảng mới mà ở trên quay lui. Kích Yes. Đóng truy vấn rồi mở tblSumOfPOLineExtensionsByPO để kiểm chứng là kết quả truy vấn đã được chuyển vào bảng (xem Hình 9.21). Đóng bảng.

Bây giờ bạn cần chuyển tổng trị giá đơn mua hàng từ tblSumOfPOLineExtensionsByPO vào tblPurchaseOrder. Điều này cần một truy vấn cập nhật.

BÀI TẬP 9.23: TẠO MỘT TRUY VẤN CẬP NHẬT ĐỂ CHUYỂN TỔNG TRỊ GIÁ TRÊN TỪNG DÒNG CỦA ĐƠN MUA HÀNG VÀO TBLPURCHASEORDER

1. Kích Create tab rồi kích Query Design trong nhóm Queries.

2. Trong hộp thoại Show Table, kích kép tblPurchaseOrder tblSumOfPOLineExtensionsByPO. Đóng hộp thoại. Định cỡ lại các khung để hiển thị toàn bộ tên bảng và tất cả các tên trường.

3. Kích Update trong nhóm Query Type. Bạn sẽ thấy dòng Update To xuất hiện trong Criteria Pane. Field và Table ở hai dòng đầu của Criteria Pane sẽ qui định trường được cập nhật. Kích kép PurchaseOrderAmount trong tblPurchaseOrder.

4. Dòng Update To qui định bảng và thuộc tính nguồn thông tin. Gõ [tblSumOfPOLineExtensionsByPO].[SumOfPurchaseOrderLineExtensions]. Phải có dấu chấm giữa tên bảng và tên trường.

5. Lưu truy vấn là qryUpdatePurchaseOrderAmount. Đóng truy vấn.

6. Kiểm thử truy vấn cập nhật này. Mở tblPurchaseOrder ở góc nhìn Datasheet. Sửa giá trị PurchaseOrderAmount với Purchase Order # 100001 thành 0. Tab sang bản ghi kế vì Access sẽ không cập nhật bản ghi cho đến khi bạn tab sang bản ghi kế hay đóng bảng. Cứ để bảng mở.

7. Kích kép tblSumOfPOLineExtensionsByPO để thi hành truy vấn tạo bảng. Kích Yes trong các hộp thoại khuyến cáo. Gõ 100001 cho PO #. Kích kép qryUpdatePurchaseOrderAmount để thi hành truy vấn. Kích Yes trong các hộp thoại khuyến cáo. Kích nơi bất kỳ trong tblPurchaseOrder để tái hiển thị bảng, điều đó sẽ cập nhật PurchaseOrderAmount với Purchase Order # 100001 thành $3,812.75. Đóng bảng.

BÀI TẬP 9.24: TẠO MACRO ĐỂ TỰ ĐỘNG THI HÀNH CÁC TRUY VẤN TẠO BẢNG VÀ CẬP NHẬT

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ì hành động Set Warnings không có trong tập hành động mặc định.

2. Trong Add New Action combo box, bắt đầu gõ SetWarnings. Access sẽ nhận diện hành động sau khi bạn gõ SetW vì không có hành động nào khác bắt đầu với bốn chữ đó (xem Hình 9.22). Nhấn Enter để hiển thị các tham biến hành động Action Arguments. Hành động SetWarnings qui định việc có hiển thị các thông báo hệ thống hay không. Khi được đặt là No (thiết đặt mặc định) các hộp thoại khuyến cáo bạn đã thấy khi thi hành các truy vấn hành động sẽ không được hiển thị. Hãy để tham biến Warnings On được đặt là No để không hiển thị các hộp thoại khuyến cáo.

Hình 9.22 Macro mcrUpdate-PurchaseOrderAmount hoàn chỉnh.

3. Một cách thi hành truy vấn và xem nó ở góc nhìn Datasheet là kích kép nó trong Navigation Pane. Hành động OpenQuery cũng thi hành chức năng đó. Hãy chọn OpenQuery trong Add New Action combo box. Khi bạn biết hành động nào bạn muốn, sẽ nhanh hơn nếu gõ tên hành động thay vì cuộn danh sách. Nếu bạn gõ tên hành động, bạn cần nhấn phím Enter để hiển thị hộp thoại Action Arguments.

4. Kích Query Name combo box. Chọn qrySumOfPOLineExtensionsByPO để thi hành truy vấn hành động đầu tiên trong hai truy vấn mà bạn đã tạo để cập nhật PurchaseOrderAmount. Để tham biến View là Datasheet, để hành động OpenQuery hoạt động như khi kích kép truy vấn trong Navigation Pane. Để Data Mode được đặt mặc định là Edit, điều này cho phép sửa các bản ghi hiện hữu hay các bản ghi mới được thêm.

5. Thêm hành động OpenQuery thứ hai vào ô Add New Action kế tiếp. Chọn qryUpdatePurchaseOrderAmount trong Query Name combo box. Để View được đặt là Datasheet và Data Mode được đặt là Edit.

6. Bước cuối cùng cập nhật PurchaseOrderAmount trong form là tái hiển thị form, tức cập nhật giá trị PurchaseOrderAmount giống như cách bạn đã tái hiển thị tblPurchaseOrder bằng cách kích nó sau khi thi hành truy vấn cập nhật. Gõ RepaintObject vào ô Add New Action kế tiếp. Nhấn phím Enter.

7. Chọn Form là Object Type và frmPurchaseOrder từ danh sách Object Names. Macro hoàn chỉnh được thể hiện ở Hình 9.22.

8. Đóng macro. Trong hộp thoại Save As, đặt tên macro là mcrUpdatePurchaseOrderAmount.

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

1. Mở frmPurchaseOrder ở góc nhìn Design. Tạo khoảng trống cho nút lệnh Macro ở đáy form. Kích và kéo đỉnh của thanh Form Footer xuống dưới để bạn có ½-inch khoảng trống giữa đáy subform và thanh Form Footer.

2. Kích Button trong nhóm Controls. Di chuyển con trỏ chuột ngay dưới góc trái dưới của subform rồi kích kép để khởi động Command Button Wizard. Các hộp thoại Command Button Wizard được trình bày ở Hình 9.23 để giúp bạn thực hiện.

Hình 9.23 Các hộp thoại Command Button Wizard.

3. Trong hộp thoại đầu tiên, kích Miscellaneous trong danh sách Category, rồi kích Run Macro trong danh sách Actions. Kích Next.

4. Kích kép mcrUpdatePurchaseOrderAmount trong hộp thoại kế. Việc kích kép sẽ chọn macro mà bạn muốn cho nút lệnh thi hành rồi đưa bạn đến hộp thoại kế.

5. Để người dùng hiểu mục đích của nút lệnh, hãy dùng một mô tả ngắn và rõ về chức năng của nút trừ phi bạn có một hình ảnh minh họa rõ mục đích. Giả sử bạn không có một ảnh như thế, kích nút radio Text, gõ Update PO Amount vào ô Text, rồi kích Next.

6. Trong hộp thoại cuối cùng, gõ cmdUpdatePOAmount. Để ý tiền tố cmd cho nút lệnh. Kích Finish.

7. Kích thành phần điều khiển PurchaseOrderAmount, mở Property Sheet, chọn Data tab. Để ngăn người dùng nhập sai tổng trị giá đơn mua hàng, hãy sửa giá trị mặc định Default Value về 0, sửa Enabled về No, và sửa Locked về Yes. Vì đây là trường bắt buộc, việc thêm Default Value sẽ cho phép bản ghi hiện thời được ghi vào tblPurchaseOrder trước khi người dùng thi hành UpdatePOAmount macro.

8. Làm rõ với người dùng là không thể sửa PurchaseOrderAmount. Trên Other tab, sửa thuộc tính Tab Stop thành No. Kích Format tab rồi sửa Back Style và Border Style thành Transparent.

9. Lưu các thay đổi và đóng form.

THỬ NGHIỆM

Hãy kiểm thử form nhập đơn mua hàng. Kích kép frmPurchaseOrder trong Navigation Pane. Nhập thông tin ở Hình 9.24. Sau khi nhập dữ liệu, nhấn nút lệnh UpdatePOAmount. Gõ 999999 vào hộp thoại rồi kích OK. Giá trị PurchaseOrderAmount cần thay đổi từ $0.00 thành $552.00.

Hình 9.24 Form nhập đơn mua hàng với dữ liệu kiểm thử.

Hãy dùng các nút chọn bản ghi để xóa dữ liệu bạn vừa nhập. Kích một nút chọn bản ghi Record Selector trong subform rồi nhấn phím Delete. Lặp lại qui trình này cho các mục còn lại trong subform, rồi dùng nút chọn bản ghi của form để xóa dữ liệu form.

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Tạo truy vấn cho các mục trên dòng trong đơn mua hàng

James Perry, Richard Newmark


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


Tạo truy vấn cho các mục trên dòng trong đơn mua hàng


Các mục trên từng dòng trong đơn mua hàng thì tương tự các mục trên từng dòng trong đơn bán hàng. Cả hai đều bao gồm mã mặt hàng, mô tả mặt hàng đã đặt, số lượng đã đặt, đơn giá, và trị giá trên dòng (đơn giá x số lượng). Hơn nữa, các mục trên từng dòng trong đơn mua hàng còn chứa mã mặt hàng của nhà cung ứng vì hệ thống đánh mã tồn kho của nhà cung ứng thường khác với hệ thống được bên mua sử dụng. Vì thế, các mục trên từng dòng trong đơn mua hàng cần thông tin từ những bảng sau: tblReservation-PurchaseOrderInventory, tblInventory, tblInventoryComposition, tblInventoryType, và tblInventoryDiameter. Ngoài ra, bạn sẽ thêm 2 trường mới: PurchaseOrderLineExtension, sẽ chứa biểu thức (đơn giá x số lượng); và FullDescription, sẽ nối các mô tả về thành phần cấu tạo, kiểu, và đường kính của từng mặt hàng. Do độ phức tạp của truy vấn này và sự tương tự của nó so với qrySaleOrderLineItem, ta có thể tiết kiệm thời gian và công sức bằng cách sao chép qrySaleOrderLineItem rồi sửa trên đó.

BÀI TẬP 9.14: TẠO QRYPURCHASEORDERLINEITEM CHO FORM NHẬP ĐƠN MUA HÀNG

1. Kích qrySaleOrderLineItem ở Navigation Pane. Nhấn Ctrl+C rồi Ctrl+V. Sửa Query Name trong hộp thoại Paste Table As thành qryPurchaseOrderLineItem, rồi kích OK.

2. Mở qryPurchaseOrderLineItem ở góc nhìn Design.

3. Kích Show Table trong nhóm Query Setup, kích kép tblReservation-PurchaseOrderInventory, rồi kích Close. Định cỡ lại tblReservation-PurchaseOrderInventory để hiển thị toàn bộ tên bảng và tất cả các tên trường. Sau đó chuyển nó lên trên tblReservation-SaleOrderInventory để dễ làm việc hơn.

4. Trên Criteria Pane, sửa Table cho các trường InventoryID, QuantityOrdered, SOPrice, và SaleOrderID thành tblReservation-PurchaseOrderInventory.

5. Sửa các tên trường Field sau:

6. SOPrice thành POPrice.

7. SaleOrderID thành PurchaseOrderID.

8. InventoryListPrice thành InventoryStdCost.

9. Kích SaleOrderLineExtension. Kích Builder trong nhóm Query Setup để mở hộp thoại Expression Builder. Sửa biểu thức SaleOrderLineExtension: [QuantityOrdered] * [SOPrice] thành PurchaseOrderLineExtension: [QuantityOrdered] * [POPrice].

10. Kéo VendorItemID từ tblReservation-PurchaseOrderInventory vào Criteria Pane đè lên cột FullDescription để đặt VendorItemID vào giữa InventoryID và FullDescription.

11. Kích tblReservation-SaleOrderInventory; nhấn phím Delete để loại bảng khỏi Table Pane.

12. Lưu truy vấn. Kích Datasheet View trong nhóm Results để thi hành truy vấn và xem tập động dynaset (xem Hình 9.15). Mở tblReservation-PurchaseOrderInventory ở góc nhìn Datasheet. Để ý rằng cả tập động dynaset và bảng đều có 181 bản ghi. Kích mũi tên Sort ở cột Item # của tblReservation-PurchaseOrderInventory để sắp theo thứ tự tăng. Chúng chứa cùng số liệu vì thông tin truy vấn đến từ tblReservation-PurchaseOrderInventory.

Hình 9.15. Tập hợp động qryPurchaseOrderLineItem.

13. Đóng truy vấn và bảng. Đừng lưu những thay đổi trên bảng hay trên truy vấn.

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

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Tạo truy vấn dữ liệu nhà cung ứng dùng trong form đơn mua hàng

James Perry, Richard Newmark


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


Tạo truy vấn dữ liệu nhà cung ứng dùng trong form đơn mua hàng


Mục đích chính của truy vấn thông tin nhà cung ứng đơn bảng này là kết hợp các trường thành phố City, bang State, và mã vùng Zip Code để trình bày một góc nhìn về thông tin này cho người dùng ở dạng quen thuộc.

BÀI TẬP 8.22: TẠO QRYVENDORINFO CHO FORM NHẬP ĐƠN MUA HÀNG

1. Kích CREATE tab, rồi kích Query Design trong nhóm Queries.

2. Kích kép tblVendor từ danh sách trong hộp thoại Show Table, rồi kích nút Close.

3. Chọn tất cả các trường trong tblVendor bằng cách kích VendorID để làm nổi bật nó. Nhấn và giữ phím Shift. Nhấn phím mũi tên xuống cho đến khi tất cả các trường được làm nổi bật. Rồi kéo tất cả các trường đó vào ô Field đầu tiên ở phần dưới cửa sổ (Criteria Pane).

4. Lưu truy vấn với tên qryVendorInfo trước khi tạo địa chỉ.

5. Kích ô Field trống đầu tiên trên Criteria Pane rồi kích Builder trong nhóm Query Setup. Bạn cần thấy hộp thoại công cụ tạo biểu thức Expression Builder.

6. Tạo biểu thức sau: CityStateZip: [VendorCity] & ", " & [VendorState] & " " & [VendorZipCode].

7. Xóa VendorCity, VendorState, và VendorZipCode khỏi Criteria Pane. Làm nổi bật cột bằng cách di chuyển con trỏ ngay trên dòng Field của VendorCity. Kích cột khi con trỏ chuyển thành mũi tên xuống, rồi nhấn phím Delete. Xóa VendorState VendorZipCode theo cách tương tự.

8. Làm nổi bật cột CityStateZip rồi chuyển nó sang phải cột VendorAddress2 bằng cách kích cột khi con trỏ chuyển thành mũi tên xuống rồi kéo cột.

9. Lưu truy vấn. Xem tập động dynaset bằng cách kích View hay Run trong nhóm Results. Hình 9.14 cho thấy tập động dynaset kết quả. Đóng qryVendorInfo.

Hình 9.14 Tập động dynaset qryVendorInfo.

Thứ Bảy, 1 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Tạo các quan hệ với bảng đơn mua hàng Purchase Order

James Perry, Richard Newmark


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


Tạo các quan hệ với bảng đơn mua hàng Purchase Order


Form nhập đơn mua hàng của Pipefitters Supply Company sẽ đọc tblVendor, tblEmployee, tblInventory, tblInventoryComposition, tblInventoryDiameter, tblInventoryType và ghi vào tblPurchaseOrder, tblReservation-PurchaseOrderInventory. Vì form sẽ đọc dữ liệu từ tất cả các bảng trên, bạn sẽ cần dữ liệu trong các bảng này để kiểm thử thao tác của form khi bạn tạo form. Nếu bạn chưa nhập liệu từ Ch09.xlsx trong các bài tập ở Chương 9, bây giờ bạn cần làm các bài tập đó trước khi tạo form nhập đơn mua hàng.

BÀI TẬP 9.12: TẠO QUAN HỆ CHO CÁC BẢNG LIÊN QUAN ĐẾN BIẾN CỐ ĐƠN MUA HÀNG

1. Đóng tất cả các đối tượng Access đang mở.

2. Trong Database Tools tab, kích Relationships trong nhóm Relationships. Thu gọn Navigation Pane bằng cách kích << ở góc phải trên của khung. Điều này tạo nhiều không gian hơn cho mô hình cơ sở dữ liệu, từ đó dễ đọc hơn. Cửa sổ Relationships của bạn cần giống Hình 9.12.

Hình 9.12 Cửa sổ Relationships trước khi thêm các bảng liên quan đến đơn mua hàng được tạo ở Chương 9.

3. Kích Show Table trong nhóm Relationships. Thêm các bảng sau vào cửa sổ Relationships bằng cách kích kép chúng trong hộp thoại Show Table: tblPurchaseOrder, tblReservation-PurchaseOrderInventory, và tblVendor. Sau đó kích Close.

4. Định lại cỡ các bảng để hiển thị toàn bộ tên bảng và tất cả các thuộc tính. Di chuyển bảng để nhất quán với định dạng mô hình REA (resources – tài nguyên, events – biến cố, và agents – tác nhân): bảng tài nguyên bên trái, bảng biến cố ở giữa, và bảng tác nhân bên phải. Đặt các bảng-quan-hệ ở giữa hai bảng mà chúng nối.

5. Tạo liên kết giữa các bảng. Kéo khóa chính đến khóa ngoại tương ứng hay từ khóa chính đến phần khóa chính phức hợp tương ứng.

6. Sau khi bạn kích và kéo từ bảng này (phía 1 của quan hệ) vào khóa ngoại hay khóa chính phức hợp ở bảng kia (phía nhiều của quan hệ) thì hộp thoại Edit Relationships xuất hiện. Hãy đảm bảo rằng các thuộc tính đúng xuất hiện trong những 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. Đánh dấu Enforce Referential IntegrityCascade Update Related Fields. Cuối cùng, kích Create trong hộp thoại. Khi hoàn thành, cửa sổ Relationships cần giống Hình 9.13.

Hình 9.13 Cửa sổ Relationships với tất cả các bảng và quan hệ liên quan đến đơn mua hàng.

7. Kích nút X trong nhóm Relationships để đóng cửa sổ Relationships, kích nút Yes trong hộp thoại để lưu những thay đổi, rồi kích >> trên Navigation Pane để phục hồi.

Giờ đây bạn đã thiết lập các liên kết khóa ngoại và bảng-quan-hệ cần thiết, bạn có thể tạo form nhập đơn mua hàng. Như các đối tượng cơ sở dữ liệu khác bạn đã tạo trong chương này, bạn sẽ học cách tái dụng các đối tượng đã tạo trước đây để tiết kiệm thời gian và công sức. Hơn nữa, bạn sẽ tạo hai truy vấn – qryVendorInfo qryPurchaseOrderLineItem. Access sẽ dùng dữ liệu từ hai truy vấn này và tblPurchaseOrder để đổ dữ liệu vào form nhập liệu đơn mua hàng.