• 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
  • 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:
    (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]
  • 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:
    (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
  • 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:
    (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]