LẬP PACKINGLIST (1 người xem)

Liên hệ QC

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

advancepharma

Thành viên mới
Tham gia
12/9/19
Bài viết
4
Được thích
1
Mọi người ơi dành tí thời gian giúp e với ạ e tìm hiểu mấy bữa nay mà chưa có làm được
Ví dụ em có thể tích tổng cộng của đơn đặt hàng là 19.113 và e cũng có 3 loại thùng có thể tích khác nhau 5.704, 12.000, 21.600 có cách tính nào khi nhập xong đơn hàng sẽ hiện thị ra số thùng nhỏ, trung hay lớn ko ạ.
Em cảm ơn mọi người trước nha
 

File đính kèm

Mọi người ơi dành tí thời gian giúp e với ạ e tìm hiểu mấy bữa nay mà chưa có làm được
Ví dụ em có thể tích tổng cộng của đơn đặt hàng là 19.113 và e cũng có 3 loại thùng có thể tích khác nhau 5.704, 12.000, 21.600 có cách tính nào khi nhập xong đơn hàng sẽ hiện thị ra số thùng nhỏ, trung hay lớn ko ạ.
Em cảm ơn mọi người trước nha
Chỉ đoán ý, hàm tự tạo chọn số thùng có thể tích dư nhỏ nhất, 2 cách dùng trong file
Mã:
Function SoThung(ByVal Thung As Range, ByVal TheTich As Double)
  Dim Res(), S(), sRow&, i&, Tong As Double, iMin As Double
  ReDim Res(1 To 3, 1 To 1)
  ReDim S(1 To 3)
  For i = 1 To 3
    S(i) = (TheTich - 0.00001) \ Thung(i, 1) + 1
  Next i
  iMin = 10 ^ 15
  For i = 0 To S(1)
    Tong = i * Thung(1, 1)
    If Tong >= TheTich Then
      If iMin > Tong Then
        Res(1, 1) = i: Res(2, 1) = 0: Res(3, 1) = 0
        iMin = Tong
        Exit For
      End If
    End If
    For r = 0 To S(2)
      Tong2 = Tong + r * Thung(2, 1)
      If Tong2 >= TheTich Then
        If iMin > Tong2 Then
          Res(1, 1) = i: Res(2, 1) = r: Res(3, 1) = 0
          iMin = Tong2
          Exit For
        End If
      End If
      For n = 0 To S(3)
        Tong3 = Tong2 + n * Thung(3, 1)
        If Tong3 >= TheTich Then
          If iMin > Tong3 Then
            Res(1, 1) = i: Res(2, 1) = r: Res(3, 1) = n
            iMin = Tong3
            Exit For
          End If
        End If
      Next n
    Next r
  Next i
  SoThung = Res
End Function
 

File đính kèm

Một lần tối đa là bao nhiêu?
Nếu con số tối đa khong cách xa con số tối thiểu thì thật ra số cách pack cũng không nhiều. Lập một bảng tra với hàm VLookup cho nó đẹp.
 
Chỉ đoán ý, hàm tự tạo chọn số thùng có thể tích dư nhỏ nhất, 2 cách dùng trong file
Mã:
Function SoThung(ByVal Thung As Range, ByVal TheTich As Double)
  Dim Res(), S(), sRow&, i&, Tong As Double, iMin As Double
  ReDim Res(1 To 3, 1 To 1)
  ReDim S(1 To 3)
  For i = 1 To 3
    S(i) = (TheTich - 0.00001) \ Thung(i, 1) + 1
  Next i
  iMin = 10 ^ 15
  For i = 0 To S(1)
    Tong = i * Thung(1, 1)
    If Tong >= TheTich Then
      If iMin > Tong Then
        Res(1, 1) = i: Res(2, 1) = 0: Res(3, 1) = 0
        iMin = Tong
        Exit For
      End If
    End If
    For r = 0 To S(2)
      Tong2 = Tong + r * Thung(2, 1)
      If Tong2 >= TheTich Then
        If iMin > Tong2 Then
          Res(1, 1) = i: Res(2, 1) = r: Res(3, 1) = 0
          iMin = Tong2
          Exit For
        End If
      End If
      For n = 0 To S(3)
        Tong3 = Tong2 + n * Thung(3, 1)
        If Tong3 >= TheTich Then
          If iMin > Tong3 Then
            Res(1, 1) = i: Res(2, 1) = r: Res(3, 1) = n
            iMin = Tong3
            Exit For
          End If
        End If
      Next n
    Next r
  Next i
  SoThung = Res
End Function

dạ nhờ a tư vấn thêm giúp e cách tính này với ạ con số tại F8 sẽ tính ra quy cách ưu tiên thứ tự từ thùng lớn-trung-nhỏ, ưu tiên tính thùng trung trước nếu thùng lớn trước nếu thùng lớn ko đủ thể tích sẽ chuyển qua thùng trung, nếu thùng trung ko đủ thể tích thì chuyển sang thùng nhỏ, theo cách tính a thì e thấy chưa có tính được ưu tiên thùng lớn, nhờ a tư vấn thêm giúp e với nha
 

File đính kèm

dạ nhờ a tư vấn thêm giúp e cách tính này với ạ con số tại F8 sẽ tính ra quy cách ưu tiên thứ tự từ thùng lớn-trung-nhỏ, ưu tiên tính thùng trung trước nếu thùng lớn trước nếu thùng lớn ko đủ thể tích sẽ chuyển qua thùng trung, nếu thùng trung ko đủ thể tích thì chuyển sang thùng nhỏ, theo cách tính a thì e thấy chưa có tính được ưu tiên thùng lớn, nhờ a tư vấn thêm giúp e với nha
Mã:
Function SoThungZ_A(ByVal Thung As Range, ByVal TheTich As Double)
  Dim Res(), S(), i&, r&, n&, d As Double, d2 As Double, d3 As Double
 
  ReDim Res(1 To 3, 1 To 1):  ReDim S(1 To 3)
  For i = 1 To 3
    S(i) = (TheTich - 0.00001) \ Thung(i, 1)
  Next i
  For i = 0 To S(3)
    d3 = TheTich - i * Thung(3, 1)
    If d3 < Thung(3, 1) Then
      Res(3, 1) = i
      If d3 <= Thung(2, 1) Then
        For r = 0 To S(2)
          d2 = d3 - r * Thung(2, 1)
          If d2 < Thung(2, 1) Then
            Res(2, 1) = r
            If d2 <= Thung(1, 1) Then
              For n = 0 To S(1)
                d = d2 - n * Thung(1, 1)
                If d <= 0 Then
                  Res(1, 1) = n
                  Exit For
                End If
              Next n
            ElseIf d2 > 0 Then
              Res(2, 1) = r + 1
            End If
            Exit For
          End If
        Next r
      ElseIf d3 > 0 Then
        Res(3, 1) = i + 1
      End If
      Exit For
    End If
  Next i
  SoThungZ_A = Res
End Function
Công thức
Mã:
D10 =INDEX(SoThungZ_A($C$10:$C$12,$F$8),ROW(A1),)
Copy xuống
 

File đính kèm

Mã:
Function SoThungZ_A(ByVal Thung As Range, ByVal TheTich As Double)
  Dim Res(), S(), i&, r&, n&, d As Double, d2 As Double, d3 As Double

  ReDim Res(1 To 3, 1 To 1):  ReDim S(1 To 3)
  For i = 1 To 3
    S(i) = (TheTich - 0.00001) \ Thung(i, 1)
  Next i
  For i = 0 To S(3)
    d3 = TheTich - i * Thung(3, 1)
    If d3 < Thung(3, 1) Then
      Res(3, 1) = i
      If d3 <= Thung(2, 1) Then
        For r = 0 To S(2)
          d2 = d3 - r * Thung(2, 1)
          If d2 < Thung(2, 1) Then
            Res(2, 1) = r
            If d2 <= Thung(1, 1) Then
              For n = 0 To S(1)
                d = d2 - n * Thung(1, 1)
                If d <= 0 Then
                  Res(1, 1) = n
                  Exit For
                End If
              Next n
            ElseIf d2 > 0 Then
              Res(2, 1) = r + 1
            End If
            Exit For
          End If
        Next r
      ElseIf d3 > 0 Then
        Res(3, 1) = i + 1
      End If
      Exit For
    End If
  Next i
  SoThungZ_A = Res
End Function
Công thức
Mã:
D10 =INDEX(SoThungZ_A($C$10:$C$12,$F$8),ROW(A1),)
Copy xuống

dạ e cảm ơn a nhiều nha. e đã thử nghiệm và đúng như ý muốn của e luôn hihi
Bài đã được tự động gộp:

dạ e phiền a thêm tí nữa nha

SỐ TTMÃ SPTÊN SPSỐ LƯỢNGQUY CÁCH
1​
MD5N2905DD16Nobilis Diluent FD - 200 ml
2​
chai 200ml
1950​
2​
MD5N2705DJ16Nobilis Diluent CA - 400 ml.
0​
Chai 400ml
0​
3​
MD5N2705DJ16Nobilis Diluent CA - 400 ml.
1​
Chai 400ml
2048​
MD5N3105EA16Nobilis Gumboro 228E - 1000 ds
1​
Chai 1000ds
36​
3998​
Số thùng
thùng nhỏ
5704​
0​
thùng trung
12000​
0​
thùng lớn
21600​
0​
khi đơn hàng tính tổng thể tích chỉ có 3.998 nhỏ hơn thể tích thùng nhỏ 5.704 thì lại cho kết quả bằng 0 e xem thử đáng lẽ là 1 thùng mới đúng
 
Lần chỉnh sửa cuối:
dạ e cảm ơn a nhiều nha. e đã thử nghiệm và đúng như ý muốn của e luôn hihi
Bài đã được tự động gộp:

dạ e phiền a thêm tí nữa nha

SỐ TTMÃ SPTÊN SPSỐ LƯỢNGQUY CÁCH
1​
MD5N2905DD16Nobilis Diluent FD - 200 ml
2​
chai 200ml
1950​
2​
MD5N2705DJ16Nobilis Diluent CA - 400 ml.
0​
Chai 400ml
0​
3​
MD5N2705DJ16Nobilis Diluent CA - 400 ml.
1​
Chai 400ml
2048​
MD5N3105EA16Nobilis Gumboro 228E - 1000 ds
1​
Chai 1000ds
36​
3998​
Số thùng
thùng nhỏ
5704​
0​
thùng trung
12000​
0​
thùng lớn
21600​
0​
khi đơn hàng tính tổng thể tích chỉ có 3.998 nhỏ hơn thể tích thùng nhỏ 5.704 thì lại cho kết quả bằng 0 e xem thử đáng lẽ là 1 thùng mới đúng
Khi nào a rảnh xem giúp e thử nếu thể tích hỏi hơn thể tích thùng nhỏ 5.704 thì trả kết quả về 1 chứ ko phải về ko như đã tính ạ
 
Khi nào a rảnh xem giúp e thử nếu thể tích hỏi hơn thể tích thùng nhỏ 5.704 thì trả kết quả về 1 chứ ko phải về ko như đã tính ạ
Chỉnh lại code
Mã:
Function SoThungZ_A(ByVal Thung As Range, ByVal TheTich As Double)
  Dim Res(), S(), i&, r&, n&, d As Double, d2 As Double, d3 As Double
 
  ReDim Res(1 To 3, 1 To 1):  ReDim S(1 To 3)
  For i = 1 To 3
    S(i) = (TheTich - 0.00001) \ Thung(i, 1)
  Next i
  For i = 0 To S(3)
    d3 = TheTich - i * Thung(3, 1)
    If d3 < Thung(3, 1) Then
      Res(3, 1) = i
      If d3 <= Thung(2, 1) Then
        For r = 0 To S(2)
          d2 = d3 - r * Thung(2, 1)
          If d2 < Thung(2, 1) Then
            Res(2, 1) = r
            If d2 <= Thung(1, 1) Then
              For n = 0 To S(1) + 1
                d = d2 - n * Thung(1, 1)
                If d <= 0 Then
                  Res(1, 1) = n
                  Exit For
                End If
              Next n
            ElseIf d2 > 0 Then
              Res(2, 1) = r + 1
            End If
            Exit For
          End If
        Next r
      ElseIf d3 > 0 Then
        Res(3, 1) = i + 1
      End If
      Exit For
    End If
  Next i
  SoThungZ_A = Res
End Function
 

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

Back
Top Bottom