Function FIFO in MS Access

  • Thread starter nghikt2
  • Ngày gửi
N

nghikt2

Guest
31/3/07
29
0
6
TP.HCM
Đoạn code này em down được trên net, em muốn ứng dụng function này vào Ms Access để tính giá xuất kho. Như vậy em phải sửa lại như thế nào cho phù hợp. Mong các anh chị chỉ giúp .

Đây là file Excel em down được :
http://www.mediafire.com/?jdaawaaaaad

Function FIFO(PurchaseUnits As Range, UnitCost As Range, UnitsSold As Range) As Double
Dim Counter As Long, UnitsAccountedFor As Long
Dim varPurchased, varCost
FIFO = 0
UnitsAccountedFor = Application.Sum(UnitsSold)
varPurchased = PurchaseUnits.Value
varCost = UnitCost.Value
Counter = UBound(varPurchased, 1)
Do Until UnitsAccountedFor = 0
If varPurchased(Counter, 1) = 0 Then
Counter = Counter - 1
Else
varPurchased(Counter, 1) = varPurchased(Counter, 1) - 1
UnitsAccountedFor = UnitsAccountedFor - 1
End If
Loop
FIFO = Application.SumProduct(varPurchased, varCost)
End Function
 
Khóa học Quản trị dòng tiền
N

nghikt2

Guest
31/3/07
29
0
6
TP.HCM
Em có các table như sau :
tblVatTu(MaVT, TenVT, Dvt, Slg, GiaTri, NgayTon)
tblNhapXuat(MaNX, PhieuNX, NgayNX, MaKho, MaKhach...)
tblNhapXuatChiTiet(PhieuNX, MaVT, Slg, GiaTri)

Tồn đầu :

VT1 ; 5 ; 50000 ; 01/01/2008
VT2 ; 3 ; 60000 ; 01/01/2008

Nhập

VT1 ; 10 ; 120000 ; 05/01/2008
VT2 ; 4 ; 60000 ; 05/01/2008
VT1 ; 5 ; 60000 ; 10/01/2008
VT2 ; 3 ; 60000 ; 10/01/2008

Xuất theo FIFO

VT1 ;10 ;giá trị xuất VT1 =5x10000+5x12000 ; 06/01/2008
VT2 ; 4 ; giá trị xuất VT2 =3x20000+1x15000; 06/01/2008

Nhu cầu của em là muốn viết 1 hàm làm công việc tính toán trên cho mỗi khi xuất kho. Rất mong được các Anh Chị hướng dẫn
 
Sửa lần cuối:
M

muontennguoi

Trung cấp
19/1/08
84
0
6
25
sg
VT1 ;10 ;giá trị xuất VT1 =5x10000+5x12000 ; 06/01/2008
VT2 ; 4 ; giá trị xuất VT2 =3x20000+1x15000; 06/01/2008


SO lại với cái bảng truớc xem nào bồ.
giá 10.000 với 20.000 ở đâu ra vậy?

CÁch tính như vầy:
Lấy maVT+ngaynhap làm mã để tính

Nghĩa là VT1 ngày 1/1/08 tươgn đương với mã VT1_20080101
Còn hàng nhập ngày 5/1/08 tương đuương với mã VT1_20080105

Và do đó khi xuất ra cũng sẽ ghi thành 2 dòng y như là xuất 2 mã VT khác nhau.

Và như vậy nếu bạn có thể xuất vật tư theo mã bình thường thì bây giờ bạn cũng làm đuợc bình thường thôi.

Y như xuất 2 mã VT khác nhau.
 
N

nghikt2

Guest
31/3/07
29
0
6
TP.HCM
Chào anh ,
Giá 10.000 và 20.000 là như vầy :
Ngày 06/01/2008 xuất VT1 số lượng là 10 nhưng tồn kho đầu kỳ chỉ còn số lượng là 5 thôi (đơn giá = 50.000/5 =10.000). Do số lượng tồn đầu không đủ xuất (thiếu 5) nên lấy tiếp lô hàng nhập kế tiếp vào ngày 05/01/2008 số lượng thêm 5 nữa ( đơn giá : 120.000/10=12.000). Như vậy tổng giá trị xuất là : (5x10.000+5x12.000). Anh xem giúp có hướng nào làm chỉ giúp em.
 
M

muontennguoi

Trung cấp
19/1/08
84
0
6
25
sg
Xin lỗi vì tôi rất ít khi vào webketoan. 1-2 tùân mới vào 1 lần.
Tôi ở bên www.danketoan.com nhiều hơn.


Theo cách làm của bạn thì mỗi lần xuất thì phải tính lại hết từ đầu.



Như tôi nói hôm trước, bạn nên thêm 1 cột vào table nhapxuatchitiet.
Đó là cột ghi ngày nhập của vật tư đó.
Và ta lấy nó với ý nghĩa là mã phụ của loại VT đó. Dù rằng nó có kiểu là ngày.
Như vậy nếu dòng đó là Nhập thì mang ngày của PN sang.
Nếu dòng đó là Xuất thì cột ngày nhập mang ý nghĩa là chỉ định chính xác xuất của lô hàng nhập ngày nào.


Nói tóm lại: hãy làm giống như phương pháp thực tế đích danh.


Làm như thế (cấu trúc CSDL như thế) thì chương trình của bạn có thể tính được theo LIFO, FIFO và cả thực tế đích danh.


Điểm khác biệt giữa thực tế đích danh với LIFO, FIFO là : thực tế đích danh là do người nhạp liệu chỉ định cụ thể xuất hàng của lô hàng nào; còn LIFO và FIFO là do máy tự tính theo 1 quy tắc chỉ định trước.



Như vậy cụ thể trong file của bạn, table nhapxuatchitiet thêm 1 field lấy tên là "lohang" có kiểu là ngày.

Field này do áp dụng FIFO nên sẽ do máy tự động điền vào. Người sử dụng không phải điền vào.


Quy tắc: Khi nhập thì giá trị field lô-hàng lấy chính giá trị của ngày nhập.
Từ đó: mã-VT + lô-hàng được xem như là mã-chi-tiết của VT.
Nên khi xuất cũng sẽ xúât cụ thể theo mã-chi-tiết ấy.


Ví dụ:
01/02/08: nhập:VT1 - SL: 10 - TT:10000 - mã lô hàng: VT1-01/02/08
22/02/08: nhập:VT1 - SL: 20 - TT:24000 - mã lô hàng: VT1-22/02/08
03/03/08: xuất:VT1 - SL: 10 - TT:10000 - mã lô hàng: VT1-01/02/08
03/03/08: xuất:VT1 - SL: 05 - TT: 6000 - mã lô hàng: VT1-22/02/08
...
Như vậy bạn thấy là ở sổ chi tiết sẽ ghi thành 2 dòng cho SL:15 TT:16000

Và bạn dễ dàng query để biết rằng lô hàng ngày 01/02/08 đã xuất hết, và lô hàng ngày 22/02/08 còn tồn SL:15 - TT:18000.

Khi xuất thì xếp thứ tự theo maVT,lohang rồi rà từ trên xuống mà xuất cho đủ lượng hàng cần xuất.

Với cùng CSDL ấy thì Cty có yêu cầu xuất theo LIFO, FIFO hay thực tế đích danh gì thì bạn cũng viết được chươgn trình.
Dĩ nhiên nếu xuất theo giá bình quân thì càng dễ.



Vì ở đây tôi chưa có quyền gửi kèm file, vậy mời bạn sang www.danketoan.com để dễ trao đổi hơn.
 

Xem nhiều