Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 23 kết quả

Đề tài: Cách tính tồn kho trong lập trình C#?

  1. #1
    Ngày gia nhập
    06 2011
    Bài viết
    7

    Angry Cách tính tồn kho trong lập trình C#?

    Hiện mình đang làm phần tính tồn kho. Mình có một thắc mắc mong được các bạn chỉ giúp.
    Mình có bảng
    HANGHOA(MaHH, TenHH, MaLoaiHH, MaDVT)
    LOAIHANGHOA(MaLoaiHH, TenLoaiHH)
    DONVITINH(MaDVT,TenDVT)
    PHIEUNHAP(MaPhieuNhap, MaHH, SoLuongNhap, DonGia, ThanhTien)
    PHIEUXUAT(MaPhieuXuat, MaHH, SoLuongXuat, DonGia, ThanhTien)

    mình lấy (SoLuongNhap - SoLuongXuat = HangTon)

    Code:
    private void bttktatcahang_Click(object sender, EventArgs e)
            {
                string sqltkhangton = "select CHITIETPHIEUNHAP.MaHH as [Mã hàng], HANGHOA.TenHH as [Hàng hóa], LOAIHANGHOA.TenLoaiHH as [Loại hàng],DONVITINH.TenDVT as [Đơn vị tính],Sum(SoLuongNhap), Sum(SoLuongXuat),Sum(SoLuongNhap-SoLuongXuat) as [Số Lượng Còn] from CHITIETPHIEUNHAP inner join PHIEUNHAP on CHITIETPHIEUNHAP.MaPhieuNhap=PHIEUNHAP.MaPhieuNhap inner join CHITIETPHIEUXUAT on CHITIETPHIEUNHAP.MaHH=CHITIETPHIEUXUAT.MaHH inner join HANGHOA on CHITIETPHIEUNHAP.MaHH=HANGHOA.MaHH inner join LOAIHANGHOA on HANGHOA.MaLoaiHH=LOAIHANGHOA.MaLoaiHH inner join DONVITINH on HANGHOA.MaDVT=DONVITINH.MaDVT group by CHITIETPHIEUNHAP.MaHH, HANGHOA.TenHH, LOAIHANGHOA.TenLoaiHH,DONVITINH.TenDVT";
                DataSet dstkhangton = ketnoi.GrdSource(sqltkhangton);
                datagridview_thongkehang.DataSource = dstkhangton.Tables[0];
            }
    đoạn code này chạy đúng khi mà mặt hàng trong kho có ít nhất 1 lần xuất. Còn nếu mặt hàng đó chưa từng xuất thì nó lại không hiển thị kết quả. Mong các bạn chỉ giúp mình cách là sao để khi mà trong kho có mặt hàng đó mà chưa xuất nó vẫn hiện kết quả. Mình đang cần gấp lắm.

    - Một câu nữa mình mong các bạn hướng dẫn cách kiểm tra số lượng xuất (kiểm tra nếu số lượng xuất lớn hơn số lượng tồn trong kho thì báo lỗi).
    thanks mọi người nhiều.
    Đây là dữ liệu phiếu nhập:
    Đây là dữ liệu phiếu xuất:
    Kết quả thực hiện đoạn code trên:
    kết quả trên của mình đúng như mình cần nhưng mà nó không xuất được các mặt hàng có mã HH0004, HH0006, HH0008, HH0016 và HH0025 (vì cái này chưa được xuất). Các bạn chỉ mình cách làm sao để xuất cả kết quả này ra với. Thanks các bạn nhiều

    (Admin ơi mình up hình mà sao k thấy gì hết vậy? có gì nhờ bạn up lại giúp mình với nha)
    Đã được chỉnh sửa lần cuối bởi dangtuananh : 19-07-2011 lúc 07:43 PM. Lý do: Bổ sung hình ảnh

  2. #2
    Ngày gia nhập
    08 2009
    Nơi ở
    TP Cần Thơ - Lộ 91B
    Bài viết
    212

    - bạn cần tính tổng số lượng xuất của 1 mặt hàng trong bảng PHIEUXUAT. rối lấy số lượng nhập của mặt hàng đó trừ lại
    - để kiểm tra số lượng hàng xuất ko vượt hàng tồn thì bạn bắt sự kiện lập phiếu xuất để kiểm tra hoặc tự động kiểm tra textBox đang hiển thị số lượng xuất

  3. #3
    Ngày gia nhập
    04 2010
    Bài viết
    1,535

    Trong câu truy vấn của bạn có it nhất là 2 bảng bạn không nếu ra trong câu hỏi.

    Có nhiều cách để làm. Cách gọn nhất (nhưng chưa chắc đã chạy nhanh) là dùng truy vấn nội

    SELECT *, (TongNhap-TongXuat) AS TonKho, CASE WHEN (TongNhap-TongXuat >= 0) THEN ' ' ELSE 'xuat nhieu qua' END AS TinhTrangTonKho
    FROM (
    SELECT MAHH, SUM(SoLuongNhap) AS TongNhap,
    (SELECT SUM(SoLuongXuat) FROM PHIEUXUAT WHERE PHIEUXUAT.MAHH = PHIEUNHAP.MAHH) AS TongXuat
    FROM PHIEUNHAP GROUP BY MAHH
    )

    Muốn thêm chi tiết gì nữa thì join bảng khác vào

  4. #4
    Ngày gia nhập
    06 2011
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi latuine Xem bài viết
    - bạn cần tính tổng số lượng xuất của 1 mặt hàng trong bảng PHIEUXUAT. rối lấy số lượng nhập của mặt hàng đó trừ lại
    - để kiểm tra số lượng hàng xuất ko vượt hàng tồn thì bạn bắt sự kiện lập phiếu xuất để kiểm tra hoặc tự động kiểm tra textBox đang hiển thị số lượng xuất
    Mình đã tính tổng số lượng nhập và xuất rùi bạn àh. Mà quan trọng ở đây mình muốn hỏi là làm cách nào để khi mà những mặt hàng có trong kho nhưng mình chưa xuất nó cũng tính xa được đó bạn.

  5. #5
    Ngày gia nhập
    06 2011
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Trong câu truy vấn của bạn có it nhất là 2 bảng bạn không nếu ra trong câu hỏi.

    Có nhiều cách để làm. Cách gọn nhất (nhưng chưa chắc đã chạy nhanh) là dùng truy vấn nội

    SELECT *, (TongNhap-TongXuat) AS TonKho, CASE WHEN (TongNhap-TongXuat >= 0) THEN ' ' ELSE 'xuat nhieu qua' END AS TinhTrangTonKho
    FROM (
    SELECT MAHH, SUM(SoLuongNhap) AS TongNhap,
    (SELECT SUM(SoLuongXuat) FROM PHIEUXUAT WHERE PHIEUXUAT.MAHH = PHIEUNHAP.MAHH) AS TongXuat
    FROM PHIEUNHAP GROUP BY MAHH
    )

    Muốn thêm chi tiết gì nữa thì join bảng khác vào
    Hihihi bạn có thể nói rõ hơn được không. Mình vẫn không hiểu rõ lắm.
    thanks bạn.

  6. #6
    Ngày gia nhập
    04 2010
    Bài viết
    1,535

    Mặc định Cách tính tồn kho trong lập trình C#?

    Câu hỏi bạn đưa ra có 2 bảng

    Trong code của bạn, tôi đọc thấy 4 bảng

  7. #7
    Ngày gia nhập
    06 2011
    Bài viết
    93

    Bạn viết query như sau để hiện lên tất cã hàng hóa, nếu số lượng xuất nhiều hơn số lượng nhập thì số lượng sẽ là số âm.

    SQL Code:
    1. SELECT hh.MaHH AS [Mã hàng], hh.TenHH AS [Hàng hóa],
    2.        lh.TenLoaiHH AS [Loại hàng], dv.TenDVT AS [Đơn vị tính],
    3.        IsNull(nh.SLNhap, 0) AS [Số Lượng Nhập], IsNull(xh.SLXuat, 0) AS [Số Lượng Xuất],
    4.        IsNull(nh.SLNhap, 0) - IsNull(xh.SLXuat, 0) AS [Số Lượng Còn]
    5.   FROM HANGHOA hh
    6.  INNER JOIN LOAIHANGHOA lh ON hh.MaLoaiHH = lh.MaLoaiHH
    7.  INNER JOIN DONVITINH dv ON hh.MaDVT = dv.MaDVT
    8.   LEFT JOIN (SELECT MaHH, SUM(SoLuongNhap) AS SLNhap
    9.                FROM CHITIETPHIEUNHAP
    10.               GROUP BY MaHH) nh ON nh.MaHH = hh.MaHH
    11.   LEFT JOIN (SELECT MaHH, SUM(SoLuongXuat) AS SLXuat
    12.                FROM CHITIETPHIEUXUAT
    13.               GROUP BY MaHH) xh ON xh.MaHH = hh.MaHH

  8. #8
    Ngày gia nhập
    02 2011
    Nơi ở
    ở Nhà
    Bài viết
    102

    Trích dẫn Nguyên bản được gửi bởi dangtuananh Xem bài viết
    Hiện mình đang làm phần tính tồn kho. Mình có một thắc mắc mong được các bạn chỉ giúp.
    Mình có bảng
    HANGHOA(MaHH, TenHH, MaLoaiHH, MaDVT)
    LOAIHANGHOA(MaLoaiHH, TenLoaiHH)
    DONVITINH(MaDVT,TenDVT)
    PHIEUNHAP(MaPhieuNhap, MaHH, SoLuongNhap, DonGia, ThanhTien)
    PHIEUXUAT(MaPhieuXuat, MaHH, SoLuongXuat, DonGia, ThanhTien)

    mình lấy (SoLuongNhap - SoLuongXuat = HangTon)
    theo mình thì câu lệnh như thế này !

    select SoLuongNhap-SoLuongXuat as hoangton
    from phieunhap,phieuxuat
    where phieunhap.mahh=phieuxuat.mahh;
    ***** 5 sao

  9. #9
    Ngày gia nhập
    02 2011
    Bài viết
    34

    Trích dẫn Nguyên bản được gửi bởi dangtuananh Xem bài viết

    đoạn code này chạy đúng khi mà mặt hàng trong kho có ít nhất 1 lần xuất. Còn nếu mặt hàng đó chưa từng xuất thì nó lại không hiển thị kết quả. Mong các bạn chỉ giúp mình cách là sao để khi mà trong kho có mặt hàng đó mà chưa xuất nó vẫn hiện kết quả. Mình đang cần gấp lắm.

    -
    Bạn thử viết như mình xem, nhớ chạy thử trên SQL nhé


    SELECT a.MaHH, , b.TenHH, c.LoaiHangHoa, d.MaDVT, SUM(sl_nhap) AS sl_nhap, SUM(sl_xuat) AS sl_xuat, SUM(sl_ton) AS sl_ton
    FROM
    (
    SELECT a.MaHH, b.TenHH, c.LoaiHangHoa, d.MaDVT, SUM(a.SoLuongNhap) AS sl_nhap, SUM(a.SoLuongNhap)*0 AS sl_xuat, SUM(a.SoLuongNhap) AS sl_ton
    FROM PHIEUNHAP a LEFT JOIN HANGHOA b ON a.MaHH = b.MaHH
    LEFT JOIN LOAIHANGHOA c ON b.LoaiHangHoa = c.LoaiHangHoa
    LEFT JOIN DONVITINH d ON b.MaDVT = d.MaDVT
    GROUP BY a.MaHH, b.TenHH, c.LoaiHangHoa, d.MaDVT
    UNION ALL
    (
    SELECT a.MaHH, b.TenHH, c.LoaiHangHoa, d.MaDVT, SUM(a.SoLuongXuat)*0, SUM(a.SoLuongXuat), - SUM(a.SoLuongXuat)
    FROM PHIEUXUAT a LEFT JOIN HANGHOA b ON a.MaHH = b.MaHH
    LEFT JOIN LOAIHANGHOA c ON b.LoaiHangHoa = c.LoaiHangHoa
    LEFT JOIN DONVITINH d ON b.MaDVT = d.MaDVT
    GROUP BY a.MaHH, b.TenHH, c.LoaiHangHoa, d.MaDVT
    )
    ) a GROUP BY a.MaHH, b.TenHH, c.LoaiHangHoa, d.MaDVT

  10. #10
    Ngày gia nhập
    04 2010
    Bài viết
    1,535

    Trích dẫn Nguyên bản được gửi bởi dangtuananh Xem bài viết
    Hihihi bạn có thể nói rõ hơn được không. Mình vẫn không hiểu rõ lắm.
    thanks bạn.
    Nguyên tắc viết câu truy vấn:

    Viết câu căn bản, chỉ truy xuất những trường cần thiết nhất
    Chạy thử xem có ưng ý
    Thêm chi tiết các trường khác vào bằng cách:
    (1) nếu trong câu căn bản đã có các bảng chi tiết thì thêm ác trường chi tiết vào
    (2) Nếu trong câu căn bản không có các bảng chi tiết thì dùng câu căn bản làm sub, hoặc nối với các bảng chi tiết để viết câu chi tiết hơn.

    Tôi đã chỉ cho câu căn bản rồi. Bạn chỉ việc chạy thử xem có ra đúng những dòng dữ liệu mình muốn hay không. Sau đó những chi tiết phụ như tenHH, loaiHH, vv... thì cứ việc dùng MAHH đẻ join mấy bảng liên hệ vào.

    tb. Lúc đầu câu hỏi bạn đưa ra có 2 bảng. Sau đó bạn chỉnh sửa lại và thêm vào 3 bảng nữa làm câu nói của tôi bị hẫng. Khi thêm chi tiết quan trọng thì ghi hẳn ra cho nó lịch sự.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn