Viết code tính giá vốn theo FIFO! (1 người xem)

  • Thread starter Thread starter ThuNghi
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Tôi có 1 file sau, tôi muốn viết 1 code để áo giá vốn xuất hàng theo Fifo (Nhập trước, xuất trước).
Tôi muốn có sh KQ được trích từ Sh NX trong file.
Cụ thể như sau:
1/ Nhập

|A|B|C|D|
| Ngay | N/X | DGia | SoLg |
|07/09|N|705| 27.000|
|08/09|N|800|15.750|
|11/09| X| 705|200|
|14/09|X|?| 31.750|
|||. .||
Trong đó
26.800 theo lần nhập a: 705
200 theo lần nhập b: 800
Nghĩa là phải áp giá vào xuất theo giá nhập trước.
Xin cám ơn. Do truyền đạt chưa thông, các bạn xem file và mình sẽ cụ thể hơn.
Xin Cám ơn!
Cái này tựa như bài tóan chia kẹo, chia cho hết bao thứ nhất mới chia bao thứ hai.
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Tôi có 1 file sau, tôi muốn viết 1 code để áo giá vốn xuất hàng theo Fifo (Nhập trước, xuất trước).
Tôi muốn có sh KQ được trích từ Sh NX trong file.
Cụ thể như sau:
1/ Nhập
a/ Ngày 07 nhập 27.000 viên đg: 705
b/ Ngày 08 nhập 15.750 viên đg: 800
2 Xuất
Ngày 11 xuất 200 viên => đg: 705
Ngày 14 xuất 31.750 viên =>
Trong đó
26.800 theo lần nhập a: 705
200 theo lần nhập b: 800
Nghĩa là phải áp giá vào xuất theo giá nhập trước.
Xin cám ơn. Do truyền đạt chưa thông, các bạn xem file và mình sẽ cụ thể hơn.
Xin Cám ơn!
Cái này tựa như bài tóan chia kẹo, chia cho hết bao thứ nhất mới chia bao thứ hai.


Trên diễn đàn đã có bài viết của bạn vanhao về vấn đề này. Bạn tìm và tham khảo xem sao(Hình như trong thư viện của 4rum í)
Thân
 
Upvote 0
Trên diễn đàn đã có bài viết của bạn vanhao về vấn đề này. Bạn tìm và tham khảo xem sao(Hình như trong thư viện của 4rum í)
Thân
Bác chỉ link cho em luôn, tìm không ra. Với lại em muốn áp giá vốn Fifo cho từng lần xuất chớ không phải tính ra giá vồn tồn => tổng giá vốn xuất.
Nếu tiện Bác viết giúp em 1 sub.
Cám ơn bác nhiều!
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Mod thì phải tìm được bài viết chứ nhỉ? (Nếu ko thì thành viên làm sao biết tìm bài?)

Đây là 1 ví dụ: Tổng hợp các phương pháp tính trị giá hàng tồn kho
Cám ơn Bác, link trên chỉ ra được tổng giá vốn xuất trong kỳ theo fifo. Nhưng mình chỉ muốn gán giá vốn tức thời.
Khi nhập:
---SL-----DG
1/ 10 DV x 12
2/ 8 DV x 14
Khi xuất
1/ 6
2/ 6
ta phải tính ra được
1/ 6 x 12
2/ 4 x 12
3/ 2 x 14
 
Upvote 0
Bảng theo dõi giá vốn:

Mã:
LineNo	TransID	Date	Qty	Cost	Related_TransID	Remain_Qty
1	[COLOR="Blue"]1[/COLOR]	1	10	12			0
2	[COLOR="Green"]2[/COLOR]	2	8	14			6
3	3	3	-6	12	[COLOR="Blue"]1[/COLOR]
4	4	4	-4	12	[COLOR="Blue"]1[/COLOR]
5	4	4	-2	14	[COLOR="Green"]2[/COLOR]
6	5	5	20	13			20

1/ Khi save chứng từ làm tăng kho (Nhập hàng, Nhập nội bộ, Điều chỉnh tăng, KH trả lại) thì:
- Ghi lại dòng chứng từ như bình thường
- Chú ý cột Remain_Qty = Qty

2/ Khi save chứng từ làm giảm kho thì:
B1: Tìm từ trên xuống dưới dòng đầu tiên (Select TOP 1) tất cả các chứng từ làm tăng kho (1) và có Remain_Qty > 0 (2) --> Lấy được Chứng từ nhập gốc cho phiếu xuất (Related_TransID)
B2: Ghi lại dòng chứng từ xuất tương ứng với số lượng còn trên phiếu làm tăng kho đó
- Update Related_TransID cho dòng hiện thời (Chứng từ nhập gốc cho phiếu xuất)
- Update Remain_Qty(Related_TransID) = Qty(Related_TransID) - Qty(TransID Xuất)
- Nếu số Remain_Qty(Related_TransID) <0 thì:
+ Update Remain_Qty = 0
+ Tạo dòng thứ 2 và lặp lại B1

Chú ý:
- Mới đầu tưởng cột Remain_Qty là thừa xong nó sẽ làm tăng tốc cho phần mềm rất nhiều, hạn chế công thức ở điều kiện Where trong SQL.
- Ví dụ ở trên chưa tính tới nhiều kho (dĩ nhiên bảng trên còn phải có cột StoreID, InventoryItemID nhưng ko vẽ vào cho rối mắt, nhưng khi thiết kế CSDL thì phải có)
- Cách thức làm ở trên là chưa nghĩ tới việc xuất âm kho --=0

Với cách viết trên thì việc sửa/xóa chứng từ là thoải mái (chạy lại cho các mặt hàng có trên chứng từ kể từ ngày của chứng từ được sửa/xóa tới hiện tại)

Logic của FIFO, LIFO thì rất dễ hiểu (dễ nhất trong các PP tính giá vốn) nhưng để viết nó trong PM lại là khó nhất (BQGQ theo mỗi lần nhập là dễ nhất nhưng trường hợp này cứ xuất âm kho là tèo)

P/S: Hình như hiện nay khá nhiều PMKT chạy giá vốn theo PP tức thời (90% các lỗi trầm trọng xảy ra là do vấn đề tính giá vốn, nhất là khi hàng hóa & chứng từ nhiều). Đa phần là lấy giá vốn tạm xuất, sau đó cuối kỳ tính chênh lệch (kể cả các PMKT có tên tuổi cũng làm vậy)
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi có 1 file sau, tôi muốn viết 1 code để áo giá vốn xuất hàng theo Fifo (Nhập trước, xuất trước).
Tôi muốn có sh KQ được trích từ Sh NX trong file.
Cụ thể như sau:
1/ Nhập

|A|B|C|D|
| Ngay | N/X | DGia | SoLg |
|07/09|N|705| 27.000|
|08/09|N|800|15.750|
|11/09| X| 705|200|
|14/09|X|?| 31.750|
|||. .||
Trong đó
26.800 theo lần nhập a: 705
200 theo lần nhập b: 800
Nghĩa là phải áp giá vào xuất theo giá nhập trước.
Xin cám ơn. Do truyền đạt chưa thông, các bạn xem file và mình sẽ cụ thể hơn.
Xin Cám ơn!
Cái này tựa như bài tóan chia kẹo, chia cho hết bao thứ nhất mới chia bao thứ hai.
Tôi sửa lại mẫu bảng N-X-T một chút. Thông dụng hơn. Dùng UDF để tính giá xuất:
PHP:
Function GiaXK(SL_Xuat, Rng As Range, Optional TT As Boolean = False)
Dim TongXuat, TongNhap, XuatCon
If SL_Xuat = 0 Then
    GiaXK = ""
    Exit Function
End If
TongXuat = Application.WorksheetFunction.Sum(Rng.Offset(, 1).Resize(, 1))
For Each Cll In Rng.Resize(, 1)
    TongNhap = TongNhap + Cll.Value
    If TongNhap > TongXuat Then
        If TongNhap - TongXuat >= SL_Xuat Then
        GiaXK = GiaXK & " (" & SL_Xuat & "*" & Cll.Offset(, 2).Value & ")"
        Exit For
        Else
        GiaXK = GiaXK & " (" & (TongNhap - TongXuat) & "*" & Cll.Offset(, 2).Value & ")"
        SL_Xuat = SL_Xuat - (TongNhap - TongXuat)
        TongXuat = TongNhap
        End If
    End If
Next
GiaXK = Replace(Trim(GiaXK), " ", "+")
    If TT = True Then
    GiaXK = IIf(GiaXK = "", 0, Evaluate(GiaXK))
    End If
End Function
 

File đính kèm

Upvote 0
Tôi sửa lại mẫu bảng N-X-T một chút. Thông dụng hơn. Dùng UDF để tính giá xuất:
PHP:
Function GiaXK(SL_Xuat, Rng As Range, Optional TT As Boolean = False)
Dim TongXuat, TongNhap, XuatCon
If SL_Xuat = 0 Then
    GiaXK = ""
    Exit Function
End If
TongXuat = Application.WorksheetFunction.Sum(Rng.Offset(, 1).Resize(, 1))
For Each Cll In Rng.Resize(, 1)
    TongNhap = TongNhap + Cll.Value
    If TongNhap > TongXuat Then
        If TongNhap - TongXuat >= SL_Xuat Then
        GiaXK = GiaXK & " (" & SL_Xuat & "*" & Cll.Offset(, 2).Value & ")"
        Exit For
        Else
        GiaXK = GiaXK & " (" & (TongNhap - TongXuat) & "*" & Cll.Offset(, 2).Value & ")"
        SL_Xuat = SL_Xuat - (TongNhap - TongXuat)
        TongXuat = TongNhap
        End If
    End If
Next
GiaXK = Replace(Trim(GiaXK), " ", "+")
    If TT = True Then
    GiaXK = IIf(GiaXK = "", 0, Evaluate(GiaXK))
    End If
End Function
Cám ơn Thắng nhiều, rất hay, chưa test cụ thể. Mình sẽ dùng 1 code để tách dòng nữa là OK.
 
Upvote 0
Cảm ơn bạn nhiều, File của bạn rất hữu ích cho mình. Có điều mình đang bắt đầu tập tẹ với VBA nên không biết nhiều lắm. Cty mình đang sử dụng đơn giá nhập có cả số thập phân nên khi áp dụng vào không được, bạn có thể Code lại và gửi mail cho mình đc không. Mình thực sự rất cần đó. Thank bạn trước
 
Upvote 0
P/S: Hình như hiện nay khá nhiều PMKT chạy giá vốn theo PP tức thời (90% các lỗi trầm trọng xảy ra là do vấn đề tính giá vốn, nhất là khi hàng hóa & chứng từ nhiều). Đa phần là lấy giá vốn tạm xuất, sau đó cuối kỳ tính chênh lệch (kể cả các PMKT có tên tuổi cũng làm vậy)
Có một câu chuyện vui liên quan tới các tình huống sửa xóa chứng từ: http://www.erpsolution.com.vn/showthread.php?t=1952
 
Upvote 0
Em có 1 bài tương tự anh Thắng giải giúp em với.

Sản phầm ở bài của em chia làm nhiều loại. Ô cần tính em có tô màu vàng (cột O, P)

Cảm ơn anh nhiều
 

File đính kèm

Upvote 0
Tôi sửa lại mẫu bảng N-X-T một chút. Thông dụng hơn. Dùng UDF để tính giá xuất:
PHP:
Function GiaXK(SL_Xuat, Rng As Range, Optional TT As Boolean = False)
Dim TongXuat, TongNhap, XuatCon
If SL_Xuat = 0 Then
    GiaXK = ""
    Exit Function
End If
TongXuat = Application.WorksheetFunction.Sum(Rng.Offset(, 1).Resize(, 1))
For Each Cll In Rng.Resize(, 1)
    TongNhap = TongNhap + Cll.Value
    If TongNhap > TongXuat Then
        If TongNhap - TongXuat >= SL_Xuat Then
        GiaXK = GiaXK & " (" & SL_Xuat & "*" & Cll.Offset(, 2).Value & ")"
        Exit For
        Else
        GiaXK = GiaXK & " (" & (TongNhap - TongXuat) & "*" & Cll.Offset(, 2).Value & ")"
        SL_Xuat = SL_Xuat - (TongNhap - TongXuat)
        TongXuat = TongNhap
        End If
    End If
Next
GiaXK = Replace(Trim(GiaXK), " ", "+")
    If TT = True Then
    GiaXK = IIf(GiaXK = "", 0, Evaluate(GiaXK))
    End If
End Function

Bài anh giải đối với trường hợp 1 loại hàng, nếu có nhiều loại hàng thì phải code như thế nào anh? Anh giúp em với. Thanks anh
 
Upvote 0
Anh cho em hỏi với em chạy thử nếu file chạy giá vốn này mà áp dụng cho 12,34 chẳng hạn khi xuất hàng thì công thức trên chưa chạy được, anh có thể giúp em vấn đề này được không ạ
 
Upvote 0
Tôi sửa lại mẫu bảng N-X-T một chút. Thông dụng hơn. Dùng UDF để tính giá xuất:
PHP:
Function GiaXK(SL_Xuat, Rng As Range, Optional TT As Boolean = False)
Dim TongXuat, TongNhap, XuatCon
If SL_Xuat = 0 Then
    GiaXK = ""
    Exit Function
End If
TongXuat = Application.WorksheetFunction.Sum(Rng.Offset(, 1).Resize(, 1))
For Each Cll In Rng.Resize(, 1)
    TongNhap = TongNhap + Cll.Value
    If TongNhap > TongXuat Then
        If TongNhap - TongXuat >= SL_Xuat Then
        GiaXK = GiaXK & " (" & SL_Xuat & "*" & Cll.Offset(, 2).Value & ")"
        Exit For
        Else
        GiaXK = GiaXK & " (" & (TongNhap - TongXuat) & "*" & Cll.Offset(, 2).Value & ")"
        SL_Xuat = SL_Xuat - (TongNhap - TongXuat)
        TongXuat = TongNhap
        End If
    End If
Next
GiaXK = Replace(Trim(GiaXK), " ", "+")
    If TT = True Then
    GiaXK = IIf(GiaXK = "", 0, Evaluate(GiaXK))
    End If
End Function
Chào Anh huuthang_bd
Em muốn áp dụng Cthức này để theo dõi FIFO của ngoại tệ ngân hàng
Nhưng ngoại tệ ngân hàng thì có những lúc xuất ra là số nguyên mà nó có số lẻ
Nếu nhập số lẻ thì nó báo Value! (trong file chỗ tô màu vàng)
Anh vui lòng giúp sửa code giúp
Cảm ơn anh!
 

File đính kèm

Upvote 0
Chào Anh huuthang_bd
Em muốn áp dụng Cthức này để theo dõi FIFO của ngoại tệ ngân hàng
Nhưng ngoại tệ ngân hàng thì có những lúc xuất ra là số nguyên mà nó có số lẻ
Nếu nhập số lẻ thì nó báo Value! (trong file chỗ tô màu vàng)
Anh vui lòng giúp sửa code giúp
Cảm ơn anh!
Lỗi này do thiết lập dấu phân cách thập phân của hệ thống. Đã sửa lại cho bạn.

Góp ý ngoài lệ chút: Theo quy định của chế độ kế toán doanh nghiệp hiện hành thì tỷ giá xuất ngoại tệ là tỷ giá bình quân gia quyền di động mà :).
 

File đính kèm

Upvote 0
Lỗi này do thiết lập dấu phân cách thập phân của hệ thống. Đã sửa lại cho bạn.

Góp ý ngoài lệ chút: Theo quy định của chế độ kế toán doanh nghiệp hiện hành thì tỷ giá xuất ngoại tệ là tỷ giá bình quân gia quyền di động mà :).
Cảm ơn anh nhiều
Hiện nay, cty em vẫn làm theo PP FIFO ạ!
 
Upvote 0
Upvote 0
Anh cho em hỏi, sửa lỗi này như thế nào, để em có thể sửa ở bày này ạ
Ðề tài: Liệt kê sl và tiền tồn kho theo FIFO!

http://www.giaiphapexcel.com/forum/showthread.php?42945-Liệt-kê-sl-và-tiền-tồn-kho-theo-FIFO!
Em cảm ơn anh!
Bạn sửa những chỗ có dạng:
Mã:
Evaluate([B][COLOR=#0000ff]ABC[/COLOR][/B])
Thành:
Mã:
Evaluate(Replace(ABC, ",", ".")))
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom