
Quản lý revision: tăng REV từ A lên B, ghi ngày sửa, người sửa và lưu lịch sử thay đổi
#Python#Attribute#Revision1 lượt xem
Quản trị viênQuản trị· 0 điểm
Câu hỏi ·
Mỗi lần phát hành lại bản vẽ cần tăng revision và ghi lý do. Script thực hiện nhất quán: tăng chữ cái REV, ghi ngày, người sửa, lý do, và nối vào thuộc tính lịch sử dạng mảng.
Quản lý revision: tăng REV từ A lên B, ghi…Các bước thực hiện
- Đọc REV hiện tại. Mặc định A nếu chưa có.
- Tăng revision. A->B->C, sau Z là AA.
- Ghi REV, NGAY_REV, NGUOI_SUA. SetUserAttribute.
- Thêm vào lịch sử. Thuộc tính mảng LICH_SU_REV.
- Lưu part. Part.Save.
Code tham khảo (Python)
import getpass import time import NXOpen NGAY = NXOpen.Update.Option.Now KIEU = NXOpen.NXObject.AttributeType def tang_rev(rev): rev = (rev or "").strip().upper() if not rev: return "A" chu = list(rev) i = len(chu) - 1 while i >= 0: if chu[i] != "Z": chu[i] = chr(ord(chu[i]) + 1) return "".join(chu) chu[i] = "A" i -= 1 return "A" + "".join(chu) def doc_rev(part): if part.HasUserAttribute("REV", KIEU.String, -1): return part.GetUserAttributeAsString("REV", KIEU.String, -1) return "" def phat_hanh_rev_moi(part, ly_do): rev_cu = doc_rev(part) rev_moi = tang_rev(rev_cu) ngay = time.strftime("%Y-%m-%d") nguoi = getpass.getuser() part.SetUserAttribute("REV", -1, rev_moi, NGAY) part.SetUserAttribute("NGAY_REV", -1, ngay, NGAY) part.SetUserAttribute("NGUOI_SUA", -1, nguoi, NGAY) n = part.GetUserAttributeSize("LICH_SU_REV", KIEU.String) if part.HasUserAttribute("LICH_SU_REV", KIEU.String, 0) else 0 part.SetUserAttribute("LICH_SU_REV", n, "%s | %s | %s | %s" % (rev_moi, ngay, nguoi, ly_do), NGAY) return rev_cu, rev_moi def main(): session = NXOpen.Session.GetSession() lw = session.ListingWindow lw.Open() part = session.Parts.Work if part is None: return session.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Tang REV") cu, moi = phat_hanh_rev_moi(part, "Doi dung sai lo D8") lw.WriteLine("Revision: %s -> %s" % (cu or "(chưa có)", moi)) if __name__ == "__main__": main()Giải thích code
tang_revxử lý cả trường hợp Z -> AA giống cách đánh số cột Excel.getpass.getuser()lấy tên đăng nhập Windows, không cần người dùng nhập.- Lịch sử lưu dạng mảng, mỗi phần tử là một dòng phân cách bằng ký tự
|để dễ tách khi báo cáo.
Lỗi thường gặp
- Quy trình phát hành chính thức nên đi qua PDM; script này phù hợp cho môi trường file thuần.
- Tăng revision hai lần liên tiếp do chạy nhầm làm nhảy mất một revision; thêm bước xác nhận.
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.