NX Lab

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

  1. 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… Quản lý revision: tăng REV từ A lên B, ghi…

    Các bước thực hiện

    1. Đọc REV hiện tại. Mặc định A nếu chưa có.
    2. Tăng revision. A->B->C, sau Z là AA.
    3. Ghi REV, NGAY_REV, NGUOI_SUA. SetUserAttribute.
    4. Thêm vào lịch sử. Thuộc tính mảng LICH_SU_REV.
    5. 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_rev xử 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.