zoukankan      html  css  js  c++  java
  • BOM创建和修改

    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创建)

      创建:直接创建

  • 相关阅读:
    C++笔记(2018/2/6)
    2017级面向对象程序设计寒假作业1
    谁是你的潜在朋友
    A1095 Cars on Campus (30)(30 分)
    A1083 List Grades (25)(25 分)
    A1075 PAT Judge (25)(25 分)
    A1012 The Best Rank (25)(25 分)
    1009 说反话 (20)(20 分)
    A1055 The World's Richest(25 分)
    A1025 PAT Ranking (25)(25 分)
  • 原文地址:https://www.cnblogs.com/chaguoguo/p/15208694.html
Copyright © 2011-2022 走看看