-
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
Xuân Thanh > 17-04-12, 01:36 PM
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 -
RE: 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
Xuân Thanh > 17-04-12, 02:00 PM
Để 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 ALL 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 -
RE: 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
Xuân Thanh > 17-04-12, 02:14 PM
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 -
RE: 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
dtv197 > 17-04-12, 09:38 PM
Thank pác.
Pác nhiệt tình quá -
RE: 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
Xuân Thanh > 17-04-12, 10:44 PM
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 -
RE: 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
Greenlov3 > 18-04-12, 05:45 PM
(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 -
RE: 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
Noname > 18-04-12, 07:13 PM
(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! -
RE: 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
Greenlov3 > 19-04-12, 01:23 AM
(18-04-12, 07:13 PM)Noname Đã viết:
hinh cua em day!(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!
-
RE: 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
Noname > 19-04-12, 09:10 AM
(19-04-12, 01:23 AM)Greenlov3 Đã viết:
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(18-04-12, 07:13 PM)Noname Đã viết:
hinh cua em day!(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!
-
RE: 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
Greenlov3 > 19-04-12, 12:10 PM
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:
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(18-04-12, 07:13 PM)Noname Đã viết:
hinh cua em day!(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!