BOM是英文Bill of Material的缩写,中文翻译为“物料清单”,也称为产品结构表或产品结构树。它是计算机可以识别的产品结构数据文件,也是ERP的主导文件。BOM使系统识别产品结构,也是联系与沟通企业各项业务的纽带。ERP系统中的BOM的种类主要包括5类:缩排式BOM、汇总的BOM、反查用BOM、成本BOM、计划BOM。采用计算机辅助企业生产管理,首先要使计算机能够读出企业所制造的产品构成和所有要涉及的物料,为了便于计算机识别,必须把用图示表达的产品结构转化成某种数据格式,这种以数据格式来描述产品结构的文件就是物料清单,即是BOM。在某些工业领域,可能称为“配方”、“要素表”或其它名称。
当前打开一个Part文件,其树结构如下:
import win32com.client
import pywintypes # 导入pywintypes模块
# 启动CATIA应用
catia = win32com.client.Dispatch('CATIA.Application')
catia.visible=1
# 连接excel,同catia
excel=win32com.client.Dispatch('excel.application')
excel.visible=True
try:# 新建一个工作簿,此处add方法不能加括号,a小写book = excel.workbooks.add# 获取第一个工作表sheet = book.sheets(1)# 重命名工作表sheet.name = 'BOM'# 初始化表头sheet.cells(1, 1).value = '序号'sheet.cells(1, 2).value = '层级'sheet.cells(1, 3).value = '零件号'sheet.cells(1, 4).value = '数量'sheet.cells(1, 5).value = '实例名'# 函数,计算数量def calcnum(prd):num = 0for pr in prd.parent:if pr.partnumber == prd.partnumber:num += 1return num# 函数,读取节点的信息def readinfo(prd):global rowpn = prd.partnumberinstname = prd.namenum = (level == 0) and 1 or calcnum(prd)# 将信息写到Excel中sheet.cells(row, 1).value = row - 1sheet.cells(row, 2).value = levelsheet.cells(row, 3).value = pnsheet.cells(row, 4).value = numsheet.cells(row, 5).value = instnamerow += 1# 定义遍历函数def myloop(prds):global level# 开始遍历level += 1current_pns[level] = []for prd in prds:# 多个实例仅读取一次if not prd.partnumber in current_pns[level]:# 读取一级子节点信息readinfo(prd)current_pns[level].append(prd.partnumber)# 如果有二级子节点,递归调用自身if len(prd.products) > 0:myloop(prd.products)current_pns[level].clear()level -= 1# 初始化对象rootprd = catia.activedocument.productcurrent_pns = {}row = 2level = 0# 写入根节点信息readinfo(rootprd)# 递归调用根节点的productsmyloop(rootprd.products)
except pywintypes.com_error as e:# 如果出现错误,可能是因为没有活动文档print("无法获取活动文档,请确保CATIA应用程序中已有打开的文档。")print(e)
Excel格式BOM如下: