Update số lượng dựa trên ngày gần nhất lấy ra

Liên hệ QC

hadoan-pap

Thành viên tiêu biểu
Tham gia
8/7/15
Bài viết
461
Được thích
20
Em chào mọi người.

Em có 1 công việc mà có 1 việc nhỏ trong đang khá khó khăn về việc kiểm tra ngày gần nhất để update số lượng sản phẩm lấy ra.

Trong file có Sheet1 và Sheet2... Sheet1 là nơi lưu thông tin kiểu như kho, Sheet2 là sheet để nhập thông tin sản phẩm + số lượng lấy ra ạ.

Sheet2 mình lấy số lượng bao nhiêu thì nó sẽ trừ đi ở kho Sheet1 với điều kiện : Sẽ lấy và trừ đi số lượng mà có ngày gần nhất hiện tại ở Sheet1, trong trường hợp lấy nhiều quá thì sẽ lấy them số lượng ở ngày gần nhất kế tiếp sau đó update lại số lượng ở Sheet1.

Như trong ví dụ em gửi : lấy 130 sản phẩm có mã "AP", nó sẽ lấy 100 cái có ngày gần nhất là 18/10/2019 sau đó xóa dòng đó đi và lấy them 30 sản phẩm có ngày gần nhất kế tiếp là 22/10/2019 và update lại số lượng.

Rất mong mọi người giúp em bài toán này ạ.

Em xin cảm ơn!
 

File đính kèm

Em chào mọi người.

Em có 1 công việc mà có 1 việc nhỏ trong đang khá khó khăn về việc kiểm tra ngày gần nhất để update số lượng sản phẩm lấy ra.

Trong file có Sheet1 và Sheet2... Sheet1 là nơi lưu thông tin kiểu như kho, Sheet2 là sheet để nhập thông tin sản phẩm + số lượng lấy ra ạ.

Sheet2 mình lấy số lượng bao nhiêu thì nó sẽ trừ đi ở kho Sheet1 với điều kiện : Sẽ lấy và trừ đi số lượng mà có ngày gần nhất hiện tại ở Sheet1, trong trường hợp lấy nhiều quá thì sẽ lấy them số lượng ở ngày gần nhất kế tiếp sau đó update lại số lượng ở Sheet1.

Như trong ví dụ em gửi : lấy 130 sản phẩm có mã "AP", nó sẽ lấy 100 cái có ngày gần nhất là 18/10/2019 sau đó xóa dòng đó đi và lấy them 30 sản phẩm có ngày gần nhất kế tiếp là 22/10/2019 và update lại số lượng.

Rất mong mọi người giúp em bài toán này ạ.

Em xin cảm ơn!
1/ Dữ liệu sheet1 sao không sắp xếp (Sort) cột E từ nhỏ đến lớn (hoặc ngược lại)?
2/ AP ngày 18/10/2019 có SL là 200, lấy 100 rồi xóa đi, lấy tiếp ngày 22/10/2019 thêm SL 30?
3/ Dùng điều kiện "ngày gần nhất" là "ngày nhỏ nhất" trong cột E hay là gì? Nếu cột E có ngày nhỏ hơn ngày hiện tại (Quá Date)thì có lấy không?
 
Upvote 0
1/ Dữ liệu sheet1 sao không sắp xếp (Sort) cột E từ nhỏ đến lớn (hoặc ngược lại)?
2/ AP ngày 18/10/2019 có SL là 200, lấy 100 rồi xóa đi, lấy tiếp ngày 22/10/2019 thêm SL 30?
3/ Dùng điều kiện "ngày gần nhất" là "ngày nhỏ nhất" trong cột E hay là gì? Nếu cột E có ngày nhỏ hơn ngày hiện tại (Quá Date)thì có lấy không?
Dạ, em cảm ơn anh đã góp ý ạ.

Em rất xin lỗi vì lúc sửa file em quên không chỉnh lại số lượng và thông tin chưa đủ.

Về 1 số câu hỏi anh góp ý em xin được trả lời :

- Cột "E" không sort được vì khi sort thì mọi thứ nó bị thay đổi theo.... cột đó chỉ lưu ngày mà sản phẩm hết hạn. Nhưng em nghĩ nếu trong code mình filter để xử lý sau đó bỏ filter cũng được ạ :)
- Em đã sửa lại như trong file đính kèm ạ. Ngày 18/10 là 100 và ngày 20/10 là 200.
- Ở cột E nếu ngày nào mà hết hạn thì sẽ bỏ qua không lấy. Em đã update them vào file ngày hết hạn cho đủ ạ.

Em xin gửi lại file như đính kèm!

Em cảm ơn anh!
 

File đính kèm

Upvote 0
Dạ, em cảm ơn anh đã góp ý ạ.

Em rất xin lỗi vì lúc sửa file em quên không chỉnh lại số lượng và thông tin chưa đủ.

Về 1 số câu hỏi anh góp ý em xin được trả lời :

- Cột "E" không sort được vì khi sort thì mọi thứ nó bị thay đổi theo.... cột đó chỉ lưu ngày mà sản phẩm hết hạn. Nhưng em nghĩ nếu trong code mình filter để xử lý sau đó bỏ filter cũng được ạ :)
- Em đã sửa lại như trong file đính kèm ạ. Ngày 18/10 là 100 và ngày 20/10 là 200.
- Ở cột E nếu ngày nào mà hết hạn thì sẽ bỏ qua không lấy. Em đã update them vào file ngày hết hạn cho đủ ạ.

Em xin gửi lại file như đính kèm!

Em cảm ơn anh!
Lỡ "ghiền bấm nút", kết quả sẽ "lung tung".
Tôi để kết quả chỗ khác, sau này tính sau.
 

File đính kèm

Upvote 0
Lỡ "ghiền bấm nút", kết quả sẽ "lung tung".
Tôi để kết quả chỗ khác, sau này tính sau.
Gửi anh.

Anh ơi em quên còn xót 1 điều kiện để check số lượng hang xuất ra ạ.

Nếu số lượng hàng xuất ra mà lớn hơn tổng số lượng hàng còn lại trong kho ( chỉ tính các hàng còn hsd ) thì sẽ báo lỗi .

E cũng đã sửa 1 số chỗ trong code của anh nhưng nó chưa kiểm tra được điều kiện này.

Nhờ anh xem giúp ạ.

Em cảm ơn anh!
 
Lần chỉnh sửa cuối:
Upvote 0
Gửi anh.

Anh ơi em quên còn xót 1 điều kiện để check số lượng hang xuất ra ạ.

Nếu số lượng hàng xuất ra mà lớn hơn tổng số lượng hàng còn lại trong kho ( chỉ tính các hàng còn hsd ) thì sẽ báo lỗi .

E cũng đã sửa 1 số chỗ trong code của anh nhưng nó chưa kiểm tra được điều kiện này.

Nhờ anh xem giúp ạ.

Em cảm ơn anh!
Không có file, không thấy dữ liệu làm sao biết lỗi gì?
 
Upvote 0
Không có file, không thấy dữ liệu làm sao biết lỗi gì?
Dạ vẫn file trước anh giúp đỡ làm cho em ở bài post của anh phía bên trên ạ.

Giờ em muốn them 1 điều kiện kiểm tra số lượng hàng lấy ra ở Sheet2 mà nhiều hơn tổng số hàng trong kho ở sheet1 ( chỉ tính các hàng mà còn hạn sử dung so với thời điểm hiện tại ) khi đó nó sẽ hiển thị thông báo và bôi màu item ở Sheet2 cho mình ạ.

Ví dụ muốn lấy ra 500 sản phẩm A, nhưng trong kho chỉ còn 400 sản phẩm A với các hạn sử dung chưa hết.... khi đó nó sẽ thông báo "không đủ hàng" ạ

E cảm ơn anh :)
 
Lần chỉnh sửa cuối:
Upvote 0
Anh ơi em quên còn xót 1 điều kiện để check số lượng hang xuất ra ạ.
Nếu số lượng hàng xuất ra mà lớn hơn tổng số lượng hàng còn lại trong kho ( chỉ tính các hàng còn hsd ) thì sẽ báo lỗi .
Mình vạch các bước tuần tự như sau, lúc rỗi bạn thử:

1./ Kiểm lượng tồn (trong kho) còn đủ hay thiếu bằng hàm DSUM()
2./ Tìm ngày MAX & ngày MIN của mặt hàng cần khảo sát , nhờ hàm DMAX() & DMIN()
3./ Tạo vòng lặp từ trị ngày DMAX tới ngày DMIN
Trong quá trình duyệt nếu dòng nào chưa đủ (để trừ) ta thêm con 0 vô ô bên phải cùa ô cuối cùng hàng đang duyệt
Tiếp tục duyệt cho đến khi trong kho còn dư thì ghi lương dư này lại
4./ Nếu cần thì kiểm tra lại, sau đó xóa những dòng có số 0 ở cột vừa thêm đi.
Chúc bạn thành công mĩ mãn!
 
Upvote 0
Mình vạch các bước tuần tự như sau, lúc rỗi bạn thử:

1./ Kiểm lượng tồn (trong kho) còn đủ hay thiếu bằng hàm DSUM()
2./ Tìm ngày MAX & ngày MIN của mặt hàng cần khảo sát , nhờ hàm DMAX() & DMIN()
3./ Tạo vòng lặp từ trị ngày DMAX tới ngày DMIN
Trong quá trình duyệt nếu dòng nào chưa đủ (để trừ) ta thêm con 0 vô ô bên phải cùa ô cuối cùng hàng đang duyệt
Tiếp tục duyệt cho đến khi trong kho còn dư thì ghi lương dư này lại
4./ Nếu cần thì kiểm tra lại, sau đó xóa những dòng có số 0 ở cột vừa thêm đi.
Chúc bạn thành công mĩ mãn!
Em cảm ơn anh nhưng trong code file của em đã khá đầy đủ rồi và chỉ còn thiếu bước nhỏ đó thôi ạ nên em cũng k muốn thay đổi để làm lại.
 
Upvote 0
Mình vạch các bước tuần tự như sau, lúc rỗi bạn thử:

1./ Kiểm lượng tồn (trong kho) còn đủ hay thiếu bằng hàm DSUM()
2./ Tìm ngày MAX & ngày MIN của mặt hàng cần khảo sát , nhờ hàm DMAX() & DMIN()
3./ Tạo vòng lặp từ trị ngày DMAX tới ngày DMIN
Trong quá trình duyệt nếu dòng nào chưa đủ (để trừ) ta thêm con 0 vô ô bên phải cùa ô cuối cùng hàng đang duyệt
Tiếp tục duyệt cho đến khi trong kho còn dư thì ghi lương dư này lại
4./ Nếu cần thì kiểm tra lại, sau đó xóa những dòng có số 0 ở cột vừa thêm đi.
Chúc bạn thành công mĩ mãn!
Gửi anh.

Đây là câu lệnh em dung để kiểm tra số lượng ( e ví dụ là sản phẩm A trong kho đang có là 4 )

If Application.WorksheetFunction.Sum(sArr(i, 4), sArr(i, 4), sArr(i, 4), sArr(i, 4), sArr(i, 4)) < SL Then
MsgBox "Not OK"
End If
Nhưng do số lượng hàng của sản phẩm trong kho không cố định nên làm thế nào để chương trình duyệt tự động đc ạ ?

Code đầy đủ như bên dưới và file đính kèm ạ.

Dim sArr(), dArr(), tArr(), MaSP As String, t As Date
Dim SL As Long, Rws As Long, I As Long, J As Long, K As Long, N As Long, R As Long
t = Date
Rws = Sheet2.Range("E1000").End(xlUp).Row
If Rws < 2 Then Exit Sub
tArr = Sheet2.Range("C2:E" & Rws).Value
sArr = Sheet1.Range("J2", Sheet1.Range("N1000000").End(xlUp)).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 5)
For N = 1 To UBound(tArr)
MaSP = tArr(N, 1)
SL = tArr(N, 3)
For I = 1 To UBound(sArr)
If sArr(I, 5) >= t Then
If SL > 0 Then
If sArr(I, 2) = MaSP Then

dòng này If Application.WorksheetFunction.Sum(sArr(I, 4), sArr(I, 4), sArr(I, 4), sArr(I, 4), sArr(I, 4)) < SL Then
dòng này MsgBox "Not OK"
dòng này End If

If sArr(I, 4) <= SL Then
SL = SL - sArr(I, 4)
sArr(I, 4) = 0
Else
sArr(I, 4) = sArr(I, 4) - SL
SL = 0
End If
End If
Else
Exit For
End If
End If
Next I
Next N
For I = 1 To R
If sArr(I, 4) > 0 Then
K = K + 1
For J = 1 To 5
dArr(K, J) = sArr(I, J)
Next J
End If
Next I
With Sheet1
.Range("J2:N10000").ClearContents
.Range("J2:N2").Resize(K) = dArr
.Range("J2:N2").Resize(K).Sort Key1:=.Range("J2"), Order1:=xlAscending
End With
 

File đính kèm

Upvote 0
Em cảm ơn anh nhưng trong code file của em đã khá đầy đủ rồi và chỉ còn thiếu bước nhỏ đó thôi ạ nên em cũng k muốn thay đổi để làm lại.
Bạn xem file này.
Chú ý Mã SP có phân biệt chữ Hoa, thường. Phải nhập chính xác cho quen.
 

File đính kèm

Upvote 0
Bạn xem file này.
Chú ý Mã SP có phân biệt chữ Hoa, thường. Phải nhập chính xác cho quen.
Gửi anh..

Em cảm ơn anh rất nhiều. Em sẽ check kĩ ạ.

Anh cho em hỏi thêm chút về dòng lệnh của em như dưới ạ.... vì là mảng động nên nếu em muốn duyệt mảng để sum được đến vị trí cuối cùng thì phải sửa như thế nào ạ ?

If Application.WorksheetFunction.Sum(sArr(i, 4), sArr(i, 4), sArr(i, 4), sArr(i, 4), sArr(i, 4)) < SL Then
MsgBox "Not OK"
End If

Rất cảm ơn anh!
 
Upvote 0
Gửi anh..

Em cảm ơn anh rất nhiều. Em sẽ check kĩ ạ.

Anh cho em hỏi thêm chút về dòng lệnh của em như dưới ạ.... vì là mảng động nên nếu em muốn duyệt mảng để sum được đến vị trí cuối cùng thì phải sửa như thế nào ạ ?

If Application.WorksheetFunction.Sum(sArr(i, 4), sArr(i, 4), sArr(i, 4), sArr(i, 4), sArr(i, 4)) < SL Then
MsgBox "Not OK"
End If

Rất cảm ơn anh!
Không hiểu nên không trả lời được.
Thử với dữ liệu hàng ngàn dòng xem sao.
Khi nào file trên không phù hợp với "mảng động" của bạn thì mới tính.
 
Upvote 0
Không hiểu nên không trả lời được.
Thử với dữ liệu hàng ngàn dòng xem sao.
Khi nào file trên không phù hợp với "mảng động" của bạn thì mới tính.
Dạ vâng.

Em cảm ơn anh nhiều ạ.

Em sẽ học kỹ hơn trên file của anh để hiểu và áp dung được cho bài toàn thực tế của em ạ.

Một lần nữa cảm ơn anh rất nhiều :)
 
Upvote 0
Bạn có thể chạy macro này để so kiểm lương trong kho & lương cần để xuất:
PHP:
Sub KiemMatHangCuaKho()
Dim CSDL As Range, WF As Object, Cls As Range
Dim Rws As Long, TonKho As Double
Dim Msg As String

Sheet2.Select
Set WF = Application.WorksheetFunction
With Sheet1
    Rws = .[B2].CurrentRegion.Rows.Count
    Set CSDL = .[B2].Resize(Rws, 3):                        .[w1].Value = .[b1].Value
    .[w4].Value = "=DSUM(A1:E9999,d1,w1:w2)"
    For Each Cls In Range([C2], [C2].End(xlDown))
        .[w2].Value = Cls.Value:                             TonKho = .[w4].Value
        If TonKho >= Cls.Offset(, 2).Value Then
            Msg = "OK: "
        Else
            Msg = "Not OK "
        End If
        MsgBox Msg & Cls.Value, , "GPE.COM Xin Thông Báo!"
    Next Cls
End With
End Sub
 
Upvote 0
Bạn xem file này.
Chú ý Mã SP có phân biệt chữ Hoa, thường. Phải nhập chính xác cho quen.
Gửi anh @Ba Tê

Em xin lỗi anh vì lại hỏi anh lại bài toán này ạ... Rất xin lỗi đã làm phiền anh.

Em mắc từ chiều đến giờ công đoạn lấy hàng trong kho ra nhưng thông tin lấy hàng hóa sẽ được lưu lại trong bảng như vùng em có bôi màu da cam ạ.

Tức là ví dụ như file em muốn lấy ra 150 quả táo mã AP, thì nó sẽ lấy trong kho ra và ghi nhận thông tin vào 2 hàng bôi màu da cam anh ạ. Như trong file là nó lấy 100 quả có HSD: 18/10/2019, và 50 quả HSD: 22/10/2019.

Em cũng thử làm nhưng càng làm càng rối code chạy lung tung hết cả.

Anh vui long check giúp em vẫn file cũ và cập nhập them giúp em thông tin này vào trong file nhé.

Em cảm ơn anh!
 

File đính kèm

Upvote 0
Gửi anh @Ba Tê

Em xin lỗi anh vì lại hỏi anh lại bài toán này ạ... Rất xin lỗi đã làm phiền anh.

Em mắc từ chiều đến giờ công đoạn lấy hàng trong kho ra nhưng thông tin lấy hàng hóa sẽ được lưu lại trong bảng như vùng em có bôi màu da cam ạ.

Tức là ví dụ như file em muốn lấy ra 150 quả táo mã AP, thì nó sẽ lấy trong kho ra và ghi nhận thông tin vào 2 hàng bôi màu da cam anh ạ. Như trong file là nó lấy 100 quả có HSD: 18/10/2019, và 50 quả HSD: 22/10/2019.

Em cũng thử làm nhưng càng làm càng rối code chạy lung tung hết cả.

Anh vui long check giúp em vẫn file cũ và cập nhập them giúp em thông tin này vào trong file nhé.

Em cảm ơn anh!
Không ai quản lý dữ liệu kiểu vậy nên tôi không làm.
Chỉ có thể giúp bạn thế này thôi.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom