Tạo danh sách lấy hàng từ bảng tồn kho và yêu cầu của khách hàng

Liên hệ QC

hoangminhtien

Thành viên gắn bó
Tham gia
29/2/08
Bài viết
1,685
Được thích
2,226
Nghề nghiệp
Mechanical Engineering
Nhờ các anh chị em hướng dẫn:
Em có:
Bảng 1 là chứa tồn kho của các vật tư được sắp xếp ở các vị trí trong kho.
Bảng 2 là danh sách các vật tư khách hàng cần
Em cần tạo ra bảng 3 là danh sách cần lấy vật tư cho khách hàng theo thứ tự từ trên xuống dưới của bảng 1 cho đến khi đủ số lượng mà bảng 2 yêu cầu với đầy đủ thông tin về số lot và location.
Chi tiết các anh chị em vui lòng em trong fie.
 

File đính kèm

Nhờ các anh chị em hướng dẫn:
Em có:
Bảng 1 là chứa tồn kho của các vật tư được sắp xếp ở các vị trí trong kho.
Bảng 2 là danh sách các vật tư khách hàng cần
Em cần tạo ra bảng 3 là danh sách cần lấy vật tư cho khách hàng theo thứ tự từ trên xuống dưới của bảng 1 cho đến khi đủ số lượng mà bảng 2 yêu cầu với đầy đủ thông tin về số lot và location.
Chi tiết các anh chị em vui lòng em trong fie.
Yêu cầu này dùng Macro thì có lẽ không khó nhưng không biết bạn cần Macro hay cần công thức?
 
Macro thì anh tham khảo
Mã:
Sub FiFo()
    Dim aStock, aDO, aPicking
    Dim i As Long, j As Long, k As Long, DOQty As Long
    aStock = Range("B5:F" & Range("C65536").End(3).Row)
    aDO = Range("H5:L" & Range("I65536").End(3).Row)
    ReDim aPicking(1 To UBound(aStock, 1), 1 To 5)
    For i = 1 To UBound(aDO, 1)
        For j = 1 To UBound(aStock, 1)
            If aStock(j, 2) = aDO(i, 2) Then 'Neu cung ma
                    'DOQty + aStock chua du luong yeu cau
                    If DOQty + aStock(j, 5) <= aDO(i, 3) Then
                        k = k + 1
                        aPicking(k, 1) = aDO(i, 1)      'DO No
                        aPicking(k, 2) = aStock(j, 2)   'Part No
                        aPicking(k, 3) = aStock(j, 5)   'Qty
                        aPicking(k, 4) = aStock(j, 3)   'Lot
                        aPicking(k, 5) = aStock(j, 4)   'Location
                        DOQty = DOQty + aStock(j, 5)
                    'DOQty + aStock lon hon luong yeu cau
                    Else
                        k = k + 1
                        aPicking(k, 1) = aDO(i, 1)          'DO No
                        aPicking(k, 2) = aStock(j, 2)       'Part No
                        aPicking(k, 3) = aDO(i, 3) - DOQty  'Qty
                        aPicking(k, 4) = aStock(j, 3)       'Lot
                        aPicking(k, 5) = aStock(j, 4)       'Stock
                        DOQty = aDO(i, 3)
                        Exit For
                    End If
                'End If
            End If
        Next
        'Neu tong luong hang van chua du PO
        If DOQty < aDO(i, 3) Then
            MsgBox "Chua du DO so " & aDO(i, 2) & ", kiem tra lai", vbInformation
        End If
        'Reset DoQty -ket thuc 1 DO
        DOQty = 0
    Next
    [N5:R1000].ClearContents
    Range("N5").Resize(k, 5) = aPicking
End Sub
 
Nhờ các anh chị em hướng dẫn:
Em có:
Bảng 1 là chứa tồn kho của các vật tư được sắp xếp ở các vị trí trong kho.
Bảng 2 là danh sách các vật tư khách hàng cần
Em cần tạo ra bảng 3 là danh sách cần lấy vật tư cho khách hàng theo thứ tự từ trên xuống dưới của bảng 1 cho đến khi đủ số lượng mà bảng 2 yêu cầu với đầy đủ thông tin về số lot và location.
Chi tiết các anh chị em vui lòng em trong fie.

mình nghĩ nên dùng VBA cho sướng , nhất là có anh dhn246 viết dùm nữa thì còn gì bằng
Nhưng không biết trong đơn hàng của khách hàng có bị tình trạng trùng mã số không vậy ta ?
thí dụ khách đặt mua 1 loại nhưng phải tách ra để đem về chia cho 2 người khác nhau . hi hi

669a9a36c6dbba1a3dc80e30abdf6877.png
 
Cám ơn huuthang_bd, dùng công thức hay code cũng được bạn ạ.
Cám ơn dhn46, code của bạn chạy OK.
 
mình nghĩ nên dùng VBA cho sướng , nhất là có anh dhn246 viết dùm nữa thì còn gì bằng
Nhưng không biết trong đơn hàng của khách hàng có bị tình trạng trùng mã số không vậy ta ?
thí dụ khách đặt mua 1 loại nhưng phải tách ra để đem về chia cho 2 người khác nhau . hi hi

669a9a36c6dbba1a3dc80e30abdf6877.png
Cám ơn bác, trường hợp này không sảy ra bác ạ.
 
Mình thì muốn nó xảy ra bạn ah. Đế mấy anh bên trên xử lý...giúp bạn mai mốt lỡ xảy ra thật thì có đường mà chạy chứ...Bạn cứ chờ anh ấy ( #4 ) xử nhé! @$@!^%@$@!^%@$@!^%
Vâng, Nhờ các bác sử lý luôn trường hợp ấy giúp em, tránh trường hợp "nhỡ may" nó sảy ra thì đỡ mất công hỏi lại.--=0
 
Vâng, Nhờ các bác sử lý luôn trường hợp ấy giúp em, tránh trường hợp "nhỡ may" nó sảy ra thì đỡ mất công hỏi lại.--=0
Mạn phép sửa lại code bài #3
PHP:
Sub FiFo()
    Dim aStock, aDO, aPicking
    Dim i As Long, j As Long, k As Long, DOQty As Long
    aStock = Range("B5:F" & Range("C65536").End(3).Row)
    aDO = Range("H5:L" & Range("I65536").End(3).Row)
    ReDim aPicking(1 To UBound(aStock, 1) + UBound(aDO, 1), 1 To 5)
    For i = 1 To UBound(aDO, 1)
        aPicking(k + 1, 1) = aDO(i, 1)    'DO No
        For j = 1 To UBound(aStock, 1)
            If aStock(j, 2) = aDO(i, 2) Then 'Neu cung ma
                If aStock(j, 5) > 0 Then
                    k = k + 1
                    aPicking(k, 2) = aDO(i, 2)   'Part No
                    aPicking(k, 4) = aStock(j, 3)   'Lot
                    aPicking(k, 5) = aStock(j, 4)   'Location
                    If aDO(i, 3) > aStock(j, 5) Then 'Qty
                        aDO(i, 3) = aDO(i, 3) - aStock(j, 5)
                        aPicking(k, 3) = aStock(j, 5)
                        aStock(j, 5) = 0
                    Else
                        aPicking(k, 3) = aDO(i, 3)
                        aStock(j, 5) = aStock(j, 5) - aDO(i, 3)
                        GoTo NextItem
                    End If
                End If
            End If
        Next
        k = k + 1
        aPicking(k, 2) = aDO(i, 2)
        aPicking(k, 3) = "Not enough"
NextItem:
    Next
    [N5:R1000].ClearContents
    Range("N5").Resize(k, 5) = aPicking
End Sub
 
Mình thì muốn nó xảy ra bạn ah. Đế mấy anh bên trên xử lý...giúp bạn mai mốt lỡ xảy ra thật thì có đường mà chạy chứ...Bạn cứ chờ anh ấy ( #4 ) xử nhé! @$@!^%@$@!^%@$@!^%

ôi chài #4 biết gì đâu mà làm , #4 chỉ nêu ra trường hợp bất thường để chủ thớt lưu ý thôi mà .!$@!!!$@!!
 
Web KT

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

Back
Top Bottom