Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Hướng dẫn cơ bản về việc lập báo cáo tồn kho và in thẻ kho bằng query
#1
Vừa qua trên diễn đàn có một số bạn thắc mắc về việc tính tồn kho và thẻ kho. Bản thân tôi thích dùng VBA hơn vì nó bảo mật tốt hơn. Để giúp các bạn tham khảo, tôi lập chủ đề này, hướng dẫn các bạn làm tồn kho và thẻ kho hoàn toàn bằng query. Nói thêm, với Access, có đến hơn 90% kết quả có được ta có thể dùng hoàn toàn bằng query truy vấn.
Để làm được, các bạn tạo một CSDL TonKho với các bảng sau

1/ tblHangHoa
- Mahang Text 20 PrimariKey
- Tenhang Text 50

2/ tblNhapHang
- MaSoNhap text 20 PrimaryKey
- NgayLap Date

3/ tblNhapHangChiTiet
- MaSoNhap Text 20
- MaHang Text 20
- SoLuong Number

4/ tblXuatHang
- MaSoXuat Text 20 PrimaryKey
- NgayLap Date

3/ tblXuatHangChiTiet
- MaSoXuat Text 20
- MaHang Text 20
- SoLuong Number

Sau khi lập xong các table, các bạn tạo mối quan hệ cho các table (cái này đơn giản khỏi cần hướng dẫn nhé)
MaHang - MaHang, MaSoNhap - MaSoNhap, MaSoXuat - MaSoXuat
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , Hạ Vàng , HOA LAN , nghi123 , khampha286 , hugox03 , TruongVanTruong , ilove_JS , dinhnhieu , peid210985
#2
Để có báo cáo Tồn Kho, ta chỉ cần sử dụng 5 query sau đây
1/ qryNhapXuat : Tính số lượng nhập xuất hàng hóa

Mã:
SELECT tblNhapHang.NgayLap, tblNhapHangChiTiet.MaHang, tblNhapHangChiTiet.SoLuong AS SoLuongNhap, 0 AS SoLuongXuat FROM tblNhapHang INNER JOIN tblNhapHangChiTiet ON tblNhapHang.MaSoNhap = tblNhapHangChiTiet.MaSoNhap;
UNION SELECT tblXuatHang.NgayLap, tblXuatHangChiTiet.MaHang, 0 AS SoLuongNhap, tblXuatHangChiTiet.SoLuong AS SoLuongXuat FROM tblXuatHang INNER JOIN tblXuatHangChiTiet ON tblXuatHang.MaSoXuat = tblXuatHangChiTiet.MaSoXuat;

2/ qryTruoc : tính số lượng hàng trước ngày chỉ định bất kỳ

Mã:
SELECT qryNhapXuat.MaHang, qryNhapXuat.SoLuongNhap AS Nhap, qryNhapXuat.SoLuongXuat AS Xuat FROM qryNhapXuat WHERE (((qryNhapXuat.NgayLap)<[TuNgay]));

3/ qryTonDau : Tính tổng số lượng tồn của các mạt hàng trước ngày chỉ định bất kỳ

Mã:
SELECT qryTruoc.MaHang, Sum(qryTruoc.Nhap) AS SoLuongNhap, Sum(qryTruoc.Xuat) AS SoLuongXuat, [SoLuongNhap]-[SoLuongXuat] AS TonDau FROM qryTruoc GROUP BY qryTruoc.MaHang;

4/ qryTrong : Tính tổng lượng nhập xuất của các mặt hàng theo thời điểm cho trước(từ ngay đến ngày)

Mã:
SELECT qryNhapXuat.MaHang, qryNhapXuat.SoLuongNhap AS Nhap, qryNhapXuat.SoLuongXuat AS Xuat, qryNhapXuat.NgayLap FROM qryNhapXuat WHERE (((qryNhapXuat.NgayLap) Between [TuNgay] And [DenNgay]));

5/ qryTonCuoi : Xác định tồn kho của tất cả các mạt hàng

Mã:
SELECT tblHangHoa.MaHang, tblHangHoa.TenHang, IIf([TonDau]>0,[TonDau],0) AS TonDauKy, Sum(NZ([Nhap])) AS TongNhap, Sum(NZ([Xuat])) AS TongXuat, [TonDauKy]+[TongNhap]-[TongXuat] AS TonCuoi FROM (tblHangHoa LEFT JOIN qryTrong ON tblHangHoa.MaHang = qryTrong.MaHang) LEFT JOIN qryTonDau ON tblHangHoa.MaHang = qryTonDau.MaHang GROUP BY tblHangHoa.MaHang, tblHangHoa.TenHang, IIf([TonDau]>0,[TonDau],0);

Như vậy là ta đã tính được tồn kho của tất cả các mặt hàng chỉ thông qua 5 query đơn giản. Lưu ý query thứ nhất, qryNhapXuat là một Union query, qry thứ 5 cách JOIN các tabble, query trong lưới query. Các bạn tự nghiên cứu nhé

Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , HOA LAN , nghi123 , hugox03 , TruongVanTruong , ilove_JS , thucgia , peid210985
#3
Thêm một query nữa là ta có báo cáo thẻ kho rồi : qryTheKho

Mã:
SELECT tblHangHoa.MaHang, tblHangHoa.TenHang, NZ([TonDau]) AS Ton, qryTrong.NgayLap, IIf([Nhap]>0,[Nhap],0) AS NhapTK, IIf([Xuat]>0,[Xuat],0) AS XuatTK FROM (tblHangHoa LEFT JOIN qryTonDau ON tblHangHoa.MaHang = qryTonDau.MaHang) LEFT JOIN qryTrong ON tblHangHoa.MaHang = qryTrong.MaHang WHERE (((tblHangHoa.MaHang)=[HangNao])) ORDER BY qryTrong.NgayLap;

Như vậy là các bạn đã có đủ cơ sở để làm báo cáo Tồn Kho và In Thẻ kho rồi nhé
Chúc các bạn vui
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn dtv197 , Noname , HOA LAN , nghi123 , khampha286 , hugox03 , zangquyet , peid210985
#4
Thank pác.
Pác nhiệt tình quá
Chữ ký của dtv197 Xin chào, mình là dtv197, Tham gia http://thuthuataccess.com/forum từ ngày 20-08 -11.
Reply
Những người đã cảm ơn Xuân Thanh , TruongVanTruong
#5
Với cách tính này, có thể có một số mặt hàng không có dữ liệu(Đầu kỳ = 0, Tổng Nhập = 0, Tổng Xuất = 0, Tồn cuối = 0). Nếu muốn xóa những dòng này cho đỡ rối mắt, các bạn chuyển cái qryTonCuoi thành Make-Table Query (chuyển sang một table mới, ví dụ tblTonKho) rồi dùng một query xóa nữa là ổn

Mã:
DELETE tblTonKho.TonDauKy, tblTonKho.TongNhap, tblTonKho.TongXuat FROM tblTonKho WHERE (((tblTonKho.TonDauKy)=0) AND ((tblTonKho.TongNhap)=0) AND ((tblTonKho.TongXuat)=0));

Khi viết bằng VBA thì không có hiện tượng này, Chỉ có những mặt hàng nào có dữ liệu thì mới hiển thị
Thân mến
Chữ ký của Xuân Thanh Trăm năm trước thì ta chưa gặp
Trăm năm sau biết gặp được không?
Cuộc đời sắc sắc không không
Thì thôi ta cứ hết lòng vì nhau
ღღღღღTài sản của Xuân Thanh (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , Greenlov3 , hugox03
#6
(17-04-12, 02:00 PM)Xuân Thanh Đã viết: Để có báo cáo Tồn Kho, ta chỉ cần sử dụng 5 query sau đây
1/ qryNhapXuat : Tính số lượng nhập xuất hàng hóa

Mã:
SELECT tblNhapHang.NgayLap, tblNhapHangChiTiet.MaHang, tblNhapHangChiTiet.SoLuong AS SoLuongNhap, 0 AS SoLuongXuat FROM tblNhapHang INNER JOIN tblNhapHangChiTiet ON tblNhapHang.MaSoNhap = tblNhapHangChiTiet.MaSoNhap;
UNION SELECT tblXuatHang.NgayLap, tblXuatHangChiTiet.MaHang, 0 AS SoLuongNhap, tblXuatHangChiTiet.SoLuong AS SoLuongXuat FROM tblXuatHang INNER JOIN tblXuatHangChiTiet ON tblXuatHang.MaSoXuat = tblXuatHangChiTiet.MaSoXuat;

2/ qryTruoc : tính số lượng hàng trước ngày chỉ định bất kỳ

Mã:
SELECT qryNhapXuat.MaHang, qryNhapXuat.SoLuongNhap AS Nhap, qryNhapXuat.SoLuongXuat AS Xuat FROM qryNhapXuat WHERE (((qryNhapXuat.NgayLap)<[TuNgay]));

3/ qryTonDau : Tính tổng số lượng tồn của các mạt hàng trước ngày chỉ định bất kỳ

Mã:
SELECT qryTruoc.MaHang, Sum(qryTruoc.Nhap) AS SoLuongNhap, Sum(qryTruoc.Xuat) AS SoLuongXuat, [SoLuongNhap]-[SoLuongXuat] AS TonDau FROM qryTruoc GROUP BY qryTruoc.MaHang;

4/ qryTrong : Tính tổng lượng nhập xuất của các mặt hàng theo thời điểm cho trước(từ ngay đến ngày)

Mã:
SELECT qryNhapXuat.MaHang, qryNhapXuat.SoLuongNhap AS Nhap, qryNhapXuat.SoLuongXuat AS Xuat, qryNhapXuat.NgayLap FROM qryNhapXuat WHERE (((qryNhapXuat.NgayLap) Between [TuNgay] And [DenNgay]));

5/ qryTonCuoi : Xác định tồn kho của tất cả các mạt hàng

Mã:
SELECT tblHangHoa.MaHang, tblHangHoa.TenHang, IIf([TonDau]>0,[TonDau],0) AS TonDauKy, Sum(NZ([Nhap])) AS TongNhap, Sum(NZ([Xuat])) AS TongXuat, [TonDauKy]+[TongNhap]-[TongXuat] AS TonCuoi FROM (tblHangHoa LEFT JOIN qryTrong ON tblHangHoa.MaHang = qryTrong.MaHang) LEFT JOIN qryTonDau ON tblHangHoa.MaHang = qryTonDau.MaHang GROUP BY tblHangHoa.MaHang, tblHangHoa.TenHang, IIf([TonDau]>0,[TonDau],0);

Như vậy là ta đã tính được tồn kho của tất cả các mặt hàng chỉ thông qua 5 query đơn giản. Lưu ý query thứ nhất, qryNhapXuat là một Union query, qry thứ 5 cách JOIN các tabble, query trong lưới query. Các bạn tự nghiên cứu nhé

Thân mến

cái query 1 ma anh nói : em lap len co van de` 1 chut anh ah`
đó la` ngày lap của tlbHangXuat Và tlnHangNhap nó cứ dan chéo nhau với SoLuong
anh có thể làm thử file mẫu acc dc ko ạ
em làm theo mà không ra
Chữ ký của Greenlov3 Xin chào, mình là Greenlov3, Tham gia http://thuthuataccess.com/forum từ ngày 12-04 -12.
Reply
Những người đã cảm ơn thucgia
#7
(18-04-12, 05:45 PM)Greenlov3 Đã viết: cái query 1 ma anh nói : em lap len co van de` 1 chut anh ah`
đó la` ngày lap của tlbHangXuat Và tlnHangNhap nó cứ dan chéo nhau với SoLuong
anh có thể làm thử file mẫu acc dc ko ạ
em làm theo mà không ra

Vậy file của bạn đâu? Hình chụp của bạn cho rõ một chút!
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#8
(18-04-12, 07:13 PM)Noname Đã viết:
(18-04-12, 05:45 PM)Greenlov3 Đã viết: cái query 1 ma anh nói : em lap len co van de` 1 chut anh ah`
đó la` ngày lap của tlbHangXuat Và tlnHangNhap nó cứ dan chéo nhau với SoLuong
anh có thể làm thử file mẫu acc dc ko ạ
em làm theo mà không ra

Vậy file của bạn đâu? Hình chụp của bạn cho rõ một chút!
hinh cua em day!
[Hình: Untitled.png]
Chữ ký của Greenlov3 Xin chào, mình là Greenlov3, Tham gia http://thuthuataccess.com/forum từ ngày 12-04 -12.
Reply
Những người đã cảm ơn
#9
(19-04-12, 01:23 AM)Greenlov3 Đã viết:
(18-04-12, 07:13 PM)Noname Đã viết:
(18-04-12, 05:45 PM)Greenlov3 Đã viết: cái query 1 ma anh nói : em lap len co van de` 1 chut anh ah`
đó la` ngày lap của tlbHangXuat Và tlnHangNhap nó cứ dan chéo nhau với SoLuong
anh có thể làm thử file mẫu acc dc ko ạ
em làm theo mà không ra

Vậy file của bạn đâu? Hình chụp của bạn cho rõ một chút!
hinh cua em day!
[Hình: Untitled.png]
Nhìn không thấy gì cả bạn ạ! Bạn up file lên luôn nào, nhớ convert sang Access 2003 nhé! Trên này ít người dùng 2010 lắm
Chữ ký của Noname 020
ღღღღღTài sản của Noname (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#10
Nhìn không thấy gì cả bạn ạ! Bạn up file lên luôn nào, nhớ convert sang Access 2003 nhé! Trên này ít người dùng 2010 lắm
[/quote]

anh cho em yahoo di ah`

(19-04-12, 09:10 AM)Noname Đã viết:
(19-04-12, 01:23 AM)Greenlov3 Đã viết:
(18-04-12, 07:13 PM)Noname Đã viết:
(18-04-12, 05:45 PM)Greenlov3 Đã viết: cái query 1 ma anh nói : em lap len co van de` 1 chut anh ah`
đó la` ngày lap của tlbHangXuat Và tlnHangNhap nó cứ dan chéo nhau với SoLuong
anh có thể làm thử file mẫu acc dc ko ạ
em làm theo mà không ra

Vậy file của bạn đâu? Hình chụp của bạn cho rõ một chút!
hinh cua em day!
[Hình: Untitled.png]
Nhìn không thấy gì cả bạn ạ! Bạn up file lên luôn nào, nhớ convert sang Access 2003 nhé! Trên này ít người dùng 2010 lắm

[Hình: Untitled-2.png]
Chữ ký của Greenlov3 Xin chào, mình là Greenlov3, Tham gia http://thuthuataccess.com/forum từ ngày 12-04 -12.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  [Thủ Thuật] [Shared Code- PhầnII]Chọn ngày tháng bằng click chuột [No Calendar] maidinhdan 13 536 30-11-16, 11:45 AM
Bài mới nhất: ongke0711
  [Thủ Thuật] Demo_Chọn ngày tháng bằng nút (No Calender Tiếng việt) maidinhdan 7 1,399 25-06-16, 12:44 AM
Bài mới nhất: zinzin8x
  [Thủ Thuật] Đưa file icon vào chương trình bằng code nguyentung 9 1,552 01-11-14, 07:52 PM
Bài mới nhất: quanghoasla
  nén file Access bằng VBA Noname 11 5,220 03-06-14, 08:46 PM
Bài mới nhất: Xuân Thanh
  Hướng dẫn tạo form chỉ cho phép mở một số lần cố định Noname 10 4,640 18-04-14, 11:54 AM
Bài mới nhất: trunghieu

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ