Trợ giúp cách thống kê nguyên vật liệu sử dụng để tạo ra thành phẩm B và thành phẩm B tạo ra từ nhiều bán thành phẩm trung gian A. (1 người xem)

Liên hệ QC

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

thehailong

Thành viên mới
Tham gia
11/6/09
Bài viết
9
Được thích
0
Để tạo ra 1 thành phẩm e cần dùng một số nguyên vật liệu và bán thành phẩm.
Nhưng yêu cầu báo cáo phải chi tiêt số lượng nguyên vật liệu chứ ko phải bán thành phẩn.
Có ai giúp em ý tưởng chuyển data gốc sang sheet báo cáo với số lượng NVL ở cột D một cách tự động với,
E cám ơn
 

File đính kèm

Để tạo ra 1 thành phẩm e cần dùng một số nguyên vật liệu và bán thành phẩm.
Nhưng yêu cầu báo cáo phải chi tiêt số lượng nguyên vật liệu chứ ko phải bán thành phẩn.
Có ai giúp em ý tưởng chuyển data gốc sang sheet báo cáo với số lượng NVL ở cột D một cách tự động với,
E cám ơn
Đọc xong bài viết thì chả hiểu bạn muốn làm cái gì?
Data gốc có 11 dòng, kết quả có 19 dòng?
 
Upvote 0
Để tạo ra 1 thành phẩm e cần dùng một số nguyên vật liệu và bán thành phẩm.
Nhưng yêu cầu báo cáo phải chi tiêt số lượng nguyên vật liệu chứ ko phải bán thành phẩn.
Có ai giúp em ý tưởng chuyển data gốc sang sheet báo cáo với số lượng NVL ở cột D một cách tự động với,
E cám ơn
đây bạn xem được không nhé hên sui.
 

File đính kèm

Upvote 0
Bán thành fẩm cũng được làm từ những nguyện vật liệu;
Vậy bạn chưa cung cấp bảng nguyên vật liệu cho những mã bán thành fẩm của bạn.

Mình mường tượng bài toán của bạn là như thế này:
Bạn có mươi nuyên vật liệu (VL01, VL02, VL03 . . . . )
Bạn cũng có vài bán thành fẩm (như BTF 01, BTF 02, BTF 03,. . . ) chúng cũng được thực hiện từ những nguyên vật liệu nhập vô như liệt kê dòng trên
Bạn làm ra vài sản fẩm ( SFA, SF B,. . . )
Ví dụ SFA được làm từ nguyên liệu VL02 & BTF03
SFB được làm từ BTF 02 & BTF 01
. . . . .

Bạn cần tổng hợp ở mọi lúc ( & mọi nơi) cần bao nhiêu nguyên vật liệu để sản xuất?
 
Upvote 0
Bán thành fẩm cũng được làm từ những nguyện vật liệu;
Vậy bạn chưa cung cấp bảng nguyên vật liệu cho những mã bán thành fẩm của bạn.

Mình mường tượng bài toán của bạn là như thế này:
Bạn có mươi nuyên vật liệu (VL01, VL02, VL03 . . . . )
Bạn cũng có vài bán thành fẩm (như BTF 01, BTF 02, BTF 03,. . . ) chúng cũng được thực hiện từ những nguyên vật liệu nhập vô như liệt kê dòng trên
Bạn làm ra vài sản fẩm ( SFA, SF B,. . . )
Ví dụ SFA được làm từ nguyên liệu VL02 & BTF03
SFB được làm từ BTF 02 & BTF 01
. . . . .

Bạn cần tổng hợp ở mọi lúc ( & mọi nơi) cần bao nhiêu nguyên vật liệu để sản xuất?
Nếu tường mình vậy chắc dùng mảng và từ điển là nhanh anh nhi?
 
Upvote 0
Để tạo ra 1 thành phẩm e cần dùng một số nguyên vật liệu và bán thành phẩm.
Nhưng yêu cầu báo cáo phải chi tiêt số lượng nguyên vật liệu chứ ko phải bán thành phẩn.
Có ai giúp em ý tưởng chuyển data gốc sang sheet báo cáo với số lượng NVL ở cột D một cách tự động với,
E cám ơn
Từ tiêu đề cho tới nội dung lối hành văn lôi thôi,dài dòng.
Mình nhớ học sinh lớp 4 đã học cách tóm tắt nội dung rồi mà. Chá̉ nhẽ học lâu quá quên hết rồi sao?
 
Upvote 0
Nếu bảng sắp xếp đúng cách thì đây là bài toán căn bản của CSDL Liên Hệ.
Chờ mọt cút (chắc khoảng thứ Hai) là sẽ có các chuyên gia ADO giải quyết cho.
 
Upvote 0
Để tạo ra 1 thành phẩm e cần dùng một số nguyên vật liệu và bán thành phẩm.
Nhưng yêu cầu báo cáo phải chi tiêt số lượng nguyên vật liệu chứ ko phải bán thành phẩn.
Có ai giúp em ý tưởng chuyển data gốc sang sheet báo cáo với số lượng NVL ở cột D một cách tự động với,
E cám ơn
Nếu sheet Data gốc, B12="B" thì kết quả sẽ như thế nào?
 
Upvote 0
đây bạn xem được không nhé hên sui.
Vâng e cám ơn bác, e sẽ nghiên cứu code bác giúp
Đọc xong bài viết thì chả hiểu bạn muốn làm cái gì?
Data gốc có 11 dòng, kết quả có 19 dòng?
Bán thành fẩm cũng được làm từ những nguyện vật liệu;
Vậy bạn chưa cung cấp bảng nguyên vật liệu cho những mã bán thành fẩm của bạn.

Mình mường tượng bài toán của bạn là như thế này:
Bạn có mươi nuyên vật liệu (VL01, VL02, VL03 . . . . )
Bạn cũng có vài bán thành fẩm (như BTF 01, BTF 02, BTF 03,. . . ) chúng cũng được thực hiện từ những nguyên vật liệu nhập vô như liệt kê dòng trên
Bạn làm ra vài sản fẩm ( SFA, SF B,. . . )
Ví dụ SFA được làm từ nguyên liệu VL02 & BTF03
SFB được làm từ BTF 02 & BTF 01
. . . . .

Bạn cần tổng hợp ở mọi lúc ( & mọi nơi) cần bao nhiêu nguyên vật liệu để sản xuất?


Từ tiêu đề cho tới nội dung lối hành văn lôi thôi,dài dòng.
Mình nhớ học sinh lớp 4 đã học cách tóm tắt nội dung rồi mà. Chá̉ nhẽ học lâu quá quên hết rồi sao?
Xin lỗi mọi người, e đã nói không gọn ý

Để tạo ra 1 thành phẩm (B, và C) e cần dùng một số nguyên vật liệu (R1, R2....Rn) và bán thành phẩm (A).
Số lượng cần thiết để tạo A, B, C có trên sheet DATA gốc
Bây giờ bảng báo cáo của em cần liệt kê số lượng các NVL (R1, R2...Rn) để tạo ra sản phẩm B và C
E làm thủ công bằng tay ra Sheet "báo cáo". Sheet này phải thêm dòng và row D là mục tiêu em cần báo cáo
Nếu sheet Data gốc, B12="B" thì kết quả sẽ như thế nào?

Vâng e cũng muốn giải quyết vấn đề này luôn ạ. Các anh giúp em
E xin cám ơn
 
Upvote 0
Vâng e cám ơn bác, e sẽ nghiên cứu code bác giúp





Xin lỗi mọi người, e đã nói không gọn ý

Để tạo ra 1 thành phẩm (B, và C) e cần dùng một số nguyên vật liệu (R1, R2....Rn) và bán thành phẩm (A).
Số lượng cần thiết để tạo A, B, C có trên sheet DATA gốc
Bây giờ bảng báo cáo của em cần liệt kê số lượng các NVL (R1, R2...Rn) để tạo ra sản phẩm B và C
E làm thủ công bằng tay ra Sheet "báo cáo". Sheet này phải thêm dòng và row D là mục tiêu em cần báo cáo


Vâng e cũng muốn giải quyết vấn đề này luôn ạ. Các anh giúp em
E xin cám ơn
Mình muốn biết kết quả sẽ như thế nào mới làm được
 
Upvote 0
Xin lỗi mọi người, e đã nói không gọn ý

Để tạo ra 1 thành phẩm (B, và C) e cần dùng một số nguyên vật liệu (R1, R2....Rn) và bán thành phẩm (A).
Số lượng cần thiết để tạo A, B, C có trên sheet DATA gốc
Bây giờ bảng báo cáo của em cần liệt kê số lượng các NVL (R1, R2...Rn) để tạo ra sản phẩm B và C
E làm thủ công bằng tay ra Sheet "báo cáo". Sheet này phải thêm dòng và row D là mục tiêu em cần báo cáo
Phải bạn muốn một bảng theo dõi như file kèm không!?

Thân
 

File đính kèm

Upvote 0
Mình muốn biết kết quả sẽ như thế nào mới làm được
Kết quả cần thể hiện như file đính kèm
đa tạ
Bài đã được tự động gộp:

Phải bạn muốn một bảng theo dõi như file kèm không!?

Thân
Data của em có tới 4 000 nguyên vật liệu cơ ạ. Nên thể hiện hàng ngang ko ổn ạ Data gốc nặng 25MB , hu hu
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Kết quả cần thể hiện như file đính kèm
đa tạ
Bài đã được tự động gộp:


Data của em có tới 10 000 nguyên vật liệu cơ ạ. Data gốc nặng 25MB , hu hu
Bài của bạn không có gì là khó cho mọi người cả. Cái khó ở đây là bạn vừa trình bày khó hiểu vừa đưa dữ liệu không đầy đủ.
Dạng này bạn phải tạo mã sản phẩm. Trong một sản phẩm có bảng định mức về nguyên vật liệu.
Thì khi bạn cần sản phẩm nào nó sẽ liệt kê ra phần nguyên vật liệu tương ứng.
 
Upvote 0
Vấn đề của chủ bài đăng theo mình là qui tắc tạo mã cho nguyên nhiên vật liệu & bán thành fẩm; Mình xin đơn cữ:

Mã thành fẩm (TF) luôn có "TF. . . ."
Mã nguyên nhiên vật liệu (NVL) luôn fải là: "VL. . . . "
Mã bán thành fẩm (BTF) sẽ lôi thôi đây
PHP:
   Nếu BTF chỉ từ NVL thì mã gồm 2 kí tự, như "B0"
   Nếu BTF gồm có có NVL & 2 BTF thì sẽ là "B2. . . "
Ta chỉ căn cứ vô 2 tiếp đầu ngữ của mã f ân loại này mà tính ra NVL cho các TF của bạn (Bằng cách tra lần lượt các bảng kê mà thôi.
Ví dụ bạn lập các bảng kê BTF
Sau đó lập bảng kê các TF
Các BTF trong bảng kê TF sẽ được tra từ các bảng kê BTF

Muốn cụ thể chuyện này, bạn chứ không ai khác, nên cung cấp các bảng kê này, dù là giả lập!
 
Upvote 0
Bài của bạn không có gì là khó cho mọi người cả. Cái khó ở đây là bạn vừa trình bày khó hiểu vừa đưa dữ liệu không đầy đủ.
Dạng này bạn phải tạo mã sản phẩm. Trong một sản phẩm có bảng định mức về nguyên vật liệu.
Thì khi bạn cần sản phẩm nào nó sẽ liệt kê ra phần nguyên vật liệu tương ứng.
Chủ topic đang nhờ xây dựng bảng định mức chi tiết đó mờ:)
 
Upvote 0
Các bác ơi. Data thực tế của e nó như thế này. giờ phải xây dựng định mức chi tiết tới từng mã Nguyên vật liệu ạ
Mọi người giúp e với
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Các bác ơi. Data thực tế của e nó như thế này. giờ phải xây dựng định mức chi tiết tới từng mã Nguyên vật liệu ạ
Mọi người giúp e với
Góp ý cho bạn:
1/ Theo tôi thì nên có 1 sheet danh mục sản phẩm, liệt kê mỗi loại sản phẩm (thành phẩm) gồm có những nguyên phụ liệu nào, (bán thành phẩm) gồm có những nguyên phụ liệu nào.
2/ Nhìn dữ liệu của bạn cũng không thực tế nên chẳng ai hiểu?
 
Upvote 0
Góp ý cho bạn:
1/ Theo tôi thì nên có 1 sheet danh mục sản phẩm, liệt kê mỗi loại sản phẩm (thành phẩm) gồm có những nguyên phụ liệu nào, (bán thành phẩm) gồm có những nguyên phụ liệu nào.
2/ Nhìn dữ liệu của bạn cũng không thực tế nên chẳng ai hiểu?
Cái bác cần chỉ cần dùng pivot table là có luôn mà. e đính kèm bác xem
 

File đính kèm

Upvote 0
Các bác ơi. Data thực tế của e nó như thế này. giờ phải xây dựng định mức chi tiết tới từng mã Nguyên vật liệu ạ
Mọi người giúp e với
Xem lại có trường hợp xuất A sản xuất B và xuất B sản xuất A không?
Code chạy không xét trường hợp trên
Mã:
Dim Dic As Object, sArr(), sRow As Long, nuaTP As Boolean
Sub GPE()
  Dim i As Long, k As Long
  Dim Res()
  Dim iKey As Variant
  With Sheets("Data")
    sArr = .Range("B2", .Range("H1000000").End(xlUp)).Value
  End With
  Set Dic = CreateObject("scripting.dictionary")
  ReDim Res(1 To UBound(sArr, 1), 1 To 6)
  For i = 1 To UBound(sArr, 1)
    iKey = CStr(sArr(i, 1))
    Dic.Item(iKey) = Dic.Item(iKey) & "," & i
  Next i
  For i = 1 To UBound(sArr, 1)
    If IsNumeric(sArr(i, 3)) Then
      k = k + 1
      Res(k, 1) = sArr(i, 1)
      Res(k, 2) = sArr(i, 3)
      Res(k, 3) = CStr(sArr(i, 4))
      Res(k, 4) = Abs(sArr(i, 7))
     If Not Dic.exists(Res(k, 3)) Then Res(k, 5) = Res(k, 4)
    End If
  Next i
  sRow = k
  nuaTP = False
  Do While nuaTP = False
    Res = ThanhPham(Res)
  Loop
  Set Dic = Nothing
  Sheets("Ketqua").Range("A2").Resize(sRow, 5).Value = Res
End Sub
Private Function ThanhPham(ByVal dArr As Variant) As Variant
  Dim i As Long, r As Long, k As Long, ik As Long, j As Byte
  Dim Res(), S, SL, iKey
  ReDim Res(1 To sRow * 2, 1 To 6)
  nuaTP = True
  For i = 1 To sRow
    k = k + 1
    For j = 1 To 5
      Res(k, j) = dArr(i, j)
    Next j
    iKey = CStr(Res(k, 3))
    If Dic.exists(iKey) Then
      If dArr(i, 6) = Empty Then
        Res(k, 5) = Empty: Res(k, 6) = True
        If dArr(i, 5) = Empty Then SL = dArr(i, 4) Else SL = dArr(i, 5)
        S = Split(Dic.Item(iKey), ",")
        For r = 1 To UBound(S)
          k = k + 1
          ik = CLng(S(r))
          Res(k, 1) = dArr(i, 1)
          Res(k, 2) = dArr(i, 2)
          Res(k, 3) = sArr(ik, 4)
          Res(k, 5) = SL * Abs(sArr(ik, 7)) / sArr(ik, 3)
          If Dic.exists(Res(k, 3)) Then nuaTP = False
        Next r
      End If
    End If
  Next i
  sRow = k
  ThanhPham = Res
End Function
 

File đính kèm

Upvote 0
Xem lại có trường hợp xuất A sản xuất B và xuất B sản xuất A không?
Code chạy không xét trường hợp trên
Mã:
Dim Dic As Object, sArr(), sRow As Long, nuaTP As Boolean
Sub GPE()
  Dim i As Long, k As Long
  Dim Res()
  Dim iKey As Variant
  With Sheets("Data")
    sArr = .Range("B2", .Range("H1000000").End(xlUp)).Value
  End With
  Set Dic = CreateObject("scripting.dictionary")
  ReDim Res(1 To UBound(sArr, 1), 1 To 6)
  For i = 1 To UBound(sArr, 1)
    iKey = CStr(sArr(i, 1))
    Dic.Item(iKey) = Dic.Item(iKey) & "," & i
  Next i
  For i = 1 To UBound(sArr, 1)
    If IsNumeric(sArr(i, 3)) Then
      k = k + 1
      Res(k, 1) = sArr(i, 1)
      Res(k, 2) = sArr(i, 3)
      Res(k, 3) = CStr(sArr(i, 4))
      Res(k, 4) = Abs(sArr(i, 7))
     If Not Dic.exists(Res(k, 3)) Then Res(k, 5) = Res(k, 4)
    End If
  Next i
  sRow = k
  nuaTP = False
  Do While nuaTP = False
    Res = ThanhPham(Res)
  Loop
  Set Dic = Nothing
  Sheets("Ketqua").Range("A2").Resize(sRow, 5).Value = Res
End Sub
Private Function ThanhPham(ByVal dArr As Variant) As Variant
  Dim i As Long, r As Long, k As Long, ik As Long, j As Byte
  Dim Res(), S, SL, iKey
  ReDim Res(1 To sRow * 2, 1 To 6)
  nuaTP = True
  For i = 1 To sRow
    k = k + 1
    For j = 1 To 5
      Res(k, j) = dArr(i, j)
    Next j
    iKey = CStr(Res(k, 3))
    If Dic.exists(iKey) Then
      If dArr(i, 6) = Empty Then
        Res(k, 5) = Empty: Res(k, 6) = True
        If dArr(i, 5) = Empty Then SL = dArr(i, 4) Else SL = dArr(i, 5)
        S = Split(Dic.Item(iKey), ",")
        For r = 1 To UBound(S)
          k = k + 1
          ik = CLng(S(r))
          Res(k, 1) = dArr(i, 1)
          Res(k, 2) = dArr(i, 2)
          Res(k, 3) = sArr(ik, 4)
          Res(k, 5) = SL * Abs(sArr(ik, 7)) / sArr(ik, 3)
          If Dic.exists(Res(k, 3)) Then nuaTP = False
        Next r
      End If
    End If
  Next i
  sRow = k
  ThanhPham = Res
End Function
Cám ơn bác, e đã rà xoát data bỏ các trường hợp xuất A sản xuất B và xuất B sản xuất A nhưng vẫn ko work trên toàn bộ data. hic
 
Upvote 0
Cám ơn bác, e đã rà xoát data bỏ các trường hợp xuất A sản xuất B và xuất B sản xuất A nhưng vẫn ko work trên toàn bộ data. hic
Code không chạy được khi tính lòng vòng như: A -->B -->C .... -->A
Thay code mới dài dòng hơn do có bẩy lổi
Mã:
Dim Dic As Object, sArr(), nuaTP As Boolean
Sub GPE()
  Dim i As Long, k As Long, m As Byte
  Dim Res(), iKey As Variant
  Const GioiHan As Byte = 10
 
  With Sheets("Data")
    sArr = .Range("B2", .Range("H1000000").End(xlUp)).Value
  End With
  Set Dic = CreateObject("scripting.dictionary")
  ReDim Res(1 To UBound(sArr, 1), 1 To 6)
  For i = 1 To UBound(sArr, 1)
    iKey = CStr(sArr(i, 1))
    Dic.Item(iKey) = Dic.Item(iKey) & "," & i
  Next i
  For i = 1 To UBound(sArr, 1)
    If IsNumeric(sArr(i, 3)) Then
      k = k + 1
      Res(k, 1) = sArr(i, 1)
      Res(k, 2) = sArr(i, 3)
      Res(k, 3) = CStr(sArr(i, 4))
      Res(k, 4) = Abs(sArr(i, 7))
     If Not Dic.exists(Res(k, 3)) Then Res(k, 5) = Res(k, 4)
    End If
  Next i
  nuaTP = False
  Do While nuaTP = False
    m = m + 1
    If m = GioiHan Then MsgBox ("Tính lòng vòng quá tròi, No GoodBy!"): Exit Sub
    Res = ThanhPham(Res, k)
    k = UBound(Res, 1)
    
  Loop
  Set Dic = Nothing
  Sheets("KetQua").Range("A2").Resize(k, 5).Value = Res
End Sub
Private Function ThanhPham(ByVal dArr As Variant, ByVal sRow As Long) As Variant
  Dim i As Long, r As Long, k As Long, ik As Long, j As Byte
  Dim Res(), S, SL, iKey
  For i = 1 To sRow
    iKey = CStr(dArr(i, 3))
    If Dic.exists(iKey) Then
      If dArr(i, 6) = Empty Then
        S = Split(Dic.Item(iKey), ",")
        k = k + UBound(S)
      End If
    End If
  Next i
  ReDim Res(1 To sRow + k, 1 To 6)
  nuaTP = True
  k = 0
  For i = 1 To sRow
    k = k + 1
    For j = 1 To 5
      Res(k, j) = dArr(i, j)
    Next j
    iKey = CStr(Res(k, 3))
    If Dic.exists(iKey) Then
      If dArr(i, 6) = Empty Then
        Res(k, 5) = Empty: Res(k, 6) = True
        If dArr(i, 5) = Empty Then SL = dArr(i, 4) Else SL = dArr(i, 5)
        S = Split(Dic.Item(iKey), ",")
        For r = 1 To UBound(S)
          k = k + 1
          ik = CLng(S(r))
          Res(k, 1) = dArr(i, 1)
          Res(k, 2) = dArr(i, 2)
          Res(k, 3) = sArr(ik, 4)
          Res(k, 5) = SL * Abs(sArr(ik, 7)) / sArr(ik, 3)
          If Dic.exists(Res(k, 3)) Then nuaTP = False
        Next r
      End If
    End If
  Next i
  ThanhPham = Res
End Function
Nếu có danh sách tính vòng, dùng hệ phương trình bậc 1 loại tính vòng sau đó mới chạy code trên
 
Upvote 0

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

Back
Top Bottom