xem phụ liệu theo đợt hàng

Liên hệ QC

DMQ

Thành viên dốt
Tham gia
21/3/12
Bài viết
703
Được thích
53
Giới tính
Nam
Chào các anh chị!
Em có file này nhờ anh chị giúp:
Khi nhấn "sao" hiện form, lọc không trùng đợt hàng vào combobox đợt hàng(cb_DH)(là cột ghi chú của sheet"Nhap"), sẽ có là:
đơt 14
đồng phục Mekong
đồng phục ngành
đợt 16
quần short
và khi chọn đợt hàng nào thì thể hiện phụ liệu nhập, xuất của đợt hàng đó.
Tồn bằng nhập trừ xuất, nếu cùng tên phụ liệu thì cộng dồn vào.(cùng đợt hàng)
ví dụ như "Nhãn size 28 của dợt 14 nhập lần 1 là 20 và lần 2 là 80 thì thể hiện là nhập = 100.
Mong các anh chị giúp đỡ.
 

File đính kèm

  • GPE.xlsb
    37.5 KB · Đọc: 6
Vấn đề của em không làm được hả các anh chị??
 
Upvote 0
Chào mọi người!
File của em giờ mới phát sinh ra vấn đề mới, mong mọi người giúp em với, đó là giờ người ta gửi phụ liệu xài chung cho cả 2 đợt hàng, ví dụ như "keo VKD215-060P-Black" gửi chung cho 2 đợt Fedal/Juno, nhưng khi xuất thì em xuất cho từng đợt, khi chọn từng đợt hàng thì có xuất, nhưng khi chọn chung thì không có xuất.
Ví dụ em chọn đợt hàng: Fedal/Juno thì có nhập mà không có xuất(xuất ở đây là của cả Fedal và Juno), như keo VKD215-060P-Black thì có nhập là 1100 nhưng xuất là 0 và tồn là 1100, đúng phải là nhập 1100, xuất là 300 (Fedal) và 600(Juno) = 900, tồn là 200.
Mong các anh chị xem giúp.
Dữ liệu không chuẩn rất khó xử lý, kiểm tra lại code cho nhiều tình huống
Mã:
Private Sub cb_DH_Change()
  Dim DNhap(), DXuat(), tmp(), S, Res()
  Dim dic As Object, iKey As String, DotHang As String, gBl As Boolean
  Dim i As Long, ik As Long, k As Long

  Set dic = CreateObject("System.Collections.SortedList")
  DotHang = UCase(Me.cb_DH.Value)
  If InStr(1, DotHang, "/") Then gBl = True
  DNhap = Sheet1.Range("D3", Sheet1.Range("G" & Sheet1.Rows.Count).End(xlUp).Offset(2))
  DXuat = Sheet2.Range("E3", Sheet2.Range("H" & Sheet2.Rows.Count).End(xlUp).Offset(2))

  ReDim tmp(0 To UBound(DNhap), 1 To 7)
  k = -1
  For i = 1 To UBound(DNhap)
    If UCase(DNhap(i, 4)) Like "*" & DotHang & "*" Then
      iKey = DNhap(i, 1)
      If gBl Then
        If Not dic.Contains("zzz" & iKey) Then dic.Add "zzz" & iKey, ""
      End If
      If Not dic.Contains(iKey) Then
        k = k + 1
        dic.Add iKey, k
        tmp(k, 1) = k
        tmp(k, 2) = iKey:         tmp(k, 3) = DNhap(i, 2)
        tmp(k, 4) = DNhap(i, 3):  tmp(k, 7) = DNhap(i, 4)
      Else
        ik = dic.Item(iKey)
        tmp(ik, 4) = tmp(ik, 4) + DNhap(i, 3)
      End If
    End If
  Next i
  S = Split("/" & DotHang, "/")
  For i = 1 To UBound(DXuat)
    iKey = UCase(DXuat(i, 4))
    For n = 1 To UBound(S)
      If UCase(DXuat(i, 4)) Like S(n) Then
        iKey = DXuat(i, 1)
        If dic.Contains("zzz" & iKey) = gBl Then
          If Not dic.Contains(iKey) Then
            k = k + 1
            dic.Add iKey, k
            tmp(k, 1) = k
            tmp(k, 2) = iKey:          tmp(k, 3) = DXuat(i, 2)
            tmp(k, 5) = DXuat(i, 3):   tmp(k, 7) = DXuat(i, 4)
          Else
            ik = dic.Item(iKey)
            tmp(ik, 5) = tmp(ik, 5) + DXuat(i, 3)
          End If
        End If
      End If
    Next n
  Next i
  If k > -1 Then
    ReDim Res(0 To k, 1 To 7)
    For i = 0 To k
      Res(i, 1) = i + 1
      ik = dic.GetByIndex(i)
      Res(i, 2) = tmp(ik, 2)
      Res(i, 3) = tmp(ik, 3)
      Res(i, 4) = Format(tmp(ik, 4), "#,##0.00")
      Res(i, 5) = Format(tmp(ik, 5), "#,##0.00")
      Res(i, 6) = Format(tmp(ik, 4) - tmp(ik, 5), "#,##0.00")
      Res(i, 7) = tmp(ik, 7)
    Next
    Me.ListBox1.List = Res
  End If
End Sub
 
Upvote 0
Cám ơn anh Hiếu nhiều!!
Em mới thử thấy đúng rồi.
 
Upvote 0
Web KT
Back
Top Bottom