Giúp Theo dõi Xuất nhập hàng theo phương pháp FIFO

Liên hệ QC

guitarnguyen1989

Thành viên chính thức
Tham gia
31/7/16
Bài viết
59
Được thích
7
Help me !
Khi mình kiểm tra " hàng hóa" thì gắn cho nó một số lô (A1,A2,B1,B2....) , khi xuất kho thì số lô này thủ kho ghi lại , Mình làm cái bảng này mục đích là để đối chiếu xem thủ kho có xuất đúng quy trình FIFO ko !

Cần giúp :
Đổ dữ liệu cột số lô từ bảng nhập qua cột số lô bảng xuất . theo đều kiện FIFO ( nhập trước ,xuất trước ) .

Thanks mọi người !
 

File đính kèm

FIFO là gì, từ chuyên biệt thế này thì nên giải thích kỹ khi muốn được trợ giúp
 
Help me !
Khi mình kiểm tra " hàng hóa" thì gắn cho nó một số lô (A1,A2,B1,B2....) , khi xuất kho thì số lô này thủ kho ghi lại , Mình làm cái bảng này mục đích là để đối chiếu xem thủ kho có xuất đúng quy trình FIFO ko !

Cần giúp :
Đổ dữ liệu cột số lô từ bảng nhập qua cột số lô bảng xuất . theo đều kiện FIFO ( nhập trước ,xuất trước ) .

Cảm ơn mọi người !
Dùng 2 cột phụ, chỉ theo dõi tàm tạm
 

File đính kèm

Kết quả chưa đúng bạn ơi, Xuất mặt hàng A1 ngày 04 xuất 85 thì phải là lấy lô A-01 80, còn 5 thì bị không biết lấy từ lô nào ta. Dữ liệu này không chuẩn rồi
Chỉ theo dỏi "tàm tạm", 1 lần xuất có thể từ nhiều lô, kết quả là lô sau cùng "A-02"
 
Kết quả chưa đúng bạn ơi, Xuất mặt hàng A1 ngày 04 xuất 85 thì phải là lấy lô A-01 80, còn 5 thì bị không biết lấy từ lô nào ta. Dữ liệu này không chuẩn rồi

Mình cố ý để dử liệu như vậy :ví dụ như khi thủ kho xuất khống hoặc nhập liệu không chính xác thì mình có thể biết dc .
 
Chỉ theo dỏi "tàm tạm", 1 lần xuất có thể từ nhiều lô, kết quả là lô sau cùng "A-02"

Bạn có thể giúp mình khi xuất kho mà có sự giao nhau giữa 2 lô hàng thì điền vào cột số lô 2 số lô ( như : A01 = 5 và A02 7)
Bài đã được tự động gộp:

Dữ liệu ví dụ không chuẩn mà Fi với Fo kiểu gì???

Mình cố ý để dự liệu như vậy .
Khi thủ kho nhập sai dữ liệu , hoặc khống thì sẽ gắn giá trị " thiếu "

VÍ dụ :"A01 Xuat 80 thiếu 5" mình hiểu là lô A01 xuất 80 thiếu 5 ko có số lô
 
Bạn có thể giúp mình khi xuất kho mà có sự giao nhau giữa 2 lô hàng thì điền vào cột số lô 2 số lô ( như : A01 = 5 và A02 7)
Bài đã được tự động gộp:



Mình cố ý để dự liệu như vậy .
Khi thủ kho nhập sai dữ liệu , hoặc khống thì sẽ gắn giá trị " thiếu "

VÍ dụ :"A01 Xuat 80 thiếu 5" mình hiểu là lô A01 xuất 80 thiếu 5 ko có số lô
Công thức khá rối, dùng code VBA chạy Macro được không?
 
Bạn kiểm tra file
 

File đính kèm

Lần chỉnh sửa cuối:
Dc bạn ! nếu dung code dc thì quá tốt . Cảm ơn
Chạy code
Mã:
Sub GPE()
  Dim sArr(), dArr(), Res()
  Dim i As Long, n As Long, sRow As Long
  Dim sNhap As Double, sXuat As Double
  Dim Ma As String, tmp As String
  With Sheets("Sheet1")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A3:D" & i).Value
    i = .Range("F" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    dArr = .Range("F3:H" & i).Value
    sRow = UBound(dArr)
    ReDim Res(1 To sRow, 1 To 1)
  End With
  For i = 1 To sRow
    sXuat = dArr(i, 3):    Ma = dArr(i, 2): tmp = ""
    If Len(Ma) > 0 And sXuat > 0 Then
      For n = 1 To UBound(sArr)
        If sArr(n, 2) = Ma Then
          sNhap = sArr(n, 3)
          If sNhap > 0 Then
            If sNhap >= sXuat Then
              Res(i, 1) = tmp & sArr(n, 4)
              If Len(tmp) > 0 Then Res(i, 1) = Res(i, 1) & "(" & sXuat & ")"
              sArr(n, 3) = sNhap - sXuat
              sXuat = 0
              Exit For
            Else
              tmp = tmp & sArr(n, 4) & "(" & sNhap & "); "
              sArr(n, 3) = 0
              sXuat = sXuat - sNhap
            End If
          End If
        End If
      Next n
      If sXuat > 0 Then Res(i, 1) = tmp & "Thieu(" & sXuat & ")"
    End If
  Next i
  Sheets("Sheet1").Range("I3").Resize(sRow) = Res
End Sub
 

File đính kèm

Chạy code
Mã:
Sub GPE()
  Dim sArr(), dArr(), Res()
  Dim i As Long, n As Long, sRow As Long
  Dim sNhap As Double, sXuat As Double
  Dim Ma As String, tmp As String
  With Sheets("Sheet1")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A3:D" & i).Value
    i = .Range("F" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    dArr = .Range("F3:H" & i).Value
    sRow = UBound(dArr)
    ReDim Res(1 To sRow, 1 To 1)
  End With
  For i = 1 To sRow
    sXuat = dArr(i, 3):    Ma = dArr(i, 2): tmp = ""
    If Len(Ma) > 0 And sXuat > 0 Then
      For n = 1 To UBound(sArr)
        If sArr(n, 2) = Ma Then
          sNhap = sArr(n, 3)
          If sNhap > 0 Then
            If sNhap >= sXuat Then
              Res(i, 1) = tmp & sArr(n, 4)
              If Len(tmp) > 0 Then Res(i, 1) = Res(i, 1) & "(" & sXuat & ")"
              sArr(n, 3) = sNhap - sXuat
              sXuat = 0
              Exit For
            Else
              tmp = tmp & sArr(n, 4) & "(" & sNhap & "); "
              sArr(n, 3) = 0
              sXuat = sXuat - sNhap
            End If
          End If
        End If
      Next n
      If sXuat > 0 Then Res(i, 1) = tmp & "Thieu(" & sXuat & ")"
    End If
  Next i
  Sheets("Sheet1").Range("I3").Resize(sRow) = Res
End Sub
thank you so much !!!!
 
-> Theo nguyên tắc FiFo thì code này hợp lý



-> Anh phải dựa vào ngày nhập và ngày xuất để tính FiFo nữa. Với bài anh code hiện tại thì chưa chuẩn...
ĐÚNG RỒI ANH ! MÌNH CÓ THỂ THÊM 1 ĐỀU KIỆN NỬA KO :
Nếu ngày xuất > ngày nhập và số lượng xuất > số lượng nhập thì xuất nếu không thì gắn 1 giá trị nào đó để nhận biết dc !!!!
Bài đã được tự động gộp:

Chạy code
Mã:
Sub GPE()
  Dim sArr(), dArr(), Res()
  Dim i As Long, n As Long, sRow As Long
  Dim sNhap As Double, sXuat As Double
  Dim Ma As String, tmp As String
  With Sheets("Sheet1")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    sArr = .Range("A3:D" & i).Value
    i = .Range("F" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    dArr = .Range("F3:H" & i).Value
    sRow = UBound(dArr)
    ReDim Res(1 To sRow, 1 To 1)
  End With
  For i = 1 To sRow
    sXuat = dArr(i, 3):    Ma = dArr(i, 2): tmp = ""
    If Len(Ma) > 0 And sXuat > 0 Then
      For n = 1 To UBound(sArr)
        If sArr(n, 2) = Ma Then
          sNhap = sArr(n, 3)
          If sNhap > 0 Then
            If sNhap >= sXuat Then
              Res(i, 1) = tmp & sArr(n, 4)
              If Len(tmp) > 0 Then Res(i, 1) = Res(i, 1) & "(" & sXuat & ")"
              sArr(n, 3) = sNhap - sXuat
              sXuat = 0
              Exit For
            Else
              tmp = tmp & sArr(n, 4) & "(" & sNhap & "); "
              sArr(n, 3) = 0
              sXuat = sXuat - sNhap
            End If
          End If
        End If
      Next n
      If sXuat > 0 Then Res(i, 1) = tmp & "Thieu(" & sXuat & ")"
    End If
  Next i
  Sheets("Sheet1").Range("I3").Resize(sRow) = Res
End Sub
MÌNH CÓ THỂ THÊM 1 ĐỀU KIỆN NỬA KO :
Nếu ngày xuất > ngày nhập và số lượng xuất > số lượng nhập thì xuất nếu không thì gắn 1 giá trị nào đó để nhận biết !!!!
 
ĐÚNG RỒI ANH ! MÌNH CÓ THỂ THÊM 1 ĐỀU KIỆN NỬA KO :
Nếu ngày xuất > ngày nhập và số lượng xuất > số lượng nhập thì xuất nếu không thì gắn 1 giá trị nào đó để nhận biết dc !!!!
Bài đã được tự động gộp:


MÌNH CÓ THỂ THÊM 1 ĐỀU KIỆN NỬA KO :
Nếu ngày xuất > ngày nhập và số lượng xuất > số lượng nhập thì xuất nếu không thì gắn 1 giá trị nào đó để nhận biết !!!!
Bạn đã kiểm tra file của tôi chưa vậy? Cái này vô lý này: số lượng xuất > số lượng nhập
 
Bạn đã kiểm tra file của tôi chưa vậy? Cái này vô lý này: số lượng xuất > số lượng nhập
sorry số luong xuất > sl nhập , mình ghi nhầm

File mình đã xem , thanks bạn .
Có thể thểm đều kiện là ngày xuất >= ngày nhập và số xuất < số nhập thì xuất , còn lại mình sẽ gắn 1 giá trị để nhận biết ! Help me
 
sorry số luong xuất > sl nhập , mình ghi nhầm

File mình đã xem , Cảm ơn bạn .
Có thể thểm đều kiện là ngày xuất >= ngày nhập và số xuất < số nhập thì xuất , còn lại mình sẽ gắn 1 giá trị để nhận biết ! Help me
Bạn xem rồi mà bạn không thấy mấy cái phần số lô để trắng đó ah??
 
-> Theo nguyên tắc FiFo thì code này hợp lý



-> Anh phải dựa vào ngày nhập và ngày xuất để tính FiFo nữa. Với bài anh code hiện tại thì chưa chuẩn...
ĐÚNG RỒI ANH ! MÌNH CÓ THỂ THÊM 1 ĐỀU KIỆN NỬA KO :
Nếu ngày xuất > ngày nhập và số lượng xuất > số lượng nhập thì xuất nếu không thì gắn 1 giá trị nào đó để nhận biết dc !!!!
Bài đã được tự động gộp:


MÌNH CÓ THỂ THÊM 1 ĐỀU KIỆN NỬA KO :
Nếu ngày xuất > ngày nhập và số lượng xuất > số lượng nhập thì xuất nếu không thì gắn 1 giá trị nào đó để nhận biết !!!!
Ngày nhập và ngày xuất kho là ngày trên giấy tờ có thể không khớp với ngày nhập và xuất kho thực tế
Thủ kho muốn xuất thì trong kho phải có hàng, thời gian nhập kho thực tế chắc chắn trước thời gian xuất, tuy nhiên trên giấy tờ có thể vì lý do nào đó hàng đã nhập kho nhưng chưa làm phiếu nhập kho, sau đó mới bổ xung phiếu nhập kho sau và ngày nhập ghi theo thời gian lập phiếu nhập kho, do đó mình bỏ qua yếu tố thời gian
Nếu muốn chỉnh lại theo thời gian thì dùng code
Mã:
Sub GPE2()
  Dim nhapArr(), xuatArr(), Res()
  Dim i As Long, n As Long, sRow As Long
  Dim sNhap As Double, sXuat As Double, dXuat As Date
  Dim Ma As String, tmp As String
  With Sheets("Sheet1")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    nhapArr = .Range("A3:D" & i).Value
    i = .Range("F" & Rows.Count).End(xlUp).Row
    If i < 3 Then MsgBox ("Khong co du lieu"): Exit Sub
    xuatArr = .Range("F3:H" & i).Value
    sRow = UBound(xuatArr)
    ReDim Res(1 To sRow, 1 To 1)
  End With
  For i = 1 To sRow
    dXuat = xuatArr(i, 1): Ma = xuatArr(i, 2): sXuat = xuatArr(i, 3)
    tmp = ""
    If Len(Ma) > 0 And sXuat > 0 Then
      For n = 1 To UBound(nhapArr)
        If nhapArr(n, 1) > dXuat Then Exit For
        If nhapArr(n, 2) = Ma Then
          sNhap = nhapArr(n, 3)
          If sNhap > 0 Then
            If sNhap >= sXuat Then
              Res(i, 1) = tmp & nhapArr(n, 4)
              If Len(tmp) > 0 Then Res(i, 1) = Res(i, 1) & "(" & sXuat & ")"
              nhapArr(n, 3) = sNhap - sXuat
              sXuat = 0
              Exit For
            Else
              tmp = tmp & nhapArr(n, 4) & "(" & sNhap & "); "
              nhapArr(n, 3) = 0
              sXuat = sXuat - sNhap
            End If
          End If
        End If
      Next n
      If sXuat > 0 Then Res(i, 1) = tmp & "Thieu(" & sXuat & ")"
    End If
  Next i
  Sheets("Sheet1").Range("I3").Resize(sRow) = Res
End Sub
 
Web KT

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

Back
Top Bottom