Tổng hợp dữ liệu từ các sheet để quản lý số lượng vật tư

Liên hệ QC
Chừ tiến bộ hơn 1 chút làm lại chỉ còn 2 việc thôi:
1/ Tính tổng nhập, xuất từ UNION 2 bảng Nhap va Xuat chép vào NXT
2/ Lấy số lượng tồn kho từ DM ghép với dữ liệu vừa chép ra NXT ở bước 1

Rich (BB code):
Sub NXT2()
Dim Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
   
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("G3:K5000").ClearContents
   
    Ngay1 = "#" & Sheet4.Range("I1") & "#"
    Ngay2 = "#" & Sheet4.Range("I2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Group By F6"), cnn
        Sheet4.Range("G3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("G65536").End(xlUp).Row
        .Close
        .Open ("Select T1.F1,T1.F4,T2.F3,T2.F4 FROM [DM$A4:G849] as T1 LEFT JOIN [NXT$G3:J" & dong & "] as T2 ON T1.F1 = T2.F1 "), cnn
        Sheet4.Range("G3:K5000").ClearContents
        Sheet4.Range("G3").CopyFromRecordset .DataSource
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Bạn Maika ơi, có cách nào tính NXT theo điều kiện khoảng thời gian, với kho ko ạ
Vd: em lọc từ ngày 01/01/2019->01/01/2019, với kho A, thì báo cáo tự động cập nhật ạ,
1621838386790.png
Cám ơn bạn :heart:
 
Bạn Maika ơi, có cách nào tính NXT theo điều kiện khoảng thời gian, với kho ko ạ
Vd: em lọc từ ngày 01/01/2019->01/01/2019, với kho A, thì báo cáo tự động cập nhật ạ,
View attachment 259300
Cám ơn bạn :heart:
Tôi đã làm hết chuyện khó rồi còn gì, chừ vụ đó bạn làm thử xem, chỉ cần Where nữa thôi mà. Biến Ngay1, Ngay2 và Kho tôi đã lấy sẵn rồi đó.
 
!$@!! có ai giúp mình với. hic...
 
!$@!! có ai giúp mình với. hic...
Code lấy theo điều kiện:
Rich (BB code):
Sub NXT3()
Dim Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("A3:E5000").ClearContents
    
    Ngay1 = "#" & Sheet4.Range("J1") & "#"
    Ngay2 = "#" & Sheet4.Range("J2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay1 & " And " & Ngay2 & " Group By F6"), cnn
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select T1.F1,T1.F4,T2.F3,T2.F4 FROM [DM$A4:G849] as T1 LEFT JOIN [NXT$A3:E" & dong & "] as T2 ON T1.F1 = T2.F1 "), cnn
        Sheet4.Range("A3:E5000").ClearContents
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
 
Code lấy theo điều kiện:
Rich (BB code):
Sub NXT3()
Dim Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
  
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("A3:E5000").ClearContents
  
    Ngay1 = "#" & Sheet4.Range("J1") & "#"
    Ngay2 = "#" & Sheet4.Range("J2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay1 & " And " & Ngay2 & " Group By F6"), cnn
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select T1.F1,T1.F4,T2.F3,T2.F4 FROM [DM$A4:G849] as T1 LEFT JOIN [NXT$A3:E" & dong & "] as T2 ON T1.F1 = T2.F1 "), cnn
        Sheet4.Range("A3:E5000").ClearContents
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Cám ơn anh ạ
 
Còn 1 chuyện nữa. Mới lấy tồn kho đầu 2019 và phát sinh 15/2 - 16/2/2019. Còn phải lấy tồn kho đầu 2019 trừ cho PS thời kỳ trước 15/2 mới ra kết quả tồn kho ở cột B được.
Dạ đúng rồi ạ, Có cách nào ko anh?
Khi chọn kho B báo cáo NXT thì nó chạy không đúng kho anh ạ, vd: em chọn kho B có thì có SL 2, nhưng kết quả Tồn đâu code lấy hết là 847, y chang số ban đầu,
Nó ko tách kho ra anh nè.
 
Dạ đúng rồi ạ, Có cách nào ko anh?
Khi chọn kho B báo cáo NXT thì nó chạy không đúng kho anh ạ, vd: em chọn kho B có thì có SL 2, nhưng kết quả Tồn đâu code lấy hết là 847, y chang số ban đầu,
Nó ko tách kho ra anh nè.
Bạn kiểm tra cẩn thận kết quả của code này nhé:
Rich (BB code):
Sub NXT3()
Dim Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("A3:E5000").ClearContents
    
    Ngay1 = "#" & Sheet4.Range("J1") & "#"
    Ngay2 = "#" & Sheet4.Range("J2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay1 & " And " & Ngay2 & " Group By F6"), cnn
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select T1.F1,T1.F4,T2.F3,T2.F4 FROM [DM$A4:G849] as T1 LEFT JOIN [NXT$A3:E" & dong & "] as T2 ON T1.F1 = T2.F1 Where T1.F7 = " & KHO), cnn
        Sheet4.Range("A3:E5000").ClearContents
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
 
Bạn kiểm tra cẩn thận kết quả của code này nhé:
Rich (BB code):
Sub NXT3()
Dim Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
   
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("A3:E5000").ClearContents
   
    Ngay1 = "#" & Sheet4.Range("J1") & "#"
    Ngay2 = "#" & Sheet4.Range("J2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay1 & " And " & Ngay2 & " Group By F6"), cnn
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select T1.F1,T1.F4,T2.F3,T2.F4 FROM [DM$A4:G849] as T1 LEFT JOIN [NXT$A3:E" & dong & "] as T2 ON T1.F1 = T2.F1 Where T1.F7 = " & KHO), cnn
        Sheet4.Range("A3:E5000").ClearContents
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Em kiểm tra lại thì kết quả vẫn bị lệch anh nè.
vd: Em test mã hàng UL11708RAVSAF37W (Số ngày 1/1: 1, nhập ngày 14/02 là: 6, xuất ngày 14/02 là: 1--> như vậy tồn đầu ngày 15/02 số đúng là: 6, nhưng
Khi em chạy code thì ra số thì tồn đầu là 1 ạ.
(có kèm file test)
Cám ơn anh giúp ạ

1621848365363.png
 

File đính kèm

  • 1621848345102.png
    1621848345102.png
    252.3 KB · Đọc: 1
  • TON_KHO (1)_SQL_MrBao69.xlsm
    138.1 KB · Đọc: 11
Em kiểm tra lại thì kết quả vẫn bị lệch anh nè.
vd: Em test mã hàng UL11708RAVSAF37W (Số ngày 1/1: 1, nhập ngày 14/02 là: 6, xuất ngày 14/02 là: 1--> như vậy tồn đầu ngày 15/02 số đúng là: 6, nhưng
Khi em chạy code thì ra số thì tồn đầu là 1 ạ.
(có kèm file test)
Cám ơn anh giúp ạ

View attachment 259325
Tôi đâu đã làm chuyện tính tồn đầu kỳ. Bạn chỉ cần kiểm tra lấy kho có đúng hay chưa thôi.
 
Tôi đâu đã làm chuyện tính tồn đầu kỳ. Bạn chỉ cần kiểm tra lấy kho có đúng hay chưa thôi.
:wacko:dạ, cámơn anhạ, Có ai giúp mình cái này ko? huhu....
Thử kỹ lần cuối nhé!
Rich (BB code):
Sub NXT4()
Dim Ngay01 As String, Ngay02 As String, Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("A3:E5000").ClearContents
    
    Ngay01 = "#" & "01/01/" & Year(Sheet4.Range("J1")) & "#"
    Ngay02 = "#" & Sheet4.Range("J1") - 1 & "#"
    Ngay1 = "#" & Sheet4.Range("J1") & "#"
    Ngay2 = "#" & Sheet4.Range("J2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,Sum(IIF(F1 LIKE 'PN%', F10,0))-Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay01 & " And " & Ngay02 & " Group By F6"), cnn
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay1 & " And " & Ngay2 & " Group By F6"), cnn
        Sheet4.Range("A" & dong + 1).CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select F1,sum(F4) FROM [DM$A4:G849] Group By F1"), cnn
        Sheet4.Range("A" & dong + 1).CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select F1,sum(F2),sum(F3),sum(F4) From [NXT$A3:E" & dong & "] Group By F1"), cnn
        Sheet4.Range("A3:E5000").ClearContents
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
 
Thử kỹ lần cuối nhé!
Rich (BB code):
Sub NXT4()
Dim Ngay01 As String, Ngay02 As String, Ngay1 As String, Ngay2 As String, KHO As String
Dim Rec As Object, dong As Long
   
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Sheet4.Range("A3:E5000").ClearContents
   
    Ngay01 = "#" & "01/01/" & Year(Sheet4.Range("J1")) & "#"
    Ngay02 = "#" & Sheet4.Range("J1") - 1 & "#"
    Ngay1 = "#" & Sheet4.Range("J1") & "#"
    Ngay2 = "#" & Sheet4.Range("J2") & "#"
    KHO = "'" & Sheet4.Range("L1") & "'"
    Dim cnn As String
    cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=No"""
    Set Rec = CreateObject("ADODB.Recordset")
    With Rec
        .Open ("Select F6,Sum(IIF(F1 LIKE 'PN%', F10,0))-Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay01 & " And " & Ngay02 & " Group By F6"), cnn
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select F6,sum(F9),Sum(IIF(F1 LIKE 'PN%', F10,0)),Sum(IIF(F1 LIKE 'PX%', F11,0)) From (Select * From [Nhap$A4:N1017] Union All Select * From [Xuat$A4:N84]) Where F14 = " & KHO & " And  F2 Between " & Ngay1 & " And " & Ngay2 & " Group By F6"), cnn
        Sheet4.Range("A" & dong + 1).CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select F1,sum(F4) FROM [DM$A4:G849] Group By F1"), cnn
        Sheet4.Range("A" & dong + 1).CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
        .Open ("Select F1,sum(F2),sum(F3),sum(F4) From [NXT$A3:E" & dong & "] Group By F1"), cnn
        Sheet4.Range("A3:E5000").ClearContents
        Sheet4.Range("A3").CopyFromRecordset .DataSource
        dong = Sheet4.Range("A65536").End(xlUp).Row
        .Close
    End With
    Set Rec = Nothing
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Chân thành cám ơn ạ
 

Chào mọi người,
Ai có cao kiến xem mình cái code này với ạ, Em chạy SQL, Giờ em muốn lọc Nhập xuất tồn theo Thời gian, với theo Mã kho
Em đã lên nghiên cứu (lên google, youtube...) quá trời nhưng không có cách nào xử lý được ạ, hix hix...!$@!!
Em có đính kèm file ạ
Trân trọng cám ơn! :heart:
View attachment 259293
Bạn tham khảo đoạn code đảm bảo xử lý theo ngày, kho
Bạn nên phát triển thêm cột giá trị, chắc chắn bạn sẽ yêu cầu thêm cột giá trị về sau.
Bạn ko hiểu code cứ IB tôi nhé.
Chúc may mắn

"select c2,c3,c4,sum(c5),sum(c6),sum(c7),sum(c8),sum(c9),sum(c9)*(sum(c6)+sum(c8))/(sum(c5)+sum(c7)),sum(c11) as c10," & _

"sum(c5)+sum(c7)-sum(c9),sum(c6)+sum(c8)-sum(c9)*(sum(c6)+sum(c8))/(sum(c5)+sum(c7)) from(" & _

"select ma_hang as c2,ten_hang as c3,dvt as c4,so_luong as c5,thanh_tien as c6,0 as c7,0 as c8,0 as c9,0 as c11 from DMHH where ma_hang is not null " & _
"Union all " & _
"select ma_hang as c2,ten_hang as c3,dvt as c4,iif(ngay*1<" & (ngaybd) & ",so_luong,0) as c5" & _
",iif(ngay*1<" & (ngaybd) & ",thanh_tien,0) as c6,iif((ngay*1>=" & (ngaybd) & ")*(ngay*1<=" & (ngaykt) & "),so_luong,0) as c7," & _
"iif((ngay*1>=" & (ngaybd) & ")*(ngay*1<=" & (ngaykt) & "),thanh_tien,0) as c8,0 as c9,0 as c11 from NK_NHAP where ma_hang is not null " & _
"Union all " & _
"select ma_hang as c2,ten_hang as c3,dvt as c4,iif(ngay*1<" & (ngaybd) & ",-so_luong,0) as c5" & _
",iif(ngay*1<" & (ngaybd) & ",-thanh_tien,0) as c6,0 as c7,0 as c8,iif((ngay*1>=" & (ngaybd) & ")*(ngay*1<=" & (ngaykt) & "),so_luong,0) as c9," & _
"iif((ngay*1>=" & (ngaybd) & ")*(ngay*1<=" & (ngaykt) & "),thanh_tien,0) as c11 from NK_XUAT where ma_hang is not null) " & _
"Group by c2,c3,c4"
:v:
 
Web KT
Back
Top Bottom