Thực ra, tạo tồn kho với giá vốn bình quân gia quyền không đơn giản. Do bạn dotrung thiết 2 bộ phận mua và bán riêng không phù hợp với phương pháp của mình (bảng nhập xuất hàng hoá gom chung làm 1) nên để sửa lại rất nặng nên mình không tiện hỗ trợ.
1/ Để chạy cho tốt việc nhập xuất tồn BQGQ đúng như bạn Xuân Thanh phải có table tạm, hay đúng hơn là table nhập xuất tồn cho từng tháng, BQGQ cơ sở là từ nhập xuất tồn trên tháng để tìm giá vốn/tháng (có kèm tổng tồn tháng trước cả số lượng lẫn giá trị). Để tạo ra một công thức như sau:
Gía vốn BQGQ Tồn đầu =Tổng giá trị tồn cuối tháng trước / tổng số lượng tồn cuối tháng trước
Giá vốn BQGQ trong tháng = (tổng giá trị tồn cuối tháng trước + tổng giá trị nhập trong tháng)/(tổng số lượng tồn cuối tháng trước +tổng gií trị nhập trong tháng)
*Đây cũng là giá xuất cho số lượng hàng xuất => tổng giá trị xuất = tổng số lượng xuất * BQGQ trong tháng.
Đến đây thì có thể tìm được số lượng tồn cuối tháng và giá trị tồn cuối tháng để tính cho tháng sau.
Để giải quyết trường hợp này phải dùng VBA để chạy cho từng mã hàng.
Viết đoạn code VBA này cũng không đơn giản. Phải giải quyết trường hợp số lượng hàng =0 thì xử lý vốn =0, bài toán chia BQGQ lúc nào cũng cho ra số lẽ, nếu khi số lượng = 0 mà giá trị còn tồn nó sẽ cộng dồn càng ngày sai số càng lớn mà bản thân bài toàn chia cho không cũng bị lỗi #DIV/0!
Code này không thể chạy liên tục mà phải có bảng tạm để chạy từng tháng một (nếu dữ liệu record lớn, còn ít hơn thì có thể chạy từng năm) nếu không máy sẽ báo out of memory hoặc có thể chạy nữa chừng rồi báo xong nhưng chỉ chạy 1 số record rồi không thèm chạy nữa.
Một vấn đề nữa khi khi sửa 1 record ở thời gian trước buột phải chạy code xử lý BQGQ từ thời điểm đó trở về cuối.
Đối với chương trình của bạn có nhiều kho phải đưa đơn giá BQGQ trở về table nhập xuất tồn để tình giá trị tồn từng tháng cho từng mã hàng của từng kho.
Một vấn đề nữa ở chỗ cũa bạn do nhiều người nhập liệu nên không thể chạy code tồn kho cho từng người khi nhập liệu (nếu chỉ có 1 máy thì cho tự động chạy code này sau khi nhập liệu xong ở event unload form) chỉ có cách cuối tháng người quản trị chương trình chạy một lần.
Mình viết cái BQGQ này chỉ trên 1 table hàng hoá nhập xuất chung mà phải tốn gần chục query + 4 table phụ). Nên khi tải dữ liệu của bạn về mình phải chào thua. Sorry
Bạn có thể tham khảo ở đây.
Demo Chương trình Kế toán tôn kho BQGQ