Thứ Hai, 31 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Biến cố giải ngân

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Biến cố giải ngân


Hình 10.2 cho thấy một đợt giải ngân Cash Disbursement sẽ phát sinh một dòng tiền ra Outflow đến nhân viên Employee làm tác nhân ngoại và nhân viên Employee làm tác nhân nội cũng tham gia quan hệ. Giống như biến cố sử dụng lao động Labor Acquisition, cả hai quan hệ với Cash Disbursement đều là một-nhiều. Hơn nữa, lực lượng một-nhiều liên quan đến tài khoản tiền mặt Cash Account cho biết một tài khoản tiền mặt Cash Account có thể tham gia nhiều đợt giải ngân Cash Disbursements và một đợt giải ngân Cash Disbursement cụ thể sẽ đến từ một tài khoản tiền mặt Cash Account duy nhất.

Hãy so sánh mô hình dữ liệu ở các Hình 10.2 và 9.1. Để ý những tương tự cũng như khác biệt giữa qui trình mua hàng - chi tiền và qui trình HR. Khác biệt chính là nhân viên Employee trong qui trình HR tham gia như tác nhân ngoại còn nhà cung ứng Vendor là tác nhân ngoại trong qui trình mua hàng - chi tiền. Một khác biệt nữa là việc ghi nhận các dòng-vào hàng tồn kho Inflows từ qui trình mua hàng - chi tiền vô cùng quan trọng đối với sự thành công của Pipefitters, còn việc ghi nhận dòng-vào loại hình lao động trong qui trình HR thì không.

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

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Biến cố sử dụng lao động (thời gian đã làm việc)

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Biến cố sử dụng lao động (thời gian đã làm việc)


Mô hình dữ liệu ở Hình 10.2 cho thấy việc sử dụng lao động Labor Acquisition (Time Worked) sẽ phát sinh một dòng lao động vào Inflow (từ tài nguyên loại hình lao động Labor Type). Tài nguyên Labor Type và quan hệ dòng vào Inflow được vẽ bằng các đường đứt nét vì Pipefitters không quản lý các loại hình lao động. Chẳng hạn, Pipefitters không ghi nhận loại hình lao động của các kế toán viên (như tiền lương, tổng hợp, công nợ). Tuy nhiên, loại hình lao động được đưa vào mô hình để minh họa trường hợp doanh nghiệp có quản lý loại hình lao động.

Hình 10.2 Tính đối ngẫu HR với các tài nguyên và tác nhân của Pipefitters Supply Company.

Dòng lao động vào Inflow từ nhân viên Employee đóng vai trò là tác nhân ngoại External. Nhân viên Employee đóng vai trò là tác nhân nội Internal cũng tham gia vào quan hệ. Quan hệ một-nhiều giữa nhân viên Employee làm tác nhân ngoại và sử dụng lao động Labor Acquisition là tập lực lượng điển hình giữa biến cố và tác nhân ngoại; quan hệ này cho biết một nhân viên Employee làm tác nhân ngoại có thể tham gia nhiều đợt sử dụng lao động và một đợt sử dụng lao động có tối đa một nhân viên Employee làm tác nhân ngoại.

Tương tự, quan hệ một-nhiều giữa nhân viên Employee làm tác nhân nội và sử dụng lao động Labor Acquisition cho biết một nhân viên Employee làm tác nhân nội có thể tham gia nhiều đợt sử dụng lao động (chẳng hạn việc ghi nhận số giờ đã làm việc cho mọi nhân viên) và một đợt sử dụng lao động chỉ có duy nhất một nhân viên Employee làm tác nhân nội.

Nếu Pipefitters quản lý lao động theo loại hình làm việc, quan hệ dòng vào Inflow giữa sử dụng lao động Labor Acquisition và loại hình lao động Labor Type sẽ là nhiều-nhiều vì một loại hình lao động Labor Type cụ thể (chẳng hạn bốc dỡ hàng tồn kho) có thể bao gồm nhiều đợt sử dụng lao động Labor Acquisition và một đợt sử dụng lao động Labor Acquisition cụ thể có thể có nhiều loại hình lao động (chẳng hạn 14 giờ bốc dỡ hàng tồn kho và 66 giờ chất hàng tồn kho để gửi đi).

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

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Mô hình dữ liệu nhân sự cơ bản

James Perry, Richard Newmark

Chương 10
Qui trình nhân sự

Mô hình dữ liệu nhân sự cơ bản


Trong bài tập sau bạn sẽ vẽ sơ đồ qui trình HR cơ bản của Pipefitters: các biến cố đối ngẫu tạo nên tính đối ngẫu kinh tế, các tài nguyên và tác nhân liên kết từng biến cố. Tài nguyên nào có quan hệ dòng vào inflow với sử dụng lao động Labor Acquisition? Tài nguyên nào có quan hệ dòng ra outflow với giải ngân Cash Disbursement? (Các) tác nhân nào tham gia ngoại external participation với các biến cố đối ngẫu? (Các) tác nhân nào tham gia nội internal participation với các biến cố đối ngẫu? Những qui tắc tác nghiệp nào chi phối các quan hệ này để bạn biểu diễn bằng lực lượng? Mô hình dữ liệu kết quả sẽ tạo nên phần lõi của hầu hết qui trình tác nghiệp HR.

BÀI TẬP 10.2: TẠO MÔ HÌNH DỮ LIỆU HR CƠ BẢN

1. Hãy thêm vào Hình 10.1 tài nguyên và (các) tác nhân cho biến cố sử dụng lao động và các quan hệ của chúng với biến cố sử dụng lao động.

2. Hãy thêm lực lượng vào các quan hệ với biến cố sử dụng lao động.

3. Hãy thêm vào mô hình của bạn tài nguyên và (các) tác nhân cho biến cố giải ngân và các quan hệ của chúng với biến cố giải ngân.

4. Hãy thêm lực lượng vào các quan hệ với biến cố giải ngân.

Thứ Sáu, 28 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Tính đối ngẫu của các biến cố kinh tế

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Tính đối ngẫu của các biến cố kinh tế


Hình 10.1 cho thấy tính đối ngẫu trong qui trình nhân sự. Sử dụng lao động Labor Acquisition là biến cố tăng kinh tế. Điều này được đo bằng số giờ làm việc của nhân viên. Biến cố giảm kinh tế là giải ngân Cash Disbursement, giống như qui trình mua hàng - chi tiền. Như đã đề cập ở các qui trình bán hàng và mua hàng, các biến cố đối ngẫu không cần phải nảy sinh đồng thời. Nếu chu kỳ kế toán kết thúc khác ngày cuối cùng của chu kỳ trả lương, chi phí lương có thể được tính bằng cách thi hành truy vấn lương dựa trên số giờ đã làm việc kể từ lần trả trước.

Hình 10.1 Tính đối ngẫu về nhân sự trong Pipefitters Supply Company.

BÀI TẬP 10.1: MÔ HÌNH QUAN HỆ ĐỐI NGẪU CHO QUI TRÌNH NHÂN SỰ CỦA PIPEFITTERS SUPPLY COMPANY

1. Dựa trên mô tả về qui trình HR của Pipefitters, hãy vẽ các thực thể và quan hệ đối ngẫu liên quan.

2. Biến cố hay hành động nào làm tăng một tài nguyên? Hãy đánh dấu biến cố tăng kinh tế này bằng dấu “+”.

3. Vì qui trình HR là một dạng đặc biệt của qui trình mua hàng - chi tiền, hai qui trình này có một biến cố kinh tế chung; đó là biến cố nào? Hãy đánh dấu biến cố giảm kinh tế này bằng dấu “-”.

4. Thêm lực lượng vào hình vẽ của bạn.

Vì Pipefitters mỗi tháng trả lương cho nhân viên bằng một chi phiếu (từng bản ghi trong bảng sử dụng lao động Labor Acquisition), một lần giải ngân Cash Disbursement chỉ liên hệ với một bản ghi sử dụng lao động Labor Acquisition. Vì thế, phía Labor Acquisition của quan hệ đối ngẫu là 1. Cũng vậy, vì một bản ghi Labor Acquisition chỉ liên hệ với một Cash Disbursement, phía Cash Disbursement của quan hệ là 1.

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Qui trình tác nghiệp nhân sự của Pipefitters Supply Company

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Qui trình tác nghiệp nhân sự của Pipefitters Supply Company


Pipefitters Supply Company tuyển dụng 50 nhân viên làm việc trong sáu bộ phận. Các nhân viên được nhóm theo bộ phận: kế toán viên, quản lý viên, nhân viên bán hàng, nhân viên bảo trì, nhân viên kho hàng, và nhân viên mua hàng.

Pipefitters có lực lượng lao động khá ổn định. Một số nhân viên đã làm việc ở công ty hơn 30 năm. Tuy nhiên, hiện nay kinh doanh của Pipefitters đang tăng trưởng  và năm nay lực lượng lao động gia tăng đáng kể. Qui trình tuyển dụng sẽ khởi động khi quản lý viên có nhu cầu tuyển thêm nhân viên cho bộ phận của họ. Sau đó công ty đăng tuyển trên các phương tiện truyền thông qua in ấn cũng như trực tuyến. Sau khi sàng lọc sơ bộ các đơn xin việc, quản lý viên bộ phận sẽ phỏng vấn và ra quyết định tuyển dụng cuối cùng.

Thứ năm hàng tuần, các quản trị viên của Pipefitters họp lại để lên kế hoạch làm việc cho tuần tới. Mỗi tuần một quản trị viên khác sẽ chủ trì cuộc họp và chịu trách nhiệm việc lập kế hoạch. Các quản trị viên sẽ quyết định mỗi kiểu nhân viên cần bao nhiêu giờ rồi lên kế hoạch chi tiết. Kế hoạch cho từng nhân viên và số giờ phân công cho tuần tới. Hiện nay, Pipefitters chỉ phân biệt lao động theo bộ phận chứ không theo loại hình làm việc. Chẳng hạn, kế hoạch làm việc chỉ cho biết số giờ làm việc của từng kế toán viên, chứ không theo loại hình làm việc mà họ được phân công – tiền lương, tổng hợp, nợ phải thu, nợ phải trả, … Sau khi lên xong kế hoạch làm việc, từng nhân viên ký nháy vào cạnh tên của họ để chứng tỏ họ đã được thông báo về kế hoạch làm việc cho tuần tới. Hiện nay, kế hoạch làm việc là văn bản giấy, chưa được ghi vào cơ sở dữ liệu hệ thông tin kế toán (AIS) của Pipefitters.

Pipefitters tính lương nhân viên theo giờ và trả lương hàng tháng theo tổng số giờ đã làm việc trong tháng đó. Không có nhân viên nào có lương cố định. Tuần làm việc bình thường tại Pipefitters là 40 giờ, và nhân viên nhận lương phụ trội gấp 1.5 lần lương thông thường cho số giờ vượt quá tuần làm việc bình thường. Mọi nhân viên được trả lương vào ngày thứ hai của tháng sau dựa trên bảng chấm công hàng tháng được quản lý viên của nhân viên đó nhập vào hệ thống và đồng ý.

Một kế toán viên sẽ chuẩn bị chi phiếu lương để một trong các người chủ ký tên. Mỗi tháng một nhân viên chỉ nhận một chi phiếu lương. Các chi phiếu lương sẽ dùng ngân quỹ rút từ tài khoản tiền lương.

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

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Giới thiệu

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Giới thiệu


Chương này trình bày qui trình tác nghiệp nhân sự (HR) của hệ thông tin kế toán. Nhiều thành phần thuộc qui trình sẽ được minh họa qua việc dùng dữ liệu mẫu của Pipefitters Supply Company. Như đã đề cập, qui trình HR gồm các hoạt động quản lý nhân sự (HRM) cũng như các hoạt động trả lương. Ta sẽ tập trung vào các hoạt động trả lương, bao gồm mọi thứ từ việc yêu cầu thuê nhân công cho đến việc trả lương nhân viên.

Các kế toán viên đôi khi xem hoạt động trả lương là một phần thuộc qui trình mua hàng - chi tiền vì các doanh nghiệp tuyển dụng lao động và trả lương nhân viên. Hoạt động trả lương còn có thể được tích hợp vào qui trình chuyển đổi trong các công ty sản xuất vì nhân công thường là thành phần chính trong qui trình chuyển đổi. Tuy nhiên, việc xem hoạt động trả lương là một phần thuộc qui trình HR – tách biệt khỏi các qui trình mua hàng - chi tiền và chuyển đổi –giúp nêu bật một số đặc trưng lý thú. Việc thiết kế và tạo tác hệ thống tích hợp HRM và trả lương là một nhiệm vụ phức tạp. Ở chương này bạn sẽ làm việc với các thành phần kế toán tích hợp cơ bản liên quan đến hoạt động trả lương. Các thành phần cơ bản này là cơ sở cho các hệ thống tích hợp kế toán và HRM phức tạp nhất.

Mọi doanh nghiệp ngoại trừ những doanh nghiệp nhỏ xíu đều có hoạt động trả lương. Ở chương này bạn sẽ tìm hiểu các hoạt động trả lương mà hầu như doanh nghiệp nào cũng thực hiện. Ở các doanh nghiệp dịch vụ và bán hàng, chi phí trả lương là một mục chi trong báo cáo thu nhập. Ở các doanh nghiệp sản xuất, phần chi lương liên quan đến hoạt động sản xuất là một phần chi phí sản xuất. Chi phí này xuất hiện trong báo cáo thu nhập ở phần giá vốn hàng đã bán (cost of goods sold), và trong bảng cân đối ở phần tồn kho thành phẩm và bán thành phẩm.

Thứ Ba, 25 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 10 - Qui trình nhân sự

James Perry, Richard Newmark


Chương 10
Qui trình nhân sự


Mục tiêu


Qui tắc tác nghiệp nhân sự (human resources – HR) bao gồm các chức năng quản lý nhân sự (human resource management – HRM) và trả lương (payroll).  Các chức năng HRM điển hình bao gồm tuyển dụng, thuê mướn, huấn luyện, quản lý phúc lợi, và chấm dứt hợp đồng nhân viên. Các hoạt động trả lương của một doanh nghiệp thường được gọi là chu trình tiền lương (payroll cycle) vì chúng bao gồm các hoạt động xử lý giao dịch và báo cáo. Các hoạt động này bao gồm việc tính thu nhập của nhân viên, ghi nhận các lần chi trả cho nhân viên, và duy trì bảng lương. Các ghi chép này phải đáp ứng nhiều qui định phức tạp của chính phủ. Các công ty còn dùng thông tin HR (cả HRM và trả lương) để làm báo cáo quản lý và báo cáo tài chính. Chương này sẽ chỉ cách dùng bảng, truy vấn, forms, và báo cáo trong Access để:

  • Tạo mô hình qui trình tác nghiệp nhân sự.
  • Tạo cơ sở dữ liệu Access dựa trên mô hình qui trình tác nghiệp.
  • Tạo các kiểm soát nhằm áp đặt các qui tắc tác nghiệp.
  • Tạo và duy trì thông tin nhân viên.
  • Tạo và duy trì thông tin thời gian làm việc.
  • Tính lương trước và sau khi trừ thuế.
  • Ghi nhận các đợt chi trả cho nhân viên.
  • Phát sinh thông tin báo cáo tài chính.
  • Phát sinh thông tin dùng nội bộ.

Thứ Hai, 24 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Tổng kết

James Perry, Richard Newmark


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


Tổng kết


Chương này đã trình bày cách thiết kế và tạo tác qui trình kinh doanh mua hàng - chi tiền trong Access. Trong giai đoạn thiết kế, bạn đã nhận diện được tính đối ngẫu của các biến cố kinh tế, đã thêm biến cố đơn mua hàng, đã nhận diện và liên kết các tài nguyên cũng như những tác nhân gắn liền với các biến cố. Sau đó, bạn đã thêm các khóa chính, khóa ngoại, và bảng-quan-hệ. Bạn cũng đã dùng giai đoạn thiết kế để áp đặt những qui tắc tác nghiệp và thêm các kiểm soát.

Trong lúc thiết kế qui trình mua hàng - chi tiền, bạn có thể thấy những tương tự giữa các mô hình dữ liệu cho qui trình mua hàng - chi tiền và qui trình bán hàng - thu tiền. Các tương tự đó hiện diện nhờ bạn đã áp dụng phương pháp tài nguyên, biến cố, và tác nhân để tạo cơ sở dữ liệu. Việc thiết kế qui trình mua hàng - chi tiền dễ hơn nhiều so với qui trình bán hàng - thu tiền vì bạn theo cùng các bước nhận diện biến cố, tài nguyên và biến cố liên quan.

Sau khi thiết kế cơ sở dữ liệu, bạn đã tạo tác nó trong Access bằng cách tạo bảng và các quan hệ giữa chúng. Một lần nữa, nhờ tính tương tự trong thiết kế cơ sở dữ liệu mà bạn có thể tái dụng nhiều bảng đã tạo cho qui trình bán hàng - thu tiền. Việc tái dụng cho bạn cơ hội biết sửa các thuộc tính trường tác động đến giao diện và chức năng của nhiều trường khác nhau.

Một khi hoàn thành việc tạo bảng và các quan hệ, bạn đã có rất nhiều kinh nghiệm sửa truy vấn có sẵn và tạo mới truy vấn phức tạp. Hy vọng bạn đã nhận ra rằng việc tạo truy vấn từ đầu là cách tốt nhất so với việc sửa truy vấn hiện có. Bạn cũng đã dành rất nhiều thời gian làm việc với các truy vấn hành động. Bạn đã xây dựng truy vấn tạo bảng để tạm thời lưu kết quả hàm gộp (chẳng hạn tổng các trị giá trên từng dòng đơn mua hàng), và bạn đã dùng truy vấn tạo bảng để tạm thời lưu các hạng mục trên từng dòng tồn kho từ đơn mua hàng để chúng có thể được thêm vào form nhập biên bản nhận hàng. Thêm vào đó, bạn đã dùng truy vấn cập nhật cùng truy vấn tạo bảng để đảm bảo rằng tổng các dòng tồn kho (tức các dòng trong đơn mua hàng và các dòng trong biên bản nhận hàng) bằng tổng trị giá trong các bảng biến cố liên quan.

Sau khi tạo tập hợp truy vấn để thực hiện nhiệm vụ, bạn đã tự động hóa nhiệm vụ và thêm các kiểm soát qua việc dùng các macros. Bạn đã biết dùng hành động SetTempVars để nhận giá trị từ một thành phần điều khiển và đổ vào các thành phần điều khiển khác nhằm tránh lỗi. Ngoài việc hiểu rõ ưu điểm của macros, bạn còn biết nhược điểm của chúng (chẳng hạn việc thi hành hành động Requery trong form sẽ đưa bạn trở về bản ghi đầu tiên).

Cuối cùng, bạn đã tạo các truy vấn từ dữ liệu mua hàng - chi tiền phục vụ cho những báo cáo tài chính ra bên ngoài cũng như để dùng nội bộ. Bạn đã dùng tham biến để đặt thời điểm cho bảng cân đối nhằm phát sinh nợ phải trả theo từng nhà cung ứng. Hy vọng bạn sẽ thấy dễ khi sửa các truy vấn liên quan đến bán hàng/thu tiền để dùng trong qui trình mua hàng - chi tiền. Chẳng hạn, bạn cần có khả năng dùng truy vấn các đơn bán hàng còn để ngỏ để tạo truy vấn các đơn mua hàng còn để ngỏ.

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

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Nợ phải trả theo nhà cung ứng

James Perry, Richard Newmark


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


Nợ phải trả theo nhà cung ứng


Ngoài việc tính gộp nợ phải trả để báo cáo tài chính, công ty cũng cần theo dõi nợ họ phải trả theo từng nhà cung ứng. Điều này có thể thực hiện bằng cách hiệu chỉnh các truy vấn nợ phải trả hiện có. Các bước cần làm hầu như giống các bước trong các Bài tập 8.48 và 8.49 để tính nợ phải thu theo từng khách hàng. Hãy dùng các hướng dẫn chi tiết trong các Bài tập 8.48 và 8.49 cùng các diễn giải trong bài tập dưới đây cùng ảnh kèm theo.

BÀI TẬP 9.48: SỬA CÁC TRUY VẤN NỢ PHẢI TRẢ ĐỂ PHÁT SINH NỢ PHẢI TRẢ CHO TỪNG KHÁCH HÀNG

Hãy tạo truy vấn đầu tiên bằng cách sao chép và hiệu chỉnh qryAccPay1-SumOfPurchases.

1. Tạo một bản sao của qryAccPay1-SumOfPurchases rồi đặt tên là qryAPByVendor1-SumOfPurchases. Mở qryAPByVendor1-SumOfPurchases ở góc nhìn Design. Kích và kéo VendorID vào cột đầu tiên của Criteria Pane để nhóm các đợt mua theo từng nhà cung ứng.

2. Lưu các thay đổi. Kiểm thử câu truy vấn. Kích Run trong nhóm Results. Dùng 1/31/2012 cho thời điểm của bảng cân đối. Các tổng số giờ đây được liệt kê theo VendorID. Bạn cần có 7 nhà cung ứng trong kết quả. Đóng câu truy vấn.

3. Tạo truy vấn thứ hai bằng cách sao chép và hiệu chỉnh qryAccPay2-SumOfCD.

4. Tạo một bản sao của qryAccPay2-SumOfCD rồi đặt tên là qryAPByVendor2-SumOfCD. Mở qryAPByVendor2-SumOfCD ở góc nhìn Design. Kích và kéo VendorID từ danh sách trường tblCashDisbursement vào cột đầu tiên của Criteria Pane để nhóm các lần thâu ngân theo nhà cung ứng.

5. Lưu các thay đổi. Kiểm thử truy vấn. Kích Run trong nhóm Results. Dùng 1/31/2012 làm thời điểm của bảng cân đối. Các tổng số bây giờ được liệt kê theo VendorID. Bạn cần có 4 nhà cung ứng trong kết quả. Đóng câu truy vấn.

6. Tạo truy vấn thứ ba và cũng là cuối cùng, tương tự qryAccPay3-AccountsPayable. Vì một số nhà cung ứng trong cơ sở dữ liệu không có thông tin mua hàng cũng như giải ngân, và một số nhà cung ứng khác có thông tin mua hàng nhưng không có thông tin giải ngân, bạn sẽ cần phép nối ngoại như đã tạo ở Bài tập 9.44.

7. Kích Create tab rồi kích Query Design trong nhóm Queries. Trong hộp thoại Show Table kích Queries tab, kích kép qryVendorInfo, qryAPByVendor1-SumOfPurchases, qryAPByVendor2-SumOfCD. Đóng hộp thoại.

8. Kích kép VendorID VendorName từ qryVendorInfo, SumOfInventoryReceiptAmount từ qryAPByVendor1-SumOfPurchases, và SumOfCashDisbursementAmount từ qryAPByVendor2-SumOfCD.

9. Lưu câu truy vấn với tên qryAPByVendor3-AccountsPayable.

10. Thêm biểu thức sau vào trường trống kế tiếp trên Criteria Pane: AccountsPayable: Nz([SumOfInventoryReceiptAmount],0)-Nz([SumOfCashDisbursementAmount],0). Mở Property Sheet, gõ Accounts Payable làm Caption cho AccountsReceivable, rồi đặt thuộc tính Format là Currency.

11. Dùng VendorID  để tạo phép nối ngoại trái từ qryVendorInfo đến qryAPByVendor1-SumOfPurchases, và từ qryAPByVendor1-SumOfPurchases đến qryAPByVendor2-SumOfCD. Xem Hình 9.52. Bài tập 8.49 sẽ cung cấp diễn giải chi tiết.

Hình 9.52 qryAPByVendor3-AccountsPayable ở góc nhìn Design.

12. Lưu các thay đổi. Kiểm thử truy vấn. Kích Run trong nhóm Results. Dùng 1/31/2012 là thời điểm của bảng cân đối. Tập động dynaset được trình bày ở Hình 9.53. Để ý rằng hiện nay 15 nhà cung ứng vì tất cả các nhà cung ứng trong cơ sở dữ liệu đều được hiển thị, kể cả nhà cung ứng giả (9999) và các nhà cung ứng mà Pipefitters chưa mua gì cả từ 1/31/2012 trở về trước. Đóng truy vấn.

Hình 9.53. Tập hợp động cho qryAPByVendor3-AccountsPayable vào 1/31/2012.

THỬ NGHIỆM

Đừng hiển thị nhà cung ứng giả trong truy vấn qryAPByVendor3-AccountsPayable. Mở qryAPByVendor3-AccountsPayable ở góc nhìn Design. Trong ô Criteria của VendorID, gõ <>9999. Chạy lại truy vấn. Để ý rằng VendorID 9999 giờ đây không còn trong tập động dynaset.

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Dẫn xuất các thông tin khác hữu ích cho việc ra quyết định

James Perry, Richard Newmark


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


Dẫn xuất các thông tin khác hữu ích cho việc ra quyết định


Hệ thông tin kế toán cơ sở dữ liệu chứa rất nhiều thông tin hữu ích cho người không phải là kế toán viên. Các ghi chép kế toán truyền thống chỉ chứa thời điểm và số tiền của từng đợt mua và giải ngân. Hệ thông tin kế toán cơ sở dữ liệu chứa thông tin về từng đợt mua và giải ngân nhiều hơn rất nhiều. Các bảng mua hàng Purchase, đơn mua hàng Purchase Order, tồn kho Inventory, và nhà cung ứng Vendor ở chương này có thể được kết hợp theo nhiều cách để cung cấp thông tin hữu ích cho các chức năng tiếp thị và quản lý chiến lược.

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

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Nợ phải trả accounts payable

James Perry, Richard Newmark


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


Nợ phải trả accounts payable


Nợ phải trả accounts payable, như nợ phải thu accounts receivable, đơn thuần là khác biệt thời gian giữa các biến cố đối ngẫu. Với nợ phải trả, khác biệt thời gian là giữa các đợt mua hàng và các lần giải ngân liên quan. Vì thế, nợ phải trả có thể được xác định bằng cách tính tổng trị giá mua hàng trừ đi tổng những lần giải ngân liên quan đến các đợt mua hàng đó. Vì phép tính hàng ngang (chẳng hạn, [tổng các đợt mua] – [tổng các lần giải ngân]) không thể dùng kết quả của hàm gộp trong cùng truy vấn (chẳng hạn tổng các đợt mua, tổng các lần giải ngân), phép tính nợ phải trả sẽ cần ba truy vấn: tổng các đợt mua, tổng các lần giải ngân liên quan đến mua hàng, và tổng các đợt mua trừ tổng các lần giải ngân.

Loại ràng buộc thời gian nào bạn cần để tính các hạng mục trong bảng cân đối (balance sheet) như nợ phải trả? Nhớ rằng bảng cân đối sẽ báo cáo các cân đối kế toán của tài sản, nợ phải trả, và nguồn vốn tại một thời điểm xác định. Bạn phải tính tổng các đợt mua và các lần giải ngân liên quan từ lúc thành lập công ty cho đến thời điểm của bảng cân đối. Vì thế, các truy vấn liên quan đến bảng cân đối chỉ có ràng buộc về thời điểm kết thúc. Các truy vấn báo cáo thu nhập có cả ràng buộc thời điểm bắt đầu lẫn ràng buộc thời điểm kết thúc.

BÀI TẬP 9.46: DÙNG CÁC TRUY VẤN ĐỂ TÍNH NỢ PHẢI TRẢ – TỔNG CÁC ĐỢT MUA VÀ TỔNG NHỮNG LẦN GIẢI NGÂN LIÊN QUAN ĐẾN MUA HÀNG

Truy vấn đầu tiên sẽ tính tổng các đợt mua hàng cho đến thời điểm của bảng cân đối.

1. Kích Create tab rồi kích Query Design trong nhóm Queries. Kích kép tblPurchase trong hộp thoại Show Table. Đóng hộp thoại.

2. Thêm InventoryReceiptAmountInventoryReceiptDate vào Criteria Pane. Kích Totals trong nhóm Show/Hide. Sửa ô Total cho InventoryReceiptAmount thành Sum. Mở Property Sheet rồi gõ Purchases vào thuộc tính Caption.

3. Sửa Total của InventoryReceiptDate thành Where. Trong ô Criteria của InventoryReceiptDate, gõ <=[End of Period Date] (nhỏ hơn hay bằng thời điểm cuối kỳ) để tính tổng tất cả các đợt mua cho đến thời điểm của bảng cân đối.

4. Kiểm thử câu truy vấn. Kích Run trong nhóm Results. Dùng 1/31/2012 cho thời điểm cuối kỳ, tức thời điểm của bảng cân đối. Tổng các đợt mua tính đến thời điểm cuối kỳ sẽ là $43,074.30. Lưu truy vấn là qryAccPay1-SumOfPurchases rồi đóng truy vấn.

Hãy tạo truy vấn thứ hai để tính tổng những lần giải ngân liên quan đến mua hàng. Mặc dù bạn sẽ không dùng bất kỳ trường nào từ tblPurchase, phép nối nội giữa tblPurchase tblCashDisbursement đảm bảo rằng chỉ những lần giải ngân liên quan đến mua hàng được tính tổng. Mặc dù cơ sở dữ liệu Ch09.accdb chỉ có một nguồn giải ngân duy nhất,  bạn sẽ thêm bước này vì đó là bước hết sức quan trọng trong các hệ cơ sở dữ liệu kế toán hoàn chỉnh ở đó có nhiều nguồn giải ngân.

5. Kích Create tab rồi kích Query Design trong nhóm Queries. Kích kép tblPurchase tblCashDisbursement trong hộp thoại Show Table. Đóng hộp thoại.

6. Thêm vào Criteria Pane CashDisbursement CashDisbursementDate từ danh sách trường của tblCashDisbursement. Kích Totals trong nhóm Show/Hide.

7. Sửa ô Total cho CashDisbursementAmount thành Sum. Mở Property Sheet. Gõ Cash Disbursements vào thuộc tính Caption.

8. Sửa ô Total cho CashDisbursementDate thành Where. Trong ô Criteria, gõ <=[End of Period Date].

9. Lưu câu truy vấn với tên qryAccPay2-SumOfCD. Kiểm thử câu truy vấn. Kích Run trong nhóm Results. Dùng 1/31/2012 cho thời điểm của bảng cân đối. Tổng những lần giải ngân liên quan đến bán hàng sẽ là $22,455.05.

BÀI TẬP 9.47: DÙNG CÁC TRUY VẤN ĐỂ TÍNH NỢ PHẢI TRẢ

Câu truy vấn thứ ba và cũng là cuối cùng sẽ dùng kết quả của 2 truy vấn ở Bài tập 9.46 để tính nợ phải trả. Nó tương tự với truy vấn ở Bài tập 8.47 nhằm tính nợ phải thu.

1. Kích Create tab rồi kích Query Design trong nhóm Queries. Thêm qryAccPay1-SumOfPurchasesqryAccPay2-SumOfCD vào Table Pane. Các trường trong hai truy vấn này độc lập với nhau và không cần nối. Nếu chúng cần được nối thì bạn sẽ cần thêm một trường chung trong từng truy vấn để có cách nối chúng.

2. Thêm vào Criteria Pane SumOfInventoryReceiptAmount từ qryAccPay1-SumOfPurchases và SumOfCashDisbursementAmount từ qryAccPay2-SumOfCD. Lưu truy vấn với tên qryAccPay3-AccountsPayable.

3. Kích trường trống đầu tiên trên Criteria Pane. Kích Builder trong nhóm Query Setup. Nhập AccountsPayable: [SumOfInventoryReceiptAmount]-Nz([SumOfCashDisbursementAmount],0). Nếu không có lần giải ngân nào ở chu kỳ được chỉ định trong truy vấn, hàm Nz sẽ thay giá trị trống null bằng tham biến thứ hai, là 0, để tính toán có kết quả hợp lệ.

4. Mở Property Sheet. Gõ Accounts Payable làm phụ đề Caption cho trường vừa tạo, AccountsPayable. Lưu truy vấn.

5. Kiểm thử hàm Nz bằng cách thi hành truy vấn và dùng 1/17/2012 là thời điểm tạo bảng cân đối. Kết quả sẽ là $11,286.00. Xem Hình 9.51.

Hình 9.51 Các tập hợp động của qryAccPay3-AccountsPayable.

6. Bây giờ chạy lại truy vấn dùng 1/31/2012 là thời điểm tạo bảng cân đối. Kết quả sẽ là $20,619.25. Để ý rằng trị giá các đợt mua và tổng giải ngân ở Hình 9.51 khớp với kết quả từ các truy vấn đơn lẻ.

Thứ Sáu, 21 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Dẫn xuất thông tin báo cáo tài chính

James Perry, Richard Newmark


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


Dẫn xuất thông tin báo cáo tài chính


Giờ đây bạn đã tạo thành công qui trình kinh doanh mua hàng - chi tiền trong Access đối với hàng tồn kho, cho phép nhập mọi thông tin vào hệ thống liên quan đến đơn mua hàng, nhận hàng, và giải ngân. Nhờ liên kết hợp lý các bảng qua khóa ngoại và bảng-quan-hệ, bạn đã sẵn sàng phát sinh thông tin báo cáo tài chính. Hạng mục duy nhất có thể dẫn xuất từ các hoạt động trong qui trình mua hàng - chi tiền là nợ phải trả (accounts payable).

Ta sẽ dùng qui ước đặt tên đã được đề cập ở Chương 8 cho các truy vấn báo cáo tài chính, thường cần nhiều truy vấn để đạt kết quả cuối cùng.

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

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Ghi nhận thông tin về các tài nguyên phi tồn kho với thời hạn sử dụng dài

James Perry, Richard Newmark


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


Ghi nhận thông tin về các tài nguyên phi tồn kho với thời hạn sử dụng dài


Các mặt hàng phi tồn kho với thời hạn sử dụng dài được ghi nhận tương tự các tài nguyên với thời hạn sử dụng ngắn. Khác biệt chủ yếu là thông tin về thời hạn sử dụng của tài nguyên cần được lưu cũng như phương pháp dùng để phân bổ chi phí trong suốt thời hạn sử dụng tài nguyên đó. Thời hạn sử dụng và phương pháp khấu hao có thể được ghi vào bảng-quan-hệ dòng-vào Inflow, đặc biệt nếu công ty không có thời hạn sử dụng và phương pháp khấu hao chuẩn. Tuy nhiên, nếu dựa trên kiểu tài nguyên mà không dựa trên tài nguyên cụ thể, công ty sẽ tránh tình trạng dư thừa dữ liệu bằng cách lưu thời hạn sử dụng và/hay phương pháp khấu hao vào bảng tài nguyên Resource. Ta sẽ tạo bảng và truy vấn ở Chương 12 để lưu dữ liệu tài nguyên phi tồn kho và tính chi phí cũng như số dư tài khoản liên quan.

Thứ Ba, 18 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Ghi nhận thông tin về các tài nguyên phi tồn kho với thời hạn sử dụng ngắn

James Perry, Richard Newmark


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


Ghi nhận thông tin về các tài nguyên phi tồn kho với thời hạn sử dụng ngắn


Việc tiếp nhận các tài nguyên có thời hạn sử dụng ngắn được ghi tương tự cách ghi khi tiếp nhận hàng tồn kho. Bảng Purchase Order bạn đã tạo để ghi nhận các đơn mua hàng tồn kho có thể được dùng để ghi nhận thông tin đặt làm quảng cáo hay đặt giao hàng. Tương tự, bảng Purchase dùng để ghi nhận biên bản nhận hàng tồn kho có thể được dùng để ghi nhận biên bản nhận hàng phi tồn kho nếu mã tiếp nhận tồn kho Inventory Receipt ID được thay bằng mã tiếp nhận tài nguyên Resource Receipt ID. Cũng vậy, bảng Cash Disbursement được mô tả trong chương này cũng có thể ghi nhận các đợt chi trả cho hàng phi tồn kho.

Bảng tài nguyên Resource sẽ trông giống hoạch đồ kế toán (chart of accounts) với phần chi phí của một báo cáo thu nhập. Nó sẽ chứa mã kiểu tài nguyên Resource Type ID, tên kiểu tài nguyên Resource Type Name, và mô tả kiểu tài nguyên Resource Type Description. Bảng kiểu/phân loại tài nguyên Resource Type/Category sẽ phân loại các tài nguyên theo cách chúng được gộp trong báo cáo thu nhập, chẳng hạn chi phí bán hàng, chi phí quản lý, và chi phí phi tác nghiệp.

Việc tiếp nhận hàng phi tồn kho cần các bảng-quan-hệ dành chỗ Reservation và dòng-vào Inflow khác với các bảng Reservation và Inflow cho hàng tồn kho. Các bảng-quan-hệ phi tồn kho này sẽ chứa các khóa chính của các bảng tài nguyên tài nguyên và biến cố mà chúng nối vào, số lượng tiếp nhận, đơn phí, và mô tả chi tiết mặt hàng.

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Qui trình mua hàng - chi tiền đối với các mặt hàng không lưu kho

James Perry, Richard Newmark


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


Qui trình mua hàng - chi tiền đối với các mặt hàng không lưu kho


Hầu hết các công ty đều cần thêm các tài nguyên ngoài hàng tồn kho. Việc dùng lao động trong qui trình nhân sự sẽ được trình bày ở Chương 10. Các tài nguyên như quảng cáo và dịch vụ chung (điện, nước, …) đều có thời hạn sử dụng ngắn. Các kiểu tài nguyên này bị khấu hao ngay theo nguyên tắc kế toán tài chính. Các hạng mục khác như thiết bị, đồ đạc văn phòng (bàn, ghế, …), và hợp đồng bảo hiểm có thời hạn sử dụng dài hơn. Các tài nguyên có thời hạn sử dụng dài được ghi nhận là tài sản (assets) và được khấu hao trong suốt thời hạn sử dụng của chúng.

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.

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 giải ngân Cash Disbursement

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 giải ngân Cash Disbursement


Xét Hình 9.4. Có quan hệ nhiều-nhiều nào với bảng Cash Disbursement không? Vì không có, bạn đã sẵn sàng tạo các quan hệ với tblCashDisbursement.

BÀI TẬP 9.42: TẠO CÁC QUAN HỆ VỚI BIẾN CỐ GIẢI NGÂN

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

2. Trên dải lệnh Database Tools, kích Relationships trong nhóm Relationships. Cửa sổ Relationships cần giống trạng thái ở cuối Bài tập 9.28 (xem Hình 9.27).

3. Thu nhỏ Navigation Pane.

4. Kích Show Table trong nhóm Relationships (trên dải lệnh Design). Kích kép tblCashDisbursement rồi kích Close. Định cỡ lại tblCashDisbursement để thấy toàn bộ tên bảng và tên trường. Dời nó xuống dưới tblPurchase.

5. Tạo các liên kết tương tự như cách đã làm trong các Bài tập 9.12 và 9.28. Kéo từ 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. Dùng Hình 9.4 làm hướng dẫn.

6. Khi hộp thoại Edit Relationships xuất hiện, hãy chắc rằng các thuộc tính đúng xuất hiện trong các bảng bạn đã kéo từ đó đế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.

7. Tập quan hệ cuối cùng cần giống Hình 9.46.

Hình 9.46 Cửa sổ quan hệ sau khi thêm biến cố Cash Disbursement.

8. Đóng cửa sổ Relationships và kích nút Yes để lưu các thay đổi, sau đó kích >> trên Navigation Pane để hồi phục nó.

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

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Bảng giải ngân Cash Disbursement

James Perry, Richard Newmark


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


Bảng giải ngân Cash Disbursement


Bảng giải ngân Cash Disbursment rất giống bảng thâu ngân Cash Receipt. Cả hai đều chứa thông tin về biến cố tiền, và chứa khóa ngoại đến các bảng tài nguyên tiền, biến cố kinh tế (mua hay bán), nhân viên, và tác nhân ngoại (nhà cung ứng hay khách hàng). Ta sẽ giả định rằng Pipefitters giải ngân toàn bộ qua chi phiếu. Vì thế, mã chi phiếu là một khóa chính tốt vì chúng được đánh số tuần tự để kiểm soát và mã chi phiếu chỉ được sử dụng một lần. Tuy nhiên, nếu mở tblCashAccount bạn để ý rằng Pipefitters đã có sẵn hai tài khoản thanh toán – một tài khoản thanh toán chính và một tài khoản tiền lương. Hơn nữa, bảng Cash Account cho phép Pipefitters thêm các tài khoản tiền mặt khác mà cũng có thể là các tài khoản thanh toán. Vì các tài khoản khác nhau có thể dùng cùng mã chi phiếu, Pipefitters sẽ dùng khóa chính phức hợp – mã tài khoản tiền mặt và mã chi phiếu.

Ngoài khóa chính phức hợp, bạn sẽ thêm các trường thời điểm chi phiếu được viết, trị giá chi phiếu, biên bản nhận hàng tương ứng, mã nhà cung ứng, và mã nhân viên của kế toán viên đã viết chi phiếu. Hình 9.4 trình bày các khóa ngoại liên kết biến cố giải ngân với biến cố kinh tế (tblPurchase), tài nguyên (tblCashAccount), và các tác nhân (tblEmployee tblVendor) tương ứng. Hình 9.44 cho thấy sự tương tự của các thuộc tính trong tblCashReceipt tblCashDisbursement. Những tương tự này cho phép nhanh chóng sửa tblCashReceipt để tạo tblCashDisbursement.

Hình 9.44 So sánh các trường chương trình tblCashReceipt tblCashDisbursement.

BÀI TẬP 9.41: SỬA BẢNG THÂU NGÂN CASH RECEIPT ĐỂ TẠO BẢNG GIẢI NGÂN CASH DISBURSEMENT

1. Tạo một bản sao tblCashReceipt–Structure Only ở Navigation Pane rồi đặt tên là tblCashDisbursement.

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

3. Sửa các tên trường theo Hình 9.44. Nhớ xóa CustomerCheckNum, vì tblCashDisbursement không có trường tương ứng.

4. Đặt khóa chính phức hợp. Nhấn và giữ phím Shift rồi kích nút chọn trường của CheckNum CashAccountID. Kích Primary Key trong nhóm Tools.

5. Sửa thuộc tính cho tất cả các trường như ở Hình 9.45.

Hình 9.45 Các thuộc tính trường của tblCashDisbursement.

6. Lưu các thay đổi rồi đóng bảng.

7. Nhập dữ liệu từ Ch09.xsls file vào tblCashDisbursement. Hãy theo các hướng dẫn ở Bài tập 9.5, thay tblVendor bằng tblCashDisbursement. Sau khi kết thúc việc nhập liệu, mở tblCashDisbursement để kiểm chứng là có tất cả 31 bản ghi đã được nhập.

Thứ Sáu, 14 tháng 10, 2016

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Thông tin tài khoản tiền mặt Cash Account

James Perry, Richard Newmark


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


Thông tin tài khoản tiền mặt Cash Account


Bạn đã tạo bảng tài khoản tiền mặt Cash Account ở Chương 8. Nó chứa chi tiết từng tài khoản tiền mặt của Pipefitters, gồm khóa chính liên kết nó với các bảng khác. Ta sẽ dùng bảng Cash Account này cho chương này và các chương sau.

Phát triển HTTT kế toán bằng MS Access - Chương 9 - Ghi nhận tiền đã trả cho nhà cung ứng

James Perry, Richard Newmark


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


Ghi nhận tiền đã trả cho nhà cung ứng


Đến nay, ở chương này, bạn đã biết làm thế nào mà Pipefitters Supply Company có thể duy trì các bản ghi nhà cung ứng, duy trì các bản ghi tồn kho, soạn đơn mua hàng, và ghi biên bản nhận hàng. Sau khi Pipefitters nhận hàng, nhà cung ứng muốn Pipefitters trả tiền cho các mặt hàng đó. Phần này mô tả một trong nhiều cách dùng thông tin đã thu thập trong các bảng thuộc qui trình mua hàng - chi tiền để viết chi phiếu. Vì tblPurchase chứa tổng chi phí của từng đợt nhận hàng, bạn có thể dùng bảng đó làm cơ sở cho việc thanh toán.

Thứ Tư, 12 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 giới hạn hàng tồn kho đã nhận theo hàng đã đặt trên 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 giới hạn hàng tồn kho đã nhận theo hàng đã đặt trên form nhập biên bản nhận hàng


Việc đảm bảo thông tin nhà cung ứng đúng xuất hiện trên form nhập biên bản nhận hàng cho phép Pipefitters Supply Company tự tin rằng họ sẽ trả đúng nhà cung ứng cho hàng đã nhận. Cũng quan trọng không kém là Pipefitters chỉ trả cho nhà cung ứng với đúng hàng đã đặt. Kế toán viên trong hầu hết các doanh nghiệp sẽ chịu trách nhiệm kiểm chứng hàng đã nhận cũng là hàng đã đặt. Họ so sánh hàng và giá trên đơn mua hàng, hóa đơn nhà cung ứng, và biên bản nhận hàng. Nếu ba tài liệu này không khớp, kế toán viên sẽ ghi nhận sự khác biệt. Chẳng hạn, nếu Pipefitters nhận một mặt hàng không được đặt mua, kế toán viên phải liên hệ nhà cung ứng và quyết định phải làm gì với hàng không được đặt đó. Qui trình này mất thời gian, mà thời gian là tiền bạc.

Nhằm giảm thời gian đối chiếu tài liệu cho kế toán viên, bạn sẽ thêm một thành phần điều khiển vào form nhập biên bản nhận hàng ở các bài tập kế. Thành phần điều khiển này sẽ chuyển các mặt hàng từ đơn mua hàng tương ứng vào form nhập biên bản nhận hàng. Nếu Pipefitters chỉ thị cho nhân viên kho hàng (và thông báo đến nhà cung ứng) nhập thông tin vào form nhập biên bản nhận hàng, họ chỉ việc từ chối nhận bất kỳ hàng nào không xuất hiện trên form. Nếu việc ghi nhận thông tin nhận hàng là không khả thi vào thời điểm hàng cập bến, nhân viên kho hàng chỉ cần để hàng không được đặt sang một bên rồi nhập vào form hàng không được đặt. Cả hai thủ tục trên đều tiết kiệm thời gian quí giá của kế toán viên.

BÀI TẬP 9.38: TẠO TRUY VẤN NỐI ĐUÔI QRYADDORDEREDITEMSTOPURCHINV

1. Kích Create tab rồi kích Query Design. Thêm các bảng sau từ hộp thoại Show Table bằng cách kích kép chúng: tblPurchase, tblPurchaseOrder, và tblReservation-PurchaseOrderInventory. Kích nút Close. Di dời và định cỡ lại các danh sách trường để có thể thấy tất cả các tên trường.

2. Kích Append trong nhóm Query Type, chọn tblInflow-PurchaseInventory từ combo box trong hộp thoại Append, rồi kích OK.

3. Kích kép InventoryReceiptID từ khung trường tblPurchase để thêm nó vào Criteria Pane. Gõ [TempVars]![TempInventoryReceiptID] vào ô Criteria để dùng biến tạm được tạo bởi mcrUpdateVendorIDAndInvItems.

4. Thêm InventoryID từ tblReservation-PurchaseOrderInventory vào Criteria Pane. Để ý rằng Access tự động điền vào các trường với tên tương ứng từ tblInflow-PurchaseInventory trong các ô Append To (xem Hình 9.40). Bạn phải tự chọn các trường Append To nếu tên không đúng. Để minh họa, hãy kích kép POPrice trong danh sách trường tblReservation-PurchaseOrderInventory. Để ý rằng ô Append To của POPrice là trống. Hãy xóa POPrice khỏi Criteria Pane vì bạn không cần nó trong truy vấn này.

Hình 9.40 qryAddOrderedItemsToPurchInv ở góc nhìn Design.

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

6. Mở tblInflow-PurchaseInventory ở góc nhìn Design, đặt giá trị mặc định cho QuantityReceived và InventoryReceiptPrice về 0. Khi truy vấn nối đuôi thêm các dòng trên đơn mua hàng vào bảng này, QuantityReceived và InventoryReceiptPrice được tự động gán là 0. Giá trị 0 phục vụ hai mục đích. Thứ nhất, nó được gán vào các trường bắt buộc nếu truy vấn nối đuôi không gán vào – mọi trường bắt buộc đều phải có giá trị trước khi Access có thể lưu bản ghi. Thứ hai, 0 cho biết nhân viên kho hàng chưa thực sự đếm hàng tồn kho hay chưa nhập giá từ hóa đơn của nhà cung ứng.

7. Để kiểm thử truy vấn, bạn phải xóa hành động RemoveTempVar khỏi mcrUpdateVendorIDAndInvItems để giữ giá trị TempInventoryReceiptID trong bộ nhớ để nó có thể được dùng trong qryAddOrderedItemsToPurchInv. Kích kép frmPurchase để mở nó ở góc nhìn Form. Đến New Record. Nhập thông tin ở Hình 9.41. Tab sang nút lệnh Update Vendor # and Inv. Items rồi kích nó để thi hành mcrUpdateVendorIDAndInvItems, mà sẽ cập nhật VendorID thành 1009 (và đặt TempInventoryReceiptID là 999999). Kích kép qryAddOrderedItemsToPurchInv để thêm các mục trên dòng tồn kho; kích Yes trong các hộp thoại khuyến cáo. Để xem các thay đổi, hãy đến bản ghi trước rồi trở về bản ghi vừa tạo. Bạn cần thấy hai hàng tồn kho, 1032 và 1045, được thêm vào subform. Dùng các nút chọn bản ghi trên subform và form để xóa dữ liệu kiểm thử. Đóng form. Mở mcrUpdateVendorIDAndInvItems ở góc nhìn Design rồi thêm hành động RemoveTempVar (xem Bài tập 9.36, Bước 7 và Hình 9.38).

Hình 9.41 Form nhập biên bản nhận hàng với bản ghi kiểm thử.

BÀI TẬP 9.39: THÊM CÁC HÀNH ĐỘNG VÀO MCRUPDATEVENDORIDANDINVITEMS ĐỂ THÊM HÀNG ĐÃ ĐẶT VÀO BẢN GHI HIỆN THỜI CỦA FORM NHẬP BIÊN BẢN NHẬN HÀNG

Hãy dùng Hình 9.42 làm hướng dẫn cho bài tập này. Chỉ có các hành động macro mới, mới được hiển thị đầy đủ.

Hình 9.42 mcrUpdateVendorIDAndInvItems sau khi thêm các hành động để thêm hàng tồn kho vào bản ghi hiện thời.

1. Mở mcrUpdateVendorIDAndInvItems ở góc nhìn Design. Thêm hành động OpenForm vào ô Add New Action (cần để cho phép fsubPurchase tái hiển thị sau khi qryAddOrderedItemsToPurchInv thêm các bản ghi vào tblInflow-PurchaseInventory). Chọn các giá trị tham biến sau:

  • Form Name – fsubPurchase
  • View – Form (giá trị mặc định)
  • Data Mode – Edit
  • Window Mode – Hidden (subform không mở ở một tab mới)


2. Thêm một hành động OpenQuery; đặt Query Name là qryAddOrderedItemsToPurchInv. Để nguyên giá trị mặc định cho các tham biến.

3.  Tái hiển thị subform. Thêm một hành động RepaintObject; đặt Object Type là Form và Object Name là fsubPurchase.

4. Dời hành động RemoveTempVar về cuối macro. Kích RemoveTempVar rồi kích liên tục mũi tên xuống màu xanh lá cây cho đến khi RemoveTempVar là hành động cuối cùng trong macro. Lưu rồi đóng macro.

5. Kiểm thử macro bằng cách mở frmPurchase, nhập bản ghi kiểm thử ở Hình 9.41, rồi kích nút Update Vendor # and Inv. Items. VendorID cần sửa thành 1009 và hai hàng tồn kho, 1032 và 1045, cần được thêm vào form. Dùng các nút chọn bản ghi trên subform và form để xóa dữ liệu kiểm thử. Đóng form.

6. Nhớ rằng nếu bạn thi hành macro trên một bản ghi mà trước đây đã thêm hàng tồn kho, danh sách hàng tồn kho sẽ không được cập nhật cho đến khi bạn rời khỏi bản ghi hiện thời. Việc loại bỏ nhu cầu rời khỏi bản ghi hiện thời để cập nhật danh sách tồn kho sẽ cần việc lập trình vượt quá phạm vi của tài liệu này.

BÀI TẬP 9.40: THÊM CÁC THÀNH PHẦN ĐIỀU KHIỂN VÀO FSUBPURCHASE ĐỂ NGĂN NGƯỜI DÙNG THÊM CÁC MẶT HÀNG KHÔNG ĐƯỢC ĐẶT VÀO FORM NHẬP BIÊN BẢN NHẬN HÀNG

Giờ đây bạn đã có một macro chuyển các mặt hàng đã đặt vào form nhập biên bản nhận hàng, bạn cần ngăn người dùng sửa các InventoryItemIDs và thêm hàng tồn kho khác vào form.

1. Mở subPurchase ở góc nhìn Design; mở Property Sheet.

2. Thay InventoryID combo box bằng ô văn bản. Xóa InventoryID combo box. Kích Text Box trong nhóm Controls rồi kích kép vào phần Detail bên dưới dấu # của đầu đề Our Item #.

3. Đặt các thuộc tính sau cho ô văn bản:

4. Trên Format tab, sửa Back Style và Border Style thành Transparent.

5. Trên Data tab, đặt Control Source là InventoryID; sửa Enabled thành No và Locked thành Yes.

6. Sửa Name trên Other tab thành InventoryID. Sửa Tab Stop thành No.

7. Xóa nhãn. Dùng các công cụ Size/Space và Align trong nhóm Sizing & Ordering trên dải lệnh Arrange để giúp bạn sắp thành phần điều khiển mới cho ngay. Lưu các thay đổi.

8. Chọn Form từ combo box trên Property Sheet. Kích Data tab. Sửa thuộc tính Allow Additions thành No. Lưu các thay đổi rồi chuyển về góc nhìn Form. Để ý rằng nút chọn bản ghi mới đã được loai khỏi phần Detail của subform (xem Hình 9.43). Hơn nữa, nút đến bản ghi mới trên thanh di chuyển đã bị vô hiệu hóa. Đóng subform.

Hình 9.43 Form nhập biên bản nhận hàng sau khi hoàn tất Bài tập 9.40.

9. Mở frmPurchase ở góc nhìn Form. Đến bản ghi thứ ba, Inventory Receipt # 100003. Để ý rằng nút chọn bản ghi mới không xuất hiện và nút đến bản ghi mới đã bị vô hiệu hóa. Đóng form.

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.

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.

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

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

James Perry, Richard Newmark


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


Tạo truy vấn các mục trên từng dòng mua hàng


Khác biệt chính giữa truy vấn các mục trên từng dòng đơn mua hàng và truy vấn các mục trên từng dòng mua hàng là tblReservation-PurchaseOrderInventory và các trường của nó được thay bằng tblInflow-PurchaseInventory và các trường của nó. Một khác biệt nhỏ là Pipefitters không ghi nhận VendorItemID lên biên bản nhận hàng, như khi họ đặt hàng.

BÀI TẬP 9.29: SỬA QRYPURCHASEORDERLINEITEM ĐỂ TẠO QRYPURCHASELINEITEM

Ở bài tập này bạn sẽ sửa Record Source và Control Source của subform cho tất cả các trường hiện hữu.

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

2. Kích Show Table trong nhóm Query Setup, kích kép tblInflow-PurchaseInventory, rồi kích nút Close. Bạn có thể cần di dời và định cỡ lại tblInflow-PurchaseInventory trong Table Pane để thấy được mọi tên trường.

3. Xóa VendorItemID khỏi Criteria Pane.

4. Trên Criteria Pane, sửa bốn tham chiếu bảng từ tblReservation-PurchaseOrderInventory thành tblInflow-PurchaseInventory.

5. Sửa các tên Field sau rồi lưu các thay đổi:

  • Từ QuantityOrdered thành QuantityReceived.
  • Từ POPrice thành InventoryReceiptPrice.
  • Từ PurchaseOrderID thành InventoryReceiptID.


6. Kích trường PurchaseOrderLineExtension trên Criteria Pane, rồi kích Builder trong nhóm Query Setup. Trong Expression Builder, sửa biểu thức thành PurchaseLineExtension: [QuantityReceived]*[InventoryReceiptPrice]. Kích OK.

7. Xóa tblReservation-PurchaseOrderInventory khỏi Table Pane. Lưu các thay đổi.

8. Hãy kiểm thử truy vấn. Kích Run trong nhóm Results. Tập động dynaset cần trông tương tự Hình 9.28, với 173 bản ghi. Đóng truy vấn.

Hình 9.28 Tập động dynaset qryPurchaseLineItem.

THỬ NGHIỆM

Làm sao bạn biết rằng qryPurchaseLineItem cần cho ra 173 bản ghi? Hãy tìm nguồn dữ liệu cho các trường và kiểm chứng rằng bạn cần có 173 bản ghi.

Thứ Bảy, 8 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 mua hàng Purchase

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 mua hàng Purchase


Trong Bài tập 9.28 bạn sẽ thêm các quan hệ cần thiết với tblPurchase để tạo form nhập biên bản nhận hàng.

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

1. Đóng mọi đối tượng Access đang mở. Trên 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 pane. Cửa sổ Relationships cần giống với trạng thái ở cuối Bài tập 9.12 (xem Hình 9.12).

2. Kích Show Table trong nhóm Relationships (trên Design tab), kích kép tblPurchase tblInflow-PurchaseInventory. Rồi kích Close.

3. Tạo các liên kết như các đã làm ở Bài tập 9.12. Kéo khóa chính đến khóa ngoại tương ứng hay từ khóa chính đến phần tương ứng trong khóa chính phức hợp.

4. Khi hộp thoại Edit Relationships xuất hiện, hãy chắc là các thuộc tính đúng xuất hiện trong các bảng mà bạn đã kéo từ đó đến đó. Kiểu quan hệ ở cuối hộp thoại phải luôn là one-to-many. Đánh dấu Enforce Referential IntegrityCascade Update Related Fields. Sau cùng, kích Create trong hộp thoại.

5. Định cỡ và di dời các bảng vừa thêm cho giống với cửa sổ Relationships ở Hình 9.27. Bạn có thể xem lại Hình 9.4, ở đó liệt kê các khóa chính và khóa ngoại cho từng bảng.

Hình 9.27 Cửa sổ Relationships sau khi thêm biến cố mua hàng.

6. Đóng cửa sổ Relationships và kích nút Yes trong hộp thoại để lưu các thay đổi, rồi kích >> trên Navigation Pane để phục hồi nó.

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 biên bản nhận hàng. Vì form nhập biên bản nhận hàng  tương tự form nhập đơn mua hàng, ta có thể dùng frmPurchaseOrder fsubPurchaseOrder để tạo form nhập biên bản nhận hàng. Mặc dù đôi khi sẽ dễ hơn nếu tạo các form phức tạp ngay từ đầu, chúng tôi muốn bạn sửa các đối tượng Access hiện hữu để giúp bạn hiểu sâu hơn những gì xảy ra “ở hậu trường”, từ đó giúp bạn có khả năng sửa lỗi và cải thiện form hiện hữu cũng như các đối tượng Access khác.