FUNCTION z_rfc_plm_007. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(P_MODE) TYPE CHAR1 DEFAULT 'N' *" VALUE(P_SYSTEM) TYPE CHAR4 DEFAULT 'PLM' *" VALUE(P_UNAME) TYPE UNAME DEFAULT SY-UNAME *" VALUE(P_NAME1) TYPE CHAR12 OPTIONAL *" TABLES *" IT_PLM007 STRUCTURE ZRFCS_PLM007 OPTIONAL *"---------------------------------------------------------------------- DATA:it_bomgroup LIKE bapi1080_bgr_c OCCURS 0 WITH HEADER LINE, it_variants LIKE bapi1080_bom_c OCCURS 0 WITH HEADER LINE, it_items LIKE bapi1080_itm_c OCCURS 0 WITH HEADER LINE, it_matrel LIKE bapi1080_mbm_c OCCURS 0 WITH HEADER LINE, it_itemas LIKE bapi1080_rel_itm_bom_c OCCURS 0 WITH HEADER LINE, it_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE, it_subitems LIKE bapi1080_sui_c OCCURS 0 WITH HEADER LINE, it_subitemas LIKE bapi1080_rel_sui_itm_c OCCURS 0 WITH HEADER LINE. DATA: lv_meins TYPE mara-meins, lv_potx1 TYPE potx1, lv_zmessage TYPE char255, lv_potx2 TYPE potx2, lv_matnr TYPE char18, lv_end TYPE char1, lv_begin TYPE char1, lv_ztype TYPE char1, lv_len TYPE p, lv_tabixu TYPE sy-tabix. DATA: json_ser TYPE REF TO cl_trex_json_serializer, json_des TYPE REF TO cl_trex_json_deserializer. DATA: jsonstr TYPE string. DATA: lt_zrfc_logs TYPE TABLE OF zrfc_logs, ls_zrfc_logs TYPE zrfc_logs. DATA: lv_tabix TYPE sy-tabix. DATA: date(10) TYPE c. DATA t_stpo TYPE STANDARD TABLE OF stpo_api02 WITH HEADER LINE. DATA t_stpo2 TYPE STANDARD TABLE OF stpo_api02 WITH HEADER LINE. CREATE OBJECT json_ser EXPORTING data = it_plm007[]. CALL METHOD json_ser->serialize. CALL METHOD json_ser->get_data RECEIVING rval = jsonstr. ls_zrfc_logs-funcname = 'Z_RFC_PLM_007'. ls_zrfc_logs-zsystem = p_system. ls_zrfc_logs-uname = p_uname. ls_zrfc_logs-zname1 = p_name1. ls_zrfc_logs-erdat = sy-datum. ls_zrfc_logs-uzeit = sy-uzeit. * ls_zrfc_logs-ep_type = ep_type. * ls_zrfc_logs-ep_message = ep_message. ls_zrfc_logs-jsonstr1 = jsonstr. MODIFY zrfc_logs FROM ls_zrfc_logs. IF sy-subrc EQ 0. COMMIT WORK AND WAIT. ELSE. ROLLBACK WORK. ENDIF. SORT it_plm007[] BY matnr werks stlan. LOOP AT it_plm007. CLEAR: lv_begin,lv_end. AT NEW stlal. lv_begin = 'X'. ENDAT. AT END OF stlal. lv_end = 'X'. ENDAT. CLEAR: lv_matnr. lv_matnr = |{ it_plm007-matnr ALPHA = IN }|. "增加前置0 it_plm007-stlal = |{ it_plm007-stlal ALPHA = IN }|. "增加前置0 it_plm007-posnr = |{ it_plm007-posnr ALPHA = IN }|. it_plm007-matnr = lv_matnr. IF lv_begin = 'X'. SELECT COUNT(*) FROM mast WHERE werks EQ it_plm007-werks "工厂 AND matnr EQ it_plm007-matnr "物料 AND stlan EQ it_plm007-stlan "BOM用途 AND stlal EQ it_plm007-stlal."可选的BOM IF sy-subrc EQ 0. *已存在BOM,则修改 lv_ztype = 'U'. ELSE. *不存在BOM,则创建 lv_ztype = 'C'. ENDIF. ENDIF. IF lv_ztype EQ 'U'. *已存在BOM,则修改 IF lv_begin EQ 'X'. date = it_plm007-datuv. CLEAR: t_stpo , t_stpo[]. CASE sy-mandt. WHEN 886. CALL FUNCTION 'CSAP_MAT_BOM_OPEN' DESTINATION 'S4PCLNT886' EXPORTING material = it_plm007-matnr plant = it_plm007-werks bom_usage = it_plm007-stlan alternative = it_plm007-stlal "'01' valid_from = date TABLES t_stpo = t_stpo[] EXCEPTIONS error = 1 OTHERS = 2. WHEN 520. CALL FUNCTION 'CSAP_MAT_BOM_OPEN' DESTINATION 'S4DCLNT520' EXPORTING material = it_plm007-matnr plant = it_plm007-werks bom_usage = it_plm007-stlan alternative = it_plm007-stlal "'01' valid_from = date TABLES t_stpo = t_stpo[] EXCEPTIONS error = 1 OTHERS = 2. WHEN 668. CALL FUNCTION 'CSAP_MAT_BOM_OPEN' DESTINATION 'S4DCLNT668' EXPORTING material = it_plm007-matnr plant = it_plm007-werks bom_usage = it_plm007-stlan alternative = it_plm007-stlal "'01' valid_from = date TABLES t_stpo = t_stpo[] EXCEPTIONS error = 1 OTHERS = 2. WHEN OTHERS. CALL FUNCTION 'CSAP_MAT_BOM_OPEN' EXPORTING material = it_plm007-matnr plant = it_plm007-werks bom_usage = it_plm007-stlan alternative = it_plm007-stlal "'01' valid_from = date TABLES t_stpo = t_stpo[] EXCEPTIONS error = 1 OTHERS = 2. ENDCASE. LOOP AT t_stpo ASSIGNING FIELD-SYMBOL(<ls_stpo>). CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = <ls_stpo>-component IMPORTING output = <ls_stpo>-component. ENDLOOP. IF t_stpo[] IS INITIAL. it_plm007-ztype = 'E'. it_plm007-zmessage = '打开BOM失败'. ENDIF. ENDIF. * READ TABLE t_stpo INTO DATA(ls_stpo) WITH KEY item_no = it_plm007-posnr * component = it_plm007-idnrk. * IF sy-subrc EQ 0. * lv_tabix = sy-tabix. * LOOP AT t_stpo FROM sy-tabix. * IF t_stpo-item_no NE it_plm007-posnr OR t_stpo-component NE it_plm007-idnrk. * EXIT. * ENDIF. * * t_stpo-item_no = |{ it_plm007-posnr ALPHA = IN }|."it_plm007-posnr."'0010'.BOM项目号 * t_stpo-item_categ = it_plm007-postp. * t_stpo-component = it_plm007-idnrk. * CLEAR:lv_potx1,lv_potx2. * lv_len = strlen( it_plm007-potx1 ). * IF lv_len <= 40. * lv_potx1 = it_plm007-potx1. * ELSE. * lv_potx1 = it_plm007-potx1+0(40). * lv_potx2 = it_plm007-potx1+40(40). * ENDIF. * t_stpo-item_text1 = lv_potx1. "BOM项目文本1 * t_stpo-item_text2 = lv_potx2. "BOM项目文本2 * t_stpo-comp_qty = it_plm007-menge. "组件数量 * CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT' * EXPORTING * input = it_plm007-meins * IMPORTING * output = t_stpo-comp_unit * EXCEPTIONS * unit_not_found = 1 * OTHERS = 2. * IF t_stpo-comp_unit CA '**'. * t_stpo-comp_unit = it_plm007-meins. * ENDIF. * ** t_stpo-comp_unit = it_plm007-meins."组件基本计量单位 * t_stpo-comp_scrap = it_plm007-ausch. "组件报废百分比 * t_stpo-mat_provis = it_plm007-beikz."物料供应标识符 * t_stpo-ai_strateg = it_plm007-alpst. "替代项目:策略 * t_stpo-ai_prio = it_plm007-alprf. "替代项目:评比定单 * t_stpo-ai_group = it_plm007-alpgr. "替代项目:组 * t_stpo-usage_prob = it_plm007-ewahr. "使用可能性按% * t_stpo-follow_grp = it_plm007-nfgrp. "后继组 * t_stpo-discon_grp = it_plm007-nfeag. "中止组 * t_stpo-rel_cost = it_plm007-sanka."成本核算标识相关 ** t_stpo-CO_PRODUCT = it_plm007-KZKUP1. * t_stpo-valid_from = sy-datum."it_plm007-datuv."it_plm007-datuv. "有效起始日期 * t_stpo-change_no = it_plm007-aennr. "更改编号 * MODIFY t_stpo[] FROM t_stpo INDEX lv_tabix. * CLEAR: t_stpo. * ENDLOOP. * ELSE. * READ TABLE t_stpo INTO DATA(ls_stpo2) WITH KEY item_no = it_plm007-posnr. * IF sy-subrc EQ 0. * lv_tabix = sy-tabix. * LOOP AT t_stpo FROM sy-tabix. * IF t_stpo-item_no NE it_plm007-posnr OR t_stpo-component NE it_plm007-idnrk. * EXIT. * ENDIF. * * t_stpo-item_no = |{ it_plm007-posnr ALPHA = IN }|."it_plm007-posnr."'0010'.BOM项目号 * t_stpo-item_categ = it_plm007-postp. * t_stpo-component = it_plm007-idnrk. * CLEAR:lv_potx1,lv_potx2. * lv_len = strlen( it_plm007-potx1 ). * IF lv_len <= 40. * lv_potx1 = it_plm007-potx1. * ELSE. * lv_potx1 = it_plm007-potx1+0(40). * lv_potx2 = it_plm007-potx1+40(40). * ENDIF. * t_stpo-item_text1 = lv_potx1. "BOM项目文本1 * t_stpo-item_text2 = lv_potx2. "BOM项目文本2 * t_stpo-comp_qty = it_plm007-menge. "组件数量 * CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT' * EXPORTING * input = it_plm007-meins * IMPORTING * output = t_stpo-comp_unit * EXCEPTIONS * unit_not_found = 1 * OTHERS = 2. * IF t_stpo-comp_unit CA '**'. * t_stpo-comp_unit = it_plm007-meins. * ENDIF. * ** t_stpo-comp_unit = it_plm007-meins."组件基本计量单位 * t_stpo-comp_scrap = it_plm007-ausch. "组件报废百分比 * t_stpo-mat_provis = it_plm007-beikz."物料供应标识符 * t_stpo-ai_strateg = it_plm007-alpst. "替代项目:策略 * t_stpo-ai_prio = it_plm007-alprf. "替代项目:评比定单 * t_stpo-ai_group = it_plm007-alpgr. "替代项目:组 * t_stpo-usage_prob = it_plm007-ewahr. "使用可能性按% * t_stpo-follow_grp = it_plm007-nfgrp. "后继组 * t_stpo-discon_grp = it_plm007-nfeag. "中止组 * t_stpo-rel_cost = it_plm007-sanka."成本核算标识相关 ** t_stpo-CO_PRODUCT = it_plm007-KZKUP1. * t_stpo-valid_from = sy-datum."it_plm007-datuv."it_plm007-datuv. "有效起始日期 * t_stpo-change_no = it_plm007-aennr. "更改编号 * MODIFY t_stpo[] FROM t_stpo INDEX lv_tabix. * CLEAR: t_stpo. * ENDLOOP. * ELSE. * * t_stpo-item_no = |{ it_plm007-posnr ALPHA = IN }|."it_plm007-posnr."'0010'.BOM项目号 * t_stpo-item_categ = it_plm007-postp. * t_stpo-component = it_plm007-idnrk. * CLEAR:lv_potx1,lv_potx2. * lv_len = strlen( it_plm007-potx1 ). * IF lv_len <= 40. * lv_potx1 = it_plm007-potx1. * ELSE. * lv_potx1 = it_plm007-potx1+0(40). * lv_potx2 = it_plm007-potx1+40(40). * ENDIF. * t_stpo-item_text1 = lv_potx1. "BOM项目文本1 * t_stpo-item_text2 = lv_potx2. "BOM项目文本2 * t_stpo-comp_qty = it_plm007-menge. "组件数量 * CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT' * EXPORTING * input = it_plm007-meins * IMPORTING * output = t_stpo-comp_unit * EXCEPTIONS * unit_not_found = 1 * OTHERS = 2. * IF t_stpo-comp_unit CA '**' OR t_stpo-comp_unit EQ ''. * t_stpo-comp_unit = it_plm007-meins. * ENDIF. ** t_stpo-comp_unit = it_plm007-meins."组件基本计量单位 * t_stpo-comp_scrap = it_plm007-ausch. "组件报废百分比 * t_stpo-mat_provis = it_plm007-beikz."物料供应标识符 * t_stpo-ai_strateg = it_plm007-alpst. "替代项目:策略 * t_stpo-ai_prio = it_plm007-alprf. "替代项目:评比定单 * t_stpo-ai_group = it_plm007-alpgr. "替代项目:组 * t_stpo-usage_prob = it_plm007-ewahr. "使用可能性按% * t_stpo-follow_grp = it_plm007-nfgrp. "后继组 * t_stpo-discon_grp = it_plm007-nfeag. "中止组 * t_stpo-rel_cost = it_plm007-sanka."成本核算标识相关 ** t_stpo-CO_PRODUCT = it_plm007-KZKUP1. * t_stpo-valid_from = sy-datum."it_plm007-datuv."it_plm007-datuv. "有效起始日期 * t_stpo-change_no = it_plm007-aennr. "更改编号 * APPEND t_stpo TO t_stpo[]. * CLEAR: t_stpo. * ENDIF. * ENDIF. t_stpo2-item_no = |{ it_plm007-posnr ALPHA = IN }|."it_plm007-posnr."'0010'.BOM项目号 t_stpo2-item_categ = it_plm007-postp. t_stpo2-component = it_plm007-idnrk. CLEAR:lv_potx1,lv_potx2. lv_len = strlen( it_plm007-potx1 ). IF lv_len <= 40. lv_potx1 = it_plm007-potx1. ELSE. lv_potx1 = it_plm007-potx1+0(40). lv_potx2 = it_plm007-potx1+40(40). ENDIF. t_stpo2-item_text1 = lv_potx1. "BOM项目文本1 t_stpo2-item_text2 = lv_potx2. "BOM项目文本2 t_stpo2-comp_qty = it_plm007-menge. "组件数量 CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT' EXPORTING input = it_plm007-meins IMPORTING output = t_stpo2-comp_unit EXCEPTIONS unit_not_found = 1 OTHERS = 2. IF t_stpo2-comp_unit CA '**' OR t_stpo2-comp_unit EQ ''. t_stpo2-comp_unit = it_plm007-meins. ENDIF. * t_stpo2-comp_unit = it_plm007-meins."组件基本计量单位 t_stpo2-comp_scrap = it_plm007-ausch. "组件报废百分比 t_stpo2-mat_provis = it_plm007-beikz."物料供应标识符 t_stpo2-ai_strateg = it_plm007-alpst. "替代项目:策略 t_stpo2-ai_prio = it_plm007-alprf. "替代项目:评比定单 t_stpo2-ai_group = it_plm007-alpgr. "替代项目:组 t_stpo2-usage_prob = it_plm007-ewahr. "使用可能性按% t_stpo2-follow_grp = it_plm007-nfgrp. "后继组 t_stpo2-discon_grp = it_plm007-nfeag. "中止组 t_stpo2-rel_cost = it_plm007-sanka."成本核算标识相关 * t_stpo2-CO_PRODUCT = it_plm007-KZKUP1. t_stpo2-valid_from = sy-datum."it_plm007-datuv."it_plm007-datuv. "有效起始日期 t_stpo2-change_no = it_plm007-aennr. "更改编号 APPEND t_stpo2 TO t_stpo2[]. CLEAR: t_stpo2. IF lv_end EQ 'X'. LOOP AT t_stpo. CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = t_stpo-component IMPORTING output = t_stpo-component. t_stpo-fldelete = 'X'. CASE sy-mandt. WHEN 886. CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN' "维护BOM DESTINATION 'S4PCLNT886' EXPORTING i_stpo = t_stpo EXCEPTIONS error = 1 OTHERS = 2. WHEN 520. CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN' "维护BOM DESTINATION 'S4DCLNT520' EXPORTING i_stpo = t_stpo EXCEPTIONS error = 1 OTHERS = 2. WHEN 668. CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN' "维护BOM DESTINATION 'S4DCLNT668' EXPORTING i_stpo = t_stpo EXCEPTIONS error = 1 OTHERS = 2. WHEN OTHERS. CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN' "维护BOM EXPORTING i_stpo = t_stpo EXCEPTIONS error = 1 OTHERS = 2. ENDCASE. IF sy-subrc NE 0. CALL FUNCTION 'MESSAGE_TEXT_BUILD' EXPORTING msgid = sy-msgid msgnr = sy-msgno msgv1 = sy-msgv1 msgv2 = sy-msgv2 msgv3 = sy-msgv3 msgv4 = sy-msgv4 IMPORTING message_text_output = lv_zmessage. it_plm007-zmessage = |{ it_plm007-zmessage }{ lv_zmessage }|. it_plm007-ztype = 'E'. ROLLBACK WORK. EXIT. ELSE. CALL FUNCTION 'MESSAGE_TEXT_BUILD' EXPORTING msgid = sy-msgid msgnr = sy-msgno msgv1 = sy-msgv1 msgv2 = sy-msgv2 msgv3 = sy-msgv3 msgv4 = sy-msgv4 IMPORTING message_text_output = lv_zmessage. it_plm007-zmessage = |{ it_plm007-zmessage }{ lv_zmessage }|. ENDIF. CLEAR: lv_zmessage,t_stpo. ENDLOOP. LOOP AT t_stpo2. CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = t_stpo2-component IMPORTING output = t_stpo2-component. CASE sy-mandt. WHEN 886. CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN' "维护BOM DESTINATION 'S4PCLNT886' EXPORTING i_stpo = t_stpo2 EXCEPTIONS error = 1 OTHERS = 2. WHEN 520. CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN' "维护BOM DESTINATION 'S4DCLNT520' EXPORTING i_stpo = t_stpo2 EXCEPTIONS error = 1 OTHERS = 2. WHEN 668. CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN' "维护BOM DESTINATION 'S4DCLNT668' EXPORTING i_stpo = t_stpo2 EXCEPTIONS error = 1 OTHERS = 2. WHEN OTHERS. CALL FUNCTION 'CSAP_BOM_ITEM_MAINTAIN' "维护BOM EXPORTING i_stpo = t_stpo2 EXCEPTIONS error = 1 OTHERS = 2. ENDCASE. IF sy-subrc NE 0. CALL FUNCTION 'MESSAGE_TEXT_BUILD' EXPORTING msgid = sy-msgid msgnr = sy-msgno msgv1 = sy-msgv1 msgv2 = sy-msgv2 msgv3 = sy-msgv3 msgv4 = sy-msgv4 IMPORTING message_text_output = lv_zmessage. it_plm007-zmessage = |{ it_plm007-zmessage }{ lv_zmessage }|. it_plm007-ztype = 'E'. ROLLBACK WORK. EXIT. ELSE. CALL FUNCTION 'MESSAGE_TEXT_BUILD' EXPORTING msgid = sy-msgid msgnr = sy-msgno msgv1 = sy-msgv1 msgv2 = sy-msgv2 msgv3 = sy-msgv3 msgv4 = sy-msgv4 IMPORTING message_text_output = lv_zmessage. it_plm007-zmessage = |{ it_plm007-zmessage }{ lv_zmessage }|. ENDIF. CLEAR: lv_zmessage,t_stpo2. ENDLOOP. CASE sy-mandt. WHEN 886. CALL FUNCTION 'CSAP_MAT_BOM_CLOSE' "关闭BOM DESTINATION 'S4PCLNT886' EXCEPTIONS error = 1 OTHERS = 2. WHEN 520. CALL FUNCTION 'CSAP_MAT_BOM_CLOSE' "关闭BOM DESTINATION 'S4DCLNT520' EXCEPTIONS error = 1 OTHERS = 2. WHEN 668. CALL FUNCTION 'CSAP_MAT_BOM_CLOSE' "关闭BOM DESTINATION 'S4DCLNT668' EXCEPTIONS error = 1 OTHERS = 2. WHEN OTHERS. CALL FUNCTION 'CSAP_MAT_BOM_CLOSE' "关闭BOM EXCEPTIONS error = 1 OTHERS = 2. ENDCASE. IF sy-subrc = 0. IF it_plm007-ztype NE 'E'. it_plm007-ztype = 'S'. ENDIF. it_plm007-zmessage = it_plm007-zmessage && '已关闭BOM'. * UPDATE ZBOM SET STATUS = 'S' WHERE MATNR = GS_ITAB-MATNR AND WERKS = GS_ITAB-WERKS. ENDIF. ENDIF. ENDIF. IF lv_ztype EQ 'C'. *不存在BOM,则创建 IF lv_begin = 'X'. CLEAR it_bomgroup. it_bomgroup-bom_group_identification = 'BAPI_SMP_COL1'. it_bomgroup-object_type = 'BGR'. it_bomgroup-object_id = 'SIMPLE1'. it_bomgroup-bom_usage = it_plm007-stlan. "BOM用途 * it_bomgroup-bom_group = it_plm007-stlan. "BOM分组 it_bomgroup-ltxt_lang = sy-langu. "语言 it_bomgroup-technical_type = ''. "技术类型 it_bomgroup-created_in_plant = it_plm007-werks. "生成BOM 或 可选/变式的工厂 it_bomgroup-bom_text = it_plm007-stktx." ''. "BOM文本 APPEND it_bomgroup. CLEAR it_variants. it_variants-bom_group_identification = 'BAPI_SMP_COL1'. it_variants-object_type = 'BOM'. it_variants-object_id = 'SIMPLE1'. it_variants-alternative_bom = it_plm007-stlal."'01'. "可选的BOM it_variants-bom_status = it_plm007-stlst."'01'. "BOM状态 it_variants-base_qty = it_plm007-bmeng. "BOM基本数量 CLEAR: lv_meins. SELECT SINGLE meins INTO lv_meins FROM mara WHERE matnr EQ it_plm007-matnr. CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' EXPORTING input = lv_meins IMPORTING output = it_variants-base_unit EXCEPTIONS unit_not_found = 1 OTHERS = 2. IF it_variants-base_unit CA '**' OR it_variants-base_unit EQ ''. it_variants-base_unit = lv_meins."BOM基本单位 ENDIF. * it_variants-base_unit = lv_meins. "it_plm007-meins. it_variants-alt_text = it_plm007-stktx. "可选BOM文本 it_variants-valid_from_date = it_plm007-datuv. "有效起始日期 AENNR * it_variants-change_no = it_plm007-aennr. "更改编号 it_variants-function = 'NEW'. APPEND it_variants. CLEAR it_matrel. it_matrel-bom_group_identification = 'BAPI_SMP_COL1'. it_matrel-material = it_plm007-matnr. "物料编号,18字符 it_matrel-plant = it_plm007-werks. it_matrel-bom_usage = it_plm007-stlan. "BOM用途 it_matrel-alternative_bom = it_plm007-stlal. "可选的BOM(备选物料清单) * it_matrel-alternative_bom = '01'. it_matrel-material_long = it_plm007-matnr. APPEND it_matrel. CLEAR it_itemas. it_itemas-bom_group_identification = 'BAPI_SMP_COL1'. it_itemas-sub_object_type = 'ITM'. it_itemas-sub_object_id = 'SIMPLE1'. it_itemas-super_object_type = 'BOM'. it_itemas-super_object_id = 'SIMPLE1'. it_itemas-valid_from_date = it_plm007-datuv. it_itemas-function = 'NEW'. APPEND it_itemas. ENDIF. CLEAR it_items. it_items-bom_group_identification = 'BAPI_SMP_COL1'. it_items-object_type = 'ITM'. it_items-object_id = 'SIMPLE1'. it_items-item_no = |{ it_plm007-posnr ALPHA = IN }|."'0010'.BOM项目号 it_items-item_cat = it_plm007-postp. it_items-component = it_plm007-idnrk. CLEAR:lv_potx1,lv_potx2. lv_len = strlen( it_plm007-potx1 ). IF lv_len <= 40. lv_potx1 = it_plm007-potx1. ELSE. lv_potx1 = it_plm007-potx1+0(40). lv_potx2 = it_plm007-potx1+40(40). ENDIF. it_items-item_text1 = lv_potx1. "BOM项目文本1 it_items-item_text2 = lv_potx2. "BOM项目文本2 it_items-comp_qty = it_plm007-menge. "组件数量 CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' EXPORTING input = it_plm007-meins IMPORTING output = it_items-comp_unit EXCEPTIONS unit_not_found = 1 OTHERS = 2. IF it_items-comp_unit CA '**'. it_items-comp_unit = it_plm007-meins."BOM基本单位 ENDIF. * it_items-comp_unit = it_plm007-meins."组件基本计量单位 it_items-comp_scrap = it_plm007-ausch. "组件报废百分比 it_items-mat_provision = it_plm007-beikz."物料供应标识符 it_items-alt_item_strategy = it_plm007-alpst. "替代项目:策略 it_items-alt_item_prio = it_plm007-alprf. "替代项目:评比定单 it_items-alt_item_group = it_plm007-alpgr. "替代项目:组 it_items-usage_prob = it_plm007-ewahr. "使用可能性按% it_items-follow_up_group = it_plm007-nfgrp. "后继组 it_items-discon_group = it_plm007-nfeag. "中止组 * IT_ITEMS-CO_PRODUCT = it_plm007-KZKUP1. it_items-valid_from_date = it_plm007-datuv. "有效起始日期 * it_items-change_no = it_plm007-aennr. "更改编号 APPEND it_items. IF lv_end EQ 'X'. CALL FUNCTION 'BAPI_MATERIAL_BOM_GROUP_CREATE' EXPORTING * TESTRUN = ' ' all_error = 'X' TABLES bomgroup = it_bomgroup variants = it_variants items = it_items * subitems = materialrelations = it_matrel itemassignments = it_itemas * subitemassignments = * texts = return = it_return. READ TABLE it_return WITH KEY type = 'E'. IF sy-subrc EQ 0. it_plm007-ztype = 'E'. ROLLBACK WORK. ELSE. READ TABLE it_return WITH KEY type = 'A'. IF sy-subrc EQ 0. it_plm007-ztype = 'E'. ROLLBACK WORK. ELSE. it_plm007-ztype = 'S'. COMMIT WORK AND WAIT. ENDIF. ENDIF. LOOP AT it_return. it_plm007-zmessage = |{ it_plm007-zmessage }{ it_return-message }|. ENDLOOP. * MOVE-CORRESPONDING it_plm007 TO it_re_007. * APPEND it_re_007. CLEAR: it_return[],it_itemas[],it_matrel[],it_items[],it_variants[],it_bomgroup[]. ENDIF. ENDIF. MODIFY it_plm007. CLEAR it_plm007. ENDLOOP. DELETE it_plm007[] WHERE ztype EQ ''. ENDFUNCTION.View Code
修改的做法:打开BOM后,先删除原本所有的行项目,再新增。再保存关闭BOM。有使用ABAP链接(SM59创建)
创建:直接创建