
Tạo BOM phẳng từ assembly: gom component trùng part và đếm số lượng
#Python#Assembly#BOM1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
BOM phẳng cho biết cần bao nhiêu chi tiết mỗi loại. Cách làm: duyệt cây, gom theo file part gốc, đếm số lần xuất hiện, bỏ qua các assembly con (chỉ lấy lá).
Tạo BOM phẳng từ assemblyCác bước thực hiện
- Duyệt toàn bộ cây. Thu thập mọi component không có con.
- Gom theo part gốc. Dùng đường dẫn đầy đủ của Prototype làm khóa.
- Đếm số lượng. Counter theo khóa.
- Lấy tên và đường dẫn. Leaf và FullPath.
- In bảng. Sắp xếp theo tên.
Code tham khảo (Python)
from collections import Counter import NXOpen def thu_la(comp, ket_qua): con = comp.GetChildren() if not con: ket_qua.append(comp) for c in con: thu_la(c, ket_qua) def bom_phang(root): la = [] for c in root.GetChildren(): thu_la(c, la) dem = Counter() tham_chieu = {} for c in la: p = c.Prototype khoa = p.FullPath if p is not None else "(chưa nạp) " + c.DisplayName dem[khoa] += 1 tham_chieu[khoa] = p.Leaf if p is not None else c.DisplayName return dem, tham_chieu def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Display root = part.ComponentAssembly.RootComponent if part else None if root is None: lw.WriteLine("Không phải assembly") return dem, ten = bom_phang(root) lw.WriteLine("%-4s %-28s %s" % ("SL", "Tên part", "Đường dẫn")) for khoa in sorted(dem, key=lambda k: ten[k].lower()): lw.WriteLine("%-4d %-28s %s" % (dem[khoa], ten[khoa][:28], khoa)) lw.WriteLine("Tổng số loại: %d, tổng số chi tiết: %d" % (len(dem), sum(dem.values()))) if __name__ == "__main__": main()Giải thích code
- Component 'lá' là component không có con, tức chi tiết đơn; assembly con chỉ là nhóm nên không đếm riêng.
- Khóa gom nhóm là đường dẫn đầy đủ để hai file cùng tên ở thư mục khác nhau không bị gộp nhầm.
- Component chưa nạp được gom theo tên hiển thị để vẫn xuất hiện trong báo cáo.
Lỗi thường gặp
- Component có số lượng khai báo riêng (quantity) không phản ánh trong cách đếm này; dùng
GetIntegerQuantitynếu cần. - BOM theo cấu hình (arrangement) hoặc suppress khác nhau; kiểm tra
IsSuppressedđể loại component đang bị tắt.
Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.
Điểm: 0
Trả lời
Đăng nhập để tham gia thảo luận.