#include "SendSap.h" void recurZYGGSAP(tag_t line, tag_t rev, tag_t partRev, char* groupName, map& gy_meops, vector& needTCM_meops, char* now, vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST>& proclist, vector& bomISExist, vector matr, char* codeRemark, map& by_materials, int icsId, string& errMsg, vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST>& list, map& material_revs, bool isZt) { char* os = NULL, *item_id = NULL, *object_name = NULL; string buff = ""; ITKCALL(AOM_ask_value_string(rev, "object_string", &os)); tag_t designRev = getZYDesign(rev), meops = NULLTAG; if (designRev != NULLTAG) { meops = getProcessTag(designRev, groupName); } if (partRev != NULLTAG) { readBopInfo1YH(meops, partRev, true, gy_meops, needTCM_meops, groupName, now, proclist); } int cnt = 0; bool isLj = false; if (!isHaveBOMView(designRev)) { isLj = true; } if (partRev == NULLTAG) { partRev = getBOMPart(line, groupName); } char *type = NULL; ITKCALL(WSOM_ask_object_type2(rev, &type)); if (tc_strcmp(type, "ZT2_Design3DRevision") == 0 && partRev == NULLTAG) { char *zt2_Diagram = NULL; ITKCALL(AOM_ask_value_string(rev, "zt2_Diagram", &zt2_Diagram)); if (tc_strcmp(zt2_Diagram, "Y") == 0 || tc_strcmp(zt2_Diagram, "是") == 0) { return; } } int c_line_count = 0; tag_t *c_line_tags = NULL; ITKCALL(BOM_line_ask_all_child_lines(line, &c_line_count, &c_line_tags)); char *zt2_Source = NULL; ITKCALL(AOM_UIF_ask_value(rev, "zt2_Source", &zt2_Source)); boolean equals = (zt2_Source && (tc_strcmp(zt2_Source, "外购") == 0 || tc_strcmp(zt2_Source, "S2") == 0)); if (partRev != NULLTAG) { if (meops == NULLTAG) { if (!equals && c_line_count > 0) { tag_t mrProcess = getMrProcess(groupName); if (mrProcess != NULLTAG) { readBopInfo1YH(mrProcess, partRev, true, gy_meops, needTCM_meops, groupName, now, proclist); } } } else { readBopInfo1YH(meops, partRev, true, gy_meops, needTCM_meops, groupName, now, proclist); } } if (equals) { if (partRev == NULLTAG) return; if (isHaveBOMView(partRev)) { tag_t window = NULLTAG, bomline = NULLTAG; ITKCALL(BOM_create_window(&window)); ITKCALL(BOM_set_window_top_line(window, NULL, partRev, NULLTAG, &bomline)); recurZYGGSAP(bomline, partRev, partRev, groupName, gy_meops, needTCM_meops, now, proclist, bomISExist, matr, codeRemark, by_materials, icsId, errMsg, list, material_revs, isZt); ITKCALL(BOM_close_window(window)); } return; } if (partRev != NULLTAG) { char *zt2_MaterialNo = NULL; ITKCALL(AOM_ask_value_string(partRev, "zt2_MaterialNo", &zt2_MaterialNo)); if (find(bomISExist.begin(), bomISExist.end(), zt2_MaterialNo) != bomISExist.end()) { log("%s 已存在,过滤", zt2_MaterialNo); return; } else { bomISExist.push_back(zt2_MaterialNo); } } if (c_line_count == 0) { if (tc_strcmp(type, "ZT2_Design3DRevision") == 0 && tc_strcmp(zt2_Source, "自制") == 0 && tc_strcmp(groupName, "M035") != 0) { tag_t comp = NULLTAG; map materials; if (matr.size() > 1 && tc_strcmp(matr[1].c_str(), "DB") == 0) { comp = getClassPartDB(rev, groupName, by_materials, materials, buff); } else { comp = getClassPart(rev, codeRemark, icsId, by_materials, buff); } char *sortno = NULL; boolean isHaveProcess = false; if (meops != NULLTAG) { int e_line_count = 0; tag_t window = NULLTAG, bomline = NULLTAG, *meop_line_tags = NULL; ITKCALL(BOM_create_window(&window)); ITKCALL(BOM_set_window_top_line(window, NULL, meops, NULLTAG, &bomline)); ITKCALL(BOM_line_ask_all_child_lines(bomline, &e_line_count, &meop_line_tags)); for (int i = 0; i < e_line_count; i++) { char *bl_sequence_no = NULL; ITKCALL(AOM_UIF_ask_value(meop_line_tags[i], "zt2_MaterialNo", &bl_sequence_no)); if (tc_strcmp(bl_sequence_no, "10") == 0) { tag_t rev2 = NULLTAG; ITKCALL(AOM_ask_value_tag(meop_line_tags[i], "bl_line_object", &rev2)); ITKCALL(AOM_UIF_ask_value(rev2, "zt2_ClassificationCode", &sortno)); break; } isHaveProcess = true; } ITKCALL(BOM_close_window(window)); } if (!sortno || tc_strlen(sortno) == 0) { ITKCALL(AOM_ask_value_string(line, "ZT2_ClassificationNo", &sortno)); } log("工序编码 =>%s", sortno); _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_HEAD head; if (partRev != NULLTAG) { char *zt2_MaterialNo = NULL, *zt2_WBSNo = NULL, *zt2_unit = NULL; ITKCALL(AOM_UIF_ask_value(partRev, "zt2_MaterialNo", &zt2_MaterialNo)); log("zt2_MaterialNo ==>%s", zt2_MaterialNo); ITKCALL(AOM_UIF_ask_value(partRev, "zt2_WBSNo", &zt2_WBSNo)); tag_t item = NULLTAG; ITKCALL(ITEM_ask_item_of_rev(partRev, &item)); ITKCALL(AOM_ask_value_string(item, "zt2_unit", &zt2_unit)); //char* unit = getUnti(zt2_unit); log("str = [%s] \n", zt2_unit); head.PSPNR = zt2_WBSNo; head.MATNR = zt2_MaterialNo; head.BMEIN = zt2_unit; } head.STLAN = (char*)"1"; head.STLAL = (char*)"1"; head.BMENG = (char*)"1"; head.WERKS = groupName; head.DATUV = now; char* parnetUid; ITK__convert_tag_to_uid(partRev, &parnetUid); head.STKTX = parnetUid; //inCcpMap[parnetUid] = ccpMaterialMap; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM* items_items = new _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM[1]; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS items; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM items_item; items_item.DATUV = now; items_item.POSTP = (char*)"L"; items_item.POSNR = "0010"; if (!isLj) { if (!isHaveProcess) { buff.append(os).append("缺少工艺路线\\n"); } else if (!sortno || tc_strlen(sortno) == 0) { char* mos = NULL; ITKCALL(AOM_ask_value_string(meops, "object_string", &mos)); buff.append("请维护").append(mos).append("工艺路线的工序编码\\n"); } } if (comp != NULLTAG) { tag_t crev = NULLTAG; ITKCALL(ITEM_ask_latest_rev(comp, &crev)); ITKCALL(AOM_ask_value_string(crev, "object_string", &os)); log("原材料 =>%s", os); //tag_t item2; char *zt2_MaterialNo2 = NULL, *zt2_unit2 = NULL; ITKCALL(AOM_UIF_ask_value(crev, "zt2_MaterialNo", &zt2_MaterialNo2)); if (!zt2_MaterialNo2 || tc_strlen(zt2_MaterialNo2) == 0) { buff.append(os).append("物料号为空;"); } //ITKCALL(ITEM_ask_item_of_rev(comp, &item2)); ITKCALL(AOM_ask_value_string(comp, "zt2_unit", &zt2_unit2)); items_item.IDNRK = zt2_MaterialNo2; //char* unit22 = getUnti(zt2_unit2); items_item.MEINS = zt2_unit2; char *menge = NULL; menge = (char*)MEM_alloc((16 + 1) * sizeof(char)); if (matr.size() > 1 && tc_strcmp(matr[1].c_str(), "DB") == 0) { char *zt2_MaterialMark = NULL; ITKCALL(AOM_UIF_ask_value(rev, "zt2_MaterialMark", &zt2_MaterialMark)); if (materials.count(zt2_MaterialMark) > 0) { tc_strcpy(menge, getZYSAPMENGE2(materials[zt2_MaterialMark], rev, line, true, errMsg)); } else { tc_strcpy(menge, getZYSAPMENGE(rev, crev, line, true, codeRemark, errMsg)); } } else { tc_strcpy(menge, getZYSAPMENGE(rev, crev, line, true, codeRemark, errMsg)); } items_item.MENGE = menge; //MEM_free(menge); } items_item.SORTF = sortno; items_item.POTX1 = ""; items_items[0] = items_item; items.ITEM = items_items; items.__sizeITEM = 1;/**/ _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST list1; list1.HEAD = head; //log("list1.HEAD %s ", list1.HEAD.BMEIN); list1.ITEMS = items; log("list %zd ", list.size()); list.push_back(list1); } return; } _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_HEAD head; if (partRev != NULLTAG) { char *zt2_MaterialNo = NULL, *zt2_WBSNo = NULL, *zt2_unit2 = NULL; ITKCALL(AOM_UIF_ask_value(partRev, "zt2_WBSNo", &zt2_WBSNo)); tag_t item = NULLTAG; ITKCALL(ITEM_ask_item_of_rev(partRev, &item)); ITKCALL(AOM_ask_value_string(item, "zt2_unit", &zt2_unit2)); char* unit = getUnti(zt2_unit2); log("unit = %s > %s", zt2_unit2, unit); ITKCALL(AOM_UIF_ask_value(partRev, "zt2_MaterialNo", &zt2_MaterialNo)); head.PSPNR = zt2_WBSNo; head.MATNR = zt2_MaterialNo; head.BMEIN = zt2_unit2; } head.STLAN = (char*)"1"; head.STLAL = (char*)"1"; head.BMENG = (char*)"1"; head.WERKS = groupName; head.DATUV = now; char* parnetUid; ITK__convert_tag_to_uid(rev, &parnetUid); head.STKTX = parnetUid; string msg; msg.append(os).append(":").append(buff); log("buff ===>%s", msg.c_str()); if (buff.length() > 0 && tc_strstr(errMsg.c_str(), msg.c_str()) == NULL) { errMsg.append("\\n").append(msg); } _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM* items_items = new _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM[c_line_count]; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS items; for (int i = 0; i < c_line_count; i++) { buff = ""; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST_ITEMS_ITEM items_item; tag_t line2 = c_line_tags[i], rev2; ITKCALL(AOM_ask_value_tag(line2, "bl_line_object", &rev2)); tag_t item2, partRev2 = getBOMPart(line2, groupName); ITKCALL(ITEM_ask_item_of_rev(rev2, &item2)); char *type2 = NULL, *zt2_MaterialNo = NULL, *zt2_unit = NULL, *zt2_State = NULL, *bl_sequence_no = NULL, *ZT2_ClassificationNo = NULL, *ZT2_Remark = NULL, *os2 = NULL, *zt2_SapState = NULL; ITKCALL(WSOM_ask_object_type2(rev2, &type2)); if (tc_strcmp(type2, "ZT2_Design3DRevision") == 0) { if (partRev2 == NULLTAG) { char *zt2_Diagram = NULL; ITKCALL(AOM_ask_value_string(rev2, "zt2_Diagram", &zt2_Diagram)); if (tc_strcmp(zt2_Diagram, "Y") == 0 || tc_strcmp(zt2_Diagram, "是") == 0) { continue; } } } if (partRev2 != NULLTAG) { ITKCALL(AOM_UIF_ask_value(partRev2, "zt2_MaterialNo", &zt2_MaterialNo)); ITKCALL(AOM_ask_value_string(item2, "zt2_unit", &zt2_unit)); char* unit22 = getUnti(zt2_unit); items_item.IDNRK = zt2_MaterialNo; //char* unit = unit22; items_item.MEINS = unit22; ITKCALL(AOM_UIF_ask_value(partRev2, "zt2_State", &zt2_State)); if (tc_strcmp(zt2_State, "封存") == 0 || tc_strcmp(zt2_State, "D1") == 0) { buff.append("物料:").append(zt2_MaterialNo).append("已封存,无法传递SAP"); } } ITKCALL(AOM_UIF_ask_value(line2, "bl_sequence_no", &bl_sequence_no)); ITKCALL(AOM_UIF_ask_value(line2, "ZT2_ClassificationNo", &ZT2_ClassificationNo)); ITKCALL(AOM_UIF_ask_value(line2, "ZT2_Remark", &ZT2_Remark)); ITKCALL(AOM_ask_value_string(rev2, "object_string", &os2)); ITKCALL(AOM_UIF_ask_value(rev2, "zt2_SapState", &zt2_SapState)); items_item.DATUV = now; items_item.POSTP = (char*)"L"; items_item.POSNR = bl_sequence_no; char* zysapmenge2 = NULL; zysapmenge2 = (char*)MEM_alloc((16 + 1) * sizeof(char)); tc_strcpy(zysapmenge2, getZYSAPMENGE(rev2, NULLTAG, line2, false, codeRemark, buff)); items_item.MENGE = zysapmenge2; items_item.SORTF = ZT2_ClassificationNo; if (!ZT2_ClassificationNo || tc_strlen(ZT2_ClassificationNo) == 0) { buff.append("BOM行缺少投料信息;"); } items_item.POTX1 = ZT2_Remark; msg.append(os2).append("(父项:").append(os).append("):").append(buff); log("buff ===>%s", buff.c_str()); if (buff.length() > 0 && tc_strstr(errMsg.c_str(), msg.c_str()) == NULL) { errMsg.append("\\n").append(msg); } if (tc_strcmp(zt2_SapState, "已传") == 0 && isZt) { continue; } if (zt2_MaterialNo && tc_strlen(zt2_MaterialNo) > 0) { material_revs[zt2_MaterialNo] = partRev2; } recurZYGGSAP(line2, rev2, partRev2, groupName, gy_meops, needTCM_meops, now, proclist, bomISExist, matr, codeRemark, by_materials, icsId, errMsg, list, material_revs, isZt); } items.ITEM = items_items; items.__sizeITEM = c_line_count; _ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST list1; list1.HEAD = head; log("list1.HEAD %s ", list1.HEAD.BMEIN); list1.ITEMS = items; list.push_back(list1); } void SAPZYGGOperation(tag_t target, char* groupName, char* now, char* code, char* wbs, char* userName, char* projectName) { log("************** SAPZYGGOperation **************"); string errMsgBuf = ""; int pref_cnt = 0; char **urls = NULL; ITKCALL(PREF_ask_char_values("CHINT_BomUrl_YB", &pref_cnt, &urls)); if (pref_cnt < 3) { errMsgBuf.append("CHINT_BomUrl_YB首选项配置不正确\\n"); // string updateSum = "update CHINT_BOM_TO_SAP_SUM set \"DATASTATUS\" = 'CHINT_BomUrl_YB首选项配置不正确' ,SAPRESULT = 'PLM检查未通过',PLMRESULT = '已发送飞书通知' where code = '%s' "; char selectRxfs[800]; string timel; sprintf(selectRxfs, updateSum.c_str(), code); log("selectRecord2 ===> %s\n", selectRxfs); ExecuteSQLNoInputParam(selectRxfs); ExecuteSQLNoInputParam((char*)"commit"); //错误数据已发送飞书提醒 sendNotice(code, errMsgBuf, wbs, groupName, userName, projectName); return; } pref_cnt = 0; char **pref = NULL; string codeRemark; vector matr; ITKCALL(PREF_ask_char_values("CHINT_ORG_TechnologyClassification", &pref_cnt, &pref)); for (int i = 0; i < pref_cnt; i++) { vector v1, v2; Split(pref[i], ":", v1); if (tc_strcmp(v1[0].c_str(), groupName) != 0) { continue; } Split(v1[1], ";", v2); if (v2.size() == 4) { codeRemark = v2[2]; Split(v2[2], "\\", matr); } else if (v2.size() > 2) { codeRemark = v2[2]; } } int icsId = getIcsId((char*)codeRemark.c_str(), "材料标记"), cnt = 0; tag_t* ZT2_FactoryNumber = NULLTAG, designRev = NULLTAG; ITKCALL(AOM_ask_value_tags(target, "ZT2_FactoryNumber", &cnt, &ZT2_FactoryNumber)); if (cnt > 0) { int n_referencers = 0; int* levels = NULL; tag_t* referencers = NULLTAG; char** relations = NULL; ITKCALL(WSOM_where_referenced2(ZT2_FactoryNumber[0], 1, &n_referencers, &levels, &referencers, &relations)); for (int i = 0; i < n_referencers; i++) { if (tc_strcmp(relations[i], "ZT2_FactoryNumber") == 0) { char *type = NULL; ITKCALL(WSOM_ask_object_type2(referencers[i], &type)); if (tc_strcmp(type, "ZT2_Design3DRevision") == 0) { designRev = referencers[i]; break; } } } } if (designRev == NULLTAG) { designRev = target; } char* os = NULL; ITKCALL(AOM_ask_value_string(designRev, "object_string", &os)); log("designRev==>%s", os); map> mapList; vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist; map gy_meops; //避免重复工艺路线 vector needTCM_meops;//没用上 tag_t window = NULLTAG, bomline = NULLTAG; ITKCALL(BOM_create_window(&window)); ITKCALL(BOM_set_window_top_line(window, NULL, designRev, NULLTAG, &bomline)); tag_t partRev = getBOMPart(bomline, groupName); tag_t meops = getProcessTag(designRev, groupName); if (partRev != NULLTAG && meops != NULLTAG) { readBopInfo1YH(meops, partRev, true, gy_meops, needTCM_meops, groupName, now, proclist); } string errMsg = ""; vector bomISExist; map by_materials; vector<_ns1__DT_USCOREBOM_USCORES4_USCOREREQ_LIST> list; map material_revs; recurZYGGSAP(bomline, designRev, partRev, groupName, gy_meops, needTCM_meops, now, proclist, bomISExist, matr, (char*)codeRemark.c_str(), by_materials, icsId, errMsg, list, material_revs, false); //log("errMsg =>%s", errMsg.c_str()); string logmsg = "errMsg =>"; //log2(logmsg.append(errMsg)); logmsg.append(errMsg); printf("%s\n", logmsg.c_str()); info(logmsg.c_str()); if (errMsg.length() > 0) { errMsgBuf.append("BOM异常:\\n").append(errMsg); string updateSum = "update CHINT_BOM_TO_SAP_SUM set \"DATASTATUS\" = '数据检查有问题' ,SAPRESULT = 'PLM检查未通过',PLMRESULT = '已发送飞书通知' where code = '%s' "; char selectRxfs[800]; string timel; sprintf(selectRxfs, updateSum.c_str(), code); log("selectRecord2 ===> %s\n", selectRxfs); ExecuteSQLNoInputParam(selectRxfs); ExecuteSQLNoInputParam((char*)"commit"); //错误数据已发送飞书提醒 sendNotice(code, errMsgBuf, wbs, groupName, userName, projectName); return; } char *zt2_BOMScheme = NULL; ITKCALL(AOM_UIF_ask_value(target, "zt2_BOMScheme", &zt2_BOMScheme)); if (list.size() > 0 && strcmp(zt2_BOMScheme, "汇总") == 0) { char* zt2_Quantity; ITKCALL(AOM_ask_value_string(target, "zt2_Quantity", &zt2_Quantity)); if (strstr(zt2_Quantity, "") != 0) { int quantity = atoi(zt2_Quantity); if (quantity == 0) { quantity = 1; } int size = list.size(); char* s = new char[10]; _itoa(quantity, s, 10); list[size - 1].HEAD.BMENG = s; //head.BMENG = (char*)to_string(quantity).c_str(); } } if (list.size() > 0) { //logBomMsg(list); mapList[target] = list; } if (proclist.size() > 0) { string sendMsg; logProcessMsg(proclist);// vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist; sendProcess(proclist, sendMsg, urls[1]);//proclists.push_back(proclist);//sendProcess(proclist); } ITKCALL(BOM_close_window(window)); if (mapList.size() > 0) { //传递BOM //logBomMsg(list); //sendBom(list, sendMsg); char* revUid = NULL, *zt2_MaterialNo = NULL; ITKCALL(AOM_ask_value_string(target, "zt2_MaterialNo", &zt2_MaterialNo)); ITK__convert_tag_to_uid(target, &revUid); vector ccpMaterialMap; ccpMaterialMap.push_back(zt2_MaterialNo); map> inCcpMap;//记录单元对应的产成品物料编码 inCcpMap[revUid] = ccpMaterialMap; startSplitSend(groupName, mapList, code, wbs, inCcpMap, urls[2]); //sendBom(list); } else { string time1 = getPlmTime(code); string updateSum = "update CHINT_BOM_TO_SAP_SUM set datastatus = '没有合法BOM',organizationaltime = '%s',taskstauts = '组织完成',PLMFINISHTIME = SYSDATE where code = '%s' "; char selectRxfs[800]; string timel; sprintf(selectRxfs, updateSum.c_str(), time1.c_str(), code); log("selectRecord2 ===> %s\n", selectRxfs); ExecuteSQLNoInputParam(selectRxfs); ExecuteSQLNoInputParam((char*)"commit"); } } void getTopZzItem(tag_t rev, map& wbsList) { int n_parents = 0; int* levels; tag_t* parents; ITKCALL(PS_where_used_all(rev, 1, &n_parents, &levels, &parents)); if (n_parents == 0) { char* zt2_WBSNo = NULL; ITKCALL(AOM_ask_value_string(rev, "zt2_WBSNo", &zt2_WBSNo)); if (wbsList.count(zt2_WBSNo) == 0) wbsList[zt2_WBSNo] = rev; } else { for (int i = 0; i < n_parents; i++) { if(isTypeOf(parents[i], "ItemRevision")) getTopZzItem(parents[i], wbsList); } } } void SAPGYGGOperation(tag_t target, char* groupName, char* now, char* code, char* wbs, char* userName, char* projectName) { log("************** SAPZYGGOperation **************"); string errMsgBuf = ""; int pref_cnt = 0; char **urls = NULL; ITKCALL(PREF_ask_char_values("CHINT_BomUrl_YB", &pref_cnt, &urls)); if (pref_cnt < 3) { errMsgBuf.append("CHINT_BomUrl_YB首选项配置不正确\\n"); // string updateSum = "update CHINT_BOM_TO_SAP_SUM set \"DATASTATUS\" = 'CHINT_BomUrl_YB首选项配置不正确' ,SAPRESULT = 'PLM检查未通过',PLMRESULT = '已发送飞书通知' where code = '%s' "; char selectRxfs[800]; string timel; sprintf(selectRxfs, updateSum.c_str(), code); log("selectRecord2 ===> %s\n", selectRxfs); ExecuteSQLNoInputParam(selectRxfs); ExecuteSQLNoInputParam((char*)"commit"); //错误数据已发送飞书提醒 sendNotice(code, errMsgBuf, wbs, groupName, userName, projectName); return; } pref_cnt = 0; char **pref = NULL; string codeRemark; vector matr; ITKCALL(PREF_ask_char_values("CHINT_ORG_TechnologyClassification", &pref_cnt, &pref)); for (int i = 0; i < pref_cnt; i++) { vector v1, v2; Split(pref[i], ":", v1); if (tc_strcmp(v1[0].c_str(), groupName) != 0) { continue; } Split(v1[1], ";", v2); if (v2.size() == 4) { codeRemark = v2[2]; Split(v2[2], "\\", matr); } else if (v2.size() > 2) { codeRemark = v2[2]; } } map> mapList; vector <_ns1__DT_USCOREPROCESSROUTE_USCORES4_USCOREREQ_LIST> proclist; map gy_meops; //避免重复工艺路线 vector needTCM_meops;//没用上 tag_t window = NULLTAG, bomline = NULLTAG; ITKCALL(BOM_create_window(&window)); ITKCALL(BOM_set_window_top_line(window, NULL, target, NULLTAG, &bomline)); tag_t partRev = getBOMPart(bomline, groupName); tag_t meops = getProcessTag(target, groupName); if (partRev != NULLTAG && meops != NULLTAG) { readBopInfo1YH(meops, partRev, true, gy_meops, needTCM_meops, groupName, now, proclist); } map wbsList; getTopZzItem(target, wbsList); ITKCALL(BOM_close_window(window));//BOM_close_window //ProcessMemoryTree(); }